Magellan Linux

Contents of /trunk/kernel-alx/patches-3.18/0111-3.18.12-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2612 - (show annotations) (download)
Mon Jul 13 08:28:38 2015 UTC (8 years, 9 months ago) by niro
File size: 83646 byte(s)
-linux-3.18.12
1 diff --git a/Makefile b/Makefile
2 index da8dc1350de3..d64f6bf7cd55 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 3
7 PATCHLEVEL = 18
8 -SUBLEVEL = 11
9 +SUBLEVEL = 12
10 EXTRAVERSION =
11 NAME = Diseased Newt
12
13 diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h
14 index a9eee33dfa62..101a42bde728 100644
15 --- a/arch/arm64/include/asm/mmu_context.h
16 +++ b/arch/arm64/include/asm/mmu_context.h
17 @@ -151,6 +151,15 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
18 {
19 unsigned int cpu = smp_processor_id();
20
21 + /*
22 + * init_mm.pgd does not contain any user mappings and it is always
23 + * active for kernel addresses in TTBR1. Just set the reserved TTBR0.
24 + */
25 + if (next == &init_mm) {
26 + cpu_set_reserved_ttbr0();
27 + return;
28 + }
29 +
30 if (!cpumask_test_and_set_cpu(cpu, mm_cpumask(next)) || prev != next)
31 check_and_switch_context(next, tsk);
32 }
33 diff --git a/arch/powerpc/boot/dts/fsl/pq3-etsec2-0.dtsi b/arch/powerpc/boot/dts/fsl/pq3-etsec2-0.dtsi
34 index 1382fec9e8c5..7fcb1ac0f232 100644
35 --- a/arch/powerpc/boot/dts/fsl/pq3-etsec2-0.dtsi
36 +++ b/arch/powerpc/boot/dts/fsl/pq3-etsec2-0.dtsi
37 @@ -50,6 +50,7 @@ ethernet@b0000 {
38 fsl,num_tx_queues = <0x8>;
39 fsl,magic-packet;
40 local-mac-address = [ 00 00 00 00 00 00 ];
41 + ranges;
42
43 queue-group@b0000 {
44 #address-cells = <1>;
45 diff --git a/arch/powerpc/boot/dts/fsl/pq3-etsec2-1.dtsi b/arch/powerpc/boot/dts/fsl/pq3-etsec2-1.dtsi
46 index 221cd2ea5b31..9f25427c1527 100644
47 --- a/arch/powerpc/boot/dts/fsl/pq3-etsec2-1.dtsi
48 +++ b/arch/powerpc/boot/dts/fsl/pq3-etsec2-1.dtsi
49 @@ -50,6 +50,7 @@ ethernet@b1000 {
50 fsl,num_tx_queues = <0x8>;
51 fsl,magic-packet;
52 local-mac-address = [ 00 00 00 00 00 00 ];
53 + ranges;
54
55 queue-group@b1000 {
56 #address-cells = <1>;
57 diff --git a/arch/powerpc/boot/dts/fsl/pq3-etsec2-2.dtsi b/arch/powerpc/boot/dts/fsl/pq3-etsec2-2.dtsi
58 index 61456c317609..cd7c318ab131 100644
59 --- a/arch/powerpc/boot/dts/fsl/pq3-etsec2-2.dtsi
60 +++ b/arch/powerpc/boot/dts/fsl/pq3-etsec2-2.dtsi
61 @@ -49,6 +49,7 @@ ethernet@b2000 {
62 fsl,num_tx_queues = <0x8>;
63 fsl,magic-packet;
64 local-mac-address = [ 00 00 00 00 00 00 ];
65 + ranges;
66
67 queue-group@b2000 {
68 #address-cells = <1>;
69 diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
70 index 72e783ea0681..5e0198425194 100644
71 --- a/arch/powerpc/kernel/exceptions-64s.S
72 +++ b/arch/powerpc/kernel/exceptions-64s.S
73 @@ -1399,7 +1399,7 @@ machine_check_handle_early:
74 bne 9f /* continue in V mode if we are. */
75
76 5:
77 -#ifdef CONFIG_KVM_BOOK3S_64_HV
78 +#ifdef CONFIG_KVM_BOOK3S_64_HANDLER
79 /*
80 * We are coming from kernel context. Check if we are coming from
81 * guest. if yes, then we can continue. We will fall through
82 diff --git a/arch/powerpc/platforms/pseries/mobility.c b/arch/powerpc/platforms/pseries/mobility.c
83 index e7cb6d4a871a..f8c9ff7886e1 100644
84 --- a/arch/powerpc/platforms/pseries/mobility.c
85 +++ b/arch/powerpc/platforms/pseries/mobility.c
86 @@ -25,10 +25,10 @@
87 static struct kobject *mobility_kobj;
88
89 struct update_props_workarea {
90 - u32 phandle;
91 - u32 state;
92 - u64 reserved;
93 - u32 nprops;
94 + __be32 phandle;
95 + __be32 state;
96 + __be64 reserved;
97 + __be32 nprops;
98 } __packed;
99
100 #define NODE_ACTION_MASK 0xff000000
101 @@ -54,11 +54,11 @@ static int mobility_rtas_call(int token, char *buf, s32 scope)
102 return rc;
103 }
104
105 -static int delete_dt_node(u32 phandle)
106 +static int delete_dt_node(__be32 phandle)
107 {
108 struct device_node *dn;
109
110 - dn = of_find_node_by_phandle(phandle);
111 + dn = of_find_node_by_phandle(be32_to_cpu(phandle));
112 if (!dn)
113 return -ENOENT;
114
115 @@ -127,7 +127,7 @@ static int update_dt_property(struct device_node *dn, struct property **prop,
116 return 0;
117 }
118
119 -static int update_dt_node(u32 phandle, s32 scope)
120 +static int update_dt_node(__be32 phandle, s32 scope)
121 {
122 struct update_props_workarea *upwa;
123 struct device_node *dn;
124 @@ -136,6 +136,7 @@ static int update_dt_node(u32 phandle, s32 scope)
125 char *prop_data;
126 char *rtas_buf;
127 int update_properties_token;
128 + u32 nprops;
129 u32 vd;
130
131 update_properties_token = rtas_token("ibm,update-properties");
132 @@ -146,7 +147,7 @@ static int update_dt_node(u32 phandle, s32 scope)
133 if (!rtas_buf)
134 return -ENOMEM;
135
136 - dn = of_find_node_by_phandle(phandle);
137 + dn = of_find_node_by_phandle(be32_to_cpu(phandle));
138 if (!dn) {
139 kfree(rtas_buf);
140 return -ENOENT;
141 @@ -162,6 +163,7 @@ static int update_dt_node(u32 phandle, s32 scope)
142 break;
143
144 prop_data = rtas_buf + sizeof(*upwa);
145 + nprops = be32_to_cpu(upwa->nprops);
146
147 /* On the first call to ibm,update-properties for a node the
148 * the first property value descriptor contains an empty
149 @@ -170,17 +172,17 @@ static int update_dt_node(u32 phandle, s32 scope)
150 */
151 if (*prop_data == 0) {
152 prop_data++;
153 - vd = *(u32 *)prop_data;
154 + vd = be32_to_cpu(*(__be32 *)prop_data);
155 prop_data += vd + sizeof(vd);
156 - upwa->nprops--;
157 + nprops--;
158 }
159
160 - for (i = 0; i < upwa->nprops; i++) {
161 + for (i = 0; i < nprops; i++) {
162 char *prop_name;
163
164 prop_name = prop_data;
165 prop_data += strlen(prop_name) + 1;
166 - vd = *(u32 *)prop_data;
167 + vd = be32_to_cpu(*(__be32 *)prop_data);
168 prop_data += sizeof(vd);
169
170 switch (vd) {
171 @@ -212,13 +214,13 @@ static int update_dt_node(u32 phandle, s32 scope)
172 return 0;
173 }
174
175 -static int add_dt_node(u32 parent_phandle, u32 drc_index)
176 +static int add_dt_node(__be32 parent_phandle, __be32 drc_index)
177 {
178 struct device_node *dn;
179 struct device_node *parent_dn;
180 int rc;
181
182 - parent_dn = of_find_node_by_phandle(parent_phandle);
183 + parent_dn = of_find_node_by_phandle(be32_to_cpu(parent_phandle));
184 if (!parent_dn)
185 return -ENOENT;
186
187 @@ -237,7 +239,7 @@ static int add_dt_node(u32 parent_phandle, u32 drc_index)
188 int pseries_devicetree_update(s32 scope)
189 {
190 char *rtas_buf;
191 - u32 *data;
192 + __be32 *data;
193 int update_nodes_token;
194 int rc;
195
196 @@ -254,17 +256,17 @@ int pseries_devicetree_update(s32 scope)
197 if (rc && rc != 1)
198 break;
199
200 - data = (u32 *)rtas_buf + 4;
201 - while (*data & NODE_ACTION_MASK) {
202 + data = (__be32 *)rtas_buf + 4;
203 + while (be32_to_cpu(*data) & NODE_ACTION_MASK) {
204 int i;
205 - u32 action = *data & NODE_ACTION_MASK;
206 - int node_count = *data & NODE_COUNT_MASK;
207 + u32 action = be32_to_cpu(*data) & NODE_ACTION_MASK;
208 + u32 node_count = be32_to_cpu(*data) & NODE_COUNT_MASK;
209
210 data++;
211
212 for (i = 0; i < node_count; i++) {
213 - u32 phandle = *data++;
214 - u32 drc_index;
215 + __be32 phandle = *data++;
216 + __be32 drc_index;
217
218 switch (action) {
219 case DELETE_DT_NODE:
220 diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h
221 index 0da5865df5b1..8e1f5f67e25f 100644
222 --- a/drivers/base/regmap/internal.h
223 +++ b/drivers/base/regmap/internal.h
224 @@ -237,4 +237,12 @@ extern struct regcache_ops regcache_rbtree_ops;
225 extern struct regcache_ops regcache_lzo_ops;
226 extern struct regcache_ops regcache_flat_ops;
227
228 +static inline const char *regmap_name(const struct regmap *map)
229 +{
230 + if (map->dev)
231 + return dev_name(map->dev);
232 +
233 + return map->name;
234 +}
235 +
236 #endif
237 diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c
238 index f3e8fe0cc650..9d09c5bb5874 100644
239 --- a/drivers/base/regmap/regcache-rbtree.c
240 +++ b/drivers/base/regmap/regcache-rbtree.c
241 @@ -307,7 +307,7 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,
242 if (pos == 0) {
243 memmove(blk + offset * map->cache_word_size,
244 blk, rbnode->blklen * map->cache_word_size);
245 - bitmap_shift_right(present, present, offset, blklen);
246 + bitmap_shift_left(present, present, offset, blklen);
247 }
248
249 /* update the rbnode block, its size and the base register */
250 diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c
251 index f1280dc356d0..e5c1eda6a4c1 100644
252 --- a/drivers/base/regmap/regcache.c
253 +++ b/drivers/base/regmap/regcache.c
254 @@ -213,7 +213,7 @@ int regcache_read(struct regmap *map,
255 ret = map->cache_ops->read(map, reg, value);
256
257 if (ret == 0)
258 - trace_regmap_reg_read_cache(map->dev, reg, *value);
259 + trace_regmap_reg_read_cache(map, reg, *value);
260
261 return ret;
262 }
263 @@ -306,7 +306,7 @@ int regcache_sync(struct regmap *map)
264 dev_dbg(map->dev, "Syncing %s cache\n",
265 map->cache_ops->name);
266 name = map->cache_ops->name;
267 - trace_regcache_sync(map->dev, name, "start");
268 + trace_regcache_sync(map, name, "start");
269
270 if (!map->cache_dirty)
271 goto out;
272 @@ -341,7 +341,7 @@ out:
273
274 regmap_async_complete(map);
275
276 - trace_regcache_sync(map->dev, name, "stop");
277 + trace_regcache_sync(map, name, "stop");
278
279 return ret;
280 }
281 @@ -376,7 +376,7 @@ int regcache_sync_region(struct regmap *map, unsigned int min,
282 name = map->cache_ops->name;
283 dev_dbg(map->dev, "Syncing %s cache from %d-%d\n", name, min, max);
284
285 - trace_regcache_sync(map->dev, name, "start region");
286 + trace_regcache_sync(map, name, "start region");
287
288 if (!map->cache_dirty)
289 goto out;
290 @@ -396,7 +396,7 @@ out:
291
292 regmap_async_complete(map);
293
294 - trace_regcache_sync(map->dev, name, "stop region");
295 + trace_regcache_sync(map, name, "stop region");
296
297 return ret;
298 }
299 @@ -423,7 +423,7 @@ int regcache_drop_region(struct regmap *map, unsigned int min,
300
301 map->lock(map->lock_arg);
302
303 - trace_regcache_drop_region(map->dev, min, max);
304 + trace_regcache_drop_region(map, min, max);
305
306 ret = map->cache_ops->drop(map, min, max);
307
308 @@ -450,7 +450,7 @@ void regcache_cache_only(struct regmap *map, bool enable)
309 map->lock(map->lock_arg);
310 WARN_ON(map->cache_bypass && enable);
311 map->cache_only = enable;
312 - trace_regmap_cache_only(map->dev, enable);
313 + trace_regmap_cache_only(map, enable);
314 map->unlock(map->lock_arg);
315 }
316 EXPORT_SYMBOL_GPL(regcache_cache_only);
317 @@ -488,7 +488,7 @@ void regcache_cache_bypass(struct regmap *map, bool enable)
318 map->lock(map->lock_arg);
319 WARN_ON(map->cache_only && enable);
320 map->cache_bypass = enable;
321 - trace_regmap_cache_bypass(map->dev, enable);
322 + trace_regmap_cache_bypass(map, enable);
323 map->unlock(map->lock_arg);
324 }
325 EXPORT_SYMBOL_GPL(regcache_cache_bypass);
326 diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
327 index d2f8a818d200..ee731bb7d957 100644
328 --- a/drivers/base/regmap/regmap.c
329 +++ b/drivers/base/regmap/regmap.c
330 @@ -1280,7 +1280,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,
331 if (map->async && map->bus->async_write) {
332 struct regmap_async *async;
333
334 - trace_regmap_async_write_start(map->dev, reg, val_len);
335 + trace_regmap_async_write_start(map, reg, val_len);
336
337 spin_lock_irqsave(&map->async_lock, flags);
338 async = list_first_entry_or_null(&map->async_free,
339 @@ -1338,8 +1338,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,
340 return ret;
341 }
342
343 - trace_regmap_hw_write_start(map->dev, reg,
344 - val_len / map->format.val_bytes);
345 + trace_regmap_hw_write_start(map, reg, val_len / map->format.val_bytes);
346
347 /* If we're doing a single register write we can probably just
348 * send the work_buf directly, otherwise try to do a gather
349 @@ -1371,8 +1370,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,
350 kfree(buf);
351 }
352
353 - trace_regmap_hw_write_done(map->dev, reg,
354 - val_len / map->format.val_bytes);
355 + trace_regmap_hw_write_done(map, reg, val_len / map->format.val_bytes);
356
357 return ret;
358 }
359 @@ -1406,12 +1404,12 @@ static int _regmap_bus_formatted_write(void *context, unsigned int reg,
360
361 map->format.format_write(map, reg, val);
362
363 - trace_regmap_hw_write_start(map->dev, reg, 1);
364 + trace_regmap_hw_write_start(map, reg, 1);
365
366 ret = map->bus->write(map->bus_context, map->work_buf,
367 map->format.buf_size);
368
369 - trace_regmap_hw_write_done(map->dev, reg, 1);
370 + trace_regmap_hw_write_done(map, reg, 1);
371
372 return ret;
373 }
374 @@ -1469,7 +1467,7 @@ int _regmap_write(struct regmap *map, unsigned int reg,
375 dev_info(map->dev, "%x <= %x\n", reg, val);
376 #endif
377
378 - trace_regmap_reg_write(map->dev, reg, val);
379 + trace_regmap_reg_write(map, reg, val);
380
381 return map->reg_write(context, reg, val);
382 }
383 @@ -1772,7 +1770,7 @@ static int _regmap_raw_multi_reg_write(struct regmap *map,
384 for (i = 0; i < num_regs; i++) {
385 int reg = regs[i].reg;
386 int val = regs[i].def;
387 - trace_regmap_hw_write_start(map->dev, reg, 1);
388 + trace_regmap_hw_write_start(map, reg, 1);
389 map->format.format_reg(u8, reg, map->reg_shift);
390 u8 += reg_bytes + pad_bytes;
391 map->format.format_val(u8, val, 0);
392 @@ -1787,7 +1785,7 @@ static int _regmap_raw_multi_reg_write(struct regmap *map,
393
394 for (i = 0; i < num_regs; i++) {
395 int reg = regs[i].reg;
396 - trace_regmap_hw_write_done(map->dev, reg, 1);
397 + trace_regmap_hw_write_done(map, reg, 1);
398 }
399 return ret;
400 }
401 @@ -2058,15 +2056,13 @@ static int _regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
402 */
403 u8[0] |= map->read_flag_mask;
404
405 - trace_regmap_hw_read_start(map->dev, reg,
406 - val_len / map->format.val_bytes);
407 + trace_regmap_hw_read_start(map, reg, val_len / map->format.val_bytes);
408
409 ret = map->bus->read(map->bus_context, map->work_buf,
410 map->format.reg_bytes + map->format.pad_bytes,
411 val, val_len);
412
413 - trace_regmap_hw_read_done(map->dev, reg,
414 - val_len / map->format.val_bytes);
415 + trace_regmap_hw_read_done(map, reg, val_len / map->format.val_bytes);
416
417 return ret;
418 }
419 @@ -2122,7 +2118,7 @@ static int _regmap_read(struct regmap *map, unsigned int reg,
420 dev_info(map->dev, "%x => %x\n", reg, *val);
421 #endif
422
423 - trace_regmap_reg_read(map->dev, reg, *val);
424 + trace_regmap_reg_read(map, reg, *val);
425
426 if (!map->cache_bypass)
427 regcache_write(map, reg, *val);
428 @@ -2479,7 +2475,7 @@ void regmap_async_complete_cb(struct regmap_async *async, int ret)
429 struct regmap *map = async->map;
430 bool wake;
431
432 - trace_regmap_async_io_complete(map->dev);
433 + trace_regmap_async_io_complete(map);
434
435 spin_lock(&map->async_lock);
436 list_move(&async->list, &map->async_free);
437 @@ -2524,7 +2520,7 @@ int regmap_async_complete(struct regmap *map)
438 if (!map->bus || !map->bus->async_write)
439 return 0;
440
441 - trace_regmap_async_complete_start(map->dev);
442 + trace_regmap_async_complete_start(map);
443
444 wait_event(map->async_waitq, regmap_async_is_done(map));
445
446 @@ -2533,7 +2529,7 @@ int regmap_async_complete(struct regmap *map)
447 map->async_ret = 0;
448 spin_unlock_irqrestore(&map->async_lock, flags);
449
450 - trace_regmap_async_complete_done(map->dev);
451 + trace_regmap_async_complete_done(map);
452
453 return ret;
454 }
455 diff --git a/drivers/clocksource/time-efm32.c b/drivers/clocksource/time-efm32.c
456 index bba62f9deefb..ec57ba2bbd87 100644
457 --- a/drivers/clocksource/time-efm32.c
458 +++ b/drivers/clocksource/time-efm32.c
459 @@ -225,12 +225,12 @@ static int __init efm32_clockevent_init(struct device_node *np)
460 clock_event_ddata.base = base;
461 clock_event_ddata.periodic_top = DIV_ROUND_CLOSEST(rate, 1024 * HZ);
462
463 - setup_irq(irq, &efm32_clock_event_irq);
464 -
465 clockevents_config_and_register(&clock_event_ddata.evtdev,
466 DIV_ROUND_CLOSEST(rate, 1024),
467 0xf, 0xffff);
468
469 + setup_irq(irq, &efm32_clock_event_irq);
470 +
471 return 0;
472
473 err_get_irq:
474 diff --git a/drivers/clocksource/timer-sun5i.c b/drivers/clocksource/timer-sun5i.c
475 index 02268448dc85..5dcbf90b8015 100644
476 --- a/drivers/clocksource/timer-sun5i.c
477 +++ b/drivers/clocksource/timer-sun5i.c
478 @@ -178,10 +178,6 @@ static void __init sun5i_timer_init(struct device_node *node)
479
480 ticks_per_jiffy = DIV_ROUND_UP(rate, HZ);
481
482 - ret = setup_irq(irq, &sun5i_timer_irq);
483 - if (ret)
484 - pr_warn("failed to setup irq %d\n", irq);
485 -
486 /* Enable timer0 interrupt */
487 val = readl(timer_base + TIMER_IRQ_EN_REG);
488 writel(val | TIMER_IRQ_EN(0), timer_base + TIMER_IRQ_EN_REG);
489 @@ -191,6 +187,10 @@ static void __init sun5i_timer_init(struct device_node *node)
490
491 clockevents_config_and_register(&sun5i_clockevent, rate,
492 TIMER_SYNC_TICKS, 0xffffffff);
493 +
494 + ret = setup_irq(irq, &sun5i_timer_irq);
495 + if (ret)
496 + pr_warn("failed to setup irq %d\n", irq);
497 }
498 CLOCKSOURCE_OF_DECLARE(sun5i_a13, "allwinner,sun5i-a13-hstimer",
499 sun5i_timer_init);
500 diff --git a/drivers/cpuidle/cpuidle-mvebu-v7.c b/drivers/cpuidle/cpuidle-mvebu-v7.c
501 index 45371bb16214..6066d790fd0e 100644
502 --- a/drivers/cpuidle/cpuidle-mvebu-v7.c
503 +++ b/drivers/cpuidle/cpuidle-mvebu-v7.c
504 @@ -37,11 +37,11 @@ static int mvebu_v7_enter_idle(struct cpuidle_device *dev,
505 deepidle = true;
506
507 ret = mvebu_v7_cpu_suspend(deepidle);
508 + cpu_pm_exit();
509 +
510 if (ret)
511 return ret;
512
513 - cpu_pm_exit();
514 -
515 return index;
516 }
517
518 diff --git a/drivers/dma/dw/platform.c b/drivers/dma/dw/platform.c
519 index a630161473a4..c396e1b69d93 100644
520 --- a/drivers/dma/dw/platform.c
521 +++ b/drivers/dma/dw/platform.c
522 @@ -25,6 +25,8 @@
523
524 #include "internal.h"
525
526 +#define DRV_NAME "dw_dmac"
527 +
528 static struct dma_chan *dw_dma_of_xlate(struct of_phandle_args *dma_spec,
529 struct of_dma *ofdma)
530 {
531 @@ -279,7 +281,7 @@ static struct platform_driver dw_driver = {
532 .remove = dw_remove,
533 .shutdown = dw_shutdown,
534 .driver = {
535 - .name = "dw_dmac",
536 + .name = DRV_NAME,
537 .pm = &dw_dev_pm_ops,
538 .of_match_table = of_match_ptr(dw_dma_of_id_table),
539 .acpi_match_table = ACPI_PTR(dw_dma_acpi_id_table),
540 @@ -300,3 +302,4 @@ module_exit(dw_exit);
541
542 MODULE_LICENSE("GPL v2");
543 MODULE_DESCRIPTION("Synopsys DesignWare DMA Controller platform driver");
544 +MODULE_ALIAS("platform:" DRV_NAME);
545 diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
546 index 3cdaac8944eb..a46c4af2ac98 100644
547 --- a/drivers/edac/sb_edac.c
548 +++ b/drivers/edac/sb_edac.c
549 @@ -135,6 +135,7 @@ static inline int sad_pkg(const struct interleave_pkg *table, u32 reg,
550
551 #define TOLM 0x80
552 #define TOHM 0x84
553 +#define HASWELL_TOLM 0xd0
554 #define HASWELL_TOHM_0 0xd4
555 #define HASWELL_TOHM_1 0xd8
556
557 @@ -706,8 +707,8 @@ static u64 haswell_get_tolm(struct sbridge_pvt *pvt)
558 {
559 u32 reg;
560
561 - pci_read_config_dword(pvt->info.pci_vtd, TOLM, &reg);
562 - return (GET_BITFIELD(reg, 26, 31) << 26) | 0x1ffffff;
563 + pci_read_config_dword(pvt->info.pci_vtd, HASWELL_TOLM, &reg);
564 + return (GET_BITFIELD(reg, 26, 31) << 26) | 0x3ffffff;
565 }
566
567 static u64 haswell_get_tohm(struct sbridge_pvt *pvt)
568 @@ -848,7 +849,7 @@ static int get_dimm_config(struct mem_ctl_info *mci)
569 else
570 edac_dbg(0, "Memory is unregistered\n");
571
572 - if (mtype == MEM_DDR4 || MEM_RDDR4)
573 + if (mtype == MEM_DDR4 || mtype == MEM_RDDR4)
574 banks = 16;
575 else
576 banks = 8;
577 diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
578 index 23e26e0768b5..2176874a41b1 100644
579 --- a/drivers/input/mouse/synaptics.c
580 +++ b/drivers/input/mouse/synaptics.c
581 @@ -120,32 +120,41 @@ void synaptics_reset(struct psmouse *psmouse)
582
583 static bool cr48_profile_sensor;
584
585 +#define ANY_BOARD_ID 0
586 struct min_max_quirk {
587 const char * const *pnp_ids;
588 + struct {
589 + unsigned long int min, max;
590 + } board_id;
591 int x_min, x_max, y_min, y_max;
592 };
593
594 static const struct min_max_quirk min_max_pnpid_table[] = {
595 {
596 (const char * const []){"LEN0033", NULL},
597 + {ANY_BOARD_ID, ANY_BOARD_ID},
598 1024, 5052, 2258, 4832
599 },
600 {
601 - (const char * const []){"LEN0035", "LEN0042", NULL},
602 + (const char * const []){"LEN0042", NULL},
603 + {ANY_BOARD_ID, ANY_BOARD_ID},
604 1232, 5710, 1156, 4696
605 },
606 {
607 (const char * const []){"LEN0034", "LEN0036", "LEN0037",
608 "LEN0039", "LEN2002", "LEN2004",
609 NULL},
610 + {ANY_BOARD_ID, 2961},
611 1024, 5112, 2024, 4832
612 },
613 {
614 (const char * const []){"LEN2001", NULL},
615 + {ANY_BOARD_ID, ANY_BOARD_ID},
616 1024, 5022, 2508, 4832
617 },
618 {
619 (const char * const []){"LEN2006", NULL},
620 + {ANY_BOARD_ID, ANY_BOARD_ID},
621 1264, 5675, 1171, 4688
622 },
623 { }
624 @@ -241,6 +250,10 @@ static int synaptics_board_id(struct psmouse *psmouse)
625 struct synaptics_data *priv = psmouse->private;
626 unsigned char bid[3];
627
628 + /* firmwares prior 7.5 have no board_id encoded */
629 + if (SYN_ID_FULL(priv->identity) < 0x705)
630 + return 0;
631 +
632 if (synaptics_send_cmd(psmouse, SYN_QUE_MODES, bid))
633 return -1;
634 priv->board_id = ((bid[0] & 0xfc) << 6) | bid[1];
635 @@ -343,7 +356,6 @@ static int synaptics_resolution(struct psmouse *psmouse)
636 {
637 struct synaptics_data *priv = psmouse->private;
638 unsigned char resp[3];
639 - int i;
640
641 if (SYN_ID_MAJOR(priv->identity) < 4)
642 return 0;
643 @@ -355,17 +367,6 @@ static int synaptics_resolution(struct psmouse *psmouse)
644 }
645 }
646
647 - for (i = 0; min_max_pnpid_table[i].pnp_ids; i++) {
648 - if (psmouse_matches_pnp_id(psmouse,
649 - min_max_pnpid_table[i].pnp_ids)) {
650 - priv->x_min = min_max_pnpid_table[i].x_min;
651 - priv->x_max = min_max_pnpid_table[i].x_max;
652 - priv->y_min = min_max_pnpid_table[i].y_min;
653 - priv->y_max = min_max_pnpid_table[i].y_max;
654 - return 0;
655 - }
656 - }
657 -
658 if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 5 &&
659 SYN_CAP_MAX_DIMENSIONS(priv->ext_cap_0c)) {
660 if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MAX_COORDS, resp)) {
661 @@ -374,23 +375,69 @@ static int synaptics_resolution(struct psmouse *psmouse)
662 } else {
663 priv->x_max = (resp[0] << 5) | ((resp[1] & 0x0f) << 1);
664 priv->y_max = (resp[2] << 5) | ((resp[1] & 0xf0) >> 3);
665 + psmouse_info(psmouse,
666 + "queried max coordinates: x [..%d], y [..%d]\n",
667 + priv->x_max, priv->y_max);
668 }
669 }
670
671 - if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 7 &&
672 - SYN_CAP_MIN_DIMENSIONS(priv->ext_cap_0c)) {
673 + if (SYN_CAP_MIN_DIMENSIONS(priv->ext_cap_0c) &&
674 + (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 7 ||
675 + /*
676 + * Firmware v8.1 does not report proper number of extended
677 + * capabilities, but has been proven to report correct min
678 + * coordinates.
679 + */
680 + SYN_ID_FULL(priv->identity) == 0x801)) {
681 if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MIN_COORDS, resp)) {
682 psmouse_warn(psmouse,
683 "device claims to have min coordinates query, but I'm not able to read it.\n");
684 } else {
685 priv->x_min = (resp[0] << 5) | ((resp[1] & 0x0f) << 1);
686 priv->y_min = (resp[2] << 5) | ((resp[1] & 0xf0) >> 3);
687 + psmouse_info(psmouse,
688 + "queried min coordinates: x [%d..], y [%d..]\n",
689 + priv->x_min, priv->y_min);
690 }
691 }
692
693 return 0;
694 }
695
696 +/*
697 + * Apply quirk(s) if the hardware matches
698 + */
699 +
700 +static void synaptics_apply_quirks(struct psmouse *psmouse)
701 +{
702 + struct synaptics_data *priv = psmouse->private;
703 + int i;
704 +
705 + for (i = 0; min_max_pnpid_table[i].pnp_ids; i++) {
706 + if (!psmouse_matches_pnp_id(psmouse,
707 + min_max_pnpid_table[i].pnp_ids))
708 + continue;
709 +
710 + if (min_max_pnpid_table[i].board_id.min != ANY_BOARD_ID &&
711 + priv->board_id < min_max_pnpid_table[i].board_id.min)
712 + continue;
713 +
714 + if (min_max_pnpid_table[i].board_id.max != ANY_BOARD_ID &&
715 + priv->board_id > min_max_pnpid_table[i].board_id.max)
716 + continue;
717 +
718 + priv->x_min = min_max_pnpid_table[i].x_min;
719 + priv->x_max = min_max_pnpid_table[i].x_max;
720 + priv->y_min = min_max_pnpid_table[i].y_min;
721 + priv->y_max = min_max_pnpid_table[i].y_max;
722 + psmouse_info(psmouse,
723 + "quirked min/max coordinates: x [%d..%d], y [%d..%d]\n",
724 + priv->x_min, priv->x_max,
725 + priv->y_min, priv->y_max);
726 + break;
727 + }
728 +}
729 +
730 static int synaptics_query_hardware(struct psmouse *psmouse)
731 {
732 if (synaptics_identify(psmouse))
733 @@ -406,6 +453,8 @@ static int synaptics_query_hardware(struct psmouse *psmouse)
734 if (synaptics_resolution(psmouse))
735 return -1;
736
737 + synaptics_apply_quirks(psmouse);
738 +
739 return 0;
740 }
741
742 @@ -613,6 +662,18 @@ static void synaptics_parse_agm(const unsigned char buf[],
743 priv->agm_pending = true;
744 }
745
746 +static void synaptics_parse_ext_buttons(const unsigned char buf[],
747 + struct synaptics_data *priv,
748 + struct synaptics_hw_state *hw)
749 +{
750 + unsigned int ext_bits =
751 + (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) + 1) >> 1;
752 + unsigned int ext_mask = GENMASK(ext_bits - 1, 0);
753 +
754 + hw->ext_buttons = buf[4] & ext_mask;
755 + hw->ext_buttons |= (buf[5] & ext_mask) << ext_bits;
756 +}
757 +
758 static bool is_forcepad;
759
760 static int synaptics_parse_hw_state(const unsigned char buf[],
761 @@ -699,28 +760,9 @@ static int synaptics_parse_hw_state(const unsigned char buf[],
762 hw->down = ((buf[0] ^ buf[3]) & 0x02) ? 1 : 0;
763 }
764
765 - if (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) &&
766 + if (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) > 0 &&
767 ((buf[0] ^ buf[3]) & 0x02)) {
768 - switch (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) & ~0x01) {
769 - default:
770 - /*
771 - * if nExtBtn is greater than 8 it should be
772 - * considered invalid and treated as 0
773 - */
774 - break;
775 - case 8:
776 - hw->ext_buttons |= ((buf[5] & 0x08)) ? 0x80 : 0;
777 - hw->ext_buttons |= ((buf[4] & 0x08)) ? 0x40 : 0;
778 - case 6:
779 - hw->ext_buttons |= ((buf[5] & 0x04)) ? 0x20 : 0;
780 - hw->ext_buttons |= ((buf[4] & 0x04)) ? 0x10 : 0;
781 - case 4:
782 - hw->ext_buttons |= ((buf[5] & 0x02)) ? 0x08 : 0;
783 - hw->ext_buttons |= ((buf[4] & 0x02)) ? 0x04 : 0;
784 - case 2:
785 - hw->ext_buttons |= ((buf[5] & 0x01)) ? 0x02 : 0;
786 - hw->ext_buttons |= ((buf[4] & 0x01)) ? 0x01 : 0;
787 - }
788 + synaptics_parse_ext_buttons(buf, priv, hw);
789 }
790 } else {
791 hw->x = (((buf[1] & 0x1f) << 8) | buf[2]);
792 @@ -782,12 +824,35 @@ static void synaptics_report_semi_mt_data(struct input_dev *dev,
793 }
794 }
795
796 +static void synaptics_report_ext_buttons(struct psmouse *psmouse,
797 + const struct synaptics_hw_state *hw)
798 +{
799 + struct input_dev *dev = psmouse->dev;
800 + struct synaptics_data *priv = psmouse->private;
801 + int ext_bits = (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) + 1) >> 1;
802 + int i;
803 +
804 + if (!SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap))
805 + return;
806 +
807 + /* Bug in FW 8.1, buttons are reported only when ExtBit is 1 */
808 + if (SYN_ID_FULL(priv->identity) == 0x801 &&
809 + !((psmouse->packet[0] ^ psmouse->packet[3]) & 0x02))
810 + return;
811 +
812 + for (i = 0; i < ext_bits; i++) {
813 + input_report_key(dev, BTN_0 + 2 * i,
814 + hw->ext_buttons & (1 << i));
815 + input_report_key(dev, BTN_1 + 2 * i,
816 + hw->ext_buttons & (1 << (i + ext_bits)));
817 + }
818 +}
819 +
820 static void synaptics_report_buttons(struct psmouse *psmouse,
821 const struct synaptics_hw_state *hw)
822 {
823 struct input_dev *dev = psmouse->dev;
824 struct synaptics_data *priv = psmouse->private;
825 - int i;
826
827 input_report_key(dev, BTN_LEFT, hw->left);
828 input_report_key(dev, BTN_RIGHT, hw->right);
829 @@ -800,8 +865,7 @@ static void synaptics_report_buttons(struct psmouse *psmouse,
830 input_report_key(dev, BTN_BACK, hw->down);
831 }
832
833 - for (i = 0; i < SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap); i++)
834 - input_report_key(dev, BTN_0 + i, hw->ext_buttons & (1 << i));
835 + synaptics_report_ext_buttons(psmouse, hw);
836 }
837
838 static void synaptics_report_slot(struct input_dev *dev, int slot,
839 diff --git a/drivers/md/dm-io.c b/drivers/md/dm-io.c
840 index 37de0173b6d2..74adcd2c967e 100644
841 --- a/drivers/md/dm-io.c
842 +++ b/drivers/md/dm-io.c
843 @@ -289,9 +289,16 @@ static void do_region(int rw, unsigned region, struct dm_io_region *where,
844 struct request_queue *q = bdev_get_queue(where->bdev);
845 unsigned short logical_block_size = queue_logical_block_size(q);
846 sector_t num_sectors;
847 + unsigned int uninitialized_var(special_cmd_max_sectors);
848
849 - /* Reject unsupported discard requests */
850 - if ((rw & REQ_DISCARD) && !blk_queue_discard(q)) {
851 + /*
852 + * Reject unsupported discard and write same requests.
853 + */
854 + if (rw & REQ_DISCARD)
855 + special_cmd_max_sectors = q->limits.max_discard_sectors;
856 + else if (rw & REQ_WRITE_SAME)
857 + special_cmd_max_sectors = q->limits.max_write_same_sectors;
858 + if ((rw & (REQ_DISCARD | REQ_WRITE_SAME)) && special_cmd_max_sectors == 0) {
859 dec_count(io, region, -EOPNOTSUPP);
860 return;
861 }
862 @@ -317,7 +324,7 @@ static void do_region(int rw, unsigned region, struct dm_io_region *where,
863 store_io_and_region_in_bio(bio, io, region);
864
865 if (rw & REQ_DISCARD) {
866 - num_sectors = min_t(sector_t, q->limits.max_discard_sectors, remaining);
867 + num_sectors = min_t(sector_t, special_cmd_max_sectors, remaining);
868 bio->bi_iter.bi_size = num_sectors << SECTOR_SHIFT;
869 remaining -= num_sectors;
870 } else if (rw & REQ_WRITE_SAME) {
871 @@ -326,7 +333,7 @@ static void do_region(int rw, unsigned region, struct dm_io_region *where,
872 */
873 dp->get_page(dp, &page, &len, &offset);
874 bio_add_page(bio, page, logical_block_size, offset);
875 - num_sectors = min_t(sector_t, q->limits.max_write_same_sectors, remaining);
876 + num_sectors = min_t(sector_t, special_cmd_max_sectors, remaining);
877 bio->bi_iter.bi_size = num_sectors << SECTOR_SHIFT;
878
879 offset = 0;
880 diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
881 index 8b204ae216ab..33de9f7a7180 100644
882 --- a/drivers/md/dm-snap.c
883 +++ b/drivers/md/dm-snap.c
884 @@ -20,6 +20,8 @@
885 #include <linux/log2.h>
886 #include <linux/dm-kcopyd.h>
887
888 +#include "dm.h"
889 +
890 #include "dm-exception-store.h"
891
892 #define DM_MSG_PREFIX "snapshots"
893 @@ -291,12 +293,23 @@ struct origin {
894 };
895
896 /*
897 + * This structure is allocated for each origin target
898 + */
899 +struct dm_origin {
900 + struct dm_dev *dev;
901 + struct dm_target *ti;
902 + unsigned split_boundary;
903 + struct list_head hash_list;
904 +};
905 +
906 +/*
907 * Size of the hash table for origin volumes. If we make this
908 * the size of the minors list then it should be nearly perfect
909 */
910 #define ORIGIN_HASH_SIZE 256
911 #define ORIGIN_MASK 0xFF
912 static struct list_head *_origins;
913 +static struct list_head *_dm_origins;
914 static struct rw_semaphore _origins_lock;
915
916 static DECLARE_WAIT_QUEUE_HEAD(_pending_exceptions_done);
917 @@ -310,12 +323,22 @@ static int init_origin_hash(void)
918 _origins = kmalloc(ORIGIN_HASH_SIZE * sizeof(struct list_head),
919 GFP_KERNEL);
920 if (!_origins) {
921 - DMERR("unable to allocate memory");
922 + DMERR("unable to allocate memory for _origins");
923 return -ENOMEM;
924 }
925 -
926 for (i = 0; i < ORIGIN_HASH_SIZE; i++)
927 INIT_LIST_HEAD(_origins + i);
928 +
929 + _dm_origins = kmalloc(ORIGIN_HASH_SIZE * sizeof(struct list_head),
930 + GFP_KERNEL);
931 + if (!_dm_origins) {
932 + DMERR("unable to allocate memory for _dm_origins");
933 + kfree(_origins);
934 + return -ENOMEM;
935 + }
936 + for (i = 0; i < ORIGIN_HASH_SIZE; i++)
937 + INIT_LIST_HEAD(_dm_origins + i);
938 +
939 init_rwsem(&_origins_lock);
940
941 return 0;
942 @@ -324,6 +347,7 @@ static int init_origin_hash(void)
943 static void exit_origin_hash(void)
944 {
945 kfree(_origins);
946 + kfree(_dm_origins);
947 }
948
949 static unsigned origin_hash(struct block_device *bdev)
950 @@ -350,6 +374,30 @@ static void __insert_origin(struct origin *o)
951 list_add_tail(&o->hash_list, sl);
952 }
953
954 +static struct dm_origin *__lookup_dm_origin(struct block_device *origin)
955 +{
956 + struct list_head *ol;
957 + struct dm_origin *o;
958 +
959 + ol = &_dm_origins[origin_hash(origin)];
960 + list_for_each_entry (o, ol, hash_list)
961 + if (bdev_equal(o->dev->bdev, origin))
962 + return o;
963 +
964 + return NULL;
965 +}
966 +
967 +static void __insert_dm_origin(struct dm_origin *o)
968 +{
969 + struct list_head *sl = &_dm_origins[origin_hash(o->dev->bdev)];
970 + list_add_tail(&o->hash_list, sl);
971 +}
972 +
973 +static void __remove_dm_origin(struct dm_origin *o)
974 +{
975 + list_del(&o->hash_list);
976 +}
977 +
978 /*
979 * _origins_lock must be held when calling this function.
980 * Returns number of snapshots registered using the supplied cow device, plus:
981 @@ -1840,9 +1888,40 @@ static int snapshot_preresume(struct dm_target *ti)
982 static void snapshot_resume(struct dm_target *ti)
983 {
984 struct dm_snapshot *s = ti->private;
985 - struct dm_snapshot *snap_src = NULL, *snap_dest = NULL;
986 + struct dm_snapshot *snap_src = NULL, *snap_dest = NULL, *snap_merging = NULL;
987 + struct dm_origin *o;
988 + struct mapped_device *origin_md = NULL;
989 + bool must_restart_merging = false;
990
991 down_read(&_origins_lock);
992 +
993 + o = __lookup_dm_origin(s->origin->bdev);
994 + if (o)
995 + origin_md = dm_table_get_md(o->ti->table);
996 + if (!origin_md) {
997 + (void) __find_snapshots_sharing_cow(s, NULL, NULL, &snap_merging);
998 + if (snap_merging)
999 + origin_md = dm_table_get_md(snap_merging->ti->table);
1000 + }
1001 + if (origin_md == dm_table_get_md(ti->table))
1002 + origin_md = NULL;
1003 + if (origin_md) {
1004 + if (dm_hold(origin_md))
1005 + origin_md = NULL;
1006 + }
1007 +
1008 + up_read(&_origins_lock);
1009 +
1010 + if (origin_md) {
1011 + dm_internal_suspend(origin_md);
1012 + if (snap_merging && test_bit(RUNNING_MERGE, &snap_merging->state_bits)) {
1013 + must_restart_merging = true;
1014 + stop_merge(snap_merging);
1015 + }
1016 + }
1017 +
1018 + down_read(&_origins_lock);
1019 +
1020 (void) __find_snapshots_sharing_cow(s, &snap_src, &snap_dest, NULL);
1021 if (snap_src && snap_dest) {
1022 down_write(&snap_src->lock);
1023 @@ -1851,8 +1930,16 @@ static void snapshot_resume(struct dm_target *ti)
1024 up_write(&snap_dest->lock);
1025 up_write(&snap_src->lock);
1026 }
1027 +
1028 up_read(&_origins_lock);
1029
1030 + if (origin_md) {
1031 + if (must_restart_merging)
1032 + start_merge(snap_merging);
1033 + dm_internal_resume(origin_md);
1034 + dm_put(origin_md);
1035 + }
1036 +
1037 /* Now we have correct chunk size, reregister */
1038 reregister_snapshot(s);
1039
1040 @@ -2133,11 +2220,6 @@ static int origin_write_extent(struct dm_snapshot *merging_snap,
1041 * Origin: maps a linear range of a device, with hooks for snapshotting.
1042 */
1043
1044 -struct dm_origin {
1045 - struct dm_dev *dev;
1046 - unsigned split_boundary;
1047 -};
1048 -
1049 /*
1050 * Construct an origin mapping: <dev_path>
1051 * The context for an origin is merely a 'struct dm_dev *'
1052 @@ -2166,6 +2248,7 @@ static int origin_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1053 goto bad_open;
1054 }
1055
1056 + o->ti = ti;
1057 ti->private = o;
1058 ti->num_flush_bios = 1;
1059
1060 @@ -2180,6 +2263,7 @@ bad_alloc:
1061 static void origin_dtr(struct dm_target *ti)
1062 {
1063 struct dm_origin *o = ti->private;
1064 +
1065 dm_put_device(ti, o->dev);
1066 kfree(o);
1067 }
1068 @@ -2216,6 +2300,19 @@ static void origin_resume(struct dm_target *ti)
1069 struct dm_origin *o = ti->private;
1070
1071 o->split_boundary = get_origin_minimum_chunksize(o->dev->bdev);
1072 +
1073 + down_write(&_origins_lock);
1074 + __insert_dm_origin(o);
1075 + up_write(&_origins_lock);
1076 +}
1077 +
1078 +static void origin_postsuspend(struct dm_target *ti)
1079 +{
1080 + struct dm_origin *o = ti->private;
1081 +
1082 + down_write(&_origins_lock);
1083 + __remove_dm_origin(o);
1084 + up_write(&_origins_lock);
1085 }
1086
1087 static void origin_status(struct dm_target *ti, status_type_t type,
1088 @@ -2258,12 +2355,13 @@ static int origin_iterate_devices(struct dm_target *ti,
1089
1090 static struct target_type origin_target = {
1091 .name = "snapshot-origin",
1092 - .version = {1, 8, 1},
1093 + .version = {1, 9, 0},
1094 .module = THIS_MODULE,
1095 .ctr = origin_ctr,
1096 .dtr = origin_dtr,
1097 .map = origin_map,
1098 .resume = origin_resume,
1099 + .postsuspend = origin_postsuspend,
1100 .status = origin_status,
1101 .merge = origin_merge,
1102 .iterate_devices = origin_iterate_devices,
1103 @@ -2271,7 +2369,7 @@ static struct target_type origin_target = {
1104
1105 static struct target_type snapshot_target = {
1106 .name = "snapshot",
1107 - .version = {1, 12, 0},
1108 + .version = {1, 13, 0},
1109 .module = THIS_MODULE,
1110 .ctr = snapshot_ctr,
1111 .dtr = snapshot_dtr,
1112 @@ -2285,7 +2383,7 @@ static struct target_type snapshot_target = {
1113
1114 static struct target_type merge_target = {
1115 .name = dm_snapshot_merge_target_name,
1116 - .version = {1, 2, 0},
1117 + .version = {1, 3, 0},
1118 .module = THIS_MODULE,
1119 .ctr = snapshot_ctr,
1120 .dtr = snapshot_dtr,
1121 diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
1122 index ac6b0ff161ea..0801e35b9940 100644
1123 --- a/drivers/md/dm-thin.c
1124 +++ b/drivers/md/dm-thin.c
1125 @@ -2003,17 +2003,6 @@ static int thin_bio_map(struct dm_target *ti, struct bio *bio)
1126 return DM_MAPIO_REMAPPED;
1127
1128 case -ENODATA:
1129 - if (get_pool_mode(tc->pool) == PM_READ_ONLY) {
1130 - /*
1131 - * This block isn't provisioned, and we have no way
1132 - * of doing so.
1133 - */
1134 - handle_unserviceable_bio(tc->pool, bio);
1135 - cell_defer_no_holder_no_free(tc, &cell1);
1136 - return DM_MAPIO_SUBMITTED;
1137 - }
1138 - /* fall through */
1139 -
1140 case -EWOULDBLOCK:
1141 /*
1142 * In future, the failed dm_thin_find_block above could
1143 diff --git a/drivers/md/dm.c b/drivers/md/dm.c
1144 index cec85c5bae9e..042114fbd200 100644
1145 --- a/drivers/md/dm.c
1146 +++ b/drivers/md/dm.c
1147 @@ -2507,6 +2507,19 @@ void dm_get(struct mapped_device *md)
1148 BUG_ON(test_bit(DMF_FREEING, &md->flags));
1149 }
1150
1151 +int dm_hold(struct mapped_device *md)
1152 +{
1153 + spin_lock(&_minor_lock);
1154 + if (test_bit(DMF_FREEING, &md->flags)) {
1155 + spin_unlock(&_minor_lock);
1156 + return -EBUSY;
1157 + }
1158 + dm_get(md);
1159 + spin_unlock(&_minor_lock);
1160 + return 0;
1161 +}
1162 +EXPORT_SYMBOL_GPL(dm_hold);
1163 +
1164 const char *dm_device_name(struct mapped_device *md)
1165 {
1166 return md->name;
1167 @@ -2526,10 +2539,16 @@ static void __dm_destroy(struct mapped_device *md, bool wait)
1168 set_bit(DMF_FREEING, &md->flags);
1169 spin_unlock(&_minor_lock);
1170
1171 + /*
1172 + * Take suspend_lock so that presuspend and postsuspend methods
1173 + * do not race with internal suspend.
1174 + */
1175 + mutex_lock(&md->suspend_lock);
1176 if (!dm_suspended_md(md)) {
1177 dm_table_presuspend_targets(map);
1178 dm_table_postsuspend_targets(map);
1179 }
1180 + mutex_unlock(&md->suspend_lock);
1181
1182 /* dm_put_live_table must be before msleep, otherwise deadlock is possible */
1183 dm_put_live_table(md, srcu_idx);
1184 @@ -2881,6 +2900,7 @@ void dm_internal_suspend(struct mapped_device *md)
1185 flush_workqueue(md->wq);
1186 dm_wait_for_completion(md, TASK_UNINTERRUPTIBLE);
1187 }
1188 +EXPORT_SYMBOL_GPL(dm_internal_suspend);
1189
1190 void dm_internal_resume(struct mapped_device *md)
1191 {
1192 @@ -2892,6 +2912,7 @@ void dm_internal_resume(struct mapped_device *md)
1193 done:
1194 mutex_unlock(&md->suspend_lock);
1195 }
1196 +EXPORT_SYMBOL_GPL(dm_internal_resume);
1197
1198 /*-----------------------------------------------------------------
1199 * Event notification.
1200 diff --git a/drivers/mfd/kempld-core.c b/drivers/mfd/kempld-core.c
1201 index bd2696136eee..177fa31e5aad 100644
1202 --- a/drivers/mfd/kempld-core.c
1203 +++ b/drivers/mfd/kempld-core.c
1204 @@ -740,7 +740,7 @@ static int __init kempld_init(void)
1205 for (id = kempld_dmi_table;
1206 id->matches[0].slot != DMI_NONE; id++)
1207 if (strstr(id->ident, force_device_id))
1208 - if (id->callback && id->callback(id))
1209 + if (id->callback && !id->callback(id))
1210 break;
1211 if (id->matches[0].slot == DMI_NONE)
1212 return -ENODEV;
1213 diff --git a/drivers/net/ethernet/amd/pcnet32.c b/drivers/net/ethernet/amd/pcnet32.c
1214 index e2e3aaf501a2..30f088be6a1a 100644
1215 --- a/drivers/net/ethernet/amd/pcnet32.c
1216 +++ b/drivers/net/ethernet/amd/pcnet32.c
1217 @@ -1543,7 +1543,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev)
1218 {
1219 struct pcnet32_private *lp;
1220 int i, media;
1221 - int fdx, mii, fset, dxsuflo;
1222 + int fdx, mii, fset, dxsuflo, sram;
1223 int chip_version;
1224 char *chipname;
1225 struct net_device *dev;
1226 @@ -1580,7 +1580,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev)
1227 }
1228
1229 /* initialize variables */
1230 - fdx = mii = fset = dxsuflo = 0;
1231 + fdx = mii = fset = dxsuflo = sram = 0;
1232 chip_version = (chip_version >> 12) & 0xffff;
1233
1234 switch (chip_version) {
1235 @@ -1613,6 +1613,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev)
1236 chipname = "PCnet/FAST III 79C973"; /* PCI */
1237 fdx = 1;
1238 mii = 1;
1239 + sram = 1;
1240 break;
1241 case 0x2626:
1242 chipname = "PCnet/Home 79C978"; /* PCI */
1243 @@ -1636,6 +1637,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev)
1244 chipname = "PCnet/FAST III 79C975"; /* PCI */
1245 fdx = 1;
1246 mii = 1;
1247 + sram = 1;
1248 break;
1249 case 0x2628:
1250 chipname = "PCnet/PRO 79C976";
1251 @@ -1664,6 +1666,31 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev)
1252 dxsuflo = 1;
1253 }
1254
1255 + /*
1256 + * The Am79C973/Am79C975 controllers come with 12K of SRAM
1257 + * which we can use for the Tx/Rx buffers but most importantly,
1258 + * the use of SRAM allow us to use the BCR18:NOUFLO bit to avoid
1259 + * Tx fifo underflows.
1260 + */
1261 + if (sram) {
1262 + /*
1263 + * The SRAM is being configured in two steps. First we
1264 + * set the SRAM size in the BCR25:SRAM_SIZE bits. According
1265 + * to the datasheet, each bit corresponds to a 512-byte
1266 + * page so we can have at most 24 pages. The SRAM_SIZE
1267 + * holds the value of the upper 8 bits of the 16-bit SRAM size.
1268 + * The low 8-bits start at 0x00 and end at 0xff. So the
1269 + * address range is from 0x0000 up to 0x17ff. Therefore,
1270 + * the SRAM_SIZE is set to 0x17. The next step is to set
1271 + * the BCR26:SRAM_BND midway through so the Tx and Rx
1272 + * buffers can share the SRAM equally.
1273 + */
1274 + a->write_bcr(ioaddr, 25, 0x17);
1275 + a->write_bcr(ioaddr, 26, 0xc);
1276 + /* And finally enable the NOUFLO bit */
1277 + a->write_bcr(ioaddr, 18, a->read_bcr(ioaddr, 18) | (1 << 11));
1278 + }
1279 +
1280 dev = alloc_etherdev(sizeof(*lp));
1281 if (!dev) {
1282 ret = -ENOMEM;
1283 diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c
1284 index 40b6d1d006d7..af2486965782 100644
1285 --- a/drivers/net/wireless/rtlwifi/base.c
1286 +++ b/drivers/net/wireless/rtlwifi/base.c
1287 @@ -1314,8 +1314,11 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
1288 }
1289
1290 return true;
1291 - } else if (0x86DD == ether_type) {
1292 - return true;
1293 + } else if (ETH_P_IPV6 == ether_type) {
1294 + /* TODO: Handle any IPv6 cases that need special handling.
1295 + * For now, always return false
1296 + */
1297 + goto end;
1298 }
1299
1300 end:
1301 diff --git a/drivers/of/irq.c b/drivers/of/irq.c
1302 index 1471e0a223a5..b97363adca0b 100644
1303 --- a/drivers/of/irq.c
1304 +++ b/drivers/of/irq.c
1305 @@ -290,7 +290,7 @@ int of_irq_parse_one(struct device_node *device, int index, struct of_phandle_ar
1306 struct device_node *p;
1307 const __be32 *intspec, *tmp, *addr;
1308 u32 intsize, intlen;
1309 - int i, res = -EINVAL;
1310 + int i, res;
1311
1312 pr_debug("of_irq_parse_one: dev=%s, index=%d\n", of_node_full_name(device), index);
1313
1314 @@ -323,15 +323,19 @@ int of_irq_parse_one(struct device_node *device, int index, struct of_phandle_ar
1315
1316 /* Get size of interrupt specifier */
1317 tmp = of_get_property(p, "#interrupt-cells", NULL);
1318 - if (tmp == NULL)
1319 + if (tmp == NULL) {
1320 + res = -EINVAL;
1321 goto out;
1322 + }
1323 intsize = be32_to_cpu(*tmp);
1324
1325 pr_debug(" intsize=%d intlen=%d\n", intsize, intlen);
1326
1327 /* Check index */
1328 - if ((index + 1) * intsize > intlen)
1329 + if ((index + 1) * intsize > intlen) {
1330 + res = -EINVAL;
1331 goto out;
1332 + }
1333
1334 /* Copy intspec into irq structure */
1335 intspec += index * intsize;
1336 diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
1337 index ff5eec5af817..2733112b3527 100644
1338 --- a/drivers/phy/phy-core.c
1339 +++ b/drivers/phy/phy-core.c
1340 @@ -51,7 +51,9 @@ static void devm_phy_consume(struct device *dev, void *res)
1341
1342 static int devm_phy_match(struct device *dev, void *res, void *match_data)
1343 {
1344 - return res == match_data;
1345 + struct phy **phy = res;
1346 +
1347 + return *phy == match_data;
1348 }
1349
1350 static struct phy *phy_lookup(struct device *device, const char *port)
1351 diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c
1352 index 1878e5b567ef..1a7f5fc11623 100644
1353 --- a/drivers/regulator/palmas-regulator.c
1354 +++ b/drivers/regulator/palmas-regulator.c
1355 @@ -1572,6 +1572,10 @@ static int palmas_regulators_probe(struct platform_device *pdev)
1356 if (!pmic)
1357 return -ENOMEM;
1358
1359 + if (of_device_is_compatible(node, "ti,tps659038-pmic"))
1360 + palmas_generic_regs_info[PALMAS_REG_REGEN2].ctrl_addr =
1361 + TPS659038_REGEN2_CTRL;
1362 +
1363 pmic->dev = &pdev->dev;
1364 pmic->palmas = palmas;
1365 palmas->pmic = pmic;
1366 diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
1367 index 73f9feecda72..272a2646a759 100644
1368 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
1369 +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
1370 @@ -1598,7 +1598,7 @@ static int tcm_qla2xxx_check_initiator_node_acl(
1371 /*
1372 * Finally register the new FC Nexus with TCM
1373 */
1374 - __transport_register_session(se_nacl->se_tpg, se_nacl, se_sess, sess);
1375 + transport_register_session(se_nacl->se_tpg, se_nacl, se_sess, sess);
1376
1377 return 0;
1378 }
1379 diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c
1380 index 9f83d2950748..6976f8aa8562 100644
1381 --- a/drivers/spi/spi-qup.c
1382 +++ b/drivers/spi/spi-qup.c
1383 @@ -489,7 +489,7 @@ static int spi_qup_probe(struct platform_device *pdev)
1384 struct resource *res;
1385 struct device *dev;
1386 void __iomem *base;
1387 - u32 max_freq, iomode;
1388 + u32 max_freq, iomode, num_cs;
1389 int ret, irq, size;
1390
1391 dev = &pdev->dev;
1392 @@ -541,10 +541,11 @@ static int spi_qup_probe(struct platform_device *pdev)
1393 }
1394
1395 /* use num-cs unless not present or out of range */
1396 - if (of_property_read_u16(dev->of_node, "num-cs",
1397 - &master->num_chipselect) ||
1398 - (master->num_chipselect > SPI_NUM_CHIPSELECTS))
1399 + if (of_property_read_u32(dev->of_node, "num-cs", &num_cs) ||
1400 + num_cs > SPI_NUM_CHIPSELECTS)
1401 master->num_chipselect = SPI_NUM_CHIPSELECTS;
1402 + else
1403 + master->num_chipselect = num_cs;
1404
1405 master->bus_num = pdev->id;
1406 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP;
1407 diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
1408 index 50f20f243981..1c72be19e70e 100644
1409 --- a/drivers/spi/spi.c
1410 +++ b/drivers/spi/spi.c
1411 @@ -1073,13 +1073,14 @@ void spi_finalize_current_message(struct spi_master *master)
1412 "failed to unprepare message: %d\n", ret);
1413 }
1414 }
1415 +
1416 + trace_spi_message_done(mesg);
1417 +
1418 master->cur_msg_prepared = false;
1419
1420 mesg->state = NULL;
1421 if (mesg->complete)
1422 mesg->complete(mesg->context);
1423 -
1424 - trace_spi_message_done(mesg);
1425 }
1426 EXPORT_SYMBOL_GPL(spi_finalize_current_message);
1427
1428 diff --git a/drivers/staging/vt6655/rf.c b/drivers/staging/vt6655/rf.c
1429 index e505af91bfd0..fb62e8dd11ba 100644
1430 --- a/drivers/staging/vt6655/rf.c
1431 +++ b/drivers/staging/vt6655/rf.c
1432 @@ -923,6 +923,7 @@ bool RFbSetPower(
1433 break;
1434 case RATE_6M:
1435 case RATE_9M:
1436 + case RATE_12M:
1437 case RATE_18M:
1438 byPwr = pDevice->abyOFDMPwrTbl[uCH];
1439 if (pDevice->byRFType == RF_UW2452)
1440 diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c
1441 index c42cde59f598..c4286ccac320 100644
1442 --- a/drivers/staging/vt6656/rf.c
1443 +++ b/drivers/staging/vt6656/rf.c
1444 @@ -640,6 +640,7 @@ int vnt_rf_setpower(struct vnt_private *priv, u32 rate, u32 channel)
1445 break;
1446 case RATE_6M:
1447 case RATE_9M:
1448 + case RATE_12M:
1449 case RATE_18M:
1450 case RATE_24M:
1451 case RATE_36M:
1452 diff --git a/drivers/target/tcm_fc/tfc_io.c b/drivers/target/tcm_fc/tfc_io.c
1453 index 97b486c3dda1..583e755d8091 100644
1454 --- a/drivers/target/tcm_fc/tfc_io.c
1455 +++ b/drivers/target/tcm_fc/tfc_io.c
1456 @@ -359,7 +359,7 @@ void ft_invl_hw_context(struct ft_cmd *cmd)
1457 ep = fc_seq_exch(seq);
1458 if (ep) {
1459 lport = ep->lp;
1460 - if (lport && (ep->xid <= lport->lro_xid))
1461 + if (lport && (ep->xid <= lport->lro_xid)) {
1462 /*
1463 * "ddp_done" trigger invalidation of HW
1464 * specific DDP context
1465 @@ -374,6 +374,7 @@ void ft_invl_hw_context(struct ft_cmd *cmd)
1466 * identified using ep->xid)
1467 */
1468 cmd->was_ddp_setup = 0;
1469 + }
1470 }
1471 }
1472 }
1473 diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
1474 index 0444d3f8971a..c42bf8da56db 100644
1475 --- a/drivers/usb/chipidea/udc.c
1476 +++ b/drivers/usb/chipidea/udc.c
1477 @@ -933,6 +933,13 @@ __acquires(hwep->lock)
1478 return retval;
1479 }
1480
1481 +static int otg_a_alt_hnp_support(struct ci_hdrc *ci)
1482 +{
1483 + dev_warn(&ci->gadget.dev,
1484 + "connect the device to an alternate port if you want HNP\n");
1485 + return isr_setup_status_phase(ci);
1486 +}
1487 +
1488 /**
1489 * isr_setup_packet_handler: setup packet handler
1490 * @ci: UDC descriptor
1491 @@ -1065,6 +1072,10 @@ __acquires(ci->lock)
1492 ci);
1493 }
1494 break;
1495 + case USB_DEVICE_A_ALT_HNP_SUPPORT:
1496 + if (ci_otg_is_fsm_mode(ci))
1497 + err = otg_a_alt_hnp_support(ci);
1498 + break;
1499 default:
1500 goto delegate;
1501 }
1502 diff --git a/drivers/usb/common/usb-otg-fsm.c b/drivers/usb/common/usb-otg-fsm.c
1503 index 98e8340a5bb1..c812fefe0e50 100644
1504 --- a/drivers/usb/common/usb-otg-fsm.c
1505 +++ b/drivers/usb/common/usb-otg-fsm.c
1506 @@ -150,9 +150,9 @@ static int otg_set_state(struct otg_fsm *fsm, enum usb_otg_state new_state)
1507 break;
1508 case OTG_STATE_B_PERIPHERAL:
1509 otg_chrg_vbus(fsm, 0);
1510 - otg_loc_conn(fsm, 1);
1511 otg_loc_sof(fsm, 0);
1512 otg_set_protocol(fsm, PROTO_GADGET);
1513 + otg_loc_conn(fsm, 1);
1514 break;
1515 case OTG_STATE_B_WAIT_ACON:
1516 otg_chrg_vbus(fsm, 0);
1517 @@ -213,10 +213,10 @@ static int otg_set_state(struct otg_fsm *fsm, enum usb_otg_state new_state)
1518
1519 break;
1520 case OTG_STATE_A_PERIPHERAL:
1521 - otg_loc_conn(fsm, 1);
1522 otg_loc_sof(fsm, 0);
1523 otg_set_protocol(fsm, PROTO_GADGET);
1524 otg_drv_vbus(fsm, 1);
1525 + otg_loc_conn(fsm, 1);
1526 otg_add_timer(fsm, A_BIDL_ADIS);
1527 break;
1528 case OTG_STATE_A_WAIT_VFALL:
1529 diff --git a/drivers/usb/phy/phy-am335x-control.c b/drivers/usb/phy/phy-am335x-control.c
1530 index 35b6083b7999..d5eca7b9c555 100644
1531 --- a/drivers/usb/phy/phy-am335x-control.c
1532 +++ b/drivers/usb/phy/phy-am335x-control.c
1533 @@ -126,6 +126,9 @@ struct phy_control *am335x_get_phy_control(struct device *dev)
1534 return NULL;
1535
1536 dev = bus_find_device(&platform_bus_type, NULL, node, match);
1537 + if (!dev)
1538 + return NULL;
1539 +
1540 ctrl_usb = dev_get_drvdata(dev);
1541 if (!ctrl_usb)
1542 return NULL;
1543 diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
1544 index cd047d0cc7a6..cd4ba61330c8 100644
1545 --- a/drivers/usb/storage/unusual_uas.h
1546 +++ b/drivers/usb/storage/unusual_uas.h
1547 @@ -103,6 +103,13 @@ UNUSUAL_DEV(0x0bc2, 0xab2a, 0x0000, 0x9999,
1548 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1549 US_FL_NO_ATA_1X),
1550
1551 +/* Reported-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> */
1552 +UNUSUAL_DEV(0x13fd, 0x3940, 0x0000, 0x9999,
1553 + "Initio Corporation",
1554 + "",
1555 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
1556 + US_FL_NO_ATA_1X),
1557 +
1558 /* Reported-by: Tom Arild Naess <tanaess@gmail.com> */
1559 UNUSUAL_DEV(0x152d, 0x0539, 0x0000, 0x9999,
1560 "JMicron",
1561 diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
1562 index c9703d4d6f67..440d78f39c01 100644
1563 --- a/drivers/virtio/virtio_balloon.c
1564 +++ b/drivers/virtio/virtio_balloon.c
1565 @@ -28,6 +28,7 @@
1566 #include <linux/slab.h>
1567 #include <linux/module.h>
1568 #include <linux/balloon_compaction.h>
1569 +#include <linux/wait.h>
1570
1571 /*
1572 * Balloon device works in 4K page units. So each page is pointed to by
1573 @@ -290,17 +291,25 @@ static void update_balloon_size(struct virtio_balloon *vb)
1574 static int balloon(void *_vballoon)
1575 {
1576 struct virtio_balloon *vb = _vballoon;
1577 + DEFINE_WAIT_FUNC(wait, woken_wake_function);
1578
1579 set_freezable();
1580 while (!kthread_should_stop()) {
1581 s64 diff;
1582
1583 try_to_freeze();
1584 - wait_event_interruptible(vb->config_change,
1585 - (diff = towards_target(vb)) != 0
1586 - || vb->need_stats_update
1587 - || kthread_should_stop()
1588 - || freezing(current));
1589 +
1590 + add_wait_queue(&vb->config_change, &wait);
1591 + for (;;) {
1592 + if ((diff = towards_target(vb)) != 0 ||
1593 + vb->need_stats_update ||
1594 + kthread_should_stop() ||
1595 + freezing(current))
1596 + break;
1597 + wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
1598 + }
1599 + remove_wait_queue(&vb->config_change, &wait);
1600 +
1601 if (vb->need_stats_update)
1602 stats_handle_request(vb);
1603 if (diff > 0)
1604 @@ -443,6 +452,8 @@ static int virtballoon_probe(struct virtio_device *vdev)
1605 if (err)
1606 goto out_free_vb;
1607
1608 + virtio_device_ready(vdev);
1609 +
1610 vb->thread = kthread_run(balloon, vb, "vballoon");
1611 if (IS_ERR(vb->thread)) {
1612 err = PTR_ERR(vb->thread);
1613 diff --git a/fs/hfsplus/brec.c b/fs/hfsplus/brec.c
1614 index 6e560d56094b..754fdf8c6356 100644
1615 --- a/fs/hfsplus/brec.c
1616 +++ b/fs/hfsplus/brec.c
1617 @@ -131,13 +131,16 @@ skip:
1618 hfs_bnode_write(node, entry, data_off + key_len, entry_len);
1619 hfs_bnode_dump(node);
1620
1621 - if (new_node) {
1622 - /* update parent key if we inserted a key
1623 - * at the start of the first node
1624 - */
1625 - if (!rec && new_node != node)
1626 - hfs_brec_update_parent(fd);
1627 + /*
1628 + * update parent key if we inserted a key
1629 + * at the start of the node and it is not the new node
1630 + */
1631 + if (!rec && new_node != node) {
1632 + hfs_bnode_read_key(node, fd->search_key, data_off + size);
1633 + hfs_brec_update_parent(fd);
1634 + }
1635
1636 + if (new_node) {
1637 hfs_bnode_put(fd->bnode);
1638 if (!new_node->parent) {
1639 hfs_btree_inc_height(tree);
1640 @@ -168,9 +171,6 @@ skip:
1641 goto again;
1642 }
1643
1644 - if (!rec)
1645 - hfs_brec_update_parent(fd);
1646 -
1647 return 0;
1648 }
1649
1650 @@ -370,6 +370,8 @@ again:
1651 if (IS_ERR(parent))
1652 return PTR_ERR(parent);
1653 __hfs_brec_find(parent, fd, hfs_find_rec_by_key);
1654 + if (fd->record < 0)
1655 + return -ENOENT;
1656 hfs_bnode_dump(parent);
1657 rec = fd->record;
1658
1659 diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
1660 index e1707de043ae..c51706b7a36e 100644
1661 --- a/include/linux/device-mapper.h
1662 +++ b/include/linux/device-mapper.h
1663 @@ -366,6 +366,7 @@ int dm_create(int minor, struct mapped_device **md);
1664 */
1665 struct mapped_device *dm_get_md(dev_t dev);
1666 void dm_get(struct mapped_device *md);
1667 +int dm_hold(struct mapped_device *md);
1668 void dm_put(struct mapped_device *md);
1669
1670 /*
1671 diff --git a/include/linux/mfd/palmas.h b/include/linux/mfd/palmas.h
1672 index fb0390a1a498..ee7b1ce7a6f8 100644
1673 --- a/include/linux/mfd/palmas.h
1674 +++ b/include/linux/mfd/palmas.h
1675 @@ -2999,6 +2999,9 @@ enum usb_irq_events {
1676 #define PALMAS_GPADC_TRIM15 0x0E
1677 #define PALMAS_GPADC_TRIM16 0x0F
1678
1679 +/* TPS659038 regen2_ctrl offset iss different from palmas */
1680 +#define TPS659038_REGEN2_CTRL 0x12
1681 +
1682 /* TPS65917 Interrupt registers */
1683
1684 /* Registers for function INTERRUPT */
1685 diff --git a/include/linux/wait.h b/include/linux/wait.h
1686 index e4a8eb9312ea..fc0e99395fbb 100644
1687 --- a/include/linux/wait.h
1688 +++ b/include/linux/wait.h
1689 @@ -13,9 +13,12 @@ typedef struct __wait_queue wait_queue_t;
1690 typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int flags, void *key);
1691 int default_wake_function(wait_queue_t *wait, unsigned mode, int flags, void *key);
1692
1693 +/* __wait_queue::flags */
1694 +#define WQ_FLAG_EXCLUSIVE 0x01
1695 +#define WQ_FLAG_WOKEN 0x02
1696 +
1697 struct __wait_queue {
1698 unsigned int flags;
1699 -#define WQ_FLAG_EXCLUSIVE 0x01
1700 void *private;
1701 wait_queue_func_t func;
1702 struct list_head task_list;
1703 @@ -830,6 +833,8 @@ void prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int sta
1704 long prepare_to_wait_event(wait_queue_head_t *q, wait_queue_t *wait, int state);
1705 void finish_wait(wait_queue_head_t *q, wait_queue_t *wait);
1706 void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait, unsigned int mode, void *key);
1707 +long wait_woken(wait_queue_t *wait, unsigned mode, long timeout);
1708 +int woken_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
1709 int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
1710 int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
1711
1712 diff --git a/include/trace/events/regmap.h b/include/trace/events/regmap.h
1713 index 23d561512f64..22317d2b52ab 100644
1714 --- a/include/trace/events/regmap.h
1715 +++ b/include/trace/events/regmap.h
1716 @@ -7,27 +7,26 @@
1717 #include <linux/ktime.h>
1718 #include <linux/tracepoint.h>
1719
1720 -struct device;
1721 -struct regmap;
1722 +#include "../../../drivers/base/regmap/internal.h"
1723
1724 /*
1725 * Log register events
1726 */
1727 DECLARE_EVENT_CLASS(regmap_reg,
1728
1729 - TP_PROTO(struct device *dev, unsigned int reg,
1730 + TP_PROTO(struct regmap *map, unsigned int reg,
1731 unsigned int val),
1732
1733 - TP_ARGS(dev, reg, val),
1734 + TP_ARGS(map, reg, val),
1735
1736 TP_STRUCT__entry(
1737 - __string( name, dev_name(dev) )
1738 - __field( unsigned int, reg )
1739 - __field( unsigned int, val )
1740 + __string( name, regmap_name(map) )
1741 + __field( unsigned int, reg )
1742 + __field( unsigned int, val )
1743 ),
1744
1745 TP_fast_assign(
1746 - __assign_str(name, dev_name(dev));
1747 + __assign_str(name, regmap_name(map));
1748 __entry->reg = reg;
1749 __entry->val = val;
1750 ),
1751 @@ -39,45 +38,45 @@ DECLARE_EVENT_CLASS(regmap_reg,
1752
1753 DEFINE_EVENT(regmap_reg, regmap_reg_write,
1754
1755 - TP_PROTO(struct device *dev, unsigned int reg,
1756 + TP_PROTO(struct regmap *map, unsigned int reg,
1757 unsigned int val),
1758
1759 - TP_ARGS(dev, reg, val)
1760 + TP_ARGS(map, reg, val)
1761
1762 );
1763
1764 DEFINE_EVENT(regmap_reg, regmap_reg_read,
1765
1766 - TP_PROTO(struct device *dev, unsigned int reg,
1767 + TP_PROTO(struct regmap *map, unsigned int reg,
1768 unsigned int val),
1769
1770 - TP_ARGS(dev, reg, val)
1771 + TP_ARGS(map, reg, val)
1772
1773 );
1774
1775 DEFINE_EVENT(regmap_reg, regmap_reg_read_cache,
1776
1777 - TP_PROTO(struct device *dev, unsigned int reg,
1778 + TP_PROTO(struct regmap *map, unsigned int reg,
1779 unsigned int val),
1780
1781 - TP_ARGS(dev, reg, val)
1782 + TP_ARGS(map, reg, val)
1783
1784 );
1785
1786 DECLARE_EVENT_CLASS(regmap_block,
1787
1788 - TP_PROTO(struct device *dev, unsigned int reg, int count),
1789 + TP_PROTO(struct regmap *map, unsigned int reg, int count),
1790
1791 - TP_ARGS(dev, reg, count),
1792 + TP_ARGS(map, reg, count),
1793
1794 TP_STRUCT__entry(
1795 - __string( name, dev_name(dev) )
1796 - __field( unsigned int, reg )
1797 - __field( int, count )
1798 + __string( name, regmap_name(map) )
1799 + __field( unsigned int, reg )
1800 + __field( int, count )
1801 ),
1802
1803 TP_fast_assign(
1804 - __assign_str(name, dev_name(dev));
1805 + __assign_str(name, regmap_name(map));
1806 __entry->reg = reg;
1807 __entry->count = count;
1808 ),
1809 @@ -89,48 +88,48 @@ DECLARE_EVENT_CLASS(regmap_block,
1810
1811 DEFINE_EVENT(regmap_block, regmap_hw_read_start,
1812
1813 - TP_PROTO(struct device *dev, unsigned int reg, int count),
1814 + TP_PROTO(struct regmap *map, unsigned int reg, int count),
1815
1816 - TP_ARGS(dev, reg, count)
1817 + TP_ARGS(map, reg, count)
1818 );
1819
1820 DEFINE_EVENT(regmap_block, regmap_hw_read_done,
1821
1822 - TP_PROTO(struct device *dev, unsigned int reg, int count),
1823 + TP_PROTO(struct regmap *map, unsigned int reg, int count),
1824
1825 - TP_ARGS(dev, reg, count)
1826 + TP_ARGS(map, reg, count)
1827 );
1828
1829 DEFINE_EVENT(regmap_block, regmap_hw_write_start,
1830
1831 - TP_PROTO(struct device *dev, unsigned int reg, int count),
1832 + TP_PROTO(struct regmap *map, unsigned int reg, int count),
1833
1834 - TP_ARGS(dev, reg, count)
1835 + TP_ARGS(map, reg, count)
1836 );
1837
1838 DEFINE_EVENT(regmap_block, regmap_hw_write_done,
1839
1840 - TP_PROTO(struct device *dev, unsigned int reg, int count),
1841 + TP_PROTO(struct regmap *map, unsigned int reg, int count),
1842
1843 - TP_ARGS(dev, reg, count)
1844 + TP_ARGS(map, reg, count)
1845 );
1846
1847 TRACE_EVENT(regcache_sync,
1848
1849 - TP_PROTO(struct device *dev, const char *type,
1850 + TP_PROTO(struct regmap *map, const char *type,
1851 const char *status),
1852
1853 - TP_ARGS(dev, type, status),
1854 + TP_ARGS(map, type, status),
1855
1856 TP_STRUCT__entry(
1857 - __string( name, dev_name(dev) )
1858 - __string( status, status )
1859 - __string( type, type )
1860 - __field( int, type )
1861 + __string( name, regmap_name(map) )
1862 + __string( status, status )
1863 + __string( type, type )
1864 + __field( int, type )
1865 ),
1866
1867 TP_fast_assign(
1868 - __assign_str(name, dev_name(dev));
1869 + __assign_str(name, regmap_name(map));
1870 __assign_str(status, status);
1871 __assign_str(type, type);
1872 ),
1873 @@ -141,17 +140,17 @@ TRACE_EVENT(regcache_sync,
1874
1875 DECLARE_EVENT_CLASS(regmap_bool,
1876
1877 - TP_PROTO(struct device *dev, bool flag),
1878 + TP_PROTO(struct regmap *map, bool flag),
1879
1880 - TP_ARGS(dev, flag),
1881 + TP_ARGS(map, flag),
1882
1883 TP_STRUCT__entry(
1884 - __string( name, dev_name(dev) )
1885 - __field( int, flag )
1886 + __string( name, regmap_name(map) )
1887 + __field( int, flag )
1888 ),
1889
1890 TP_fast_assign(
1891 - __assign_str(name, dev_name(dev));
1892 + __assign_str(name, regmap_name(map));
1893 __entry->flag = flag;
1894 ),
1895
1896 @@ -161,32 +160,32 @@ DECLARE_EVENT_CLASS(regmap_bool,
1897
1898 DEFINE_EVENT(regmap_bool, regmap_cache_only,
1899
1900 - TP_PROTO(struct device *dev, bool flag),
1901 + TP_PROTO(struct regmap *map, bool flag),
1902
1903 - TP_ARGS(dev, flag)
1904 + TP_ARGS(map, flag)
1905
1906 );
1907
1908 DEFINE_EVENT(regmap_bool, regmap_cache_bypass,
1909
1910 - TP_PROTO(struct device *dev, bool flag),
1911 + TP_PROTO(struct regmap *map, bool flag),
1912
1913 - TP_ARGS(dev, flag)
1914 + TP_ARGS(map, flag)
1915
1916 );
1917
1918 DECLARE_EVENT_CLASS(regmap_async,
1919
1920 - TP_PROTO(struct device *dev),
1921 + TP_PROTO(struct regmap *map),
1922
1923 - TP_ARGS(dev),
1924 + TP_ARGS(map),
1925
1926 TP_STRUCT__entry(
1927 - __string( name, dev_name(dev) )
1928 + __string( name, regmap_name(map) )
1929 ),
1930
1931 TP_fast_assign(
1932 - __assign_str(name, dev_name(dev));
1933 + __assign_str(name, regmap_name(map));
1934 ),
1935
1936 TP_printk("%s", __get_str(name))
1937 @@ -194,50 +193,50 @@ DECLARE_EVENT_CLASS(regmap_async,
1938
1939 DEFINE_EVENT(regmap_block, regmap_async_write_start,
1940
1941 - TP_PROTO(struct device *dev, unsigned int reg, int count),
1942 + TP_PROTO(struct regmap *map, unsigned int reg, int count),
1943
1944 - TP_ARGS(dev, reg, count)
1945 + TP_ARGS(map, reg, count)
1946 );
1947
1948 DEFINE_EVENT(regmap_async, regmap_async_io_complete,
1949
1950 - TP_PROTO(struct device *dev),
1951 + TP_PROTO(struct regmap *map),
1952
1953 - TP_ARGS(dev)
1954 + TP_ARGS(map)
1955
1956 );
1957
1958 DEFINE_EVENT(regmap_async, regmap_async_complete_start,
1959
1960 - TP_PROTO(struct device *dev),
1961 + TP_PROTO(struct regmap *map),
1962
1963 - TP_ARGS(dev)
1964 + TP_ARGS(map)
1965
1966 );
1967
1968 DEFINE_EVENT(regmap_async, regmap_async_complete_done,
1969
1970 - TP_PROTO(struct device *dev),
1971 + TP_PROTO(struct regmap *map),
1972
1973 - TP_ARGS(dev)
1974 + TP_ARGS(map)
1975
1976 );
1977
1978 TRACE_EVENT(regcache_drop_region,
1979
1980 - TP_PROTO(struct device *dev, unsigned int from,
1981 + TP_PROTO(struct regmap *map, unsigned int from,
1982 unsigned int to),
1983
1984 - TP_ARGS(dev, from, to),
1985 + TP_ARGS(map, from, to),
1986
1987 TP_STRUCT__entry(
1988 - __string( name, dev_name(dev) )
1989 - __field( unsigned int, from )
1990 - __field( unsigned int, to )
1991 + __string( name, regmap_name(map) )
1992 + __field( unsigned int, from )
1993 + __field( unsigned int, to )
1994 ),
1995
1996 TP_fast_assign(
1997 - __assign_str(name, dev_name(dev));
1998 + __assign_str(name, regmap_name(map));
1999 __entry->from = from;
2000 __entry->to = to;
2001 ),
2002 diff --git a/kernel/events/core.c b/kernel/events/core.c
2003 index 2ab023803945..e631dacdb165 100644
2004 --- a/kernel/events/core.c
2005 +++ b/kernel/events/core.c
2006 @@ -4412,6 +4412,13 @@ static void perf_pending_event(struct irq_work *entry)
2007 {
2008 struct perf_event *event = container_of(entry,
2009 struct perf_event, pending);
2010 + int rctx;
2011 +
2012 + rctx = perf_swevent_get_recursion_context();
2013 + /*
2014 + * If we 'fail' here, that's OK, it means recursion is already disabled
2015 + * and we won't recurse 'further'.
2016 + */
2017
2018 if (event->pending_disable) {
2019 event->pending_disable = 0;
2020 @@ -4422,6 +4429,9 @@ static void perf_pending_event(struct irq_work *entry)
2021 event->pending_wakeup = 0;
2022 perf_event_wakeup(event);
2023 }
2024 +
2025 + if (rctx >= 0)
2026 + perf_swevent_put_recursion_context(rctx);
2027 }
2028
2029 /*
2030 diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c
2031 index 5a62915f47a8..4dae1885db6f 100644
2032 --- a/kernel/sched/wait.c
2033 +++ b/kernel/sched/wait.c
2034 @@ -297,6 +297,67 @@ int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *
2035 }
2036 EXPORT_SYMBOL(autoremove_wake_function);
2037
2038 +
2039 +/*
2040 + * DEFINE_WAIT_FUNC(wait, woken_wake_func);
2041 + *
2042 + * add_wait_queue(&wq, &wait);
2043 + * for (;;) {
2044 + * if (condition)
2045 + * break;
2046 + *
2047 + * p->state = mode; condition = true;
2048 + * smp_mb(); // A smp_wmb(); // C
2049 + * if (!wait->flags & WQ_FLAG_WOKEN) wait->flags |= WQ_FLAG_WOKEN;
2050 + * schedule() try_to_wake_up();
2051 + * p->state = TASK_RUNNING; ~~~~~~~~~~~~~~~~~~
2052 + * wait->flags &= ~WQ_FLAG_WOKEN; condition = true;
2053 + * smp_mb() // B smp_wmb(); // C
2054 + * wait->flags |= WQ_FLAG_WOKEN;
2055 + * }
2056 + * remove_wait_queue(&wq, &wait);
2057 + *
2058 + */
2059 +long wait_woken(wait_queue_t *wait, unsigned mode, long timeout)
2060 +{
2061 + set_current_state(mode); /* A */
2062 + /*
2063 + * The above implies an smp_mb(), which matches with the smp_wmb() from
2064 + * woken_wake_function() such that if we observe WQ_FLAG_WOKEN we must
2065 + * also observe all state before the wakeup.
2066 + */
2067 + if (!(wait->flags & WQ_FLAG_WOKEN))
2068 + timeout = schedule_timeout(timeout);
2069 + __set_current_state(TASK_RUNNING);
2070 +
2071 + /*
2072 + * The below implies an smp_mb(), it too pairs with the smp_wmb() from
2073 + * woken_wake_function() such that we must either observe the wait
2074 + * condition being true _OR_ WQ_FLAG_WOKEN such that we will not miss
2075 + * an event.
2076 + */
2077 + set_mb(wait->flags, wait->flags & ~WQ_FLAG_WOKEN); /* B */
2078 +
2079 + return timeout;
2080 +}
2081 +EXPORT_SYMBOL(wait_woken);
2082 +
2083 +int woken_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key)
2084 +{
2085 + /*
2086 + * Although this function is called under waitqueue lock, LOCK
2087 + * doesn't imply write barrier and the users expects write
2088 + * barrier semantics on wakeup functions. The following
2089 + * smp_wmb() is equivalent to smp_wmb() in try_to_wake_up()
2090 + * and is paired with set_mb() in wait_woken().
2091 + */
2092 + smp_wmb(); /* C */
2093 + wait->flags |= WQ_FLAG_WOKEN;
2094 +
2095 + return default_wake_function(wait, mode, sync, key);
2096 +}
2097 +EXPORT_SYMBOL(woken_wake_function);
2098 +
2099 int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *arg)
2100 {
2101 struct wait_bit_key *key = arg;
2102 diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
2103 index 8d1653caffdb..56a65536c8f1 100644
2104 --- a/net/ceph/messenger.c
2105 +++ b/net/ceph/messenger.c
2106 @@ -484,7 +484,7 @@ static int ceph_tcp_connect(struct ceph_connection *con)
2107 IPPROTO_TCP, &sock);
2108 if (ret)
2109 return ret;
2110 - sock->sk->sk_allocation = GFP_NOFS | __GFP_MEMALLOC;
2111 + sock->sk->sk_allocation = GFP_NOFS;
2112
2113 #ifdef CONFIG_LOCKDEP
2114 lockdep_set_class(&sock->sk->sk_lock, &socket_class);
2115 @@ -510,8 +510,6 @@ static int ceph_tcp_connect(struct ceph_connection *con)
2116 return ret;
2117 }
2118
2119 - sk_set_memalloc(sock->sk);
2120 -
2121 con->sock = sock;
2122 return 0;
2123 }
2124 @@ -2772,11 +2770,8 @@ static void con_work(struct work_struct *work)
2125 {
2126 struct ceph_connection *con = container_of(work, struct ceph_connection,
2127 work.work);
2128 - unsigned long pflags = current->flags;
2129 bool fault;
2130
2131 - current->flags |= PF_MEMALLOC;
2132 -
2133 mutex_lock(&con->mutex);
2134 while (true) {
2135 int ret;
2136 @@ -2830,8 +2825,6 @@ static void con_work(struct work_struct *work)
2137 con_fault_finish(con);
2138
2139 con->ops->put(con);
2140 -
2141 - tsk_restore_flags(current, pflags, PF_MEMALLOC);
2142 }
2143
2144 /*
2145 diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
2146 index 8c68da30595d..91c1aca65ae9 100644
2147 --- a/net/mac80211/ieee80211_i.h
2148 +++ b/net/mac80211/ieee80211_i.h
2149 @@ -58,13 +58,24 @@ struct ieee80211_local;
2150 #define IEEE80211_UNSET_POWER_LEVEL INT_MIN
2151
2152 /*
2153 - * Some APs experience problems when working with U-APSD. Decrease the
2154 - * probability of that happening by using legacy mode for all ACs but VO.
2155 - * The AP that caused us trouble was a Cisco 4410N. It ignores our
2156 - * setting, and always treats non-VO ACs as legacy.
2157 + * Some APs experience problems when working with U-APSD. Decreasing the
2158 + * probability of that happening by using legacy mode for all ACs but VO isn't
2159 + * enough.
2160 + *
2161 + * Cisco 4410N originally forced us to enable VO by default only because it
2162 + * treated non-VO ACs as legacy.
2163 + *
2164 + * However some APs (notably Netgear R7000) silently reclassify packets to
2165 + * different ACs. Since u-APSD ACs require trigger frames for frame retrieval
2166 + * clients would never see some frames (e.g. ARP responses) or would fetch them
2167 + * accidentally after a long time.
2168 + *
2169 + * It makes little sense to enable u-APSD queues by default because it needs
2170 + * userspace applications to be aware of it to actually take advantage of the
2171 + * possible additional powersavings. Implicitly depending on driver autotrigger
2172 + * frame support doesn't make much sense.
2173 */
2174 -#define IEEE80211_DEFAULT_UAPSD_QUEUES \
2175 - IEEE80211_WMM_IE_STA_QOSINFO_AC_VO
2176 +#define IEEE80211_DEFAULT_UAPSD_QUEUES 0
2177
2178 #define IEEE80211_DEFAULT_MAX_SP_LEN \
2179 IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL
2180 diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
2181 index 7d6379bd2cb8..bb77d6d7258a 100644
2182 --- a/net/mac80211/rx.c
2183 +++ b/net/mac80211/rx.c
2184 @@ -2108,6 +2108,9 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
2185 hdr = (struct ieee80211_hdr *) skb->data;
2186 mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen);
2187
2188 + if (ieee80211_drop_unencrypted(rx, hdr->frame_control))
2189 + return RX_DROP_MONITOR;
2190 +
2191 /* frame is in RMC, don't forward */
2192 if (ieee80211_is_data(hdr->frame_control) &&
2193 is_multicast_ether_addr(hdr->addr1) &&
2194 diff --git a/net/mac80211/util.c b/net/mac80211/util.c
2195 index 3c61060a4d2b..0043256df486 100644
2196 --- a/net/mac80211/util.c
2197 +++ b/net/mac80211/util.c
2198 @@ -3050,7 +3050,7 @@ int ieee80211_check_combinations(struct ieee80211_sub_if_data *sdata,
2199 wdev_iter = &sdata_iter->wdev;
2200
2201 if (sdata_iter == sdata ||
2202 - rcu_access_pointer(sdata_iter->vif.chanctx_conf) == NULL ||
2203 + !ieee80211_sdata_running(sdata_iter) ||
2204 local->hw.wiphy->software_iftypes & BIT(wdev_iter->iftype))
2205 continue;
2206
2207 diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
2208 index 213048ad31c7..5fed79cfe45a 100644
2209 --- a/net/wireless/nl80211.c
2210 +++ b/net/wireless/nl80211.c
2211 @@ -4311,6 +4311,16 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
2212 if (parse_station_flags(info, dev->ieee80211_ptr->iftype, &params))
2213 return -EINVAL;
2214
2215 + /* HT/VHT requires QoS, but if we don't have that just ignore HT/VHT
2216 + * as userspace might just pass through the capabilities from the IEs
2217 + * directly, rather than enforcing this restriction and returning an
2218 + * error in this case.
2219 + */
2220 + if (!(params.sta_flags_set & BIT(NL80211_STA_FLAG_WME))) {
2221 + params.ht_capa = NULL;
2222 + params.vht_capa = NULL;
2223 + }
2224 +
2225 /* When you run into this, adjust the code below for the new flag */
2226 BUILD_BUG_ON(NL80211_STA_FLAG_MAX != 7);
2227
2228 diff --git a/sound/soc/codecs/adav80x.c b/sound/soc/codecs/adav80x.c
2229 index ce3cdca9fc62..01ab70a7f59f 100644
2230 --- a/sound/soc/codecs/adav80x.c
2231 +++ b/sound/soc/codecs/adav80x.c
2232 @@ -317,7 +317,7 @@ static int adav80x_put_deemph(struct snd_kcontrol *kcontrol,
2233 {
2234 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2235 struct adav80x *adav80x = snd_soc_codec_get_drvdata(codec);
2236 - unsigned int deemph = ucontrol->value.enumerated.item[0];
2237 + unsigned int deemph = ucontrol->value.integer.value[0];
2238
2239 if (deemph > 1)
2240 return -EINVAL;
2241 @@ -333,7 +333,7 @@ static int adav80x_get_deemph(struct snd_kcontrol *kcontrol,
2242 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2243 struct adav80x *adav80x = snd_soc_codec_get_drvdata(codec);
2244
2245 - ucontrol->value.enumerated.item[0] = adav80x->deemph;
2246 + ucontrol->value.integer.value[0] = adav80x->deemph;
2247 return 0;
2248 };
2249
2250 diff --git a/sound/soc/codecs/ak4641.c b/sound/soc/codecs/ak4641.c
2251 index 7afe8f482088..570ec04fe411 100644
2252 --- a/sound/soc/codecs/ak4641.c
2253 +++ b/sound/soc/codecs/ak4641.c
2254 @@ -76,7 +76,7 @@ static int ak4641_put_deemph(struct snd_kcontrol *kcontrol,
2255 {
2256 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2257 struct ak4641_priv *ak4641 = snd_soc_codec_get_drvdata(codec);
2258 - int deemph = ucontrol->value.enumerated.item[0];
2259 + int deemph = ucontrol->value.integer.value[0];
2260
2261 if (deemph > 1)
2262 return -EINVAL;
2263 @@ -92,7 +92,7 @@ static int ak4641_get_deemph(struct snd_kcontrol *kcontrol,
2264 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2265 struct ak4641_priv *ak4641 = snd_soc_codec_get_drvdata(codec);
2266
2267 - ucontrol->value.enumerated.item[0] = ak4641->deemph;
2268 + ucontrol->value.integer.value[0] = ak4641->deemph;
2269 return 0;
2270 };
2271
2272 diff --git a/sound/soc/codecs/ak4671.c b/sound/soc/codecs/ak4671.c
2273 index 998fa0c5a0b9..61a31802cf79 100644
2274 --- a/sound/soc/codecs/ak4671.c
2275 +++ b/sound/soc/codecs/ak4671.c
2276 @@ -343,25 +343,25 @@ static const struct snd_soc_dapm_widget ak4671_dapm_widgets[] = {
2277 };
2278
2279 static const struct snd_soc_dapm_route ak4671_intercon[] = {
2280 - {"DAC Left", "NULL", "PMPLL"},
2281 - {"DAC Right", "NULL", "PMPLL"},
2282 - {"ADC Left", "NULL", "PMPLL"},
2283 - {"ADC Right", "NULL", "PMPLL"},
2284 + {"DAC Left", NULL, "PMPLL"},
2285 + {"DAC Right", NULL, "PMPLL"},
2286 + {"ADC Left", NULL, "PMPLL"},
2287 + {"ADC Right", NULL, "PMPLL"},
2288
2289 /* Outputs */
2290 - {"LOUT1", "NULL", "LOUT1 Mixer"},
2291 - {"ROUT1", "NULL", "ROUT1 Mixer"},
2292 - {"LOUT2", "NULL", "LOUT2 Mix Amp"},
2293 - {"ROUT2", "NULL", "ROUT2 Mix Amp"},
2294 - {"LOUT3", "NULL", "LOUT3 Mixer"},
2295 - {"ROUT3", "NULL", "ROUT3 Mixer"},
2296 + {"LOUT1", NULL, "LOUT1 Mixer"},
2297 + {"ROUT1", NULL, "ROUT1 Mixer"},
2298 + {"LOUT2", NULL, "LOUT2 Mix Amp"},
2299 + {"ROUT2", NULL, "ROUT2 Mix Amp"},
2300 + {"LOUT3", NULL, "LOUT3 Mixer"},
2301 + {"ROUT3", NULL, "ROUT3 Mixer"},
2302
2303 {"LOUT1 Mixer", "DACL", "DAC Left"},
2304 {"ROUT1 Mixer", "DACR", "DAC Right"},
2305 {"LOUT2 Mixer", "DACHL", "DAC Left"},
2306 {"ROUT2 Mixer", "DACHR", "DAC Right"},
2307 - {"LOUT2 Mix Amp", "NULL", "LOUT2 Mixer"},
2308 - {"ROUT2 Mix Amp", "NULL", "ROUT2 Mixer"},
2309 + {"LOUT2 Mix Amp", NULL, "LOUT2 Mixer"},
2310 + {"ROUT2 Mix Amp", NULL, "ROUT2 Mixer"},
2311 {"LOUT3 Mixer", "DACSL", "DAC Left"},
2312 {"ROUT3 Mixer", "DACSR", "DAC Right"},
2313
2314 @@ -381,18 +381,18 @@ static const struct snd_soc_dapm_route ak4671_intercon[] = {
2315 {"LIN2", NULL, "Mic Bias"},
2316 {"RIN2", NULL, "Mic Bias"},
2317
2318 - {"ADC Left", "NULL", "LIN MUX"},
2319 - {"ADC Right", "NULL", "RIN MUX"},
2320 + {"ADC Left", NULL, "LIN MUX"},
2321 + {"ADC Right", NULL, "RIN MUX"},
2322
2323 /* Analog Loops */
2324 - {"LIN1 Mixing Circuit", "NULL", "LIN1"},
2325 - {"RIN1 Mixing Circuit", "NULL", "RIN1"},
2326 - {"LIN2 Mixing Circuit", "NULL", "LIN2"},
2327 - {"RIN2 Mixing Circuit", "NULL", "RIN2"},
2328 - {"LIN3 Mixing Circuit", "NULL", "LIN3"},
2329 - {"RIN3 Mixing Circuit", "NULL", "RIN3"},
2330 - {"LIN4 Mixing Circuit", "NULL", "LIN4"},
2331 - {"RIN4 Mixing Circuit", "NULL", "RIN4"},
2332 + {"LIN1 Mixing Circuit", NULL, "LIN1"},
2333 + {"RIN1 Mixing Circuit", NULL, "RIN1"},
2334 + {"LIN2 Mixing Circuit", NULL, "LIN2"},
2335 + {"RIN2 Mixing Circuit", NULL, "RIN2"},
2336 + {"LIN3 Mixing Circuit", NULL, "LIN3"},
2337 + {"RIN3 Mixing Circuit", NULL, "RIN3"},
2338 + {"LIN4 Mixing Circuit", NULL, "LIN4"},
2339 + {"RIN4 Mixing Circuit", NULL, "RIN4"},
2340
2341 {"LOUT1 Mixer", "LINL1", "LIN1 Mixing Circuit"},
2342 {"ROUT1 Mixer", "RINR1", "RIN1 Mixing Circuit"},
2343 diff --git a/sound/soc/codecs/cs4271.c b/sound/soc/codecs/cs4271.c
2344 index 93cec52f4733..6ec074fec068 100644
2345 --- a/sound/soc/codecs/cs4271.c
2346 +++ b/sound/soc/codecs/cs4271.c
2347 @@ -287,7 +287,7 @@ static int cs4271_get_deemph(struct snd_kcontrol *kcontrol,
2348 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2349 struct cs4271_private *cs4271 = snd_soc_codec_get_drvdata(codec);
2350
2351 - ucontrol->value.enumerated.item[0] = cs4271->deemph;
2352 + ucontrol->value.integer.value[0] = cs4271->deemph;
2353 return 0;
2354 }
2355
2356 @@ -297,7 +297,7 @@ static int cs4271_put_deemph(struct snd_kcontrol *kcontrol,
2357 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2358 struct cs4271_private *cs4271 = snd_soc_codec_get_drvdata(codec);
2359
2360 - cs4271->deemph = ucontrol->value.enumerated.item[0];
2361 + cs4271->deemph = ucontrol->value.integer.value[0];
2362 return cs4271_set_deemph(codec);
2363 }
2364
2365 diff --git a/sound/soc/codecs/da732x.c b/sound/soc/codecs/da732x.c
2366 index 61b2f9a2eef1..e3110c67f3b2 100644
2367 --- a/sound/soc/codecs/da732x.c
2368 +++ b/sound/soc/codecs/da732x.c
2369 @@ -876,11 +876,11 @@ static const struct snd_soc_dapm_widget da732x_dapm_widgets[] = {
2370
2371 static const struct snd_soc_dapm_route da732x_dapm_routes[] = {
2372 /* Inputs */
2373 - {"AUX1L PGA", "NULL", "AUX1L"},
2374 - {"AUX1R PGA", "NULL", "AUX1R"},
2375 + {"AUX1L PGA", NULL, "AUX1L"},
2376 + {"AUX1R PGA", NULL, "AUX1R"},
2377 {"MIC1 PGA", NULL, "MIC1"},
2378 - {"MIC2 PGA", "NULL", "MIC2"},
2379 - {"MIC3 PGA", "NULL", "MIC3"},
2380 + {"MIC2 PGA", NULL, "MIC2"},
2381 + {"MIC3 PGA", NULL, "MIC3"},
2382
2383 /* Capture Path */
2384 {"ADC1 Left MUX", "MIC1", "MIC1 PGA"},
2385 diff --git a/sound/soc/codecs/es8328.c b/sound/soc/codecs/es8328.c
2386 index f27325155ace..c5f35a07e8e4 100644
2387 --- a/sound/soc/codecs/es8328.c
2388 +++ b/sound/soc/codecs/es8328.c
2389 @@ -120,7 +120,7 @@ static int es8328_get_deemph(struct snd_kcontrol *kcontrol,
2390 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2391 struct es8328_priv *es8328 = snd_soc_codec_get_drvdata(codec);
2392
2393 - ucontrol->value.enumerated.item[0] = es8328->deemph;
2394 + ucontrol->value.integer.value[0] = es8328->deemph;
2395 return 0;
2396 }
2397
2398 @@ -129,7 +129,7 @@ static int es8328_put_deemph(struct snd_kcontrol *kcontrol,
2399 {
2400 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2401 struct es8328_priv *es8328 = snd_soc_codec_get_drvdata(codec);
2402 - int deemph = ucontrol->value.enumerated.item[0];
2403 + int deemph = ucontrol->value.integer.value[0];
2404 int ret;
2405
2406 if (deemph > 1)
2407 diff --git a/sound/soc/codecs/pcm1681.c b/sound/soc/codecs/pcm1681.c
2408 index a722a023c262..477e13d30971 100644
2409 --- a/sound/soc/codecs/pcm1681.c
2410 +++ b/sound/soc/codecs/pcm1681.c
2411 @@ -118,7 +118,7 @@ static int pcm1681_get_deemph(struct snd_kcontrol *kcontrol,
2412 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2413 struct pcm1681_private *priv = snd_soc_codec_get_drvdata(codec);
2414
2415 - ucontrol->value.enumerated.item[0] = priv->deemph;
2416 + ucontrol->value.integer.value[0] = priv->deemph;
2417
2418 return 0;
2419 }
2420 @@ -129,7 +129,7 @@ static int pcm1681_put_deemph(struct snd_kcontrol *kcontrol,
2421 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2422 struct pcm1681_private *priv = snd_soc_codec_get_drvdata(codec);
2423
2424 - priv->deemph = ucontrol->value.enumerated.item[0];
2425 + priv->deemph = ucontrol->value.integer.value[0];
2426
2427 return pcm1681_set_deemph(codec);
2428 }
2429 diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
2430 index f1287ff8dd29..7de7431efcb3 100644
2431 --- a/sound/soc/codecs/sgtl5000.c
2432 +++ b/sound/soc/codecs/sgtl5000.c
2433 @@ -1136,13 +1136,7 @@ static int sgtl5000_set_power_regs(struct snd_soc_codec *codec)
2434 /* Enable VDDC charge pump */
2435 ana_pwr |= SGTL5000_VDDC_CHRGPMP_POWERUP;
2436 } else if (vddio >= 3100 && vdda >= 3100) {
2437 - /*
2438 - * if vddio and vddd > 3.1v,
2439 - * charge pump should be clean before set ana_pwr
2440 - */
2441 - snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
2442 - SGTL5000_VDDC_CHRGPMP_POWERUP, 0);
2443 -
2444 + ana_pwr &= ~SGTL5000_VDDC_CHRGPMP_POWERUP;
2445 /* VDDC use VDDIO rail */
2446 lreg_ctrl |= SGTL5000_VDDC_ASSN_OVRD;
2447 lreg_ctrl |= SGTL5000_VDDC_MAN_ASSN_VDDIO <<
2448 diff --git a/sound/soc/codecs/sn95031.c b/sound/soc/codecs/sn95031.c
2449 index cf8fa40662f0..01af05172452 100644
2450 --- a/sound/soc/codecs/sn95031.c
2451 +++ b/sound/soc/codecs/sn95031.c
2452 @@ -531,8 +531,8 @@ static const struct snd_soc_dapm_route sn95031_audio_map[] = {
2453 /* speaker map */
2454 { "IHFOUTL", NULL, "Speaker Rail"},
2455 { "IHFOUTR", NULL, "Speaker Rail"},
2456 - { "IHFOUTL", "NULL", "Speaker Left Playback"},
2457 - { "IHFOUTR", "NULL", "Speaker Right Playback"},
2458 + { "IHFOUTL", NULL, "Speaker Left Playback"},
2459 + { "IHFOUTR", NULL, "Speaker Right Playback"},
2460 { "Speaker Left Playback", NULL, "Speaker Left Filter"},
2461 { "Speaker Right Playback", NULL, "Speaker Right Filter"},
2462 { "Speaker Left Filter", NULL, "IHFDAC Left"},
2463 diff --git a/sound/soc/codecs/tas5086.c b/sound/soc/codecs/tas5086.c
2464 index 249ef5c4c762..32942bed34b1 100644
2465 --- a/sound/soc/codecs/tas5086.c
2466 +++ b/sound/soc/codecs/tas5086.c
2467 @@ -281,7 +281,7 @@ static int tas5086_get_deemph(struct snd_kcontrol *kcontrol,
2468 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2469 struct tas5086_private *priv = snd_soc_codec_get_drvdata(codec);
2470
2471 - ucontrol->value.enumerated.item[0] = priv->deemph;
2472 + ucontrol->value.integer.value[0] = priv->deemph;
2473
2474 return 0;
2475 }
2476 @@ -292,7 +292,7 @@ static int tas5086_put_deemph(struct snd_kcontrol *kcontrol,
2477 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2478 struct tas5086_private *priv = snd_soc_codec_get_drvdata(codec);
2479
2480 - priv->deemph = ucontrol->value.enumerated.item[0];
2481 + priv->deemph = ucontrol->value.integer.value[0];
2482
2483 return tas5086_set_deemph(codec);
2484 }
2485 diff --git a/sound/soc/codecs/wm2000.c b/sound/soc/codecs/wm2000.c
2486 index 34ef65c52a7d..8eeab47a4235 100644
2487 --- a/sound/soc/codecs/wm2000.c
2488 +++ b/sound/soc/codecs/wm2000.c
2489 @@ -610,7 +610,7 @@ static int wm2000_anc_mode_get(struct snd_kcontrol *kcontrol,
2490 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2491 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev);
2492
2493 - ucontrol->value.enumerated.item[0] = wm2000->anc_active;
2494 + ucontrol->value.integer.value[0] = wm2000->anc_active;
2495
2496 return 0;
2497 }
2498 @@ -620,7 +620,7 @@ static int wm2000_anc_mode_put(struct snd_kcontrol *kcontrol,
2499 {
2500 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2501 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev);
2502 - int anc_active = ucontrol->value.enumerated.item[0];
2503 + int anc_active = ucontrol->value.integer.value[0];
2504 int ret;
2505
2506 if (anc_active > 1)
2507 @@ -643,7 +643,7 @@ static int wm2000_speaker_get(struct snd_kcontrol *kcontrol,
2508 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2509 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev);
2510
2511 - ucontrol->value.enumerated.item[0] = wm2000->spk_ena;
2512 + ucontrol->value.integer.value[0] = wm2000->spk_ena;
2513
2514 return 0;
2515 }
2516 @@ -653,7 +653,7 @@ static int wm2000_speaker_put(struct snd_kcontrol *kcontrol,
2517 {
2518 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2519 struct wm2000_priv *wm2000 = dev_get_drvdata(codec->dev);
2520 - int val = ucontrol->value.enumerated.item[0];
2521 + int val = ucontrol->value.integer.value[0];
2522 int ret;
2523
2524 if (val > 1)
2525 diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c
2526 index eebb3280bfad..19a53dca3433 100644
2527 --- a/sound/soc/codecs/wm8731.c
2528 +++ b/sound/soc/codecs/wm8731.c
2529 @@ -122,7 +122,7 @@ static int wm8731_get_deemph(struct snd_kcontrol *kcontrol,
2530 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2531 struct wm8731_priv *wm8731 = snd_soc_codec_get_drvdata(codec);
2532
2533 - ucontrol->value.enumerated.item[0] = wm8731->deemph;
2534 + ucontrol->value.integer.value[0] = wm8731->deemph;
2535
2536 return 0;
2537 }
2538 @@ -132,7 +132,7 @@ static int wm8731_put_deemph(struct snd_kcontrol *kcontrol,
2539 {
2540 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2541 struct wm8731_priv *wm8731 = snd_soc_codec_get_drvdata(codec);
2542 - int deemph = ucontrol->value.enumerated.item[0];
2543 + int deemph = ucontrol->value.integer.value[0];
2544 int ret = 0;
2545
2546 if (deemph > 1)
2547 diff --git a/sound/soc/codecs/wm8903.c b/sound/soc/codecs/wm8903.c
2548 index c038b3e04398..5b758756dd80 100644
2549 --- a/sound/soc/codecs/wm8903.c
2550 +++ b/sound/soc/codecs/wm8903.c
2551 @@ -441,7 +441,7 @@ static int wm8903_get_deemph(struct snd_kcontrol *kcontrol,
2552 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2553 struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
2554
2555 - ucontrol->value.enumerated.item[0] = wm8903->deemph;
2556 + ucontrol->value.integer.value[0] = wm8903->deemph;
2557
2558 return 0;
2559 }
2560 @@ -451,7 +451,7 @@ static int wm8903_put_deemph(struct snd_kcontrol *kcontrol,
2561 {
2562 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2563 struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
2564 - int deemph = ucontrol->value.enumerated.item[0];
2565 + int deemph = ucontrol->value.integer.value[0];
2566 int ret = 0;
2567
2568 if (deemph > 1)
2569 diff --git a/sound/soc/codecs/wm8904.c b/sound/soc/codecs/wm8904.c
2570 index 4d2d2b1380d5..af2446f16cdd 100644
2571 --- a/sound/soc/codecs/wm8904.c
2572 +++ b/sound/soc/codecs/wm8904.c
2573 @@ -525,7 +525,7 @@ static int wm8904_get_deemph(struct snd_kcontrol *kcontrol,
2574 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2575 struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
2576
2577 - ucontrol->value.enumerated.item[0] = wm8904->deemph;
2578 + ucontrol->value.integer.value[0] = wm8904->deemph;
2579 return 0;
2580 }
2581
2582 @@ -534,7 +534,7 @@ static int wm8904_put_deemph(struct snd_kcontrol *kcontrol,
2583 {
2584 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2585 struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
2586 - int deemph = ucontrol->value.enumerated.item[0];
2587 + int deemph = ucontrol->value.integer.value[0];
2588
2589 if (deemph > 1)
2590 return -EINVAL;
2591 diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c
2592 index 09d91d9dc4ee..7d0b01bcab4b 100644
2593 --- a/sound/soc/codecs/wm8955.c
2594 +++ b/sound/soc/codecs/wm8955.c
2595 @@ -393,7 +393,7 @@ static int wm8955_get_deemph(struct snd_kcontrol *kcontrol,
2596 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2597 struct wm8955_priv *wm8955 = snd_soc_codec_get_drvdata(codec);
2598
2599 - ucontrol->value.enumerated.item[0] = wm8955->deemph;
2600 + ucontrol->value.integer.value[0] = wm8955->deemph;
2601 return 0;
2602 }
2603
2604 @@ -402,7 +402,7 @@ static int wm8955_put_deemph(struct snd_kcontrol *kcontrol,
2605 {
2606 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2607 struct wm8955_priv *wm8955 = snd_soc_codec_get_drvdata(codec);
2608 - int deemph = ucontrol->value.enumerated.item[0];
2609 + int deemph = ucontrol->value.integer.value[0];
2610
2611 if (deemph > 1)
2612 return -EINVAL;
2613 diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
2614 index 641f940c138d..ab9931c280b2 100644
2615 --- a/sound/soc/codecs/wm8960.c
2616 +++ b/sound/soc/codecs/wm8960.c
2617 @@ -181,7 +181,7 @@ static int wm8960_get_deemph(struct snd_kcontrol *kcontrol,
2618 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2619 struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
2620
2621 - ucontrol->value.enumerated.item[0] = wm8960->deemph;
2622 + ucontrol->value.integer.value[0] = wm8960->deemph;
2623 return 0;
2624 }
2625
2626 @@ -190,7 +190,7 @@ static int wm8960_put_deemph(struct snd_kcontrol *kcontrol,
2627 {
2628 struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
2629 struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
2630 - int deemph = ucontrol->value.enumerated.item[0];
2631 + int deemph = ucontrol->value.integer.value[0];
2632
2633 if (deemph > 1)
2634 return -EINVAL;