mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
This is the 4.14.295 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmM0DLgACgkQONu9yGCS aT5uAA/+P0pWX4i/L+D/MuyOqUycwLL7fGwf5VRl4U1Nmn1jkXaVeXgbH5eofxlg yq9eWwr72Algbt0VhenJgAPRVWl51oYq5dA4ceF7PhuR8CZ7YI2LNu/f/a/PSqiz PhKHsSPtUcds6Zk8x5ODSEfQITwGxWJyj0EufhtrsXnuxsOuFiQbKXwLqN9jjeCU PYnDMy9G8JqAqcanWZDzdxCFNNXq+hYgYz3e67HJ8gTd1L5f8bzH3YXFcOBfpYFB 3aW3Cw5i8+OaBD9iqxSkIx7fMwU0YE/tFFuP/NIir4mFehw3xObNLRgA19tz0bhc HXX1Ni1XWkXjU6UCf7k5Th4NH3y42tviSo+6CM9ajsjNA012co1MCZmFwi5XVbg+ Dchrt3S7aT0Ftl+wBVAzt+yo04R4AGTGfkgvH2y+FaG4+J4xZuKxh8J6eZoSgali BB4QC8lMom8ntBkd5XTFWHkHR5Dq+RkEB8NRF1fTPWArQBhv8QUbqXPTVCUfZwps haJx6v8akViDkCUtDCWv2ArCvJ70hKnhfHX53XVSTgFa/SuPKQ/mrn39YMzHXllX bLfQzVsN11ernc9zR0PUWixfISnjTQeuCJDTExn/OKL+q+uM+LBKbIlAih6t07ka LXx9hNRrfNz1Y34mb9eJbS2gcem3+BOWaoIkG35VXapbWuJ/ucY= =Csp2 -----END PGP SIGNATURE----- Merge 4.14.295 into android-4.14-stable Changes in 4.14.295 of: fdt: fix off-by-one error in unflatten_dt_nodes() gpio: mpc8xxx: Fix support for IRQ_TYPE_LEVEL_LOW flow_type in mpc85xx drm/meson: Correct OSD1 global alpha value parisc: ccio-dma: Add missing iounmap in error path in ccio_probe() cifs: don't send down the destination address to sendmsg for a SOCK_STREAM ASoC: nau8824: Fix semaphore unbalance at error paths regulator: pfuze100: Fix the global-out-of-bounds access in pfuze100_regulator_probe() ALSA: hda/sigmatel: Keep power up while beep is enabled net: usb: qmi_wwan: add Quectel RM520N MIPS: OCTEON: irq: Fix octeon_irq_force_ciu_mapping() mksysmap: Fix the mismatch of 'L0' symbols in System.map video: fbdev: pxa3xx-gcu: Fix integer overflow in pxa3xx_gcu_write ALSA: hda/sigmatel: Fix unused variable warning for beep power change wifi: mac80211: Fix UAF in ieee80211_scan_rx() USB: core: Fix RST error in hub.c USB: serial: option: add Quectel BG95 0x0203 composition USB: serial: option: add Quectel RM520N ALSA: hda/tegra: set depop delay for tegra ALSA: hda: add Intel 5 Series / 3400 PCI DID mm/slub: fix to return errno if kmalloc() fails arm64: dts: rockchip: Remove 'enable-active-low' from rk3399-puma netfilter: nf_conntrack_sip: fix ct_sip_walk_headers netfilter: nf_conntrack_irc: Tighten matching on DCC message iavf: Fix cached head and tail value for iavf_get_tx_pending ipvlan: Fix out-of-bound bugs caused by unset skb->mac_header net: team: Unsync device addresses on ndo_stop MIPS: lantiq: export clk_get_io() for lantiq_wdt.ko of: mdio: Add of_node_put() when breaking out of for_each_xx netfilter: ebtables: fix memory leak when blob is malformed can: gs_usb: gs_can_open(): fix race dev->can.state condition perf kcore_copy: Do not check /proc/modules is unchanged net: sunhme: Fix packet reception for len < RX_COPY_THRESHOLD serial: Create uart_xmit_advance() serial: tegra: Use uart_xmit_advance(), fixes icount.tx accounting s390/dasd: fix Oops in dasd_alias_get_start_dev due to missing pavgroup Drivers: hv: Never allocate anything besides framebuffer from framebuffer memory region media: em28xx: initialize refcount before kref_get ext4: make directory inode spreading reflect flexbg size Linux 4.14.295 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I359595d34b663470ab5f1db90de4db2e07394041
This commit is contained in:
commit
18cf4de839
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 14
|
PATCHLEVEL = 14
|
||||||
SUBLEVEL = 294
|
SUBLEVEL = 295
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Petit Gorille
|
NAME = Petit Gorille
|
||||||
|
|
||||||
|
@ -139,7 +139,6 @@
|
|||||||
vcc5v0_host: vcc5v0-host-regulator {
|
vcc5v0_host: vcc5v0-host-regulator {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_LOW>;
|
gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_LOW>;
|
||||||
enable-active-low;
|
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&vcc5v0_host_en>;
|
pinctrl-0 = <&vcc5v0_host_en>;
|
||||||
regulator-name = "vcc5v0_host";
|
regulator-name = "vcc5v0_host";
|
||||||
|
@ -127,6 +127,16 @@ static void octeon_irq_free_cd(struct irq_domain *d, unsigned int irq)
|
|||||||
static int octeon_irq_force_ciu_mapping(struct irq_domain *domain,
|
static int octeon_irq_force_ciu_mapping(struct irq_domain *domain,
|
||||||
int irq, int line, int bit)
|
int irq, int line, int bit)
|
||||||
{
|
{
|
||||||
|
struct device_node *of_node;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
of_node = irq_domain_get_of_node(domain);
|
||||||
|
if (!of_node)
|
||||||
|
return -EINVAL;
|
||||||
|
ret = irq_alloc_desc_at(irq, of_node_to_nid(of_node));
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
return irq_domain_associate(domain, irq, line << 6 | bit);
|
return irq_domain_associate(domain, irq, line << 6 | bit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +52,7 @@ struct clk *clk_get_io(void)
|
|||||||
{
|
{
|
||||||
return &cpu_clk_generic[2];
|
return &cpu_clk_generic[2];
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(clk_get_io);
|
||||||
|
|
||||||
struct clk *clk_get_ppe(void)
|
struct clk *clk_get_ppe(void)
|
||||||
{
|
{
|
||||||
|
@ -157,6 +157,7 @@ static int mpc8xxx_irq_set_type(struct irq_data *d, unsigned int flow_type)
|
|||||||
|
|
||||||
switch (flow_type) {
|
switch (flow_type) {
|
||||||
case IRQ_TYPE_EDGE_FALLING:
|
case IRQ_TYPE_EDGE_FALLING:
|
||||||
|
case IRQ_TYPE_LEVEL_LOW:
|
||||||
raw_spin_lock_irqsave(&mpc8xxx_gc->lock, flags);
|
raw_spin_lock_irqsave(&mpc8xxx_gc->lock, flags);
|
||||||
gc->write_reg(mpc8xxx_gc->regs + GPIO_ICR,
|
gc->write_reg(mpc8xxx_gc->regs + GPIO_ICR,
|
||||||
gc->read_reg(mpc8xxx_gc->regs + GPIO_ICR)
|
gc->read_reg(mpc8xxx_gc->regs + GPIO_ICR)
|
||||||
|
@ -105,7 +105,7 @@ static void meson_plane_atomic_update(struct drm_plane *plane,
|
|||||||
|
|
||||||
/* Enable OSD and BLK0, set max global alpha */
|
/* Enable OSD and BLK0, set max global alpha */
|
||||||
priv->viu.osd1_ctrl_stat = OSD_ENABLE |
|
priv->viu.osd1_ctrl_stat = OSD_ENABLE |
|
||||||
(0xFF << OSD_GLOBAL_ALPHA_SHIFT) |
|
(0x100 << OSD_GLOBAL_ALPHA_SHIFT) |
|
||||||
OSD_BLK0_ENABLE;
|
OSD_BLK0_ENABLE;
|
||||||
|
|
||||||
/* Set up BLK0 to point to the right canvas */
|
/* Set up BLK0 to point to the right canvas */
|
||||||
|
@ -1426,7 +1426,7 @@ int vmbus_allocate_mmio(struct resource **new, struct hv_device *device_obj,
|
|||||||
bool fb_overlap_ok)
|
bool fb_overlap_ok)
|
||||||
{
|
{
|
||||||
struct resource *iter, *shadow;
|
struct resource *iter, *shadow;
|
||||||
resource_size_t range_min, range_max, start;
|
resource_size_t range_min, range_max, start, end;
|
||||||
const char *dev_n = dev_name(&device_obj->device);
|
const char *dev_n = dev_name(&device_obj->device);
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
@ -1461,6 +1461,14 @@ int vmbus_allocate_mmio(struct resource **new, struct hv_device *device_obj,
|
|||||||
range_max = iter->end;
|
range_max = iter->end;
|
||||||
start = (range_min + align - 1) & ~(align - 1);
|
start = (range_min + align - 1) & ~(align - 1);
|
||||||
for (; start + size - 1 <= range_max; start += align) {
|
for (; start + size - 1 <= range_max; start += align) {
|
||||||
|
end = start + size - 1;
|
||||||
|
|
||||||
|
/* Skip the whole fb_mmio region if not fb_overlap_ok */
|
||||||
|
if (!fb_overlap_ok && fb_mmio &&
|
||||||
|
(((start >= fb_mmio->start) && (start <= fb_mmio->end)) ||
|
||||||
|
((end >= fb_mmio->start) && (end <= fb_mmio->end))))
|
||||||
|
continue;
|
||||||
|
|
||||||
shadow = __request_region(iter, start, size, NULL,
|
shadow = __request_region(iter, start, size, NULL,
|
||||||
IORESOURCE_BUSY);
|
IORESOURCE_BUSY);
|
||||||
if (!shadow)
|
if (!shadow)
|
||||||
|
@ -3644,6 +3644,8 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
|||||||
goto err_free;
|
goto err_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kref_init(&dev->ref);
|
||||||
|
|
||||||
dev->devno = nr;
|
dev->devno = nr;
|
||||||
dev->model = id->driver_info;
|
dev->model = id->driver_info;
|
||||||
dev->alt = -1;
|
dev->alt = -1;
|
||||||
@ -3730,8 +3732,6 @@ static int em28xx_usb_probe(struct usb_interface *interface,
|
|||||||
dev->dvb_xfer_bulk ? "bulk" : "isoc");
|
dev->dvb_xfer_bulk ? "bulk" : "isoc");
|
||||||
}
|
}
|
||||||
|
|
||||||
kref_init(&dev->ref);
|
|
||||||
|
|
||||||
request_modules(dev);
|
request_modules(dev);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -686,6 +686,7 @@ static int gs_can_open(struct net_device *netdev)
|
|||||||
flags |= GS_CAN_MODE_TRIPLE_SAMPLE;
|
flags |= GS_CAN_MODE_TRIPLE_SAMPLE;
|
||||||
|
|
||||||
/* finally start device */
|
/* finally start device */
|
||||||
|
dev->can.state = CAN_STATE_ERROR_ACTIVE;
|
||||||
dm->mode = cpu_to_le32(GS_CAN_MODE_START);
|
dm->mode = cpu_to_le32(GS_CAN_MODE_START);
|
||||||
dm->flags = cpu_to_le32(flags);
|
dm->flags = cpu_to_le32(flags);
|
||||||
rc = usb_control_msg(interface_to_usbdev(dev->iface),
|
rc = usb_control_msg(interface_to_usbdev(dev->iface),
|
||||||
@ -702,13 +703,12 @@ static int gs_can_open(struct net_device *netdev)
|
|||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
netdev_err(netdev, "Couldn't start device (err=%d)\n", rc);
|
netdev_err(netdev, "Couldn't start device (err=%d)\n", rc);
|
||||||
kfree(dm);
|
kfree(dm);
|
||||||
|
dev->can.state = CAN_STATE_STOPPED;
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
kfree(dm);
|
kfree(dm);
|
||||||
|
|
||||||
dev->can.state = CAN_STATE_ERROR_ACTIVE;
|
|
||||||
|
|
||||||
parent->active_channels++;
|
parent->active_channels++;
|
||||||
if (!(dev->can.ctrlmode & CAN_CTRLMODE_LISTENONLY))
|
if (!(dev->can.ctrlmode & CAN_CTRLMODE_LISTENONLY))
|
||||||
netif_start_queue(netdev);
|
netif_start_queue(netdev);
|
||||||
|
@ -138,8 +138,11 @@ u32 i40evf_get_tx_pending(struct i40e_ring *ring, bool in_sw)
|
|||||||
{
|
{
|
||||||
u32 head, tail;
|
u32 head, tail;
|
||||||
|
|
||||||
|
/* underlying hardware might not allow access and/or always return
|
||||||
|
* 0 for the head/tail registers so just use the cached values
|
||||||
|
*/
|
||||||
head = ring->next_to_clean;
|
head = ring->next_to_clean;
|
||||||
tail = readl(ring->tail);
|
tail = ring->next_to_use;
|
||||||
|
|
||||||
if (head != tail)
|
if (head != tail)
|
||||||
return (head < tail) ?
|
return (head < tail) ?
|
||||||
|
@ -2065,9 +2065,9 @@ static void happy_meal_rx(struct happy_meal *hp, struct net_device *dev)
|
|||||||
|
|
||||||
skb_reserve(copy_skb, 2);
|
skb_reserve(copy_skb, 2);
|
||||||
skb_put(copy_skb, len);
|
skb_put(copy_skb, len);
|
||||||
dma_sync_single_for_cpu(hp->dma_dev, dma_addr, len, DMA_FROM_DEVICE);
|
dma_sync_single_for_cpu(hp->dma_dev, dma_addr, len + 2, DMA_FROM_DEVICE);
|
||||||
skb_copy_from_linear_data(skb, copy_skb->data, len);
|
skb_copy_from_linear_data(skb, copy_skb->data, len);
|
||||||
dma_sync_single_for_device(hp->dma_dev, dma_addr, len, DMA_FROM_DEVICE);
|
dma_sync_single_for_device(hp->dma_dev, dma_addr, len + 2, DMA_FROM_DEVICE);
|
||||||
/* Reuse original ring buffer. */
|
/* Reuse original ring buffer. */
|
||||||
hme_write_rxd(hp, this,
|
hme_write_rxd(hp, this,
|
||||||
(RXFLAG_OWN|((RX_BUF_ALLOC_SIZE-RX_OFFSET)<<16)),
|
(RXFLAG_OWN|((RX_BUF_ALLOC_SIZE-RX_OFFSET)<<16)),
|
||||||
|
@ -446,7 +446,6 @@ out:
|
|||||||
|
|
||||||
static int ipvlan_process_outbound(struct sk_buff *skb)
|
static int ipvlan_process_outbound(struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct ethhdr *ethh = eth_hdr(skb);
|
|
||||||
int ret = NET_XMIT_DROP;
|
int ret = NET_XMIT_DROP;
|
||||||
|
|
||||||
/* The ipvlan is a pseudo-L2 device, so the packets that we receive
|
/* The ipvlan is a pseudo-L2 device, so the packets that we receive
|
||||||
@ -456,6 +455,8 @@ static int ipvlan_process_outbound(struct sk_buff *skb)
|
|||||||
if (skb_mac_header_was_set(skb)) {
|
if (skb_mac_header_was_set(skb)) {
|
||||||
/* In this mode we dont care about
|
/* In this mode we dont care about
|
||||||
* multicast and broadcast traffic */
|
* multicast and broadcast traffic */
|
||||||
|
struct ethhdr *ethh = eth_hdr(skb);
|
||||||
|
|
||||||
if (is_multicast_ether_addr(ethh->h_dest)) {
|
if (is_multicast_ether_addr(ethh->h_dest)) {
|
||||||
pr_debug_ratelimited(
|
pr_debug_ratelimited(
|
||||||
"Dropped {multi|broad}cast of type=[%x]\n",
|
"Dropped {multi|broad}cast of type=[%x]\n",
|
||||||
@ -534,7 +535,7 @@ out:
|
|||||||
static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev)
|
static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev)
|
||||||
{
|
{
|
||||||
const struct ipvl_dev *ipvlan = netdev_priv(dev);
|
const struct ipvl_dev *ipvlan = netdev_priv(dev);
|
||||||
struct ethhdr *eth = eth_hdr(skb);
|
struct ethhdr *eth = skb_eth_hdr(skb);
|
||||||
struct ipvl_addr *addr;
|
struct ipvl_addr *addr;
|
||||||
void *lyr3h;
|
void *lyr3h;
|
||||||
int addr_type;
|
int addr_type;
|
||||||
@ -558,6 +559,7 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev)
|
|||||||
return dev_forward_skb(ipvlan->phy_dev, skb);
|
return dev_forward_skb(ipvlan->phy_dev, skb);
|
||||||
|
|
||||||
} else if (is_multicast_ether_addr(eth->h_dest)) {
|
} else if (is_multicast_ether_addr(eth->h_dest)) {
|
||||||
|
skb_reset_mac_header(skb);
|
||||||
ipvlan_skb_crossing_ns(skb, NULL);
|
ipvlan_skb_crossing_ns(skb, NULL);
|
||||||
ipvlan_multicast_enqueue(ipvlan->port, skb, true);
|
ipvlan_multicast_enqueue(ipvlan->port, skb, true);
|
||||||
return NET_XMIT_SUCCESS;
|
return NET_XMIT_SUCCESS;
|
||||||
|
@ -1274,10 +1274,12 @@ static int team_port_add(struct team *team, struct net_device *port_dev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
netif_addr_lock_bh(dev);
|
if (dev->flags & IFF_UP) {
|
||||||
dev_uc_sync_multiple(port_dev, dev);
|
netif_addr_lock_bh(dev);
|
||||||
dev_mc_sync_multiple(port_dev, dev);
|
dev_uc_sync_multiple(port_dev, dev);
|
||||||
netif_addr_unlock_bh(dev);
|
dev_mc_sync_multiple(port_dev, dev);
|
||||||
|
netif_addr_unlock_bh(dev);
|
||||||
|
}
|
||||||
|
|
||||||
port->index = -1;
|
port->index = -1;
|
||||||
list_add_tail_rcu(&port->list, &team->port_list);
|
list_add_tail_rcu(&port->list, &team->port_list);
|
||||||
@ -1348,8 +1350,10 @@ static int team_port_del(struct team *team, struct net_device *port_dev)
|
|||||||
netdev_rx_handler_unregister(port_dev);
|
netdev_rx_handler_unregister(port_dev);
|
||||||
team_port_disable_netpoll(port);
|
team_port_disable_netpoll(port);
|
||||||
vlan_vids_del_by_dev(port_dev, dev);
|
vlan_vids_del_by_dev(port_dev, dev);
|
||||||
dev_uc_unsync(port_dev, dev);
|
if (dev->flags & IFF_UP) {
|
||||||
dev_mc_unsync(port_dev, dev);
|
dev_uc_unsync(port_dev, dev);
|
||||||
|
dev_mc_unsync(port_dev, dev);
|
||||||
|
}
|
||||||
dev_close(port_dev);
|
dev_close(port_dev);
|
||||||
team_port_leave(team, port);
|
team_port_leave(team, port);
|
||||||
|
|
||||||
@ -1697,6 +1701,14 @@ static int team_open(struct net_device *dev)
|
|||||||
|
|
||||||
static int team_close(struct net_device *dev)
|
static int team_close(struct net_device *dev)
|
||||||
{
|
{
|
||||||
|
struct team *team = netdev_priv(dev);
|
||||||
|
struct team_port *port;
|
||||||
|
|
||||||
|
list_for_each_entry(port, &team->port_list, list) {
|
||||||
|
dev_uc_unsync(port->dev, dev);
|
||||||
|
dev_mc_unsync(port->dev, dev);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1049,6 +1049,7 @@ static const struct usb_device_id products[] = {
|
|||||||
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0512)}, /* Quectel EG12/EM12 */
|
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0512)}, /* Quectel EG12/EM12 */
|
||||||
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0620)}, /* Quectel EM160R-GL */
|
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0620)}, /* Quectel EM160R-GL */
|
||||||
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0800)}, /* Quectel RM500Q-GL */
|
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0800)}, /* Quectel RM500Q-GL */
|
||||||
|
{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0801)}, /* Quectel RM520N */
|
||||||
|
|
||||||
/* 3. Combined interface devices matching on interface number */
|
/* 3. Combined interface devices matching on interface number */
|
||||||
{QMI_FIXED_INTF(0x0408, 0xea42, 4)}, /* Yota / Megafon M100-1 */
|
{QMI_FIXED_INTF(0x0408, 0xea42, 4)}, /* Yota / Megafon M100-1 */
|
||||||
|
@ -425,7 +425,7 @@ static int unflatten_dt_nodes(const void *blob,
|
|||||||
for (offset = 0;
|
for (offset = 0;
|
||||||
offset >= 0 && depth >= initial_depth;
|
offset >= 0 && depth >= initial_depth;
|
||||||
offset = fdt_next_node(blob, offset, &depth)) {
|
offset = fdt_next_node(blob, offset, &depth)) {
|
||||||
if (WARN_ON_ONCE(depth >= FDT_MAX_DEPTH))
|
if (WARN_ON_ONCE(depth >= FDT_MAX_DEPTH - 1))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
fpsizes[depth+1] = populate_node(blob, offset, &mem,
|
fpsizes[depth+1] = populate_node(blob, offset, &mem,
|
||||||
|
@ -272,6 +272,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
unregister:
|
unregister:
|
||||||
|
of_node_put(child);
|
||||||
mdiobus_unregister(mdio);
|
mdiobus_unregister(mdio);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -1581,6 +1581,7 @@ static int __init ccio_probe(struct parisc_device *dev)
|
|||||||
}
|
}
|
||||||
ccio_ioc_init(ioc);
|
ccio_ioc_init(ioc);
|
||||||
if (ccio_init_resources(ioc)) {
|
if (ccio_init_resources(ioc)) {
|
||||||
|
iounmap(ioc->ioc_regs);
|
||||||
kfree(ioc);
|
kfree(ioc);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
@ -614,7 +614,7 @@ static int pfuze100_regulator_probe(struct i2c_client *client,
|
|||||||
((pfuze_chip->chip_id == PFUZE200) ? "200" : "3000"));
|
((pfuze_chip->chip_id == PFUZE200) ? "200" : "3000"));
|
||||||
|
|
||||||
memcpy(pfuze_chip->regulator_descs, pfuze_chip->pfuze_regulators,
|
memcpy(pfuze_chip->regulator_descs, pfuze_chip->pfuze_regulators,
|
||||||
sizeof(pfuze_chip->regulator_descs));
|
regulator_num * sizeof(struct pfuze_regulator));
|
||||||
|
|
||||||
ret = pfuze_parse_regulators_dt(pfuze_chip);
|
ret = pfuze_parse_regulators_dt(pfuze_chip);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -675,12 +675,12 @@ int dasd_alias_remove_device(struct dasd_device *device)
|
|||||||
struct dasd_device *dasd_alias_get_start_dev(struct dasd_device *base_device)
|
struct dasd_device *dasd_alias_get_start_dev(struct dasd_device *base_device)
|
||||||
{
|
{
|
||||||
struct dasd_eckd_private *alias_priv, *private = base_device->private;
|
struct dasd_eckd_private *alias_priv, *private = base_device->private;
|
||||||
struct alias_pav_group *group = private->pavgroup;
|
|
||||||
struct alias_lcu *lcu = private->lcu;
|
struct alias_lcu *lcu = private->lcu;
|
||||||
struct dasd_device *alias_device;
|
struct dasd_device *alias_device;
|
||||||
|
struct alias_pav_group *group;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
if (!group || !lcu)
|
if (!lcu)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (lcu->pav == NO_PAV ||
|
if (lcu->pav == NO_PAV ||
|
||||||
lcu->flags & (NEED_UAC_UPDATE | UPDATE_PENDING))
|
lcu->flags & (NEED_UAC_UPDATE | UPDATE_PENDING))
|
||||||
@ -697,6 +697,11 @@ struct dasd_device *dasd_alias_get_start_dev(struct dasd_device *base_device)
|
|||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(&lcu->lock, flags);
|
spin_lock_irqsave(&lcu->lock, flags);
|
||||||
|
group = private->pavgroup;
|
||||||
|
if (!group) {
|
||||||
|
spin_unlock_irqrestore(&lcu->lock, flags);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
alias_device = group->next;
|
alias_device = group->next;
|
||||||
if (!alias_device) {
|
if (!alias_device) {
|
||||||
if (list_empty(&group->aliaslist)) {
|
if (list_empty(&group->aliaslist)) {
|
||||||
|
@ -409,7 +409,7 @@ static void tegra_uart_tx_dma_complete(void *args)
|
|||||||
count = tup->tx_bytes_requested - state.residue;
|
count = tup->tx_bytes_requested - state.residue;
|
||||||
async_tx_ack(tup->tx_dma_desc);
|
async_tx_ack(tup->tx_dma_desc);
|
||||||
spin_lock_irqsave(&tup->uport.lock, flags);
|
spin_lock_irqsave(&tup->uport.lock, flags);
|
||||||
xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
|
uart_xmit_advance(&tup->uport, count);
|
||||||
tup->tx_in_progress = 0;
|
tup->tx_in_progress = 0;
|
||||||
if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
|
if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
|
||||||
uart_write_wakeup(&tup->uport);
|
uart_write_wakeup(&tup->uport);
|
||||||
@ -493,7 +493,6 @@ static unsigned int tegra_uart_tx_empty(struct uart_port *u)
|
|||||||
static void tegra_uart_stop_tx(struct uart_port *u)
|
static void tegra_uart_stop_tx(struct uart_port *u)
|
||||||
{
|
{
|
||||||
struct tegra_uart_port *tup = to_tegra_uport(u);
|
struct tegra_uart_port *tup = to_tegra_uport(u);
|
||||||
struct circ_buf *xmit = &tup->uport.state->xmit;
|
|
||||||
struct dma_tx_state state;
|
struct dma_tx_state state;
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
|
|
||||||
@ -504,7 +503,7 @@ static void tegra_uart_stop_tx(struct uart_port *u)
|
|||||||
dmaengine_tx_status(tup->tx_dma_chan, tup->tx_cookie, &state);
|
dmaengine_tx_status(tup->tx_dma_chan, tup->tx_cookie, &state);
|
||||||
count = tup->tx_bytes_requested - state.residue;
|
count = tup->tx_bytes_requested - state.residue;
|
||||||
async_tx_ack(tup->tx_dma_desc);
|
async_tx_ack(tup->tx_dma_desc);
|
||||||
xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
|
uart_xmit_advance(&tup->uport, count);
|
||||||
tup->tx_in_progress = 0;
|
tup->tx_in_progress = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5743,7 +5743,7 @@ re_enumerate_no_bos:
|
|||||||
*
|
*
|
||||||
* Return: The same as for usb_reset_and_verify_device().
|
* Return: The same as for usb_reset_and_verify_device().
|
||||||
* However, if a reset is already in progress (for instance, if a
|
* However, if a reset is already in progress (for instance, if a
|
||||||
* driver doesn't have pre_ or post_reset() callbacks, and while
|
* driver doesn't have pre_reset() or post_reset() callbacks, and while
|
||||||
* being unbound or re-bound during the ongoing reset its disconnect()
|
* being unbound or re-bound during the ongoing reset its disconnect()
|
||||||
* or probe() routine tries to perform a second, nested reset), the
|
* or probe() routine tries to perform a second, nested reset), the
|
||||||
* routine returns -EINPROGRESS.
|
* routine returns -EINPROGRESS.
|
||||||
|
@ -259,6 +259,7 @@ static void option_instat_callback(struct urb *urb);
|
|||||||
#define QUECTEL_PRODUCT_EM060K 0x030b
|
#define QUECTEL_PRODUCT_EM060K 0x030b
|
||||||
#define QUECTEL_PRODUCT_EM12 0x0512
|
#define QUECTEL_PRODUCT_EM12 0x0512
|
||||||
#define QUECTEL_PRODUCT_RM500Q 0x0800
|
#define QUECTEL_PRODUCT_RM500Q 0x0800
|
||||||
|
#define QUECTEL_PRODUCT_RM520N 0x0801
|
||||||
#define QUECTEL_PRODUCT_EC200S_CN 0x6002
|
#define QUECTEL_PRODUCT_EC200S_CN 0x6002
|
||||||
#define QUECTEL_PRODUCT_EC200T 0x6026
|
#define QUECTEL_PRODUCT_EC200T 0x6026
|
||||||
#define QUECTEL_PRODUCT_RM500K 0x7001
|
#define QUECTEL_PRODUCT_RM500K 0x7001
|
||||||
@ -1141,6 +1142,8 @@ static const struct usb_device_id option_ids[] = {
|
|||||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0xff, 0xff),
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0xff, 0xff),
|
||||||
.driver_info = NUMEP2 },
|
.driver_info = NUMEP2 },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0, 0) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0, 0) },
|
||||||
|
{ USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, 0x0203, 0xff), /* BG95-M3 */
|
||||||
|
.driver_info = ZLP },
|
||||||
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
|
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
|
||||||
.driver_info = RSVD(4) },
|
.driver_info = RSVD(4) },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff),
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff),
|
||||||
@ -1162,6 +1165,9 @@ static const struct usb_device_id option_ids[] = {
|
|||||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10),
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10),
|
||||||
.driver_info = ZLP },
|
.driver_info = ZLP },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0xff, 0x30) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0x40) },
|
||||||
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0) },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200S_CN, 0xff, 0, 0) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200S_CN, 0xff, 0, 0) },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) },
|
||||||
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) },
|
{ USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) },
|
||||||
|
@ -391,7 +391,7 @@ pxa3xx_gcu_write(struct file *file, const char *buff,
|
|||||||
struct pxa3xx_gcu_batch *buffer;
|
struct pxa3xx_gcu_batch *buffer;
|
||||||
struct pxa3xx_gcu_priv *priv = to_pxa3xx_gcu_priv(file);
|
struct pxa3xx_gcu_priv *priv = to_pxa3xx_gcu_priv(file);
|
||||||
|
|
||||||
int words = count / 4;
|
size_t words = count / 4;
|
||||||
|
|
||||||
/* Does not need to be atomic. There's a lock in user space,
|
/* Does not need to be atomic. There's a lock in user space,
|
||||||
* but anyhow, this is just for statistics. */
|
* but anyhow, this is just for statistics. */
|
||||||
|
@ -153,8 +153,8 @@ smb_send_kvec(struct TCP_Server_Info *server, struct msghdr *smb_msg,
|
|||||||
|
|
||||||
*sent = 0;
|
*sent = 0;
|
||||||
|
|
||||||
smb_msg->msg_name = (struct sockaddr *) &server->dstaddr;
|
smb_msg->msg_name = NULL;
|
||||||
smb_msg->msg_namelen = sizeof(struct sockaddr);
|
smb_msg->msg_namelen = 0;
|
||||||
smb_msg->msg_control = NULL;
|
smb_msg->msg_control = NULL;
|
||||||
smb_msg->msg_controllen = 0;
|
smb_msg->msg_controllen = 0;
|
||||||
if (server->noblocksnd)
|
if (server->noblocksnd)
|
||||||
|
@ -513,7 +513,7 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent,
|
|||||||
goto fallback;
|
goto fallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
max_dirs = ndirs / ngroups + inodes_per_group / 16;
|
max_dirs = ndirs / ngroups + inodes_per_group*flex_size / 16;
|
||||||
min_inodes = avefreei - inodes_per_group*flex_size / 4;
|
min_inodes = avefreei - inodes_per_group*flex_size / 4;
|
||||||
if (min_inodes < 1)
|
if (min_inodes < 1)
|
||||||
min_inodes = 1;
|
min_inodes = 1;
|
||||||
|
@ -298,6 +298,23 @@ struct uart_state {
|
|||||||
/* number of characters left in xmit buffer before we ask for more */
|
/* number of characters left in xmit buffer before we ask for more */
|
||||||
#define WAKEUP_CHARS 256
|
#define WAKEUP_CHARS 256
|
||||||
|
|
||||||
|
/**
|
||||||
|
* uart_xmit_advance - Advance xmit buffer and account Tx'ed chars
|
||||||
|
* @up: uart_port structure describing the port
|
||||||
|
* @chars: number of characters sent
|
||||||
|
*
|
||||||
|
* This function advances the tail of circular xmit buffer by the number of
|
||||||
|
* @chars transmitted and handles accounting of transmitted bytes (into
|
||||||
|
* @up's icount.tx).
|
||||||
|
*/
|
||||||
|
static inline void uart_xmit_advance(struct uart_port *up, unsigned int chars)
|
||||||
|
{
|
||||||
|
struct circ_buf *xmit = &up->state->xmit;
|
||||||
|
|
||||||
|
xmit->tail = (xmit->tail + chars) & (UART_XMIT_SIZE - 1);
|
||||||
|
up->icount.tx += chars;
|
||||||
|
}
|
||||||
|
|
||||||
struct module;
|
struct module;
|
||||||
struct tty_driver;
|
struct tty_driver;
|
||||||
|
|
||||||
|
@ -5743,7 +5743,8 @@ static char *create_unique_id(struct kmem_cache *s)
|
|||||||
char *name = kmalloc(ID_STR_LENGTH, GFP_KERNEL);
|
char *name = kmalloc(ID_STR_LENGTH, GFP_KERNEL);
|
||||||
char *p = name;
|
char *p = name;
|
||||||
|
|
||||||
BUG_ON(!name);
|
if (!name)
|
||||||
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
*p++ = ':';
|
*p++ = ':';
|
||||||
/*
|
/*
|
||||||
@ -5823,6 +5824,8 @@ static int sysfs_slab_add(struct kmem_cache *s)
|
|||||||
* for the symlinks.
|
* for the symlinks.
|
||||||
*/
|
*/
|
||||||
name = create_unique_id(s);
|
name = create_unique_id(s);
|
||||||
|
if (IS_ERR(name))
|
||||||
|
return PTR_ERR(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
s->kobj.kset = kset;
|
s->kobj.kset = kset;
|
||||||
|
@ -991,8 +991,10 @@ static int do_replace_finish(struct net *net, struct ebt_replace *repl,
|
|||||||
goto free_iterate;
|
goto free_iterate;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (repl->valid_hooks != t->valid_hooks)
|
if (repl->valid_hooks != t->valid_hooks) {
|
||||||
|
ret = -EINVAL;
|
||||||
goto free_unlock;
|
goto free_unlock;
|
||||||
|
}
|
||||||
|
|
||||||
if (repl->num_counters && repl->num_counters != t->private->nentries) {
|
if (repl->num_counters && repl->num_counters != t->private->nentries) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
@ -385,10 +385,6 @@ static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
|
|||||||
scan_req = rcu_dereference_protected(local->scan_req,
|
scan_req = rcu_dereference_protected(local->scan_req,
|
||||||
lockdep_is_held(&local->mtx));
|
lockdep_is_held(&local->mtx));
|
||||||
|
|
||||||
if (scan_req != local->int_scan_req) {
|
|
||||||
local->scan_info.aborted = aborted;
|
|
||||||
cfg80211_scan_done(scan_req, &local->scan_info);
|
|
||||||
}
|
|
||||||
RCU_INIT_POINTER(local->scan_req, NULL);
|
RCU_INIT_POINTER(local->scan_req, NULL);
|
||||||
|
|
||||||
scan_sdata = rcu_dereference_protected(local->scan_sdata,
|
scan_sdata = rcu_dereference_protected(local->scan_sdata,
|
||||||
@ -398,6 +394,13 @@ static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
|
|||||||
local->scanning = 0;
|
local->scanning = 0;
|
||||||
local->scan_chandef.chan = NULL;
|
local->scan_chandef.chan = NULL;
|
||||||
|
|
||||||
|
synchronize_rcu();
|
||||||
|
|
||||||
|
if (scan_req != local->int_scan_req) {
|
||||||
|
local->scan_info.aborted = aborted;
|
||||||
|
cfg80211_scan_done(scan_req, &local->scan_info);
|
||||||
|
}
|
||||||
|
|
||||||
/* Set power back to normal operating levels. */
|
/* Set power back to normal operating levels. */
|
||||||
ieee80211_hw_config(local, 0);
|
ieee80211_hw_config(local, 0);
|
||||||
|
|
||||||
|
@ -150,15 +150,37 @@ static int help(struct sk_buff *skb, unsigned int protoff,
|
|||||||
data = ib_ptr;
|
data = ib_ptr;
|
||||||
data_limit = ib_ptr + skb->len - dataoff;
|
data_limit = ib_ptr + skb->len - dataoff;
|
||||||
|
|
||||||
/* strlen("\1DCC SENT t AAAAAAAA P\1\n")=24
|
/* Skip any whitespace */
|
||||||
* 5+MINMATCHLEN+strlen("t AAAAAAAA P\1\n")=14 */
|
while (data < data_limit - 10) {
|
||||||
while (data < data_limit - (19 + MINMATCHLEN)) {
|
if (*data == ' ' || *data == '\r' || *data == '\n')
|
||||||
if (memcmp(data, "\1DCC ", 5)) {
|
data++;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* strlen("PRIVMSG x ")=10 */
|
||||||
|
if (data < data_limit - 10) {
|
||||||
|
if (strncasecmp("PRIVMSG ", data, 8))
|
||||||
|
goto out;
|
||||||
|
data += 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* strlen(" :\1DCC SENT t AAAAAAAA P\1\n")=26
|
||||||
|
* 7+MINMATCHLEN+strlen("t AAAAAAAA P\1\n")=26
|
||||||
|
*/
|
||||||
|
while (data < data_limit - (21 + MINMATCHLEN)) {
|
||||||
|
/* Find first " :", the start of message */
|
||||||
|
if (memcmp(data, " :", 2)) {
|
||||||
data++;
|
data++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
data += 2;
|
||||||
|
|
||||||
|
/* then check that place only for the DCC command */
|
||||||
|
if (memcmp(data, "\1DCC ", 5))
|
||||||
|
goto out;
|
||||||
data += 5;
|
data += 5;
|
||||||
/* we have at least (19+MINMATCHLEN)-5 bytes valid data left */
|
/* we have at least (21+MINMATCHLEN)-(2+5) bytes valid data left */
|
||||||
|
|
||||||
iph = ip_hdr(skb);
|
iph = ip_hdr(skb);
|
||||||
pr_debug("DCC found in master %pI4:%u %pI4:%u\n",
|
pr_debug("DCC found in master %pI4:%u %pI4:%u\n",
|
||||||
@ -174,7 +196,7 @@ static int help(struct sk_buff *skb, unsigned int protoff,
|
|||||||
pr_debug("DCC %s detected\n", dccprotos[i]);
|
pr_debug("DCC %s detected\n", dccprotos[i]);
|
||||||
|
|
||||||
/* we have at least
|
/* we have at least
|
||||||
* (19+MINMATCHLEN)-5-dccprotos[i].matchlen bytes valid
|
* (21+MINMATCHLEN)-7-dccprotos[i].matchlen bytes valid
|
||||||
* data left (== 14/13 bytes) */
|
* data left (== 14/13 bytes) */
|
||||||
if (parse_dcc(data, data_limit, &dcc_ip,
|
if (parse_dcc(data, data_limit, &dcc_ip,
|
||||||
&dcc_port, &addr_beg_p, &addr_end_p)) {
|
&dcc_port, &addr_beg_p, &addr_end_p)) {
|
||||||
|
@ -471,7 +471,7 @@ static int ct_sip_walk_headers(const struct nf_conn *ct, const char *dptr,
|
|||||||
return ret;
|
return ret;
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
break;
|
break;
|
||||||
dataoff += *matchoff;
|
dataoff = *matchoff;
|
||||||
}
|
}
|
||||||
*in_header = 0;
|
*in_header = 0;
|
||||||
}
|
}
|
||||||
@ -483,7 +483,7 @@ static int ct_sip_walk_headers(const struct nf_conn *ct, const char *dptr,
|
|||||||
break;
|
break;
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
return ret;
|
return ret;
|
||||||
dataoff += *matchoff;
|
dataoff = *matchoff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_header)
|
if (in_header)
|
||||||
|
@ -41,4 +41,4 @@
|
|||||||
# so we just ignore them to let readprofile continue to work.
|
# so we just ignore them to let readprofile continue to work.
|
||||||
# (At least sparc64 has __crc_ in the middle).
|
# (At least sparc64 has __crc_ in the middle).
|
||||||
|
|
||||||
$NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)\|\( \.L\)' > $2
|
$NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)\|\( \.L\)\|\( L0\)' > $2
|
||||||
|
@ -2567,6 +2567,8 @@ static const struct pci_device_id azx_ids[] = {
|
|||||||
/* 5 Series/3400 */
|
/* 5 Series/3400 */
|
||||||
{ PCI_DEVICE(0x8086, 0x3b56),
|
{ PCI_DEVICE(0x8086, 0x3b56),
|
||||||
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
|
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
|
||||||
|
{ PCI_DEVICE(0x8086, 0x3b57),
|
||||||
|
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
|
||||||
/* Poulsbo */
|
/* Poulsbo */
|
||||||
{ PCI_DEVICE(0x8086, 0x811b),
|
{ PCI_DEVICE(0x8086, 0x811b),
|
||||||
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE },
|
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE },
|
||||||
|
@ -3422,6 +3422,7 @@ static int patch_tegra_hdmi(struct hda_codec *codec)
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
codec->depop_delay = 10;
|
||||||
codec->patch_ops.build_pcms = tegra_hdmi_build_pcms;
|
codec->patch_ops.build_pcms = tegra_hdmi_build_pcms;
|
||||||
spec = codec->spec;
|
spec = codec->spec;
|
||||||
spec->chmap.ops.chmap_cea_alloc_validate_get_type =
|
spec->chmap.ops.chmap_cea_alloc_validate_get_type =
|
||||||
|
@ -222,6 +222,7 @@ struct sigmatel_spec {
|
|||||||
|
|
||||||
/* beep widgets */
|
/* beep widgets */
|
||||||
hda_nid_t anabeep_nid;
|
hda_nid_t anabeep_nid;
|
||||||
|
bool beep_power_on;
|
||||||
|
|
||||||
/* SPDIF-out mux */
|
/* SPDIF-out mux */
|
||||||
const char * const *spdif_labels;
|
const char * const *spdif_labels;
|
||||||
@ -4481,6 +4482,28 @@ static int stac_suspend(struct hda_codec *codec)
|
|||||||
stac_shutup(codec);
|
stac_shutup(codec);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int stac_check_power_status(struct hda_codec *codec, hda_nid_t nid)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_SND_HDA_INPUT_BEEP
|
||||||
|
struct sigmatel_spec *spec = codec->spec;
|
||||||
|
#endif
|
||||||
|
int ret = snd_hda_gen_check_power_status(codec, nid);
|
||||||
|
|
||||||
|
#ifdef CONFIG_SND_HDA_INPUT_BEEP
|
||||||
|
if (nid == spec->gen.beep_nid && codec->beep) {
|
||||||
|
if (codec->beep->enabled != spec->beep_power_on) {
|
||||||
|
spec->beep_power_on = codec->beep->enabled;
|
||||||
|
if (spec->beep_power_on)
|
||||||
|
snd_hda_power_up_pm(codec);
|
||||||
|
else
|
||||||
|
snd_hda_power_down_pm(codec);
|
||||||
|
}
|
||||||
|
ret |= spec->beep_power_on;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
#define stac_suspend NULL
|
#define stac_suspend NULL
|
||||||
#endif /* CONFIG_PM */
|
#endif /* CONFIG_PM */
|
||||||
@ -4493,6 +4516,7 @@ static const struct hda_codec_ops stac_patch_ops = {
|
|||||||
.unsol_event = snd_hda_jack_unsol_event,
|
.unsol_event = snd_hda_jack_unsol_event,
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
.suspend = stac_suspend,
|
.suspend = stac_suspend,
|
||||||
|
.check_power_status = stac_check_power_status,
|
||||||
#endif
|
#endif
|
||||||
.reboot_notify = stac_shutup,
|
.reboot_notify = stac_shutup,
|
||||||
};
|
};
|
||||||
|
@ -1015,6 +1015,7 @@ static int nau8824_hw_params(struct snd_pcm_substream *substream,
|
|||||||
struct snd_soc_codec *codec = dai->codec;
|
struct snd_soc_codec *codec = dai->codec;
|
||||||
struct nau8824 *nau8824 = snd_soc_codec_get_drvdata(codec);
|
struct nau8824 *nau8824 = snd_soc_codec_get_drvdata(codec);
|
||||||
unsigned int val_len = 0, osr, ctrl_val, bclk_fs, bclk_div;
|
unsigned int val_len = 0, osr, ctrl_val, bclk_fs, bclk_div;
|
||||||
|
int err = -EINVAL;
|
||||||
|
|
||||||
nau8824_sema_acquire(nau8824, HZ);
|
nau8824_sema_acquire(nau8824, HZ);
|
||||||
|
|
||||||
@ -1031,7 +1032,7 @@ static int nau8824_hw_params(struct snd_pcm_substream *substream,
|
|||||||
osr &= NAU8824_DAC_OVERSAMPLE_MASK;
|
osr &= NAU8824_DAC_OVERSAMPLE_MASK;
|
||||||
if (nau8824_clock_check(nau8824, substream->stream,
|
if (nau8824_clock_check(nau8824, substream->stream,
|
||||||
nau8824->fs, osr))
|
nau8824->fs, osr))
|
||||||
return -EINVAL;
|
goto error;
|
||||||
regmap_update_bits(nau8824->regmap, NAU8824_REG_CLK_DIVIDER,
|
regmap_update_bits(nau8824->regmap, NAU8824_REG_CLK_DIVIDER,
|
||||||
NAU8824_CLK_DAC_SRC_MASK,
|
NAU8824_CLK_DAC_SRC_MASK,
|
||||||
osr_dac_sel[osr].clk_src << NAU8824_CLK_DAC_SRC_SFT);
|
osr_dac_sel[osr].clk_src << NAU8824_CLK_DAC_SRC_SFT);
|
||||||
@ -1041,7 +1042,7 @@ static int nau8824_hw_params(struct snd_pcm_substream *substream,
|
|||||||
osr &= NAU8824_ADC_SYNC_DOWN_MASK;
|
osr &= NAU8824_ADC_SYNC_DOWN_MASK;
|
||||||
if (nau8824_clock_check(nau8824, substream->stream,
|
if (nau8824_clock_check(nau8824, substream->stream,
|
||||||
nau8824->fs, osr))
|
nau8824->fs, osr))
|
||||||
return -EINVAL;
|
goto error;
|
||||||
regmap_update_bits(nau8824->regmap, NAU8824_REG_CLK_DIVIDER,
|
regmap_update_bits(nau8824->regmap, NAU8824_REG_CLK_DIVIDER,
|
||||||
NAU8824_CLK_ADC_SRC_MASK,
|
NAU8824_CLK_ADC_SRC_MASK,
|
||||||
osr_adc_sel[osr].clk_src << NAU8824_CLK_ADC_SRC_SFT);
|
osr_adc_sel[osr].clk_src << NAU8824_CLK_ADC_SRC_SFT);
|
||||||
@ -1062,7 +1063,7 @@ static int nau8824_hw_params(struct snd_pcm_substream *substream,
|
|||||||
else if (bclk_fs <= 256)
|
else if (bclk_fs <= 256)
|
||||||
bclk_div = 0;
|
bclk_div = 0;
|
||||||
else
|
else
|
||||||
return -EINVAL;
|
goto error;
|
||||||
regmap_update_bits(nau8824->regmap,
|
regmap_update_bits(nau8824->regmap,
|
||||||
NAU8824_REG_PORT0_I2S_PCM_CTRL_2,
|
NAU8824_REG_PORT0_I2S_PCM_CTRL_2,
|
||||||
NAU8824_I2S_LRC_DIV_MASK | NAU8824_I2S_BLK_DIV_MASK,
|
NAU8824_I2S_LRC_DIV_MASK | NAU8824_I2S_BLK_DIV_MASK,
|
||||||
@ -1083,15 +1084,17 @@ static int nau8824_hw_params(struct snd_pcm_substream *substream,
|
|||||||
val_len |= NAU8824_I2S_DL_32;
|
val_len |= NAU8824_I2S_DL_32;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
regmap_update_bits(nau8824->regmap, NAU8824_REG_PORT0_I2S_PCM_CTRL_1,
|
regmap_update_bits(nau8824->regmap, NAU8824_REG_PORT0_I2S_PCM_CTRL_1,
|
||||||
NAU8824_I2S_DL_MASK, val_len);
|
NAU8824_I2S_DL_MASK, val_len);
|
||||||
|
err = 0;
|
||||||
|
|
||||||
|
error:
|
||||||
nau8824_sema_release(nau8824);
|
nau8824_sema_release(nau8824);
|
||||||
|
|
||||||
return 0;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nau8824_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
|
static int nau8824_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
|
||||||
@ -1100,8 +1103,6 @@ static int nau8824_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
|
|||||||
struct nau8824 *nau8824 = snd_soc_codec_get_drvdata(codec);
|
struct nau8824 *nau8824 = snd_soc_codec_get_drvdata(codec);
|
||||||
unsigned int ctrl1_val = 0, ctrl2_val = 0;
|
unsigned int ctrl1_val = 0, ctrl2_val = 0;
|
||||||
|
|
||||||
nau8824_sema_acquire(nau8824, HZ);
|
|
||||||
|
|
||||||
switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
|
switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
|
||||||
case SND_SOC_DAIFMT_CBM_CFM:
|
case SND_SOC_DAIFMT_CBM_CFM:
|
||||||
ctrl2_val |= NAU8824_I2S_MS_MASTER;
|
ctrl2_val |= NAU8824_I2S_MS_MASTER;
|
||||||
@ -1143,6 +1144,8 @@ static int nau8824_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nau8824_sema_acquire(nau8824, HZ);
|
||||||
|
|
||||||
regmap_update_bits(nau8824->regmap, NAU8824_REG_PORT0_I2S_PCM_CTRL_1,
|
regmap_update_bits(nau8824->regmap, NAU8824_REG_PORT0_I2S_PCM_CTRL_1,
|
||||||
NAU8824_I2S_DF_MASK | NAU8824_I2S_BP_MASK |
|
NAU8824_I2S_DF_MASK | NAU8824_I2S_BP_MASK |
|
||||||
NAU8824_I2S_PCMB_EN, ctrl1_val);
|
NAU8824_I2S_PCMB_EN, ctrl1_val);
|
||||||
|
@ -1693,8 +1693,8 @@ static int kcore_copy__compare_file(const char *from_dir, const char *to_dir,
|
|||||||
* unusual. One significant peculiarity is that the mapping (start -> pgoff)
|
* unusual. One significant peculiarity is that the mapping (start -> pgoff)
|
||||||
* is not the same for the kernel map and the modules map. That happens because
|
* is not the same for the kernel map and the modules map. That happens because
|
||||||
* the data is copied adjacently whereas the original kcore has gaps. Finally,
|
* the data is copied adjacently whereas the original kcore has gaps. Finally,
|
||||||
* kallsyms and modules files are compared with their copies to check that
|
* kallsyms file is compared with its copy to check that modules have not been
|
||||||
* modules have not been loaded or unloaded while the copies were taking place.
|
* loaded or unloaded while the copies were taking place.
|
||||||
*
|
*
|
||||||
* Return: %0 on success, %-1 on failure.
|
* Return: %0 on success, %-1 on failure.
|
||||||
*/
|
*/
|
||||||
@ -1757,9 +1757,6 @@ int kcore_copy(const char *from_dir, const char *to_dir)
|
|||||||
kci.modules_map.len))
|
kci.modules_map.len))
|
||||||
goto out_extract_close;
|
goto out_extract_close;
|
||||||
|
|
||||||
if (kcore_copy__compare_file(from_dir, to_dir, "modules"))
|
|
||||||
goto out_extract_close;
|
|
||||||
|
|
||||||
if (kcore_copy__compare_file(from_dir, to_dir, "kallsyms"))
|
if (kcore_copy__compare_file(from_dir, to_dir, "kallsyms"))
|
||||||
goto out_extract_close;
|
goto out_extract_close;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user