commit:     1bc345b653db39a13b721cb5f68c18ee03f0dd3d
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Tue Apr 14 09:50:27 2015 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Tue Apr 14 09:50:27 2015 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=1bc345b6

Linux patch 3.14.38

 0000_README              |    4 +
 1037_linux-3.14.38.patch | 1029 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1033 insertions(+)

diff --git a/0000_README b/0000_README
index 78d37c0..6a3ff27 100644
--- a/0000_README
+++ b/0000_README
@@ -190,6 +190,10 @@ Patch:  1036_linux-3.14.37.patch
 From:   http://www.kernel.org
 Desc:   Linux 3.14.37
 
+Patch:  1037_linux-3.14.38.patch
+From:   http://www.kernel.org
+Desc:   Linux 3.14.38
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1037_linux-3.14.38.patch b/1037_linux-3.14.38.patch
new file mode 100644
index 0000000..a7c8725
--- /dev/null
+++ b/1037_linux-3.14.38.patch
@@ -0,0 +1,1029 @@
+diff --git a/Makefile b/Makefile
+index c24acc0d34a1..f09e19d2cc4f 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 3
+ PATCHLEVEL = 14
+-SUBLEVEL = 37
++SUBLEVEL = 38
+ EXTRAVERSION =
+ NAME = Remembering Coco
+ 
+diff --git a/arch/arm64/include/asm/mmu_context.h 
b/arch/arm64/include/asm/mmu_context.h
+index a9eee33dfa62..101a42bde728 100644
+--- a/arch/arm64/include/asm/mmu_context.h
++++ b/arch/arm64/include/asm/mmu_context.h
+@@ -151,6 +151,15 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
+ {
+       unsigned int cpu = smp_processor_id();
+ 
++      /*
++       * init_mm.pgd does not contain any user mappings and it is always
++       * active for kernel addresses in TTBR1. Just set the reserved TTBR0.
++       */
++      if (next == &init_mm) {
++              cpu_set_reserved_ttbr0();
++              return;
++      }
++
+       if (!cpumask_test_and_set_cpu(cpu, mm_cpumask(next)) || prev != next)
+               check_and_switch_context(next, tsk);
+ }
+diff --git a/arch/powerpc/boot/dts/fsl/pq3-etsec2-0.dtsi 
b/arch/powerpc/boot/dts/fsl/pq3-etsec2-0.dtsi
+index 1382fec9e8c5..7fcb1ac0f232 100644
+--- a/arch/powerpc/boot/dts/fsl/pq3-etsec2-0.dtsi
++++ b/arch/powerpc/boot/dts/fsl/pq3-etsec2-0.dtsi
+@@ -50,6 +50,7 @@ ethernet@b0000 {
+       fsl,num_tx_queues = <0x8>;
+       fsl,magic-packet;
+       local-mac-address = [ 00 00 00 00 00 00 ];
++      ranges;
+ 
+       queue-group@b0000 {
+               #address-cells = <1>;
+diff --git a/arch/powerpc/boot/dts/fsl/pq3-etsec2-1.dtsi 
b/arch/powerpc/boot/dts/fsl/pq3-etsec2-1.dtsi
+index 221cd2ea5b31..9f25427c1527 100644
+--- a/arch/powerpc/boot/dts/fsl/pq3-etsec2-1.dtsi
++++ b/arch/powerpc/boot/dts/fsl/pq3-etsec2-1.dtsi
+@@ -50,6 +50,7 @@ ethernet@b1000 {
+       fsl,num_tx_queues = <0x8>;
+       fsl,magic-packet;
+       local-mac-address = [ 00 00 00 00 00 00 ];
++      ranges;
+ 
+       queue-group@b1000 {
+               #address-cells = <1>;
+diff --git a/arch/powerpc/boot/dts/fsl/pq3-etsec2-2.dtsi 
b/arch/powerpc/boot/dts/fsl/pq3-etsec2-2.dtsi
+index 61456c317609..cd7c318ab131 100644
+--- a/arch/powerpc/boot/dts/fsl/pq3-etsec2-2.dtsi
++++ b/arch/powerpc/boot/dts/fsl/pq3-etsec2-2.dtsi
+@@ -49,6 +49,7 @@ ethernet@b2000 {
+       fsl,num_tx_queues = <0x8>;
+       fsl,magic-packet;
+       local-mac-address = [ 00 00 00 00 00 00 ];
++      ranges;
+ 
+       queue-group@b2000 {
+               #address-cells = <1>;
+diff --git a/arch/powerpc/kernel/exceptions-64s.S 
b/arch/powerpc/kernel/exceptions-64s.S
+index 38d507306a11..5193116eadc0 100644
+--- a/arch/powerpc/kernel/exceptions-64s.S
++++ b/arch/powerpc/kernel/exceptions-64s.S
+@@ -1422,7 +1422,7 @@ machine_check_handle_early:
+       bne     9f                      /* continue in V mode if we are. */
+ 
+ 5:
+-#ifdef CONFIG_KVM_BOOK3S_64_HV
++#ifdef CONFIG_KVM_BOOK3S_64_HANDLER
+       /*
+        * We are coming from kernel context. Check if we are coming from
+        * guest. if yes, then we can continue. We will fall through
+diff --git a/arch/powerpc/platforms/pseries/mobility.c 
b/arch/powerpc/platforms/pseries/mobility.c
+index cde4e0a095ae..bf3829242aff 100644
+--- a/arch/powerpc/platforms/pseries/mobility.c
++++ b/arch/powerpc/platforms/pseries/mobility.c
+@@ -24,10 +24,10 @@
+ static struct kobject *mobility_kobj;
+ 
+ struct update_props_workarea {
+-      u32 phandle;
+-      u32 state;
+-      u64 reserved;
+-      u32 nprops;
++      __be32 phandle;
++      __be32 state;
++      __be64 reserved;
++      __be32 nprops;
+ } __packed;
+ 
+ #define NODE_ACTION_MASK      0xff000000
+@@ -53,11 +53,11 @@ static int mobility_rtas_call(int token, char *buf, s32 
scope)
+       return rc;
+ }
+ 
+-static int delete_dt_node(u32 phandle)
++static int delete_dt_node(__be32 phandle)
+ {
+       struct device_node *dn;
+ 
+-      dn = of_find_node_by_phandle(phandle);
++      dn = of_find_node_by_phandle(be32_to_cpu(phandle));
+       if (!dn)
+               return -ENOENT;
+ 
+@@ -126,7 +126,7 @@ static int update_dt_property(struct device_node *dn, 
struct property **prop,
+       return 0;
+ }
+ 
+-static int update_dt_node(u32 phandle, s32 scope)
++static int update_dt_node(__be32 phandle, s32 scope)
+ {
+       struct update_props_workarea *upwa;
+       struct device_node *dn;
+@@ -135,6 +135,7 @@ static int update_dt_node(u32 phandle, s32 scope)
+       char *prop_data;
+       char *rtas_buf;
+       int update_properties_token;
++      u32 nprops;
+       u32 vd;
+ 
+       update_properties_token = rtas_token("ibm,update-properties");
+@@ -145,7 +146,7 @@ static int update_dt_node(u32 phandle, s32 scope)
+       if (!rtas_buf)
+               return -ENOMEM;
+ 
+-      dn = of_find_node_by_phandle(phandle);
++      dn = of_find_node_by_phandle(be32_to_cpu(phandle));
+       if (!dn) {
+               kfree(rtas_buf);
+               return -ENOENT;
+@@ -161,6 +162,7 @@ static int update_dt_node(u32 phandle, s32 scope)
+                       break;
+ 
+               prop_data = rtas_buf + sizeof(*upwa);
++              nprops = be32_to_cpu(upwa->nprops);
+ 
+               /* On the first call to ibm,update-properties for a node the
+                * the first property value descriptor contains an empty
+@@ -169,17 +171,17 @@ static int update_dt_node(u32 phandle, s32 scope)
+                */
+               if (*prop_data == 0) {
+                       prop_data++;
+-                      vd = *(u32 *)prop_data;
++                      vd = be32_to_cpu(*(__be32 *)prop_data);
+                       prop_data += vd + sizeof(vd);
+-                      upwa->nprops--;
++                      nprops--;
+               }
+ 
+-              for (i = 0; i < upwa->nprops; i++) {
++              for (i = 0; i < nprops; i++) {
+                       char *prop_name;
+ 
+                       prop_name = prop_data;
+                       prop_data += strlen(prop_name) + 1;
+-                      vd = *(u32 *)prop_data;
++                      vd = be32_to_cpu(*(__be32 *)prop_data);
+                       prop_data += sizeof(vd);
+ 
+                       switch (vd) {
+@@ -211,13 +213,13 @@ static int update_dt_node(u32 phandle, s32 scope)
+       return 0;
+ }
+ 
+-static int add_dt_node(u32 parent_phandle, u32 drc_index)
++static int add_dt_node(__be32 parent_phandle, __be32 drc_index)
+ {
+       struct device_node *dn;
+       struct device_node *parent_dn;
+       int rc;
+ 
+-      parent_dn = of_find_node_by_phandle(parent_phandle);
++      parent_dn = of_find_node_by_phandle(be32_to_cpu(parent_phandle));
+       if (!parent_dn)
+               return -ENOENT;
+ 
+@@ -236,7 +238,7 @@ static int add_dt_node(u32 parent_phandle, u32 drc_index)
+ int pseries_devicetree_update(s32 scope)
+ {
+       char *rtas_buf;
+-      u32 *data;
++      __be32 *data;
+       int update_nodes_token;
+       int rc;
+ 
+@@ -253,17 +255,17 @@ int pseries_devicetree_update(s32 scope)
+               if (rc && rc != 1)
+                       break;
+ 
+-              data = (u32 *)rtas_buf + 4;
+-              while (*data & NODE_ACTION_MASK) {
++              data = (__be32 *)rtas_buf + 4;
++              while (be32_to_cpu(*data) & NODE_ACTION_MASK) {
+                       int i;
+-                      u32 action = *data & NODE_ACTION_MASK;
+-                      int node_count = *data & NODE_COUNT_MASK;
++                      u32 action = be32_to_cpu(*data) & NODE_ACTION_MASK;
++                      u32 node_count = be32_to_cpu(*data) & NODE_COUNT_MASK;
+ 
+                       data++;
+ 
+                       for (i = 0; i < node_count; i++) {
+-                              u32 phandle = *data++;
+-                              u32 drc_index;
++                              __be32 phandle = *data++;
++                              __be32 drc_index;
+ 
+                               switch (action) {
+                               case DELETE_DT_NODE:
+diff --git a/drivers/base/regmap/regcache-rbtree.c 
b/drivers/base/regmap/regcache-rbtree.c
+index 930cad4e5df8..2b946bc4212d 100644
+--- a/drivers/base/regmap/regcache-rbtree.c
++++ b/drivers/base/regmap/regcache-rbtree.c
+@@ -313,7 +313,7 @@ static int regcache_rbtree_insert_to_block(struct regmap 
*map,
+       if (pos == 0) {
+               memmove(blk + offset * map->cache_word_size,
+                       blk, rbnode->blklen * map->cache_word_size);
+-              bitmap_shift_right(present, present, offset, blklen);
++              bitmap_shift_left(present, present, offset, blklen);
+       }
+ 
+       /* update the rbnode block, its size and the base register */
+diff --git a/drivers/clocksource/time-efm32.c 
b/drivers/clocksource/time-efm32.c
+index 1a6205b7bed3..35b016100673 100644
+--- a/drivers/clocksource/time-efm32.c
++++ b/drivers/clocksource/time-efm32.c
+@@ -225,12 +225,12 @@ static int __init efm32_clockevent_init(struct 
device_node *np)
+       clock_event_ddata.base = base;
+       clock_event_ddata.periodic_top = DIV_ROUND_CLOSEST(rate, 1024 * HZ);
+ 
+-      setup_irq(irq, &efm32_clock_event_irq);
+-
+       clockevents_config_and_register(&clock_event_ddata.evtdev,
+                                       DIV_ROUND_CLOSEST(rate, 1024),
+                                       0xf, 0xffff);
+ 
++      setup_irq(irq, &efm32_clock_event_irq);
++
+       return 0;
+ 
+ err_get_irq:
+diff --git a/drivers/clocksource/timer-sun5i.c 
b/drivers/clocksource/timer-sun5i.c
+index deebcd6469fc..4f0f3610371a 100644
+--- a/drivers/clocksource/timer-sun5i.c
++++ b/drivers/clocksource/timer-sun5i.c
+@@ -172,10 +172,6 @@ static void __init sun5i_timer_init(struct device_node 
*node)
+ 
+       ticks_per_jiffy = DIV_ROUND_UP(rate, HZ);
+ 
+-      ret = setup_irq(irq, &sun5i_timer_irq);
+-      if (ret)
+-              pr_warn("failed to setup irq %d\n", irq);
+-
+       /* Enable timer0 interrupt */
+       val = readl(timer_base + TIMER_IRQ_EN_REG);
+       writel(val | TIMER_IRQ_EN(0), timer_base + TIMER_IRQ_EN_REG);
+@@ -185,6 +181,10 @@ static void __init sun5i_timer_init(struct device_node 
*node)
+ 
+       clockevents_config_and_register(&sun5i_clockevent, rate,
+                                       TIMER_SYNC_TICKS, 0xffffffff);
++
++      ret = setup_irq(irq, &sun5i_timer_irq);
++      if (ret)
++              pr_warn("failed to setup irq %d\n", irq);
+ }
+ CLOCKSOURCE_OF_DECLARE(sun5i_a13, "allwinner,sun5i-a13-hstimer",
+                      sun5i_timer_init);
+diff --git a/drivers/dma/dw/platform.c b/drivers/dma/dw/platform.c
+index 453822cc4f9d..fe8b0c991518 100644
+--- a/drivers/dma/dw/platform.c
++++ b/drivers/dma/dw/platform.c
+@@ -48,6 +48,8 @@ static bool dw_dma_of_filter(struct dma_chan *chan, void 
*param)
+       return true;
+ }
+ 
++#define DRV_NAME      "dw_dmac"
++
+ static struct dma_chan *dw_dma_of_xlate(struct of_phandle_args *dma_spec,
+                                       struct of_dma *ofdma)
+ {
+@@ -293,7 +295,7 @@ static struct platform_driver dw_driver = {
+       .remove         = dw_remove,
+       .shutdown       = dw_shutdown,
+       .driver = {
+-              .name   = "dw_dmac",
++              .name   = DRV_NAME,
+               .pm     = &dw_dev_pm_ops,
+               .of_match_table = of_match_ptr(dw_dma_of_id_table),
+               .acpi_match_table = ACPI_PTR(dw_dma_acpi_id_table),
+@@ -314,3 +316,4 @@ module_exit(dw_exit);
+ 
+ MODULE_LICENSE("GPL v2");
+ MODULE_DESCRIPTION("Synopsys DesignWare DMA Controller platform driver");
++MODULE_ALIAS("platform:" DRV_NAME);
+diff --git a/drivers/md/dm-io.c b/drivers/md/dm-io.c
+index d2a8d64f8526..080e767250d3 100644
+--- a/drivers/md/dm-io.c
++++ b/drivers/md/dm-io.c
+@@ -291,9 +291,16 @@ static void do_region(int rw, unsigned region, struct 
dm_io_region *where,
+       struct request_queue *q = bdev_get_queue(where->bdev);
+       unsigned short logical_block_size = queue_logical_block_size(q);
+       sector_t num_sectors;
++      unsigned int uninitialized_var(special_cmd_max_sectors);
+ 
+-      /* Reject unsupported discard requests */
+-      if ((rw & REQ_DISCARD) && !blk_queue_discard(q)) {
++      /*
++       * Reject unsupported discard and write same requests.
++       */
++      if (rw & REQ_DISCARD)
++              special_cmd_max_sectors = q->limits.max_discard_sectors;
++      else if (rw & REQ_WRITE_SAME)
++              special_cmd_max_sectors = q->limits.max_write_same_sectors;
++      if ((rw & (REQ_DISCARD | REQ_WRITE_SAME)) && special_cmd_max_sectors == 
0) {
+               dec_count(io, region, -EOPNOTSUPP);
+               return;
+       }
+@@ -319,7 +326,7 @@ static void do_region(int rw, unsigned region, struct 
dm_io_region *where,
+               store_io_and_region_in_bio(bio, io, region);
+ 
+               if (rw & REQ_DISCARD) {
+-                      num_sectors = min_t(sector_t, 
q->limits.max_discard_sectors, remaining);
++                      num_sectors = min_t(sector_t, special_cmd_max_sectors, 
remaining);
+                       bio->bi_iter.bi_size = num_sectors << SECTOR_SHIFT;
+                       remaining -= num_sectors;
+               } else if (rw & REQ_WRITE_SAME) {
+@@ -328,7 +335,7 @@ static void do_region(int rw, unsigned region, struct 
dm_io_region *where,
+                        */
+                       dp->get_page(dp, &page, &len, &offset);
+                       bio_add_page(bio, page, logical_block_size, offset);
+-                      num_sectors = min_t(sector_t, 
q->limits.max_write_same_sectors, remaining);
++                      num_sectors = min_t(sector_t, special_cmd_max_sectors, 
remaining);
+                       bio->bi_iter.bi_size = num_sectors << SECTOR_SHIFT;
+ 
+                       offset = 0;
+diff --git a/drivers/md/dm.c b/drivers/md/dm.c
+index 1582c3dac3ac..e40059143272 100644
+--- a/drivers/md/dm.c
++++ b/drivers/md/dm.c
+@@ -2352,10 +2352,16 @@ static void __dm_destroy(struct mapped_device *md, 
bool wait)
+       set_bit(DMF_FREEING, &md->flags);
+       spin_unlock(&_minor_lock);
+ 
++      /*
++       * Take suspend_lock so that presuspend and postsuspend methods
++       * do not race with internal suspend.
++       */
++      mutex_lock(&md->suspend_lock);
+       if (!dm_suspended_md(md)) {
+               dm_table_presuspend_targets(map);
+               dm_table_postsuspend_targets(map);
+       }
++      mutex_unlock(&md->suspend_lock);
+ 
+       /* dm_put_live_table must be before msleep, otherwise deadlock is 
possible */
+       dm_put_live_table(md, srcu_idx);
+diff --git a/drivers/mfd/kempld-core.c b/drivers/mfd/kempld-core.c
+index 38917a822335..2df3cbc968d1 100644
+--- a/drivers/mfd/kempld-core.c
++++ b/drivers/mfd/kempld-core.c
+@@ -629,7 +629,7 @@ static int __init kempld_init(void)
+       if (force_device_id[0]) {
+               for (id = kempld_dmi_table; id->matches[0].slot != DMI_NONE; 
id++)
+                       if (strstr(id->ident, force_device_id))
+-                              if (id->callback && id->callback(id))
++                              if (id->callback && !id->callback(id))
+                                       break;
+               if (id->matches[0].slot == DMI_NONE)
+                       return -ENODEV;
+diff --git a/drivers/net/ethernet/amd/pcnet32.c 
b/drivers/net/ethernet/amd/pcnet32.c
+index 9339cccfe05a..ad0e71c7a607 100644
+--- a/drivers/net/ethernet/amd/pcnet32.c
++++ b/drivers/net/ethernet/amd/pcnet32.c
+@@ -1516,7 +1516,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
+ {
+       struct pcnet32_private *lp;
+       int i, media;
+-      int fdx, mii, fset, dxsuflo;
++      int fdx, mii, fset, dxsuflo, sram;
+       int chip_version;
+       char *chipname;
+       struct net_device *dev;
+@@ -1553,7 +1553,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
+       }
+ 
+       /* initialize variables */
+-      fdx = mii = fset = dxsuflo = 0;
++      fdx = mii = fset = dxsuflo = sram = 0;
+       chip_version = (chip_version >> 12) & 0xffff;
+ 
+       switch (chip_version) {
+@@ -1586,6 +1586,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
+               chipname = "PCnet/FAST III 79C973";     /* PCI */
+               fdx = 1;
+               mii = 1;
++              sram = 1;
+               break;
+       case 0x2626:
+               chipname = "PCnet/Home 79C978"; /* PCI */
+@@ -1609,6 +1610,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
+               chipname = "PCnet/FAST III 79C975";     /* PCI */
+               fdx = 1;
+               mii = 1;
++              sram = 1;
+               break;
+       case 0x2628:
+               chipname = "PCnet/PRO 79C976";
+@@ -1637,6 +1639,31 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
+               dxsuflo = 1;
+       }
+ 
++      /*
++       * The Am79C973/Am79C975 controllers come with 12K of SRAM
++       * which we can use for the Tx/Rx buffers but most importantly,
++       * the use of SRAM allow us to use the BCR18:NOUFLO bit to avoid
++       * Tx fifo underflows.
++       */
++      if (sram) {
++              /*
++               * The SRAM is being configured in two steps. First we
++               * set the SRAM size in the BCR25:SRAM_SIZE bits. According
++               * to the datasheet, each bit corresponds to a 512-byte
++               * page so we can have at most 24 pages. The SRAM_SIZE
++               * holds the value of the upper 8 bits of the 16-bit SRAM size.
++               * The low 8-bits start at 0x00 and end at 0xff. So the
++               * address range is from 0x0000 up to 0x17ff. Therefore,
++               * the SRAM_SIZE is set to 0x17. The next step is to set
++               * the BCR26:SRAM_BND midway through so the Tx and Rx
++               * buffers can share the SRAM equally.
++               */
++              a->write_bcr(ioaddr, 25, 0x17);
++              a->write_bcr(ioaddr, 26, 0xc);
++              /* And finally enable the NOUFLO bit */
++              a->write_bcr(ioaddr, 18, a->read_bcr(ioaddr, 18) | (1 << 11));
++      }
++
+       dev = alloc_etherdev(sizeof(*lp));
+       if (!dev) {
+               ret = -ENOMEM;
+diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c 
b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+index a04174607e97..4a3b8b72c8af 100644
+--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
++++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+@@ -594,7 +594,7 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw 
*hw,
+ 
+       ret = iwl_mvm_mac_ctxt_add(mvm, vif);
+       if (ret)
+-              goto out_remove_mac;
++              goto out_release;
+ 
+       iwl_mvm_power_disable(mvm, vif);
+ 
+diff --git a/drivers/of/irq.c b/drivers/of/irq.c
+index 48f20ff1add9..bbff99dcbaea 100644
+--- a/drivers/of/irq.c
++++ b/drivers/of/irq.c
+@@ -290,7 +290,7 @@ int of_irq_parse_one(struct device_node *device, int 
index, struct of_phandle_ar
+       struct device_node *p;
+       const __be32 *intspec, *tmp, *addr;
+       u32 intsize, intlen;
+-      int i, res = -EINVAL;
++      int i, res;
+ 
+       pr_debug("of_irq_parse_one: dev=%s, index=%d\n", 
of_node_full_name(device), index);
+ 
+@@ -323,15 +323,19 @@ int of_irq_parse_one(struct device_node *device, int 
index, struct of_phandle_ar
+ 
+       /* Get size of interrupt specifier */
+       tmp = of_get_property(p, "#interrupt-cells", NULL);
+-      if (tmp == NULL)
++      if (tmp == NULL) {
++              res = -EINVAL;
+               goto out;
++      }
+       intsize = be32_to_cpu(*tmp);
+ 
+       pr_debug(" intsize=%d intlen=%d\n", intsize, intlen);
+ 
+       /* Check index */
+-      if ((index + 1) * intsize > intlen)
++      if ((index + 1) * intsize > intlen) {
++              res = -EINVAL;
+               goto out;
++      }
+ 
+       /* Copy intspec into irq structure */
+       intspec += index * intsize;
+diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
+index 34d56f7864d6..86592dd24da5 100644
+--- a/drivers/phy/phy-core.c
++++ b/drivers/phy/phy-core.c
+@@ -50,7 +50,9 @@ static void devm_phy_consume(struct device *dev, void *res)
+ 
+ static int devm_phy_match(struct device *dev, void *res, void *match_data)
+ {
+-      return res == match_data;
++      struct phy **phy = res;
++
++      return *phy == match_data;
+ }
+ 
+ static struct phy *phy_lookup(struct device *device, const char *port)
+diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c 
b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
+index 9d81f7693f99..1817f3f2b02d 100644
+--- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
++++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
+@@ -1515,7 +1515,7 @@ static int tcm_qla2xxx_check_initiator_node_acl(
+       /*
+        * Finally register the new FC Nexus with TCM
+        */
+-      __transport_register_session(se_nacl->se_tpg, se_nacl, se_sess, sess);
++      transport_register_session(se_nacl->se_tpg, se_nacl, se_sess, sess);
+ 
+       return 0;
+ }
+diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
+index fbf3b22efe5a..d6563ec700d4 100644
+--- a/drivers/spi/spi.c
++++ b/drivers/spi/spi.c
+@@ -846,13 +846,14 @@ void spi_finalize_current_message(struct spi_master 
*master)
+                               "failed to unprepare message: %d\n", ret);
+               }
+       }
++
++      trace_spi_message_done(mesg);
++
+       master->cur_msg_prepared = false;
+ 
+       mesg->state = NULL;
+       if (mesg->complete)
+               mesg->complete(mesg->context);
+-
+-      trace_spi_message_done(mesg);
+ }
+ EXPORT_SYMBOL_GPL(spi_finalize_current_message);
+ 
+diff --git a/drivers/staging/vt6655/rf.c b/drivers/staging/vt6655/rf.c
+index edb1b2768b17..dbd9d44919ac 100644
+--- a/drivers/staging/vt6655/rf.c
++++ b/drivers/staging/vt6655/rf.c
+@@ -936,6 +936,7 @@ bool RFbSetPower(
+               break;
+       case RATE_6M:
+       case RATE_9M:
++      case RATE_12M:
+       case RATE_18M:
+               byPwr = pDevice->abyOFDMPwrTbl[uCH];
+               if (pDevice->byRFType == RF_UW2452) {
+diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c
+index 1e8f64bff03c..2dc48d4ff433 100644
+--- a/drivers/staging/vt6656/rf.c
++++ b/drivers/staging/vt6656/rf.c
+@@ -752,6 +752,7 @@ int RFbSetPower(struct vnt_private *priv, u32 rate, u32 
channel)
+               break;
+       case RATE_6M:
+       case RATE_9M:
++      case RATE_12M:
+       case RATE_18M:
+       case RATE_24M:
+       case RATE_36M:
+diff --git a/drivers/target/tcm_fc/tfc_io.c b/drivers/target/tcm_fc/tfc_io.c
+index e415af32115a..c67d3795db4a 100644
+--- a/drivers/target/tcm_fc/tfc_io.c
++++ b/drivers/target/tcm_fc/tfc_io.c
+@@ -346,7 +346,7 @@ void ft_invl_hw_context(struct ft_cmd *cmd)
+               ep = fc_seq_exch(seq);
+               if (ep) {
+                       lport = ep->lp;
+-                      if (lport && (ep->xid <= lport->lro_xid))
++                      if (lport && (ep->xid <= lport->lro_xid)) {
+                               /*
+                                * "ddp_done" trigger invalidation of HW
+                                * specific DDP context
+@@ -361,6 +361,7 @@ void ft_invl_hw_context(struct ft_cmd *cmd)
+                                * identified using ep->xid)
+                                */
+                               cmd->was_ddp_setup = 0;
++                      }
+               }
+       }
+ }
+diff --git a/fs/hfsplus/brec.c b/fs/hfsplus/brec.c
+index 6e560d56094b..754fdf8c6356 100644
+--- a/fs/hfsplus/brec.c
++++ b/fs/hfsplus/brec.c
+@@ -131,13 +131,16 @@ skip:
+       hfs_bnode_write(node, entry, data_off + key_len, entry_len);
+       hfs_bnode_dump(node);
+ 
+-      if (new_node) {
+-              /* update parent key if we inserted a key
+-               * at the start of the first node
+-               */
+-              if (!rec && new_node != node)
+-                      hfs_brec_update_parent(fd);
++      /*
++       * update parent key if we inserted a key
++       * at the start of the node and it is not the new node
++       */
++      if (!rec && new_node != node) {
++              hfs_bnode_read_key(node, fd->search_key, data_off + size);
++              hfs_brec_update_parent(fd);
++      }
+ 
++      if (new_node) {
+               hfs_bnode_put(fd->bnode);
+               if (!new_node->parent) {
+                       hfs_btree_inc_height(tree);
+@@ -168,9 +171,6 @@ skip:
+               goto again;
+       }
+ 
+-      if (!rec)
+-              hfs_brec_update_parent(fd);
+-
+       return 0;
+ }
+ 
+@@ -370,6 +370,8 @@ again:
+       if (IS_ERR(parent))
+               return PTR_ERR(parent);
+       __hfs_brec_find(parent, fd, hfs_find_rec_by_key);
++      if (fd->record < 0)
++              return -ENOENT;
+       hfs_bnode_dump(parent);
+       rec = fd->record;
+ 
+diff --git a/kernel/events/core.c b/kernel/events/core.c
+index 69cffb46db17..60146febb9b3 100644
+--- a/kernel/events/core.c
++++ b/kernel/events/core.c
+@@ -4232,6 +4232,13 @@ static void perf_pending_event(struct irq_work *entry)
+ {
+       struct perf_event *event = container_of(entry,
+                       struct perf_event, pending);
++      int rctx;
++
++      rctx = perf_swevent_get_recursion_context();
++      /*
++       * If we 'fail' here, that's OK, it means recursion is already disabled
++       * and we won't recurse 'further'.
++       */
+ 
+       if (event->pending_disable) {
+               event->pending_disable = 0;
+@@ -4242,6 +4249,9 @@ static void perf_pending_event(struct irq_work *entry)
+               event->pending_wakeup = 0;
+               perf_event_wakeup(event);
+       }
++
++      if (rctx >= 0)
++              perf_swevent_put_recursion_context(rctx);
+ }
+ 
+ /*
+diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
+index bf7a1bbb975f..e278c64572de 100644
+--- a/net/mac80211/ieee80211_i.h
++++ b/net/mac80211/ieee80211_i.h
+@@ -57,13 +57,24 @@ struct ieee80211_local;
+ #define IEEE80211_UNSET_POWER_LEVEL   INT_MIN
+ 
+ /*
+- * Some APs experience problems when working with U-APSD. Decrease the
+- * probability of that happening by using legacy mode for all ACs but VO.
+- * The AP that caused us trouble was a Cisco 4410N. It ignores our
+- * setting, and always treats non-VO ACs as legacy.
++ * Some APs experience problems when working with U-APSD. Decreasing the
++ * probability of that happening by using legacy mode for all ACs but VO isn't
++ * enough.
++ *
++ * Cisco 4410N originally forced us to enable VO by default only because it
++ * treated non-VO ACs as legacy.
++ *
++ * However some APs (notably Netgear R7000) silently reclassify packets to
++ * different ACs. Since u-APSD ACs require trigger frames for frame retrieval
++ * clients would never see some frames (e.g. ARP responses) or would fetch 
them
++ * accidentally after a long time.
++ *
++ * It makes little sense to enable u-APSD queues by default because it needs
++ * userspace applications to be aware of it to actually take advantage of the
++ * possible additional powersavings. Implicitly depending on driver 
autotrigger
++ * frame support doesn't make much sense.
+  */
+-#define IEEE80211_DEFAULT_UAPSD_QUEUES \
+-      IEEE80211_WMM_IE_STA_QOSINFO_AC_VO
++#define IEEE80211_DEFAULT_UAPSD_QUEUES 0
+ 
+ #define IEEE80211_DEFAULT_MAX_SP_LEN          \
+       IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL
+diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
+index 815ca56b39e7..9abb445ea261 100644
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -2107,6 +2107,9 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
+       hdr = (struct ieee80211_hdr *) skb->data;
+       mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen);
+ 
++      if (ieee80211_drop_unencrypted(rx, hdr->frame_control))
++              return RX_DROP_MONITOR;
++
+       /* frame is in RMC, don't forward */
+       if (ieee80211_is_data(hdr->frame_control) &&
+           is_multicast_ether_addr(hdr->addr1) &&
+diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
+index 18d73df72531..c260243dbe07 100644
+--- a/net/wireless/nl80211.c
++++ b/net/wireless/nl80211.c
+@@ -4190,6 +4190,16 @@ static int nl80211_new_station(struct sk_buff *skb, 
struct genl_info *info)
+       if (parse_station_flags(info, dev->ieee80211_ptr->iftype, &params))
+               return -EINVAL;
+ 
++      /* HT/VHT requires QoS, but if we don't have that just ignore HT/VHT
++       * as userspace might just pass through the capabilities from the IEs
++       * directly, rather than enforcing this restriction and returning an
++       * error in this case.
++       */
++      if (!(params.sta_flags_set & BIT(NL80211_STA_FLAG_WME))) {
++              params.ht_capa = NULL;
++              params.vht_capa = NULL;
++      }
++
+       /* When you run into this, adjust the code below for the new flag */
+       BUILD_BUG_ON(NL80211_STA_FLAG_MAX != 7);
+ 
+diff --git a/sound/soc/codecs/adav80x.c b/sound/soc/codecs/adav80x.c
+index f78b27a7c461..23454e9a5d3a 100644
+--- a/sound/soc/codecs/adav80x.c
++++ b/sound/soc/codecs/adav80x.c
+@@ -319,7 +319,7 @@ static int adav80x_put_deemph(struct snd_kcontrol 
*kcontrol,
+ {
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct adav80x *adav80x = snd_soc_codec_get_drvdata(codec);
+-      unsigned int deemph = ucontrol->value.enumerated.item[0];
++      unsigned int deemph = ucontrol->value.integer.value[0];
+ 
+       if (deemph > 1)
+               return -EINVAL;
+@@ -335,7 +335,7 @@ static int adav80x_get_deemph(struct snd_kcontrol 
*kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct adav80x *adav80x = snd_soc_codec_get_drvdata(codec);
+ 
+-      ucontrol->value.enumerated.item[0] = adav80x->deemph;
++      ucontrol->value.integer.value[0] = adav80x->deemph;
+       return 0;
+ };
+ 
+diff --git a/sound/soc/codecs/ak4641.c b/sound/soc/codecs/ak4641.c
+index 94cbe508dd37..d7184726f8a0 100644
+--- a/sound/soc/codecs/ak4641.c
++++ b/sound/soc/codecs/ak4641.c
+@@ -76,7 +76,7 @@ static int ak4641_put_deemph(struct snd_kcontrol *kcontrol,
+ {
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct ak4641_priv *ak4641 = snd_soc_codec_get_drvdata(codec);
+-      int deemph = ucontrol->value.enumerated.item[0];
++      int deemph = ucontrol->value.integer.value[0];
+ 
+       if (deemph > 1)
+               return -EINVAL;
+@@ -92,7 +92,7 @@ static int ak4641_get_deemph(struct snd_kcontrol *kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct ak4641_priv *ak4641 = snd_soc_codec_get_drvdata(codec);
+ 
+-      ucontrol->value.enumerated.item[0] = ak4641->deemph;
++      ucontrol->value.integer.value[0] = ak4641->deemph;
+       return 0;
+ };
+ 
+diff --git a/sound/soc/codecs/cs4271.c b/sound/soc/codecs/cs4271.c
+index ce05fd93dc74..a0ad41ac5574 100644
+--- a/sound/soc/codecs/cs4271.c
++++ b/sound/soc/codecs/cs4271.c
+@@ -288,7 +288,7 @@ static int cs4271_get_deemph(struct snd_kcontrol *kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct cs4271_private *cs4271 = snd_soc_codec_get_drvdata(codec);
+ 
+-      ucontrol->value.enumerated.item[0] = cs4271->deemph;
++      ucontrol->value.integer.value[0] = cs4271->deemph;
+       return 0;
+ }
+ 
+@@ -298,7 +298,7 @@ static int cs4271_put_deemph(struct snd_kcontrol *kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct cs4271_private *cs4271 = snd_soc_codec_get_drvdata(codec);
+ 
+-      cs4271->deemph = ucontrol->value.enumerated.item[0];
++      cs4271->deemph = ucontrol->value.integer.value[0];
+       return cs4271_set_deemph(codec);
+ }
+ 
+diff --git a/sound/soc/codecs/pcm1681.c b/sound/soc/codecs/pcm1681.c
+index 73f9c3630e2c..651e2fe2c31f 100644
+--- a/sound/soc/codecs/pcm1681.c
++++ b/sound/soc/codecs/pcm1681.c
+@@ -118,7 +118,7 @@ static int pcm1681_get_deemph(struct snd_kcontrol 
*kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct pcm1681_private *priv = snd_soc_codec_get_drvdata(codec);
+ 
+-      ucontrol->value.enumerated.item[0] = priv->deemph;
++      ucontrol->value.integer.value[0] = priv->deemph;
+ 
+       return 0;
+ }
+@@ -129,7 +129,7 @@ static int pcm1681_put_deemph(struct snd_kcontrol 
*kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct pcm1681_private *priv = snd_soc_codec_get_drvdata(codec);
+ 
+-      priv->deemph = ucontrol->value.enumerated.item[0];
++      priv->deemph = ucontrol->value.integer.value[0];
+ 
+       return pcm1681_set_deemph(codec);
+ }
+diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
+index 715589ff0eda..e93c36fd3073 100644
+--- a/sound/soc/codecs/sgtl5000.c
++++ b/sound/soc/codecs/sgtl5000.c
+@@ -1198,13 +1198,7 @@ static int sgtl5000_set_power_regs(struct snd_soc_codec 
*codec)
+               /* Enable VDDC charge pump */
+               ana_pwr |= SGTL5000_VDDC_CHRGPMP_POWERUP;
+       } else if (vddio >= 3100 && vdda >= 3100) {
+-              /*
+-               * if vddio and vddd > 3.1v,
+-               * charge pump should be clean before set ana_pwr
+-               */
+-              snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
+-                              SGTL5000_VDDC_CHRGPMP_POWERUP, 0);
+-
++              ana_pwr &= ~SGTL5000_VDDC_CHRGPMP_POWERUP;
+               /* VDDC use VDDIO rail */
+               lreg_ctrl |= SGTL5000_VDDC_ASSN_OVRD;
+               lreg_ctrl |= SGTL5000_VDDC_MAN_ASSN_VDDIO <<
+diff --git a/sound/soc/codecs/tas5086.c b/sound/soc/codecs/tas5086.c
+index a895a5e4bdf2..c6c65001457d 100644
+--- a/sound/soc/codecs/tas5086.c
++++ b/sound/soc/codecs/tas5086.c
+@@ -275,7 +275,7 @@ static int tas5086_get_deemph(struct snd_kcontrol 
*kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct tas5086_private *priv = snd_soc_codec_get_drvdata(codec);
+ 
+-      ucontrol->value.enumerated.item[0] = priv->deemph;
++      ucontrol->value.integer.value[0] = priv->deemph;
+ 
+       return 0;
+ }
+@@ -286,7 +286,7 @@ static int tas5086_put_deemph(struct snd_kcontrol 
*kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct tas5086_private *priv = snd_soc_codec_get_drvdata(codec);
+ 
+-      priv->deemph = ucontrol->value.enumerated.item[0];
++      priv->deemph = ucontrol->value.integer.value[0];
+ 
+       return tas5086_set_deemph(codec);
+ }
+diff --git a/sound/soc/codecs/wm2000.c b/sound/soc/codecs/wm2000.c
+index 8ae50274ea8f..1a9f4574b65b 100644
+--- a/sound/soc/codecs/wm2000.c
++++ b/sound/soc/codecs/wm2000.c
+@@ -610,7 +610,7 @@ static int wm2000_anc_mode_get(struct snd_kcontrol 
*kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev);
+ 
+-      ucontrol->value.enumerated.item[0] = wm2000->anc_active;
++      ucontrol->value.integer.value[0] = wm2000->anc_active;
+ 
+       return 0;
+ }
+@@ -620,7 +620,7 @@ static int wm2000_anc_mode_put(struct snd_kcontrol 
*kcontrol,
+ {
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev);
+-      int anc_active = ucontrol->value.enumerated.item[0];
++      int anc_active = ucontrol->value.integer.value[0];
+       int ret;
+ 
+       if (anc_active > 1)
+@@ -643,7 +643,7 @@ static int wm2000_speaker_get(struct snd_kcontrol 
*kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev);
+ 
+-      ucontrol->value.enumerated.item[0] = wm2000->spk_ena;
++      ucontrol->value.integer.value[0] = wm2000->spk_ena;
+ 
+       return 0;
+ }
+@@ -653,7 +653,7 @@ static int wm2000_speaker_put(struct snd_kcontrol 
*kcontrol,
+ {
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev);
+-      int val = ucontrol->value.enumerated.item[0];
++      int val = ucontrol->value.integer.value[0];
+       int ret;
+ 
+       if (val > 1)
+diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c
+index 029720366ff8..e593722574de 100644
+--- a/sound/soc/codecs/wm8731.c
++++ b/sound/soc/codecs/wm8731.c
+@@ -122,7 +122,7 @@ static int wm8731_get_deemph(struct snd_kcontrol *kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm8731_priv *wm8731 = snd_soc_codec_get_drvdata(codec);
+ 
+-      ucontrol->value.enumerated.item[0] = wm8731->deemph;
++      ucontrol->value.integer.value[0] = wm8731->deemph;
+ 
+       return 0;
+ }
+@@ -132,7 +132,7 @@ static int wm8731_put_deemph(struct snd_kcontrol *kcontrol,
+ {
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm8731_priv *wm8731 = snd_soc_codec_get_drvdata(codec);
+-      int deemph = ucontrol->value.enumerated.item[0];
++      int deemph = ucontrol->value.integer.value[0];
+       int ret = 0;
+ 
+       if (deemph > 1)
+diff --git a/sound/soc/codecs/wm8903.c b/sound/soc/codecs/wm8903.c
+index eebcb1da3b7b..ae7d76efe063 100644
+--- a/sound/soc/codecs/wm8903.c
++++ b/sound/soc/codecs/wm8903.c
+@@ -442,7 +442,7 @@ static int wm8903_get_deemph(struct snd_kcontrol *kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
+ 
+-      ucontrol->value.enumerated.item[0] = wm8903->deemph;
++      ucontrol->value.integer.value[0] = wm8903->deemph;
+ 
+       return 0;
+ }
+@@ -452,7 +452,7 @@ static int wm8903_put_deemph(struct snd_kcontrol *kcontrol,
+ {
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
+-      int deemph = ucontrol->value.enumerated.item[0];
++      int deemph = ucontrol->value.integer.value[0];
+       int ret = 0;
+ 
+       if (deemph > 1)
+diff --git a/sound/soc/codecs/wm8904.c b/sound/soc/codecs/wm8904.c
+index 53bbfac6a83a..66cb9e95b5eb 100644
+--- a/sound/soc/codecs/wm8904.c
++++ b/sound/soc/codecs/wm8904.c
+@@ -523,7 +523,7 @@ static int wm8904_get_deemph(struct snd_kcontrol *kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
+ 
+-      ucontrol->value.enumerated.item[0] = wm8904->deemph;
++      ucontrol->value.integer.value[0] = wm8904->deemph;
+       return 0;
+ }
+ 
+@@ -532,7 +532,7 @@ static int wm8904_put_deemph(struct snd_kcontrol *kcontrol,
+ {
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
+-      int deemph = ucontrol->value.enumerated.item[0];
++      int deemph = ucontrol->value.integer.value[0];
+ 
+       if (deemph > 1)
+               return -EINVAL;
+diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c
+index 82c8ba975720..1c1fc6119758 100644
+--- a/sound/soc/codecs/wm8955.c
++++ b/sound/soc/codecs/wm8955.c
+@@ -393,7 +393,7 @@ static int wm8955_get_deemph(struct snd_kcontrol *kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm8955_priv *wm8955 = snd_soc_codec_get_drvdata(codec);
+ 
+-      ucontrol->value.enumerated.item[0] = wm8955->deemph;
++      ucontrol->value.integer.value[0] = wm8955->deemph;
+       return 0;
+ }
+ 
+@@ -402,7 +402,7 @@ static int wm8955_put_deemph(struct snd_kcontrol *kcontrol,
+ {
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm8955_priv *wm8955 = snd_soc_codec_get_drvdata(codec);
+-      int deemph = ucontrol->value.enumerated.item[0];
++      int deemph = ucontrol->value.integer.value[0];
+ 
+       if (deemph > 1)
+               return -EINVAL;
+diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
+index 942ef8427347..2a0bfb848512 100644
+--- a/sound/soc/codecs/wm8960.c
++++ b/sound/soc/codecs/wm8960.c
+@@ -181,7 +181,7 @@ static int wm8960_get_deemph(struct snd_kcontrol *kcontrol,
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
+ 
+-      ucontrol->value.enumerated.item[0] = wm8960->deemph;
++      ucontrol->value.integer.value[0] = wm8960->deemph;
+       return 0;
+ }
+ 
+@@ -190,7 +190,7 @@ static int wm8960_put_deemph(struct snd_kcontrol *kcontrol,
+ {
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
+-      int deemph = ucontrol->value.enumerated.item[0];
++      int deemph = ucontrol->value.integer.value[0];
+ 
+       if (deemph > 1)
+               return -EINVAL;
+diff --git a/sound/soc/jz4740/Makefile b/sound/soc/jz4740/Makefile
+index be873c1b0c20..d32c540555c4 100644
+--- a/sound/soc/jz4740/Makefile
++++ b/sound/soc/jz4740/Makefile
+@@ -1,10 +1,8 @@
+ #
+ # Jz4740 Platform Support
+ #
+-snd-soc-jz4740-objs := jz4740-pcm.o
+ snd-soc-jz4740-i2s-objs := jz4740-i2s.o
+ 
+-obj-$(CONFIG_SND_JZ4740_SOC) += snd-soc-jz4740.o
+ obj-$(CONFIG_SND_JZ4740_SOC_I2S) += snd-soc-jz4740-i2s.o
+ 
+ # Jz4740 Machine Support

Reply via email to