Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.2/0109-3.2.10-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1704 - (hide annotations) (download)
Fri Mar 16 08:52:00 2012 UTC (12 years, 2 months ago) by niro
File size: 157241 byte(s)
-updated to linux-3.2.11
1 niro 1704 diff --git a/Documentation/hwmon/jc42 b/Documentation/hwmon/jc42
2     index a22ecf4..52729a7 100644
3     --- a/Documentation/hwmon/jc42
4     +++ b/Documentation/hwmon/jc42
5     @@ -7,21 +7,29 @@ Supported chips:
6     Addresses scanned: I2C 0x18 - 0x1f
7     Datasheets:
8     http://www.analog.com/static/imported-files/data_sheets/ADT7408.pdf
9     - * IDT TSE2002B3, TS3000B3
10     - Prefix: 'tse2002b3', 'ts3000b3'
11     + * Atmel AT30TS00
12     + Prefix: 'at30ts00'
13     Addresses scanned: I2C 0x18 - 0x1f
14     Datasheets:
15     - http://www.idt.com/products/getdoc.cfm?docid=18715691
16     - http://www.idt.com/products/getdoc.cfm?docid=18715692
17     + http://www.atmel.com/Images/doc8585.pdf
18     + * IDT TSE2002B3, TSE2002GB2, TS3000B3, TS3000GB2
19     + Prefix: 'tse2002', 'ts3000'
20     + Addresses scanned: I2C 0x18 - 0x1f
21     + Datasheets:
22     + http://www.idt.com/sites/default/files/documents/IDT_TSE2002B3C_DST_20100512_120303152056.pdf
23     + http://www.idt.com/sites/default/files/documents/IDT_TSE2002GB2A1_DST_20111107_120303145914.pdf
24     + http://www.idt.com/sites/default/files/documents/IDT_TS3000B3A_DST_20101129_120303152013.pdf
25     + http://www.idt.com/sites/default/files/documents/IDT_TS3000GB2A1_DST_20111104_120303151012.pdf
26     * Maxim MAX6604
27     Prefix: 'max6604'
28     Addresses scanned: I2C 0x18 - 0x1f
29     Datasheets:
30     http://datasheets.maxim-ic.com/en/ds/MAX6604.pdf
31     - * Microchip MCP9805, MCP98242, MCP98243, MCP9843
32     - Prefixes: 'mcp9805', 'mcp98242', 'mcp98243', 'mcp9843'
33     + * Microchip MCP9804, MCP9805, MCP98242, MCP98243, MCP9843
34     + Prefixes: 'mcp9804', 'mcp9805', 'mcp98242', 'mcp98243', 'mcp9843'
35     Addresses scanned: I2C 0x18 - 0x1f
36     Datasheets:
37     + http://ww1.microchip.com/downloads/en/DeviceDoc/22203C.pdf
38     http://ww1.microchip.com/downloads/en/DeviceDoc/21977b.pdf
39     http://ww1.microchip.com/downloads/en/DeviceDoc/21996a.pdf
40     http://ww1.microchip.com/downloads/en/DeviceDoc/22153c.pdf
41     @@ -48,6 +56,12 @@ Supported chips:
42     Datasheets:
43     http://www.st.com/stonline/products/literature/ds/13447/stts424.pdf
44     http://www.st.com/stonline/products/literature/ds/13448/stts424e02.pdf
45     + * ST Microelectronics STTS2002, STTS3000
46     + Prefix: 'stts2002', 'stts3000'
47     + Addresses scanned: I2C 0x18 - 0x1f
48     + Datasheets:
49     + http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00225278.pdf
50     + http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATA_BRIEF/CD00270920.pdf
51     * JEDEC JC 42.4 compliant temperature sensor chips
52     Prefix: 'jc42'
53     Addresses scanned: I2C 0x18 - 0x1f
54     diff --git a/arch/alpha/include/asm/futex.h b/arch/alpha/include/asm/futex.h
55     index e8a761a..f939794 100644
56     --- a/arch/alpha/include/asm/futex.h
57     +++ b/arch/alpha/include/asm/futex.h
58     @@ -108,7 +108,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
59     " lda $31,3b-2b(%0)\n"
60     " .previous\n"
61     : "+r"(ret), "=&r"(prev), "=&r"(cmp)
62     - : "r"(uaddr), "r"((long)oldval), "r"(newval)
63     + : "r"(uaddr), "r"((long)(int)oldval), "r"(newval)
64     : "memory");
65    
66     *uval = prev;
67     diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
68     index b259c7c..ab3740e 100644
69     --- a/arch/arm/Kconfig
70     +++ b/arch/arm/Kconfig
71     @@ -1272,7 +1272,7 @@ config ARM_ERRATA_743622
72     depends on CPU_V7
73     help
74     This option enables the workaround for the 743622 Cortex-A9
75     - (r2p0..r2p2) erratum. Under very rare conditions, a faulty
76     + (r2p*) erratum. Under very rare conditions, a faulty
77     optimisation in the Cortex-A9 Store Buffer may lead to data
78     corruption. This workaround sets a specific bit in the diagnostic
79     register of the Cortex-A9 which disables the Store Buffer
80     diff --git a/arch/arm/include/asm/pmu.h b/arch/arm/include/asm/pmu.h
81     index 0bda22c..665ef2c 100644
82     --- a/arch/arm/include/asm/pmu.h
83     +++ b/arch/arm/include/asm/pmu.h
84     @@ -125,7 +125,7 @@ int __init armpmu_register(struct arm_pmu *armpmu, char *name, int type);
85    
86     u64 armpmu_event_update(struct perf_event *event,
87     struct hw_perf_event *hwc,
88     - int idx, int overflow);
89     + int idx);
90    
91     int armpmu_event_set_period(struct perf_event *event,
92     struct hw_perf_event *hwc,
93     diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c
94     index 88b0941..ecebb89 100644
95     --- a/arch/arm/kernel/perf_event.c
96     +++ b/arch/arm/kernel/perf_event.c
97     @@ -187,7 +187,7 @@ armpmu_event_set_period(struct perf_event *event,
98     u64
99     armpmu_event_update(struct perf_event *event,
100     struct hw_perf_event *hwc,
101     - int idx, int overflow)
102     + int idx)
103     {
104     struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
105     u64 delta, prev_raw_count, new_raw_count;
106     @@ -200,13 +200,7 @@ again:
107     new_raw_count) != prev_raw_count)
108     goto again;
109    
110     - new_raw_count &= armpmu->max_period;
111     - prev_raw_count &= armpmu->max_period;
112     -
113     - if (overflow)
114     - delta = armpmu->max_period - prev_raw_count + new_raw_count + 1;
115     - else
116     - delta = new_raw_count - prev_raw_count;
117     + delta = (new_raw_count - prev_raw_count) & armpmu->max_period;
118    
119     local64_add(delta, &event->count);
120     local64_sub(delta, &hwc->period_left);
121     @@ -223,7 +217,7 @@ armpmu_read(struct perf_event *event)
122     if (hwc->idx < 0)
123     return;
124    
125     - armpmu_event_update(event, hwc, hwc->idx, 0);
126     + armpmu_event_update(event, hwc, hwc->idx);
127     }
128    
129     static void
130     @@ -239,7 +233,7 @@ armpmu_stop(struct perf_event *event, int flags)
131     if (!(hwc->state & PERF_HES_STOPPED)) {
132     armpmu->disable(hwc, hwc->idx);
133     barrier(); /* why? */
134     - armpmu_event_update(event, hwc, hwc->idx, 0);
135     + armpmu_event_update(event, hwc, hwc->idx);
136     hwc->state |= PERF_HES_STOPPED | PERF_HES_UPTODATE;
137     }
138     }
139     @@ -519,7 +513,13 @@ __hw_perf_event_init(struct perf_event *event)
140     hwc->config_base |= (unsigned long)mapping;
141    
142     if (!hwc->sample_period) {
143     - hwc->sample_period = armpmu->max_period;
144     + /*
145     + * For non-sampling runs, limit the sample_period to half
146     + * of the counter width. That way, the new counter value
147     + * is far less likely to overtake the previous one unless
148     + * you have some serious IRQ latency issues.
149     + */
150     + hwc->sample_period = armpmu->max_period >> 1;
151     hwc->last_period = hwc->sample_period;
152     local64_set(&hwc->period_left, hwc->sample_period);
153     }
154     diff --git a/arch/arm/kernel/perf_event_v6.c b/arch/arm/kernel/perf_event_v6.c
155     index e63d811..0ad3c6f 100644
156     --- a/arch/arm/kernel/perf_event_v6.c
157     +++ b/arch/arm/kernel/perf_event_v6.c
158     @@ -463,23 +463,6 @@ armv6pmu_enable_event(struct hw_perf_event *hwc,
159     raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
160     }
161    
162     -static int counter_is_active(unsigned long pmcr, int idx)
163     -{
164     - unsigned long mask = 0;
165     - if (idx == ARMV6_CYCLE_COUNTER)
166     - mask = ARMV6_PMCR_CCOUNT_IEN;
167     - else if (idx == ARMV6_COUNTER0)
168     - mask = ARMV6_PMCR_COUNT0_IEN;
169     - else if (idx == ARMV6_COUNTER1)
170     - mask = ARMV6_PMCR_COUNT1_IEN;
171     -
172     - if (mask)
173     - return pmcr & mask;
174     -
175     - WARN_ONCE(1, "invalid counter number (%d)\n", idx);
176     - return 0;
177     -}
178     -
179     static irqreturn_t
180     armv6pmu_handle_irq(int irq_num,
181     void *dev)
182     @@ -509,7 +492,8 @@ armv6pmu_handle_irq(int irq_num,
183     struct perf_event *event = cpuc->events[idx];
184     struct hw_perf_event *hwc;
185    
186     - if (!counter_is_active(pmcr, idx))
187     + /* Ignore if we don't have an event. */
188     + if (!event)
189     continue;
190    
191     /*
192     @@ -520,7 +504,7 @@ armv6pmu_handle_irq(int irq_num,
193     continue;
194    
195     hwc = &event->hw;
196     - armpmu_event_update(event, hwc, idx, 1);
197     + armpmu_event_update(event, hwc, idx);
198     data.period = event->hw.last_period;
199     if (!armpmu_event_set_period(event, hwc, idx))
200     continue;
201     diff --git a/arch/arm/kernel/perf_event_v7.c b/arch/arm/kernel/perf_event_v7.c
202     index 1ef6d00..1049319 100644
203     --- a/arch/arm/kernel/perf_event_v7.c
204     +++ b/arch/arm/kernel/perf_event_v7.c
205     @@ -878,6 +878,11 @@ static inline int armv7_pmnc_disable_intens(int idx)
206    
207     counter = ARMV7_IDX_TO_COUNTER(idx);
208     asm volatile("mcr p15, 0, %0, c9, c14, 2" : : "r" (BIT(counter)));
209     + isb();
210     + /* Clear the overflow flag in case an interrupt is pending. */
211     + asm volatile("mcr p15, 0, %0, c9, c12, 3" : : "r" (BIT(counter)));
212     + isb();
213     +
214     return idx;
215     }
216    
217     @@ -1024,6 +1029,10 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev)
218     struct perf_event *event = cpuc->events[idx];
219     struct hw_perf_event *hwc;
220    
221     + /* Ignore if we don't have an event. */
222     + if (!event)
223     + continue;
224     +
225     /*
226     * We have a single interrupt for all counters. Check that
227     * each counter has overflowed before we process it.
228     @@ -1032,7 +1041,7 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev)
229     continue;
230    
231     hwc = &event->hw;
232     - armpmu_event_update(event, hwc, idx, 1);
233     + armpmu_event_update(event, hwc, idx);
234     data.period = event->hw.last_period;
235     if (!armpmu_event_set_period(event, hwc, idx))
236     continue;
237     diff --git a/arch/arm/kernel/perf_event_xscale.c b/arch/arm/kernel/perf_event_xscale.c
238     index e0cca10..9fc2c95 100644
239     --- a/arch/arm/kernel/perf_event_xscale.c
240     +++ b/arch/arm/kernel/perf_event_xscale.c
241     @@ -253,11 +253,14 @@ xscale1pmu_handle_irq(int irq_num, void *dev)
242     struct perf_event *event = cpuc->events[idx];
243     struct hw_perf_event *hwc;
244    
245     + if (!event)
246     + continue;
247     +
248     if (!xscale1_pmnc_counter_has_overflowed(pmnc, idx))
249     continue;
250    
251     hwc = &event->hw;
252     - armpmu_event_update(event, hwc, idx, 1);
253     + armpmu_event_update(event, hwc, idx);
254     data.period = event->hw.last_period;
255     if (!armpmu_event_set_period(event, hwc, idx))
256     continue;
257     @@ -590,11 +593,14 @@ xscale2pmu_handle_irq(int irq_num, void *dev)
258     struct perf_event *event = cpuc->events[idx];
259     struct hw_perf_event *hwc;
260    
261     - if (!xscale2_pmnc_counter_has_overflowed(pmnc, idx))
262     + if (!event)
263     + continue;
264     +
265     + if (!xscale2_pmnc_counter_has_overflowed(of_flags, idx))
266     continue;
267    
268     hwc = &event->hw;
269     - armpmu_event_update(event, hwc, idx, 1);
270     + armpmu_event_update(event, hwc, idx);
271     data.period = event->hw.last_period;
272     if (!armpmu_event_set_period(event, hwc, idx))
273     continue;
274     @@ -661,7 +667,7 @@ xscale2pmu_enable_event(struct hw_perf_event *hwc, int idx)
275     static void
276     xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx)
277     {
278     - unsigned long flags, ien, evtsel;
279     + unsigned long flags, ien, evtsel, of_flags;
280     struct pmu_hw_events *events = cpu_pmu->get_hw_events();
281    
282     ien = xscale2pmu_read_int_enable();
283     @@ -670,26 +676,31 @@ xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx)
284     switch (idx) {
285     case XSCALE_CYCLE_COUNTER:
286     ien &= ~XSCALE2_CCOUNT_INT_EN;
287     + of_flags = XSCALE2_CCOUNT_OVERFLOW;
288     break;
289     case XSCALE_COUNTER0:
290     ien &= ~XSCALE2_COUNT0_INT_EN;
291     evtsel &= ~XSCALE2_COUNT0_EVT_MASK;
292     evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT0_EVT_SHFT;
293     + of_flags = XSCALE2_COUNT0_OVERFLOW;
294     break;
295     case XSCALE_COUNTER1:
296     ien &= ~XSCALE2_COUNT1_INT_EN;
297     evtsel &= ~XSCALE2_COUNT1_EVT_MASK;
298     evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT1_EVT_SHFT;
299     + of_flags = XSCALE2_COUNT1_OVERFLOW;
300     break;
301     case XSCALE_COUNTER2:
302     ien &= ~XSCALE2_COUNT2_INT_EN;
303     evtsel &= ~XSCALE2_COUNT2_EVT_MASK;
304     evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT2_EVT_SHFT;
305     + of_flags = XSCALE2_COUNT2_OVERFLOW;
306     break;
307     case XSCALE_COUNTER3:
308     ien &= ~XSCALE2_COUNT3_INT_EN;
309     evtsel &= ~XSCALE2_COUNT3_EVT_MASK;
310     evtsel |= XSCALE_PERFCTR_UNUSED << XSCALE2_COUNT3_EVT_SHFT;
311     + of_flags = XSCALE2_COUNT3_OVERFLOW;
312     break;
313     default:
314     WARN_ONCE(1, "invalid counter number (%d)\n", idx);
315     @@ -699,6 +710,7 @@ xscale2pmu_disable_event(struct hw_perf_event *hwc, int idx)
316     raw_spin_lock_irqsave(&events->pmu_lock, flags);
317     xscale2pmu_write_event_select(evtsel);
318     xscale2pmu_write_int_enable(ien);
319     + xscale2pmu_write_overflow_flags(of_flags);
320     raw_spin_unlock_irqrestore(&events->pmu_lock, flags);
321     }
322    
323     diff --git a/arch/arm/mach-dove/common.c b/arch/arm/mach-dove/common.c
324     index a9e0dae..1620b15 100644
325     --- a/arch/arm/mach-dove/common.c
326     +++ b/arch/arm/mach-dove/common.c
327     @@ -29,6 +29,7 @@
328     #include <asm/mach/arch.h>
329     #include <linux/irq.h>
330     #include <plat/time.h>
331     +#include <plat/ehci-orion.h>
332     #include <plat/common.h>
333     #include "common.h"
334    
335     @@ -72,7 +73,7 @@ void __init dove_map_io(void)
336     void __init dove_ehci0_init(void)
337     {
338     orion_ehci_init(&dove_mbus_dram_info,
339     - DOVE_USB0_PHYS_BASE, IRQ_DOVE_USB0);
340     + DOVE_USB0_PHYS_BASE, IRQ_DOVE_USB0, EHCI_PHY_NA);
341     }
342    
343     /*****************************************************************************
344     diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c
345     index f3248cf..c5dbbb3 100644
346     --- a/arch/arm/mach-kirkwood/common.c
347     +++ b/arch/arm/mach-kirkwood/common.c
348     @@ -28,6 +28,7 @@
349     #include <plat/cache-feroceon-l2.h>
350     #include <plat/mvsdio.h>
351     #include <plat/orion_nand.h>
352     +#include <plat/ehci-orion.h>
353     #include <plat/common.h>
354     #include <plat/time.h>
355     #include "common.h"
356     @@ -74,7 +75,7 @@ void __init kirkwood_ehci_init(void)
357     {
358     kirkwood_clk_ctrl |= CGC_USB0;
359     orion_ehci_init(&kirkwood_mbus_dram_info,
360     - USB_PHYS_BASE, IRQ_KIRKWOOD_USB);
361     + USB_PHYS_BASE, IRQ_KIRKWOOD_USB, EHCI_PHY_NA);
362     }
363    
364    
365     diff --git a/arch/arm/mach-kirkwood/mpp.h b/arch/arm/mach-kirkwood/mpp.h
366     index ac78795..7afccf4 100644
367     --- a/arch/arm/mach-kirkwood/mpp.h
368     +++ b/arch/arm/mach-kirkwood/mpp.h
369     @@ -31,313 +31,313 @@
370     #define MPP_F6282_MASK MPP( 0, 0x0, 0, 0, 0, 0, 0, 0, 1 )
371    
372     #define MPP0_GPIO MPP( 0, 0x0, 1, 1, 1, 1, 1, 1, 1 )
373     -#define MPP0_NF_IO2 MPP( 0, 0x1, 1, 1, 1, 1, 1, 1, 1 )
374     -#define MPP0_SPI_SCn MPP( 0, 0x2, 0, 1, 1, 1, 1, 1, 1 )
375     +#define MPP0_NF_IO2 MPP( 0, 0x1, 0, 0, 1, 1, 1, 1, 1 )
376     +#define MPP0_SPI_SCn MPP( 0, 0x2, 0, 0, 1, 1, 1, 1, 1 )
377    
378     #define MPP1_GPO MPP( 1, 0x0, 0, 1, 1, 1, 1, 1, 1 )
379     -#define MPP1_NF_IO3 MPP( 1, 0x1, 1, 1, 1, 1, 1, 1, 1 )
380     -#define MPP1_SPI_MOSI MPP( 1, 0x2, 0, 1, 1, 1, 1, 1, 1 )
381     +#define MPP1_NF_IO3 MPP( 1, 0x1, 0, 0, 1, 1, 1, 1, 1 )
382     +#define MPP1_SPI_MOSI MPP( 1, 0x2, 0, 0, 1, 1, 1, 1, 1 )
383    
384     #define MPP2_GPO MPP( 2, 0x0, 0, 1, 1, 1, 1, 1, 1 )
385     -#define MPP2_NF_IO4 MPP( 2, 0x1, 1, 1, 1, 1, 1, 1, 1 )
386     -#define MPP2_SPI_SCK MPP( 2, 0x2, 0, 1, 1, 1, 1, 1, 1 )
387     +#define MPP2_NF_IO4 MPP( 2, 0x1, 0, 0, 1, 1, 1, 1, 1 )
388     +#define MPP2_SPI_SCK MPP( 2, 0x2, 0, 0, 1, 1, 1, 1, 1 )
389    
390     #define MPP3_GPO MPP( 3, 0x0, 0, 1, 1, 1, 1, 1, 1 )
391     -#define MPP3_NF_IO5 MPP( 3, 0x1, 1, 1, 1, 1, 1, 1, 1 )
392     -#define MPP3_SPI_MISO MPP( 3, 0x2, 1, 0, 1, 1, 1, 1, 1 )
393     +#define MPP3_NF_IO5 MPP( 3, 0x1, 0, 0, 1, 1, 1, 1, 1 )
394     +#define MPP3_SPI_MISO MPP( 3, 0x2, 0, 0, 1, 1, 1, 1, 1 )
395    
396     #define MPP4_GPIO MPP( 4, 0x0, 1, 1, 1, 1, 1, 1, 1 )
397     -#define MPP4_NF_IO6 MPP( 4, 0x1, 1, 1, 1, 1, 1, 1, 1 )
398     -#define MPP4_UART0_RXD MPP( 4, 0x2, 1, 0, 1, 1, 1, 1, 1 )
399     -#define MPP4_SATA1_ACTn MPP( 4, 0x5, 0, 1, 0, 0, 1, 1, 1 )
400     +#define MPP4_NF_IO6 MPP( 4, 0x1, 0, 0, 1, 1, 1, 1, 1 )
401     +#define MPP4_UART0_RXD MPP( 4, 0x2, 0, 0, 1, 1, 1, 1, 1 )
402     +#define MPP4_SATA1_ACTn MPP( 4, 0x5, 0, 0, 0, 0, 1, 1, 1 )
403     #define MPP4_LCD_VGA_HSYNC MPP( 4, 0xb, 0, 0, 0, 0, 0, 0, 1 )
404     -#define MPP4_PTP_CLK MPP( 4, 0xd, 1, 0, 1, 1, 1, 1, 0 )
405     +#define MPP4_PTP_CLK MPP( 4, 0xd, 0, 0, 1, 1, 1, 1, 0 )
406    
407     #define MPP5_GPO MPP( 5, 0x0, 0, 1, 1, 1, 1, 1, 1 )
408     -#define MPP5_NF_IO7 MPP( 5, 0x1, 1, 1, 1, 1, 1, 1, 1 )
409     -#define MPP5_UART0_TXD MPP( 5, 0x2, 0, 1, 1, 1, 1, 1, 1 )
410     -#define MPP5_PTP_TRIG_GEN MPP( 5, 0x4, 0, 1, 1, 1, 1, 1, 0 )
411     -#define MPP5_SATA0_ACTn MPP( 5, 0x5, 0, 1, 0, 1, 1, 1, 1 )
412     +#define MPP5_NF_IO7 MPP( 5, 0x1, 0, 0, 1, 1, 1, 1, 1 )
413     +#define MPP5_UART0_TXD MPP( 5, 0x2, 0, 0, 1, 1, 1, 1, 1 )
414     +#define MPP5_PTP_TRIG_GEN MPP( 5, 0x4, 0, 0, 1, 1, 1, 1, 0 )
415     +#define MPP5_SATA0_ACTn MPP( 5, 0x5, 0, 0, 0, 1, 1, 1, 1 )
416     #define MPP5_LCD_VGA_VSYNC MPP( 5, 0xb, 0, 0, 0, 0, 0, 0, 1 )
417    
418     -#define MPP6_SYSRST_OUTn MPP( 6, 0x1, 0, 1, 1, 1, 1, 1, 1 )
419     -#define MPP6_SPI_MOSI MPP( 6, 0x2, 0, 1, 1, 1, 1, 1, 1 )
420     -#define MPP6_PTP_TRIG_GEN MPP( 6, 0x3, 0, 1, 1, 1, 1, 1, 0 )
421     +#define MPP6_SYSRST_OUTn MPP( 6, 0x1, 0, 0, 1, 1, 1, 1, 1 )
422     +#define MPP6_SPI_MOSI MPP( 6, 0x2, 0, 0, 1, 1, 1, 1, 1 )
423     +#define MPP6_PTP_TRIG_GEN MPP( 6, 0x3, 0, 0, 1, 1, 1, 1, 0 )
424    
425     #define MPP7_GPO MPP( 7, 0x0, 0, 1, 1, 1, 1, 1, 1 )
426     -#define MPP7_PEX_RST_OUTn MPP( 7, 0x1, 0, 1, 1, 1, 1, 1, 0 )
427     -#define MPP7_SPI_SCn MPP( 7, 0x2, 0, 1, 1, 1, 1, 1, 1 )
428     -#define MPP7_PTP_TRIG_GEN MPP( 7, 0x3, 0, 1, 1, 1, 1, 1, 0 )
429     -#define MPP7_LCD_PWM MPP( 7, 0xb, 0, 1, 0, 0, 0, 0, 1 )
430     +#define MPP7_PEX_RST_OUTn MPP( 7, 0x1, 0, 0, 1, 1, 1, 1, 0 )
431     +#define MPP7_SPI_SCn MPP( 7, 0x2, 0, 0, 1, 1, 1, 1, 1 )
432     +#define MPP7_PTP_TRIG_GEN MPP( 7, 0x3, 0, 0, 1, 1, 1, 1, 0 )
433     +#define MPP7_LCD_PWM MPP( 7, 0xb, 0, 0, 0, 0, 0, 0, 1 )
434    
435     #define MPP8_GPIO MPP( 8, 0x0, 1, 1, 1, 1, 1, 1, 1 )
436     -#define MPP8_TW0_SDA MPP( 8, 0x1, 1, 1, 1, 1, 1, 1, 1 )
437     -#define MPP8_UART0_RTS MPP( 8, 0x2, 0, 1, 1, 1, 1, 1, 1 )
438     -#define MPP8_UART1_RTS MPP( 8, 0x3, 0, 1, 1, 1, 1, 1, 1 )
439     -#define MPP8_MII0_RXERR MPP( 8, 0x4, 1, 0, 0, 1, 1, 1, 1 )
440     -#define MPP8_SATA1_PRESENTn MPP( 8, 0x5, 0, 1, 0, 0, 1, 1, 1 )
441     -#define MPP8_PTP_CLK MPP( 8, 0xc, 1, 0, 1, 1, 1, 1, 0 )
442     -#define MPP8_MII0_COL MPP( 8, 0xd, 1, 0, 1, 1, 1, 1, 1 )
443     +#define MPP8_TW0_SDA MPP( 8, 0x1, 0, 0, 1, 1, 1, 1, 1 )
444     +#define MPP8_UART0_RTS MPP( 8, 0x2, 0, 0, 1, 1, 1, 1, 1 )
445     +#define MPP8_UART1_RTS MPP( 8, 0x3, 0, 0, 1, 1, 1, 1, 1 )
446     +#define MPP8_MII0_RXERR MPP( 8, 0x4, 0, 0, 0, 1, 1, 1, 1 )
447     +#define MPP8_SATA1_PRESENTn MPP( 8, 0x5, 0, 0, 0, 0, 1, 1, 1 )
448     +#define MPP8_PTP_CLK MPP( 8, 0xc, 0, 0, 1, 1, 1, 1, 0 )
449     +#define MPP8_MII0_COL MPP( 8, 0xd, 0, 0, 1, 1, 1, 1, 1 )
450    
451     #define MPP9_GPIO MPP( 9, 0x0, 1, 1, 1, 1, 1, 1, 1 )
452     -#define MPP9_TW0_SCK MPP( 9, 0x1, 1, 1, 1, 1, 1, 1, 1 )
453     -#define MPP9_UART0_CTS MPP( 9, 0x2, 1, 0, 1, 1, 1, 1, 1 )
454     -#define MPP9_UART1_CTS MPP( 9, 0x3, 1, 0, 1, 1, 1, 1, 1 )
455     -#define MPP9_SATA0_PRESENTn MPP( 9, 0x5, 0, 1, 0, 1, 1, 1, 1 )
456     -#define MPP9_PTP_EVENT_REQ MPP( 9, 0xc, 1, 0, 1, 1, 1, 1, 0 )
457     -#define MPP9_MII0_CRS MPP( 9, 0xd, 1, 0, 1, 1, 1, 1, 1 )
458     +#define MPP9_TW0_SCK MPP( 9, 0x1, 0, 0, 1, 1, 1, 1, 1 )
459     +#define MPP9_UART0_CTS MPP( 9, 0x2, 0, 0, 1, 1, 1, 1, 1 )
460     +#define MPP9_UART1_CTS MPP( 9, 0x3, 0, 0, 1, 1, 1, 1, 1 )
461     +#define MPP9_SATA0_PRESENTn MPP( 9, 0x5, 0, 0, 0, 1, 1, 1, 1 )
462     +#define MPP9_PTP_EVENT_REQ MPP( 9, 0xc, 0, 0, 1, 1, 1, 1, 0 )
463     +#define MPP9_MII0_CRS MPP( 9, 0xd, 0, 0, 1, 1, 1, 1, 1 )
464    
465     #define MPP10_GPO MPP( 10, 0x0, 0, 1, 1, 1, 1, 1, 1 )
466     -#define MPP10_SPI_SCK MPP( 10, 0x2, 0, 1, 1, 1, 1, 1, 1 )
467     -#define MPP10_UART0_TXD MPP( 10, 0X3, 0, 1, 1, 1, 1, 1, 1 )
468     -#define MPP10_SATA1_ACTn MPP( 10, 0x5, 0, 1, 0, 0, 1, 1, 1 )
469     -#define MPP10_PTP_TRIG_GEN MPP( 10, 0xc, 0, 1, 1, 1, 1, 1, 0 )
470     +#define MPP10_SPI_SCK MPP( 10, 0x2, 0, 0, 1, 1, 1, 1, 1 )
471     +#define MPP10_UART0_TXD MPP( 10, 0X3, 0, 0, 1, 1, 1, 1, 1 )
472     +#define MPP10_SATA1_ACTn MPP( 10, 0x5, 0, 0, 0, 0, 1, 1, 1 )
473     +#define MPP10_PTP_TRIG_GEN MPP( 10, 0xc, 0, 0, 1, 1, 1, 1, 0 )
474    
475     #define MPP11_GPIO MPP( 11, 0x0, 1, 1, 1, 1, 1, 1, 1 )
476     -#define MPP11_SPI_MISO MPP( 11, 0x2, 1, 0, 1, 1, 1, 1, 1 )
477     -#define MPP11_UART0_RXD MPP( 11, 0x3, 1, 0, 1, 1, 1, 1, 1 )
478     -#define MPP11_PTP_EVENT_REQ MPP( 11, 0x4, 1, 0, 1, 1, 1, 1, 0 )
479     -#define MPP11_PTP_TRIG_GEN MPP( 11, 0xc, 0, 1, 1, 1, 1, 1, 0 )
480     -#define MPP11_PTP_CLK MPP( 11, 0xd, 1, 0, 1, 1, 1, 1, 0 )
481     -#define MPP11_SATA0_ACTn MPP( 11, 0x5, 0, 1, 0, 1, 1, 1, 1 )
482     +#define MPP11_SPI_MISO MPP( 11, 0x2, 0, 0, 1, 1, 1, 1, 1 )
483     +#define MPP11_UART0_RXD MPP( 11, 0x3, 0, 0, 1, 1, 1, 1, 1 )
484     +#define MPP11_PTP_EVENT_REQ MPP( 11, 0x4, 0, 0, 1, 1, 1, 1, 0 )
485     +#define MPP11_PTP_TRIG_GEN MPP( 11, 0xc, 0, 0, 1, 1, 1, 1, 0 )
486     +#define MPP11_PTP_CLK MPP( 11, 0xd, 0, 0, 1, 1, 1, 1, 0 )
487     +#define MPP11_SATA0_ACTn MPP( 11, 0x5, 0, 0, 0, 1, 1, 1, 1 )
488    
489     #define MPP12_GPO MPP( 12, 0x0, 0, 1, 1, 1, 1, 1, 1 )
490     -#define MPP12_SD_CLK MPP( 12, 0x1, 0, 1, 1, 1, 1, 1, 1 )
491     -#define MPP12_AU_SPDIF0 MPP( 12, 0xa, 0, 1, 0, 0, 0, 0, 1 )
492     -#define MPP12_SPI_MOSI MPP( 12, 0xb, 0, 1, 0, 0, 0, 0, 1 )
493     -#define MPP12_TW1_SDA MPP( 12, 0xd, 1, 0, 0, 0, 0, 0, 1 )
494     +#define MPP12_SD_CLK MPP( 12, 0x1, 0, 0, 1, 1, 1, 1, 1 )
495     +#define MPP12_AU_SPDIF0 MPP( 12, 0xa, 0, 0, 0, 0, 0, 0, 1 )
496     +#define MPP12_SPI_MOSI MPP( 12, 0xb, 0, 0, 0, 0, 0, 0, 1 )
497     +#define MPP12_TW1_SDA MPP( 12, 0xd, 0, 0, 0, 0, 0, 0, 1 )
498    
499     #define MPP13_GPIO MPP( 13, 0x0, 1, 1, 1, 1, 1, 1, 1 )
500     -#define MPP13_SD_CMD MPP( 13, 0x1, 1, 1, 1, 1, 1, 1, 1 )
501     -#define MPP13_UART1_TXD MPP( 13, 0x3, 0, 1, 1, 1, 1, 1, 1 )
502     -#define MPP13_AU_SPDIFRMCLK MPP( 13, 0xa, 0, 1, 0, 0, 0, 0, 1 )
503     -#define MPP13_LCDPWM MPP( 13, 0xb, 0, 1, 0, 0, 0, 0, 1 )
504     +#define MPP13_SD_CMD MPP( 13, 0x1, 0, 0, 1, 1, 1, 1, 1 )
505     +#define MPP13_UART1_TXD MPP( 13, 0x3, 0, 0, 1, 1, 1, 1, 1 )
506     +#define MPP13_AU_SPDIFRMCLK MPP( 13, 0xa, 0, 0, 0, 0, 0, 0, 1 )
507     +#define MPP13_LCDPWM MPP( 13, 0xb, 0, 0, 0, 0, 0, 0, 1 )
508    
509     #define MPP14_GPIO MPP( 14, 0x0, 1, 1, 1, 1, 1, 1, 1 )
510     -#define MPP14_SD_D0 MPP( 14, 0x1, 1, 1, 1, 1, 1, 1, 1 )
511     -#define MPP14_UART1_RXD MPP( 14, 0x3, 1, 0, 1, 1, 1, 1, 1 )
512     -#define MPP14_SATA1_PRESENTn MPP( 14, 0x4, 0, 1, 0, 0, 1, 1, 1 )
513     -#define MPP14_AU_SPDIFI MPP( 14, 0xa, 1, 0, 0, 0, 0, 0, 1 )
514     -#define MPP14_AU_I2SDI MPP( 14, 0xb, 1, 0, 0, 0, 0, 0, 1 )
515     -#define MPP14_MII0_COL MPP( 14, 0xd, 1, 0, 1, 1, 1, 1, 1 )
516     +#define MPP14_SD_D0 MPP( 14, 0x1, 0, 0, 1, 1, 1, 1, 1 )
517     +#define MPP14_UART1_RXD MPP( 14, 0x3, 0, 0, 1, 1, 1, 1, 1 )
518     +#define MPP14_SATA1_PRESENTn MPP( 14, 0x4, 0, 0, 0, 0, 1, 1, 1 )
519     +#define MPP14_AU_SPDIFI MPP( 14, 0xa, 0, 0, 0, 0, 0, 0, 1 )
520     +#define MPP14_AU_I2SDI MPP( 14, 0xb, 0, 0, 0, 0, 0, 0, 1 )
521     +#define MPP14_MII0_COL MPP( 14, 0xd, 0, 0, 1, 1, 1, 1, 1 )
522    
523     #define MPP15_GPIO MPP( 15, 0x0, 1, 1, 1, 1, 1, 1, 1 )
524     -#define MPP15_SD_D1 MPP( 15, 0x1, 1, 1, 1, 1, 1, 1, 1 )
525     -#define MPP15_UART0_RTS MPP( 15, 0x2, 0, 1, 1, 1, 1, 1, 1 )
526     -#define MPP15_UART1_TXD MPP( 15, 0x3, 0, 1, 1, 1, 1, 1, 1 )
527     -#define MPP15_SATA0_ACTn MPP( 15, 0x4, 0, 1, 0, 1, 1, 1, 1 )
528     -#define MPP15_SPI_CSn MPP( 15, 0xb, 0, 1, 0, 0, 0, 0, 1 )
529     +#define MPP15_SD_D1 MPP( 15, 0x1, 0, 0, 1, 1, 1, 1, 1 )
530     +#define MPP15_UART0_RTS MPP( 15, 0x2, 0, 0, 1, 1, 1, 1, 1 )
531     +#define MPP15_UART1_TXD MPP( 15, 0x3, 0, 0, 1, 1, 1, 1, 1 )
532     +#define MPP15_SATA0_ACTn MPP( 15, 0x4, 0, 0, 0, 1, 1, 1, 1 )
533     +#define MPP15_SPI_CSn MPP( 15, 0xb, 0, 0, 0, 0, 0, 0, 1 )
534    
535     #define MPP16_GPIO MPP( 16, 0x0, 1, 1, 1, 1, 1, 1, 1 )
536     -#define MPP16_SD_D2 MPP( 16, 0x1, 1, 1, 1, 1, 1, 1, 1 )
537     -#define MPP16_UART0_CTS MPP( 16, 0x2, 1, 0, 1, 1, 1, 1, 1 )
538     -#define MPP16_UART1_RXD MPP( 16, 0x3, 1, 0, 1, 1, 1, 1, 1 )
539     -#define MPP16_SATA1_ACTn MPP( 16, 0x4, 0, 1, 0, 0, 1, 1, 1 )
540     -#define MPP16_LCD_EXT_REF_CLK MPP( 16, 0xb, 1, 0, 0, 0, 0, 0, 1 )
541     -#define MPP16_MII0_CRS MPP( 16, 0xd, 1, 0, 1, 1, 1, 1, 1 )
542     +#define MPP16_SD_D2 MPP( 16, 0x1, 0, 0, 1, 1, 1, 1, 1 )
543     +#define MPP16_UART0_CTS MPP( 16, 0x2, 0, 0, 1, 1, 1, 1, 1 )
544     +#define MPP16_UART1_RXD MPP( 16, 0x3, 0, 0, 1, 1, 1, 1, 1 )
545     +#define MPP16_SATA1_ACTn MPP( 16, 0x4, 0, 0, 0, 0, 1, 1, 1 )
546     +#define MPP16_LCD_EXT_REF_CLK MPP( 16, 0xb, 0, 0, 0, 0, 0, 0, 1 )
547     +#define MPP16_MII0_CRS MPP( 16, 0xd, 0, 0, 1, 1, 1, 1, 1 )
548    
549     #define MPP17_GPIO MPP( 17, 0x0, 1, 1, 1, 1, 1, 1, 1 )
550     -#define MPP17_SD_D3 MPP( 17, 0x1, 1, 1, 1, 1, 1, 1, 1 )
551     -#define MPP17_SATA0_PRESENTn MPP( 17, 0x4, 0, 1, 0, 1, 1, 1, 1 )
552     -#define MPP17_SATA1_ACTn MPP( 17, 0xa, 0, 1, 0, 0, 0, 0, 1 )
553     -#define MPP17_TW1_SCK MPP( 17, 0xd, 1, 1, 0, 0, 0, 0, 1 )
554     +#define MPP17_SD_D3 MPP( 17, 0x1, 0, 0, 1, 1, 1, 1, 1 )
555     +#define MPP17_SATA0_PRESENTn MPP( 17, 0x4, 0, 0, 0, 1, 1, 1, 1 )
556     +#define MPP17_SATA1_ACTn MPP( 17, 0xa, 0, 0, 0, 0, 0, 0, 1 )
557     +#define MPP17_TW1_SCK MPP( 17, 0xd, 0, 0, 0, 0, 0, 0, 1 )
558    
559     #define MPP18_GPO MPP( 18, 0x0, 0, 1, 1, 1, 1, 1, 1 )
560     -#define MPP18_NF_IO0 MPP( 18, 0x1, 1, 1, 1, 1, 1, 1, 1 )
561     -#define MPP18_PEX0_CLKREQ MPP( 18, 0x2, 0, 1, 0, 0, 0, 0, 1 )
562     +#define MPP18_NF_IO0 MPP( 18, 0x1, 0, 0, 1, 1, 1, 1, 1 )
563     +#define MPP18_PEX0_CLKREQ MPP( 18, 0x2, 0, 0, 0, 0, 0, 0, 1 )
564    
565     #define MPP19_GPO MPP( 19, 0x0, 0, 1, 1, 1, 1, 1, 1 )
566     -#define MPP19_NF_IO1 MPP( 19, 0x1, 1, 1, 1, 1, 1, 1, 1 )
567     +#define MPP19_NF_IO1 MPP( 19, 0x1, 0, 0, 1, 1, 1, 1, 1 )
568    
569     #define MPP20_GPIO MPP( 20, 0x0, 1, 1, 0, 1, 1, 1, 1 )
570     -#define MPP20_TSMP0 MPP( 20, 0x1, 1, 1, 0, 0, 1, 1, 1 )
571     -#define MPP20_TDM_CH0_TX_QL MPP( 20, 0x2, 0, 1, 0, 0, 1, 1, 1 )
572     +#define MPP20_TSMP0 MPP( 20, 0x1, 0, 0, 0, 0, 1, 1, 1 )
573     +#define MPP20_TDM_CH0_TX_QL MPP( 20, 0x2, 0, 0, 0, 0, 1, 1, 1 )
574     #define MPP20_GE1_TXD0 MPP( 20, 0x3, 0, 0, 0, 1, 1, 1, 1 )
575     -#define MPP20_AU_SPDIFI MPP( 20, 0x4, 1, 0, 0, 0, 1, 1, 1 )
576     -#define MPP20_SATA1_ACTn MPP( 20, 0x5, 0, 1, 0, 0, 1, 1, 1 )
577     +#define MPP20_AU_SPDIFI MPP( 20, 0x4, 0, 0, 0, 0, 1, 1, 1 )
578     +#define MPP20_SATA1_ACTn MPP( 20, 0x5, 0, 0, 0, 0, 1, 1, 1 )
579     #define MPP20_LCD_D0 MPP( 20, 0xb, 0, 0, 0, 0, 0, 0, 1 )
580    
581     #define MPP21_GPIO MPP( 21, 0x0, 1, 1, 0, 1, 1, 1, 1 )
582     -#define MPP21_TSMP1 MPP( 21, 0x1, 1, 1, 0, 0, 1, 1, 1 )
583     -#define MPP21_TDM_CH0_RX_QL MPP( 21, 0x2, 0, 1, 0, 0, 1, 1, 1 )
584     +#define MPP21_TSMP1 MPP( 21, 0x1, 0, 0, 0, 0, 1, 1, 1 )
585     +#define MPP21_TDM_CH0_RX_QL MPP( 21, 0x2, 0, 0, 0, 0, 1, 1, 1 )
586     #define MPP21_GE1_TXD1 MPP( 21, 0x3, 0, 0, 0, 1, 1, 1, 1 )
587     -#define MPP21_AU_SPDIFO MPP( 21, 0x4, 0, 1, 0, 0, 1, 1, 1 )
588     -#define MPP21_SATA0_ACTn MPP( 21, 0x5, 0, 1, 0, 1, 1, 1, 1 )
589     +#define MPP21_AU_SPDIFO MPP( 21, 0x4, 0, 0, 0, 0, 1, 1, 1 )
590     +#define MPP21_SATA0_ACTn MPP( 21, 0x5, 0, 0, 0, 1, 1, 1, 1 )
591     #define MPP21_LCD_D1 MPP( 21, 0xb, 0, 0, 0, 0, 0, 0, 1 )
592    
593     #define MPP22_GPIO MPP( 22, 0x0, 1, 1, 0, 1, 1, 1, 1 )
594     -#define MPP22_TSMP2 MPP( 22, 0x1, 1, 1, 0, 0, 1, 1, 1 )
595     -#define MPP22_TDM_CH2_TX_QL MPP( 22, 0x2, 0, 1, 0, 0, 1, 1, 1 )
596     +#define MPP22_TSMP2 MPP( 22, 0x1, 0, 0, 0, 0, 1, 1, 1 )
597     +#define MPP22_TDM_CH2_TX_QL MPP( 22, 0x2, 0, 0, 0, 0, 1, 1, 1 )
598     #define MPP22_GE1_TXD2 MPP( 22, 0x3, 0, 0, 0, 1, 1, 1, 1 )
599     -#define MPP22_AU_SPDIFRMKCLK MPP( 22, 0x4, 0, 1, 0, 0, 1, 1, 1 )
600     -#define MPP22_SATA1_PRESENTn MPP( 22, 0x5, 0, 1, 0, 0, 1, 1, 1 )
601     +#define MPP22_AU_SPDIFRMKCLK MPP( 22, 0x4, 0, 0, 0, 0, 1, 1, 1 )
602     +#define MPP22_SATA1_PRESENTn MPP( 22, 0x5, 0, 0, 0, 0, 1, 1, 1 )
603     #define MPP22_LCD_D2 MPP( 22, 0xb, 0, 0, 0, 0, 0, 0, 1 )
604    
605     #define MPP23_GPIO MPP( 23, 0x0, 1, 1, 0, 1, 1, 1, 1 )
606     -#define MPP23_TSMP3 MPP( 23, 0x1, 1, 1, 0, 0, 1, 1, 1 )
607     -#define MPP23_TDM_CH2_RX_QL MPP( 23, 0x2, 1, 0, 0, 0, 1, 1, 1 )
608     +#define MPP23_TSMP3 MPP( 23, 0x1, 0, 0, 0, 0, 1, 1, 1 )
609     +#define MPP23_TDM_CH2_RX_QL MPP( 23, 0x2, 0, 0, 0, 0, 1, 1, 1 )
610     #define MPP23_GE1_TXD3 MPP( 23, 0x3, 0, 0, 0, 1, 1, 1, 1 )
611     -#define MPP23_AU_I2SBCLK MPP( 23, 0x4, 0, 1, 0, 0, 1, 1, 1 )
612     -#define MPP23_SATA0_PRESENTn MPP( 23, 0x5, 0, 1, 0, 1, 1, 1, 1 )
613     +#define MPP23_AU_I2SBCLK MPP( 23, 0x4, 0, 0, 0, 0, 1, 1, 1 )
614     +#define MPP23_SATA0_PRESENTn MPP( 23, 0x5, 0, 0, 0, 1, 1, 1, 1 )
615     #define MPP23_LCD_D3 MPP( 23, 0xb, 0, 0, 0, 0, 0, 0, 1 )
616    
617     #define MPP24_GPIO MPP( 24, 0x0, 1, 1, 0, 1, 1, 1, 1 )
618     -#define MPP24_TSMP4 MPP( 24, 0x1, 1, 1, 0, 0, 1, 1, 1 )
619     -#define MPP24_TDM_SPI_CS0 MPP( 24, 0x2, 0, 1, 0, 0, 1, 1, 1 )
620     +#define MPP24_TSMP4 MPP( 24, 0x1, 0, 0, 0, 0, 1, 1, 1 )
621     +#define MPP24_TDM_SPI_CS0 MPP( 24, 0x2, 0, 0, 0, 0, 1, 1, 1 )
622     #define MPP24_GE1_RXD0 MPP( 24, 0x3, 0, 0, 0, 1, 1, 1, 1 )
623     -#define MPP24_AU_I2SDO MPP( 24, 0x4, 0, 1, 0, 0, 1, 1, 1 )
624     +#define MPP24_AU_I2SDO MPP( 24, 0x4, 0, 0, 0, 0, 1, 1, 1 )
625     #define MPP24_LCD_D4 MPP( 24, 0xb, 0, 0, 0, 0, 0, 0, 1 )
626    
627     #define MPP25_GPIO MPP( 25, 0x0, 1, 1, 0, 1, 1, 1, 1 )
628     -#define MPP25_TSMP5 MPP( 25, 0x1, 1, 1, 0, 0, 1, 1, 1 )
629     -#define MPP25_TDM_SPI_SCK MPP( 25, 0x2, 0, 1, 0, 0, 1, 1, 1 )
630     +#define MPP25_TSMP5 MPP( 25, 0x1, 0, 0, 0, 0, 1, 1, 1 )
631     +#define MPP25_TDM_SPI_SCK MPP( 25, 0x2, 0, 0, 0, 0, 1, 1, 1 )
632     #define MPP25_GE1_RXD1 MPP( 25, 0x3, 0, 0, 0, 1, 1, 1, 1 )
633     -#define MPP25_AU_I2SLRCLK MPP( 25, 0x4, 0, 1, 0, 0, 1, 1, 1 )
634     +#define MPP25_AU_I2SLRCLK MPP( 25, 0x4, 0, 0, 0, 0, 1, 1, 1 )
635     #define MPP25_LCD_D5 MPP( 25, 0xb, 0, 0, 0, 0, 0, 0, 1 )
636    
637     #define MPP26_GPIO MPP( 26, 0x0, 1, 1, 0, 1, 1, 1, 1 )
638     -#define MPP26_TSMP6 MPP( 26, 0x1, 1, 1, 0, 0, 1, 1, 1 )
639     -#define MPP26_TDM_SPI_MISO MPP( 26, 0x2, 1, 0, 0, 0, 1, 1, 1 )
640     +#define MPP26_TSMP6 MPP( 26, 0x1, 0, 0, 0, 0, 1, 1, 1 )
641     +#define MPP26_TDM_SPI_MISO MPP( 26, 0x2, 0, 0, 0, 0, 1, 1, 1 )
642     #define MPP26_GE1_RXD2 MPP( 26, 0x3, 0, 0, 0, 1, 1, 1, 1 )
643     -#define MPP26_AU_I2SMCLK MPP( 26, 0x4, 0, 1, 0, 0, 1, 1, 1 )
644     +#define MPP26_AU_I2SMCLK MPP( 26, 0x4, 0, 0, 0, 0, 1, 1, 1 )
645     #define MPP26_LCD_D6 MPP( 26, 0xb, 0, 0, 0, 0, 0, 0, 1 )
646    
647     #define MPP27_GPIO MPP( 27, 0x0, 1, 1, 0, 1, 1, 1, 1 )
648     -#define MPP27_TSMP7 MPP( 27, 0x1, 1, 1, 0, 0, 1, 1, 1 )
649     -#define MPP27_TDM_SPI_MOSI MPP( 27, 0x2, 0, 1, 0, 0, 1, 1, 1 )
650     +#define MPP27_TSMP7 MPP( 27, 0x1, 0, 0, 0, 0, 1, 1, 1 )
651     +#define MPP27_TDM_SPI_MOSI MPP( 27, 0x2, 0, 0, 0, 0, 1, 1, 1 )
652     #define MPP27_GE1_RXD3 MPP( 27, 0x3, 0, 0, 0, 1, 1, 1, 1 )
653     -#define MPP27_AU_I2SDI MPP( 27, 0x4, 1, 0, 0, 0, 1, 1, 1 )
654     +#define MPP27_AU_I2SDI MPP( 27, 0x4, 0, 0, 0, 0, 1, 1, 1 )
655     #define MPP27_LCD_D7 MPP( 27, 0xb, 0, 0, 0, 0, 0, 0, 1 )
656    
657     #define MPP28_GPIO MPP( 28, 0x0, 1, 1, 0, 1, 1, 1, 1 )
658     -#define MPP28_TSMP8 MPP( 28, 0x1, 1, 1, 0, 0, 1, 1, 1 )
659     +#define MPP28_TSMP8 MPP( 28, 0x1, 0, 0, 0, 0, 1, 1, 1 )
660     #define MPP28_TDM_CODEC_INTn MPP( 28, 0x2, 0, 0, 0, 0, 1, 1, 1 )
661     #define MPP28_GE1_COL MPP( 28, 0x3, 0, 0, 0, 1, 1, 1, 1 )
662     -#define MPP28_AU_EXTCLK MPP( 28, 0x4, 1, 0, 0, 0, 1, 1, 1 )
663     +#define MPP28_AU_EXTCLK MPP( 28, 0x4, 0, 0, 0, 0, 1, 1, 1 )
664     #define MPP28_LCD_D8 MPP( 28, 0xb, 0, 0, 0, 0, 0, 0, 1 )
665    
666     #define MPP29_GPIO MPP( 29, 0x0, 1, 1, 0, 1, 1, 1, 1 )
667     -#define MPP29_TSMP9 MPP( 29, 0x1, 1, 1, 0, 0, 1, 1, 1 )
668     +#define MPP29_TSMP9 MPP( 29, 0x1, 0, 0, 0, 0, 1, 1, 1 )
669     #define MPP29_TDM_CODEC_RSTn MPP( 29, 0x2, 0, 0, 0, 0, 1, 1, 1 )
670     #define MPP29_GE1_TCLK MPP( 29, 0x3, 0, 0, 0, 1, 1, 1, 1 )
671     #define MPP29_LCD_D9 MPP( 29, 0xb, 0, 0, 0, 0, 0, 0, 1 )
672    
673     #define MPP30_GPIO MPP( 30, 0x0, 1, 1, 0, 1, 1, 1, 1 )
674     -#define MPP30_TSMP10 MPP( 30, 0x1, 1, 1, 0, 0, 1, 1, 1 )
675     -#define MPP30_TDM_PCLK MPP( 30, 0x2, 1, 1, 0, 0, 1, 1, 1 )
676     +#define MPP30_TSMP10 MPP( 30, 0x1, 0, 0, 0, 0, 1, 1, 1 )
677     +#define MPP30_TDM_PCLK MPP( 30, 0x2, 0, 0, 0, 0, 1, 1, 1 )
678     #define MPP30_GE1_RXCTL MPP( 30, 0x3, 0, 0, 0, 1, 1, 1, 1 )
679     #define MPP30_LCD_D10 MPP( 30, 0xb, 0, 0, 0, 0, 0, 0, 1 )
680    
681     #define MPP31_GPIO MPP( 31, 0x0, 1, 1, 0, 1, 1, 1, 1 )
682     -#define MPP31_TSMP11 MPP( 31, 0x1, 1, 1, 0, 0, 1, 1, 1 )
683     -#define MPP31_TDM_FS MPP( 31, 0x2, 1, 1, 0, 0, 1, 1, 1 )
684     +#define MPP31_TSMP11 MPP( 31, 0x1, 0, 0, 0, 0, 1, 1, 1 )
685     +#define MPP31_TDM_FS MPP( 31, 0x2, 0, 0, 0, 0, 1, 1, 1 )
686     #define MPP31_GE1_RXCLK MPP( 31, 0x3, 0, 0, 0, 1, 1, 1, 1 )
687     #define MPP31_LCD_D11 MPP( 31, 0xb, 0, 0, 0, 0, 0, 0, 1 )
688    
689     #define MPP32_GPIO MPP( 32, 0x0, 1, 1, 0, 1, 1, 1, 1 )
690     -#define MPP32_TSMP12 MPP( 32, 0x1, 1, 1, 0, 0, 1, 1, 1 )
691     -#define MPP32_TDM_DRX MPP( 32, 0x2, 1, 0, 0, 0, 1, 1, 1 )
692     +#define MPP32_TSMP12 MPP( 32, 0x1, 0, 0, 0, 0, 1, 1, 1 )
693     +#define MPP32_TDM_DRX MPP( 32, 0x2, 0, 0, 0, 0, 1, 1, 1 )
694     #define MPP32_GE1_TCLKOUT MPP( 32, 0x3, 0, 0, 0, 1, 1, 1, 1 )
695     #define MPP32_LCD_D12 MPP( 32, 0xb, 0, 0, 0, 0, 0, 0, 1 )
696    
697     #define MPP33_GPO MPP( 33, 0x0, 0, 1, 0, 1, 1, 1, 1 )
698     -#define MPP33_TDM_DTX MPP( 33, 0x2, 0, 1, 0, 0, 1, 1, 1 )
699     +#define MPP33_TDM_DTX MPP( 33, 0x2, 0, 0, 0, 0, 1, 1, 1 )
700     #define MPP33_GE1_TXCTL MPP( 33, 0x3, 0, 0, 0, 1, 1, 1, 1 )
701     #define MPP33_LCD_D13 MPP( 33, 0xb, 0, 0, 0, 0, 0, 0, 1 )
702    
703     #define MPP34_GPIO MPP( 34, 0x0, 1, 1, 0, 1, 1, 1, 1 )
704     -#define MPP34_TDM_SPI_CS1 MPP( 34, 0x2, 0, 1, 0, 0, 1, 1, 1 )
705     +#define MPP34_TDM_SPI_CS1 MPP( 34, 0x2, 0, 0, 0, 0, 1, 1, 1 )
706     #define MPP34_GE1_TXEN MPP( 34, 0x3, 0, 0, 0, 1, 1, 1, 1 )
707     -#define MPP34_SATA1_ACTn MPP( 34, 0x5, 0, 1, 0, 0, 0, 1, 1 )
708     +#define MPP34_SATA1_ACTn MPP( 34, 0x5, 0, 0, 0, 0, 0, 1, 1 )
709     #define MPP34_LCD_D14 MPP( 34, 0xb, 0, 0, 0, 0, 0, 0, 1 )
710    
711     #define MPP35_GPIO MPP( 35, 0x0, 1, 1, 1, 1, 1, 1, 1 )
712     -#define MPP35_TDM_CH0_TX_QL MPP( 35, 0x2, 0, 1, 0, 0, 1, 1, 1 )
713     +#define MPP35_TDM_CH0_TX_QL MPP( 35, 0x2, 0, 0, 0, 0, 1, 1, 1 )
714     #define MPP35_GE1_RXERR MPP( 35, 0x3, 0, 0, 0, 1, 1, 1, 1 )
715     -#define MPP35_SATA0_ACTn MPP( 35, 0x5, 0, 1, 0, 1, 1, 1, 1 )
716     +#define MPP35_SATA0_ACTn MPP( 35, 0x5, 0, 0, 0, 1, 1, 1, 1 )
717     #define MPP35_LCD_D15 MPP( 22, 0xb, 0, 0, 0, 0, 0, 0, 1 )
718     -#define MPP35_MII0_RXERR MPP( 35, 0xc, 1, 0, 1, 1, 1, 1, 1 )
719     +#define MPP35_MII0_RXERR MPP( 35, 0xc, 0, 0, 1, 1, 1, 1, 1 )
720    
721     #define MPP36_GPIO MPP( 36, 0x0, 1, 1, 1, 0, 0, 1, 1 )
722     -#define MPP36_TSMP0 MPP( 36, 0x1, 1, 1, 0, 0, 0, 1, 1 )
723     -#define MPP36_TDM_SPI_CS1 MPP( 36, 0x2, 0, 1, 0, 0, 0, 1, 1 )
724     -#define MPP36_AU_SPDIFI MPP( 36, 0x4, 1, 0, 1, 0, 0, 1, 1 )
725     -#define MPP36_TW1_SDA MPP( 36, 0xb, 1, 1, 0, 0, 0, 0, 1 )
726     +#define MPP36_TSMP0 MPP( 36, 0x1, 0, 0, 0, 0, 0, 1, 1 )
727     +#define MPP36_TDM_SPI_CS1 MPP( 36, 0x2, 0, 0, 0, 0, 0, 1, 1 )
728     +#define MPP36_AU_SPDIFI MPP( 36, 0x4, 0, 0, 1, 0, 0, 1, 1 )
729     +#define MPP36_TW1_SDA MPP( 36, 0xb, 0, 0, 0, 0, 0, 0, 1 )
730    
731     #define MPP37_GPIO MPP( 37, 0x0, 1, 1, 1, 0, 0, 1, 1 )
732     -#define MPP37_TSMP1 MPP( 37, 0x1, 1, 1, 0, 0, 0, 1, 1 )
733     -#define MPP37_TDM_CH2_TX_QL MPP( 37, 0x2, 0, 1, 0, 0, 0, 1, 1 )
734     -#define MPP37_AU_SPDIFO MPP( 37, 0x4, 0, 1, 1, 0, 0, 1, 1 )
735     -#define MPP37_TW1_SCK MPP( 37, 0xb, 1, 1, 0, 0, 0, 0, 1 )
736     +#define MPP37_TSMP1 MPP( 37, 0x1, 0, 0, 0, 0, 0, 1, 1 )
737     +#define MPP37_TDM_CH2_TX_QL MPP( 37, 0x2, 0, 0, 0, 0, 0, 1, 1 )
738     +#define MPP37_AU_SPDIFO MPP( 37, 0x4, 0, 0, 1, 0, 0, 1, 1 )
739     +#define MPP37_TW1_SCK MPP( 37, 0xb, 0, 0, 0, 0, 0, 0, 1 )
740    
741     #define MPP38_GPIO MPP( 38, 0x0, 1, 1, 1, 0, 0, 1, 1 )
742     -#define MPP38_TSMP2 MPP( 38, 0x1, 1, 1, 0, 0, 0, 1, 1 )
743     -#define MPP38_TDM_CH2_RX_QL MPP( 38, 0x2, 0, 1, 0, 0, 0, 1, 1 )
744     -#define MPP38_AU_SPDIFRMLCLK MPP( 38, 0x4, 0, 1, 1, 0, 0, 1, 1 )
745     +#define MPP38_TSMP2 MPP( 38, 0x1, 0, 0, 0, 0, 0, 1, 1 )
746     +#define MPP38_TDM_CH2_RX_QL MPP( 38, 0x2, 0, 0, 0, 0, 0, 1, 1 )
747     +#define MPP38_AU_SPDIFRMLCLK MPP( 38, 0x4, 0, 0, 1, 0, 0, 1, 1 )
748     #define MPP38_LCD_D18 MPP( 38, 0xb, 0, 0, 0, 0, 0, 0, 1 )
749    
750     #define MPP39_GPIO MPP( 39, 0x0, 1, 1, 1, 0, 0, 1, 1 )
751     -#define MPP39_TSMP3 MPP( 39, 0x1, 1, 1, 0, 0, 0, 1, 1 )
752     -#define MPP39_TDM_SPI_CS0 MPP( 39, 0x2, 0, 1, 0, 0, 0, 1, 1 )
753     -#define MPP39_AU_I2SBCLK MPP( 39, 0x4, 0, 1, 1, 0, 0, 1, 1 )
754     +#define MPP39_TSMP3 MPP( 39, 0x1, 0, 0, 0, 0, 0, 1, 1 )
755     +#define MPP39_TDM_SPI_CS0 MPP( 39, 0x2, 0, 0, 0, 0, 0, 1, 1 )
756     +#define MPP39_AU_I2SBCLK MPP( 39, 0x4, 0, 0, 1, 0, 0, 1, 1 )
757     #define MPP39_LCD_D19 MPP( 39, 0xb, 0, 0, 0, 0, 0, 0, 1 )
758    
759     #define MPP40_GPIO MPP( 40, 0x0, 1, 1, 1, 0, 0, 1, 1 )
760     -#define MPP40_TSMP4 MPP( 40, 0x1, 1, 1, 0, 0, 0, 1, 1 )
761     -#define MPP40_TDM_SPI_SCK MPP( 40, 0x2, 0, 1, 0, 0, 0, 1, 1 )
762     -#define MPP40_AU_I2SDO MPP( 40, 0x4, 0, 1, 1, 0, 0, 1, 1 )
763     +#define MPP40_TSMP4 MPP( 40, 0x1, 0, 0, 0, 0, 0, 1, 1 )
764     +#define MPP40_TDM_SPI_SCK MPP( 40, 0x2, 0, 0, 0, 0, 0, 1, 1 )
765     +#define MPP40_AU_I2SDO MPP( 40, 0x4, 0, 0, 1, 0, 0, 1, 1 )
766     #define MPP40_LCD_D20 MPP( 40, 0xb, 0, 0, 0, 0, 0, 0, 1 )
767    
768     #define MPP41_GPIO MPP( 41, 0x0, 1, 1, 1, 0, 0, 1, 1 )
769     -#define MPP41_TSMP5 MPP( 41, 0x1, 1, 1, 0, 0, 0, 1, 1 )
770     -#define MPP41_TDM_SPI_MISO MPP( 41, 0x2, 1, 0, 0, 0, 0, 1, 1 )
771     -#define MPP41_AU_I2SLRCLK MPP( 41, 0x4, 0, 1, 1, 0, 0, 1, 1 )
772     +#define MPP41_TSMP5 MPP( 41, 0x1, 0, 0, 0, 0, 0, 1, 1 )
773     +#define MPP41_TDM_SPI_MISO MPP( 41, 0x2, 0, 0, 0, 0, 0, 1, 1 )
774     +#define MPP41_AU_I2SLRCLK MPP( 41, 0x4, 0, 0, 1, 0, 0, 1, 1 )
775     #define MPP41_LCD_D21 MPP( 41, 0xb, 0, 0, 0, 0, 0, 0, 1 )
776    
777     #define MPP42_GPIO MPP( 42, 0x0, 1, 1, 1, 0, 0, 1, 1 )
778     -#define MPP42_TSMP6 MPP( 42, 0x1, 1, 1, 0, 0, 0, 1, 1 )
779     -#define MPP42_TDM_SPI_MOSI MPP( 42, 0x2, 0, 1, 0, 0, 0, 1, 1 )
780     -#define MPP42_AU_I2SMCLK MPP( 42, 0x4, 0, 1, 1, 0, 0, 1, 1 )
781     +#define MPP42_TSMP6 MPP( 42, 0x1, 0, 0, 0, 0, 0, 1, 1 )
782     +#define MPP42_TDM_SPI_MOSI MPP( 42, 0x2, 0, 0, 0, 0, 0, 1, 1 )
783     +#define MPP42_AU_I2SMCLK MPP( 42, 0x4, 0, 0, 1, 0, 0, 1, 1 )
784     #define MPP42_LCD_D22 MPP( 42, 0xb, 0, 0, 0, 0, 0, 0, 1 )
785    
786     #define MPP43_GPIO MPP( 43, 0x0, 1, 1, 1, 0, 0, 1, 1 )
787     -#define MPP43_TSMP7 MPP( 43, 0x1, 1, 1, 0, 0, 0, 1, 1 )
788     +#define MPP43_TSMP7 MPP( 43, 0x1, 0, 0, 0, 0, 0, 1, 1 )
789     #define MPP43_TDM_CODEC_INTn MPP( 43, 0x2, 0, 0, 0, 0, 0, 1, 1 )
790     -#define MPP43_AU_I2SDI MPP( 43, 0x4, 1, 0, 1, 0, 0, 1, 1 )
791     +#define MPP43_AU_I2SDI MPP( 43, 0x4, 0, 0, 1, 0, 0, 1, 1 )
792     #define MPP43_LCD_D23 MPP( 22, 0xb, 0, 0, 0, 0, 0, 0, 1 )
793    
794     #define MPP44_GPIO MPP( 44, 0x0, 1, 1, 1, 0, 0, 1, 1 )
795     -#define MPP44_TSMP8 MPP( 44, 0x1, 1, 1, 0, 0, 0, 1, 1 )
796     +#define MPP44_TSMP8 MPP( 44, 0x1, 0, 0, 0, 0, 0, 1, 1 )
797     #define MPP44_TDM_CODEC_RSTn MPP( 44, 0x2, 0, 0, 0, 0, 0, 1, 1 )
798     -#define MPP44_AU_EXTCLK MPP( 44, 0x4, 1, 0, 1, 0, 0, 1, 1 )
799     +#define MPP44_AU_EXTCLK MPP( 44, 0x4, 0, 0, 1, 0, 0, 1, 1 )
800     #define MPP44_LCD_CLK MPP( 44, 0xb, 0, 0, 0, 0, 0, 0, 1 )
801    
802     #define MPP45_GPIO MPP( 45, 0x0, 1, 1, 0, 0, 0, 1, 1 )
803     -#define MPP45_TSMP9 MPP( 45, 0x1, 1, 1, 0, 0, 0, 1, 1 )
804     -#define MPP45_TDM_PCLK MPP( 45, 0x2, 1, 1, 0, 0, 0, 1, 1 )
805     +#define MPP45_TSMP9 MPP( 45, 0x1, 0, 0, 0, 0, 0, 1, 1 )
806     +#define MPP45_TDM_PCLK MPP( 45, 0x2, 0, 0, 0, 0, 0, 1, 1 )
807     #define MPP245_LCD_E MPP( 45, 0xb, 0, 0, 0, 0, 0, 0, 1 )
808    
809     #define MPP46_GPIO MPP( 46, 0x0, 1, 1, 0, 0, 0, 1, 1 )
810     -#define MPP46_TSMP10 MPP( 46, 0x1, 1, 1, 0, 0, 0, 1, 1 )
811     -#define MPP46_TDM_FS MPP( 46, 0x2, 1, 1, 0, 0, 0, 1, 1 )
812     +#define MPP46_TSMP10 MPP( 46, 0x1, 0, 0, 0, 0, 0, 1, 1 )
813     +#define MPP46_TDM_FS MPP( 46, 0x2, 0, 0, 0, 0, 0, 1, 1 )
814     #define MPP46_LCD_HSYNC MPP( 46, 0xb, 0, 0, 0, 0, 0, 0, 1 )
815    
816     #define MPP47_GPIO MPP( 47, 0x0, 1, 1, 0, 0, 0, 1, 1 )
817     -#define MPP47_TSMP11 MPP( 47, 0x1, 1, 1, 0, 0, 0, 1, 1 )
818     -#define MPP47_TDM_DRX MPP( 47, 0x2, 1, 0, 0, 0, 0, 1, 1 )
819     +#define MPP47_TSMP11 MPP( 47, 0x1, 0, 0, 0, 0, 0, 1, 1 )
820     +#define MPP47_TDM_DRX MPP( 47, 0x2, 0, 0, 0, 0, 0, 1, 1 )
821     #define MPP47_LCD_VSYNC MPP( 47, 0xb, 0, 0, 0, 0, 0, 0, 1 )
822    
823     #define MPP48_GPIO MPP( 48, 0x0, 1, 1, 0, 0, 0, 1, 1 )
824     -#define MPP48_TSMP12 MPP( 48, 0x1, 1, 1, 0, 0, 0, 1, 1 )
825     -#define MPP48_TDM_DTX MPP( 48, 0x2, 0, 1, 0, 0, 0, 1, 1 )
826     +#define MPP48_TSMP12 MPP( 48, 0x1, 0, 0, 0, 0, 0, 1, 1 )
827     +#define MPP48_TDM_DTX MPP( 48, 0x2, 0, 0, 0, 0, 0, 1, 1 )
828     #define MPP48_LCD_D16 MPP( 22, 0xb, 0, 0, 0, 0, 0, 0, 1 )
829    
830     #define MPP49_GPIO MPP( 49, 0x0, 1, 1, 0, 0, 0, 1, 0 )
831     #define MPP49_GPO MPP( 49, 0x0, 0, 1, 0, 0, 0, 0, 1 )
832     -#define MPP49_TSMP9 MPP( 49, 0x1, 1, 1, 0, 0, 0, 1, 0 )
833     -#define MPP49_TDM_CH0_RX_QL MPP( 49, 0x2, 0, 1, 0, 0, 0, 1, 1 )
834     -#define MPP49_PTP_CLK MPP( 49, 0x5, 1, 0, 0, 0, 0, 1, 0 )
835     -#define MPP49_PEX0_CLKREQ MPP( 49, 0xa, 0, 1, 0, 0, 0, 0, 1 )
836     +#define MPP49_TSMP9 MPP( 49, 0x1, 0, 0, 0, 0, 0, 1, 0 )
837     +#define MPP49_TDM_CH0_RX_QL MPP( 49, 0x2, 0, 0, 0, 0, 0, 1, 1 )
838     +#define MPP49_PTP_CLK MPP( 49, 0x5, 0, 0, 0, 0, 0, 1, 0 )
839     +#define MPP49_PEX0_CLKREQ MPP( 49, 0xa, 0, 0, 0, 0, 0, 0, 1 )
840     #define MPP49_LCD_D17 MPP( 49, 0xb, 0, 0, 0, 0, 0, 0, 1 )
841    
842     #define MPP_MAX 49
843     diff --git a/arch/arm/mach-lpc32xx/include/mach/irqs.h b/arch/arm/mach-lpc32xx/include/mach/irqs.h
844     index 2667f52..9e3b90d 100644
845     --- a/arch/arm/mach-lpc32xx/include/mach/irqs.h
846     +++ b/arch/arm/mach-lpc32xx/include/mach/irqs.h
847     @@ -61,7 +61,7 @@
848     */
849     #define IRQ_LPC32XX_JTAG_COMM_TX LPC32XX_SIC1_IRQ(1)
850     #define IRQ_LPC32XX_JTAG_COMM_RX LPC32XX_SIC1_IRQ(2)
851     -#define IRQ_LPC32XX_GPI_11 LPC32XX_SIC1_IRQ(4)
852     +#define IRQ_LPC32XX_GPI_28 LPC32XX_SIC1_IRQ(4)
853     #define IRQ_LPC32XX_TS_P LPC32XX_SIC1_IRQ(6)
854     #define IRQ_LPC32XX_TS_IRQ LPC32XX_SIC1_IRQ(7)
855     #define IRQ_LPC32XX_TS_AUX LPC32XX_SIC1_IRQ(8)
856     diff --git a/arch/arm/mach-lpc32xx/irq.c b/arch/arm/mach-lpc32xx/irq.c
857     index 4eae566..c74de01 100644
858     --- a/arch/arm/mach-lpc32xx/irq.c
859     +++ b/arch/arm/mach-lpc32xx/irq.c
860     @@ -118,6 +118,10 @@ static const struct lpc32xx_event_info lpc32xx_events[NR_IRQS] = {
861     .event_group = &lpc32xx_event_pin_regs,
862     .mask = LPC32XX_CLKPWR_EXTSRC_GPI_06_BIT,
863     },
864     + [IRQ_LPC32XX_GPI_28] = {
865     + .event_group = &lpc32xx_event_pin_regs,
866     + .mask = LPC32XX_CLKPWR_EXTSRC_GPI_28_BIT,
867     + },
868     [IRQ_LPC32XX_GPIO_00] = {
869     .event_group = &lpc32xx_event_int_regs,
870     .mask = LPC32XX_CLKPWR_INTSRC_GPIO_00_BIT,
871     @@ -305,9 +309,18 @@ static int lpc32xx_irq_wake(struct irq_data *d, unsigned int state)
872    
873     if (state)
874     eventreg |= lpc32xx_events[d->irq].mask;
875     - else
876     + else {
877     eventreg &= ~lpc32xx_events[d->irq].mask;
878    
879     + /*
880     + * When disabling the wakeup, clear the latched
881     + * event
882     + */
883     + __raw_writel(lpc32xx_events[d->irq].mask,
884     + lpc32xx_events[d->irq].
885     + event_group->rawstat_reg);
886     + }
887     +
888     __raw_writel(eventreg,
889     lpc32xx_events[d->irq].event_group->enab_reg);
890    
891     @@ -380,13 +393,15 @@ void __init lpc32xx_init_irq(void)
892    
893     /* Setup SIC1 */
894     __raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC1_BASE));
895     - __raw_writel(MIC_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC1_BASE));
896     - __raw_writel(MIC_ATR_DEFAULT, LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC1_BASE));
897     + __raw_writel(SIC1_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC1_BASE));
898     + __raw_writel(SIC1_ATR_DEFAULT,
899     + LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC1_BASE));
900    
901     /* Setup SIC2 */
902     __raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_SIC2_BASE));
903     - __raw_writel(MIC_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC2_BASE));
904     - __raw_writel(MIC_ATR_DEFAULT, LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC2_BASE));
905     + __raw_writel(SIC2_APR_DEFAULT, LPC32XX_INTC_POLAR(LPC32XX_SIC2_BASE));
906     + __raw_writel(SIC2_ATR_DEFAULT,
907     + LPC32XX_INTC_ACT_TYPE(LPC32XX_SIC2_BASE));
908    
909     /* Configure supported IRQ's */
910     for (i = 0; i < NR_IRQS; i++) {
911     diff --git a/arch/arm/mach-lpc32xx/serial.c b/arch/arm/mach-lpc32xx/serial.c
912     index 429cfdb..f273528 100644
913     --- a/arch/arm/mach-lpc32xx/serial.c
914     +++ b/arch/arm/mach-lpc32xx/serial.c
915     @@ -88,6 +88,7 @@ struct uartinit {
916     char *uart_ck_name;
917     u32 ck_mode_mask;
918     void __iomem *pdiv_clk_reg;
919     + resource_size_t mapbase;
920     };
921    
922     static struct uartinit uartinit_data[] __initdata = {
923     @@ -97,6 +98,7 @@ static struct uartinit uartinit_data[] __initdata = {
924     .ck_mode_mask =
925     LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 5),
926     .pdiv_clk_reg = LPC32XX_CLKPWR_UART5_CLK_CTRL,
927     + .mapbase = LPC32XX_UART5_BASE,
928     },
929     #endif
930     #ifdef CONFIG_ARCH_LPC32XX_UART3_SELECT
931     @@ -105,6 +107,7 @@ static struct uartinit uartinit_data[] __initdata = {
932     .ck_mode_mask =
933     LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 3),
934     .pdiv_clk_reg = LPC32XX_CLKPWR_UART3_CLK_CTRL,
935     + .mapbase = LPC32XX_UART3_BASE,
936     },
937     #endif
938     #ifdef CONFIG_ARCH_LPC32XX_UART4_SELECT
939     @@ -113,6 +116,7 @@ static struct uartinit uartinit_data[] __initdata = {
940     .ck_mode_mask =
941     LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 4),
942     .pdiv_clk_reg = LPC32XX_CLKPWR_UART4_CLK_CTRL,
943     + .mapbase = LPC32XX_UART4_BASE,
944     },
945     #endif
946     #ifdef CONFIG_ARCH_LPC32XX_UART6_SELECT
947     @@ -121,6 +125,7 @@ static struct uartinit uartinit_data[] __initdata = {
948     .ck_mode_mask =
949     LPC32XX_UART_CLKMODE_LOAD(LPC32XX_UART_CLKMODE_ON, 6),
950     .pdiv_clk_reg = LPC32XX_CLKPWR_UART6_CLK_CTRL,
951     + .mapbase = LPC32XX_UART6_BASE,
952     },
953     #endif
954     };
955     @@ -165,11 +170,24 @@ void __init lpc32xx_serial_init(void)
956    
957     /* pre-UART clock divider set to 1 */
958     __raw_writel(0x0101, uartinit_data[i].pdiv_clk_reg);
959     +
960     + /*
961     + * Force a flush of the RX FIFOs to work around a
962     + * HW bug
963     + */
964     + puart = uartinit_data[i].mapbase;
965     + __raw_writel(0xC1, LPC32XX_UART_IIR_FCR(puart));
966     + __raw_writel(0x00, LPC32XX_UART_DLL_FIFO(puart));
967     + j = LPC32XX_SUART_FIFO_SIZE;
968     + while (j--)
969     + tmp = __raw_readl(
970     + LPC32XX_UART_DLL_FIFO(puart));
971     + __raw_writel(0, LPC32XX_UART_IIR_FCR(puart));
972     }
973    
974     /* This needs to be done after all UART clocks are setup */
975     __raw_writel(clkmodes, LPC32XX_UARTCTL_CLKMODE);
976     - for (i = 0; i < ARRAY_SIZE(uartinit_data) - 1; i++) {
977     + for (i = 0; i < ARRAY_SIZE(uartinit_data); i++) {
978     /* Force a flush of the RX FIFOs to work around a HW bug */
979     puart = serial_std_platform_data[i].mapbase;
980     __raw_writel(0xC1, LPC32XX_UART_IIR_FCR(puart));
981     diff --git a/arch/arm/mach-mv78xx0/common.c b/arch/arm/mach-mv78xx0/common.c
982     index 23d3980..d90e244 100644
983     --- a/arch/arm/mach-mv78xx0/common.c
984     +++ b/arch/arm/mach-mv78xx0/common.c
985     @@ -20,6 +20,7 @@
986     #include <mach/mv78xx0.h>
987     #include <mach/bridge-regs.h>
988     #include <plat/cache-feroceon-l2.h>
989     +#include <plat/ehci-orion.h>
990     #include <plat/orion_nand.h>
991     #include <plat/time.h>
992     #include <plat/common.h>
993     @@ -170,7 +171,7 @@ void __init mv78xx0_map_io(void)
994     void __init mv78xx0_ehci0_init(void)
995     {
996     orion_ehci_init(&mv78xx0_mbus_dram_info,
997     - USB0_PHYS_BASE, IRQ_MV78XX0_USB_0);
998     + USB0_PHYS_BASE, IRQ_MV78XX0_USB_0, EHCI_PHY_NA);
999     }
1000    
1001    
1002     diff --git a/arch/arm/mach-mv78xx0/mpp.h b/arch/arm/mach-mv78xx0/mpp.h
1003     index b61b509..3752302 100644
1004     --- a/arch/arm/mach-mv78xx0/mpp.h
1005     +++ b/arch/arm/mach-mv78xx0/mpp.h
1006     @@ -24,296 +24,296 @@
1007     #define MPP_78100_A0_MASK MPP(0, 0x0, 0, 0, 1)
1008    
1009     #define MPP0_GPIO MPP(0, 0x0, 1, 1, 1)
1010     -#define MPP0_GE0_COL MPP(0, 0x1, 1, 0, 1)
1011     -#define MPP0_GE1_TXCLK MPP(0, 0x2, 0, 1, 1)
1012     +#define MPP0_GE0_COL MPP(0, 0x1, 0, 0, 1)
1013     +#define MPP0_GE1_TXCLK MPP(0, 0x2, 0, 0, 1)
1014     #define MPP0_UNUSED MPP(0, 0x3, 0, 0, 1)
1015    
1016     #define MPP1_GPIO MPP(1, 0x0, 1, 1, 1)
1017     -#define MPP1_GE0_RXERR MPP(1, 0x1, 1, 0, 1)
1018     -#define MPP1_GE1_TXCTL MPP(1, 0x2, 0, 1, 1)
1019     +#define MPP1_GE0_RXERR MPP(1, 0x1, 0, 0, 1)
1020     +#define MPP1_GE1_TXCTL MPP(1, 0x2, 0, 0, 1)
1021     #define MPP1_UNUSED MPP(1, 0x3, 0, 0, 1)
1022    
1023     #define MPP2_GPIO MPP(2, 0x0, 1, 1, 1)
1024     -#define MPP2_GE0_CRS MPP(2, 0x1, 1, 0, 1)
1025     -#define MPP2_GE1_RXCTL MPP(2, 0x2, 1, 0, 1)
1026     +#define MPP2_GE0_CRS MPP(2, 0x1, 0, 0, 1)
1027     +#define MPP2_GE1_RXCTL MPP(2, 0x2, 0, 0, 1)
1028     #define MPP2_UNUSED MPP(2, 0x3, 0, 0, 1)
1029    
1030     #define MPP3_GPIO MPP(3, 0x0, 1, 1, 1)
1031     -#define MPP3_GE0_TXERR MPP(3, 0x1, 0, 1, 1)
1032     -#define MPP3_GE1_RXCLK MPP(3, 0x2, 1, 0, 1)
1033     +#define MPP3_GE0_TXERR MPP(3, 0x1, 0, 0, 1)
1034     +#define MPP3_GE1_RXCLK MPP(3, 0x2, 0, 0, 1)
1035     #define MPP3_UNUSED MPP(3, 0x3, 0, 0, 1)
1036    
1037     #define MPP4_GPIO MPP(4, 0x0, 1, 1, 1)
1038     -#define MPP4_GE0_TXD4 MPP(4, 0x1, 0, 1, 1)
1039     -#define MPP4_GE1_TXD0 MPP(4, 0x2, 0, 1, 1)
1040     +#define MPP4_GE0_TXD4 MPP(4, 0x1, 0, 0, 1)
1041     +#define MPP4_GE1_TXD0 MPP(4, 0x2, 0, 0, 1)
1042     #define MPP4_UNUSED MPP(4, 0x3, 0, 0, 1)
1043    
1044     #define MPP5_GPIO MPP(5, 0x0, 1, 1, 1)
1045     -#define MPP5_GE0_TXD5 MPP(5, 0x1, 0, 1, 1)
1046     -#define MPP5_GE1_TXD1 MPP(5, 0x2, 0, 1, 1)
1047     +#define MPP5_GE0_TXD5 MPP(5, 0x1, 0, 0, 1)
1048     +#define MPP5_GE1_TXD1 MPP(5, 0x2, 0, 0, 1)
1049     #define MPP5_UNUSED MPP(5, 0x3, 0, 0, 1)
1050    
1051     #define MPP6_GPIO MPP(6, 0x0, 1, 1, 1)
1052     -#define MPP6_GE0_TXD6 MPP(6, 0x1, 0, 1, 1)
1053     -#define MPP6_GE1_TXD2 MPP(6, 0x2, 0, 1, 1)
1054     +#define MPP6_GE0_TXD6 MPP(6, 0x1, 0, 0, 1)
1055     +#define MPP6_GE1_TXD2 MPP(6, 0x2, 0, 0, 1)
1056     #define MPP6_UNUSED MPP(6, 0x3, 0, 0, 1)
1057    
1058     #define MPP7_GPIO MPP(7, 0x0, 1, 1, 1)
1059     -#define MPP7_GE0_TXD7 MPP(7, 0x1, 0, 1, 1)
1060     -#define MPP7_GE1_TXD3 MPP(7, 0x2, 0, 1, 1)
1061     +#define MPP7_GE0_TXD7 MPP(7, 0x1, 0, 0, 1)
1062     +#define MPP7_GE1_TXD3 MPP(7, 0x2, 0, 0, 1)
1063     #define MPP7_UNUSED MPP(7, 0x3, 0, 0, 1)
1064    
1065     #define MPP8_GPIO MPP(8, 0x0, 1, 1, 1)
1066     -#define MPP8_GE0_RXD4 MPP(8, 0x1, 1, 0, 1)
1067     -#define MPP8_GE1_RXD0 MPP(8, 0x2, 1, 0, 1)
1068     +#define MPP8_GE0_RXD4 MPP(8, 0x1, 0, 0, 1)
1069     +#define MPP8_GE1_RXD0 MPP(8, 0x2, 0, 0, 1)
1070     #define MPP8_UNUSED MPP(8, 0x3, 0, 0, 1)
1071    
1072     #define MPP9_GPIO MPP(9, 0x0, 1, 1, 1)
1073     -#define MPP9_GE0_RXD5 MPP(9, 0x1, 1, 0, 1)
1074     -#define MPP9_GE1_RXD1 MPP(9, 0x2, 1, 0, 1)
1075     +#define MPP9_GE0_RXD5 MPP(9, 0x1, 0, 0, 1)
1076     +#define MPP9_GE1_RXD1 MPP(9, 0x2, 0, 0, 1)
1077     #define MPP9_UNUSED MPP(9, 0x3, 0, 0, 1)
1078    
1079     #define MPP10_GPIO MPP(10, 0x0, 1, 1, 1)
1080     -#define MPP10_GE0_RXD6 MPP(10, 0x1, 1, 0, 1)
1081     -#define MPP10_GE1_RXD2 MPP(10, 0x2, 1, 0, 1)
1082     +#define MPP10_GE0_RXD6 MPP(10, 0x1, 0, 0, 1)
1083     +#define MPP10_GE1_RXD2 MPP(10, 0x2, 0, 0, 1)
1084     #define MPP10_UNUSED MPP(10, 0x3, 0, 0, 1)
1085    
1086     #define MPP11_GPIO MPP(11, 0x0, 1, 1, 1)
1087     -#define MPP11_GE0_RXD7 MPP(11, 0x1, 1, 0, 1)
1088     -#define MPP11_GE1_RXD3 MPP(11, 0x2, 1, 0, 1)
1089     +#define MPP11_GE0_RXD7 MPP(11, 0x1, 0, 0, 1)
1090     +#define MPP11_GE1_RXD3 MPP(11, 0x2, 0, 0, 1)
1091     #define MPP11_UNUSED MPP(11, 0x3, 0, 0, 1)
1092    
1093     #define MPP12_GPIO MPP(12, 0x0, 1, 1, 1)
1094     -#define MPP12_M_BB MPP(12, 0x3, 1, 0, 1)
1095     -#define MPP12_UA0_CTSn MPP(12, 0x4, 1, 0, 1)
1096     -#define MPP12_NAND_FLASH_REn0 MPP(12, 0x5, 0, 1, 1)
1097     -#define MPP12_TDM0_SCSn MPP(12, 0X6, 0, 1, 1)
1098     +#define MPP12_M_BB MPP(12, 0x3, 0, 0, 1)
1099     +#define MPP12_UA0_CTSn MPP(12, 0x4, 0, 0, 1)
1100     +#define MPP12_NAND_FLASH_REn0 MPP(12, 0x5, 0, 0, 1)
1101     +#define MPP12_TDM0_SCSn MPP(12, 0X6, 0, 0, 1)
1102     #define MPP12_UNUSED MPP(12, 0x1, 0, 0, 1)
1103    
1104     #define MPP13_GPIO MPP(13, 0x0, 1, 1, 1)
1105     -#define MPP13_SYSRST_OUTn MPP(13, 0x3, 0, 1, 1)
1106     -#define MPP13_UA0_RTSn MPP(13, 0x4, 0, 1, 1)
1107     -#define MPP13_NAN_FLASH_WEn0 MPP(13, 0x5, 0, 1, 1)
1108     -#define MPP13_TDM_SCLK MPP(13, 0x6, 0, 1, 1)
1109     +#define MPP13_SYSRST_OUTn MPP(13, 0x3, 0, 0, 1)
1110     +#define MPP13_UA0_RTSn MPP(13, 0x4, 0, 0, 1)
1111     +#define MPP13_NAN_FLASH_WEn0 MPP(13, 0x5, 0, 0, 1)
1112     +#define MPP13_TDM_SCLK MPP(13, 0x6, 0, 0, 1)
1113     #define MPP13_UNUSED MPP(13, 0x1, 0, 0, 1)
1114    
1115     #define MPP14_GPIO MPP(14, 0x0, 1, 1, 1)
1116     -#define MPP14_SATA1_ACTn MPP(14, 0x3, 0, 1, 1)
1117     -#define MPP14_UA1_CTSn MPP(14, 0x4, 1, 0, 1)
1118     -#define MPP14_NAND_FLASH_REn1 MPP(14, 0x5, 0, 1, 1)
1119     -#define MPP14_TDM_SMOSI MPP(14, 0x6, 0, 1, 1)
1120     +#define MPP14_SATA1_ACTn MPP(14, 0x3, 0, 0, 1)
1121     +#define MPP14_UA1_CTSn MPP(14, 0x4, 0, 0, 1)
1122     +#define MPP14_NAND_FLASH_REn1 MPP(14, 0x5, 0, 0, 1)
1123     +#define MPP14_TDM_SMOSI MPP(14, 0x6, 0, 0, 1)
1124     #define MPP14_UNUSED MPP(14, 0x1, 0, 0, 1)
1125    
1126     #define MPP15_GPIO MPP(15, 0x0, 1, 1, 1)
1127     -#define MPP15_SATA0_ACTn MPP(15, 0x3, 0, 1, 1)
1128     -#define MPP15_UA1_RTSn MPP(15, 0x4, 0, 1, 1)
1129     -#define MPP15_NAND_FLASH_WEn1 MPP(15, 0x5, 0, 1, 1)
1130     -#define MPP15_TDM_SMISO MPP(15, 0x6, 1, 0, 1)
1131     +#define MPP15_SATA0_ACTn MPP(15, 0x3, 0, 0, 1)
1132     +#define MPP15_UA1_RTSn MPP(15, 0x4, 0, 0, 1)
1133     +#define MPP15_NAND_FLASH_WEn1 MPP(15, 0x5, 0, 0, 1)
1134     +#define MPP15_TDM_SMISO MPP(15, 0x6, 0, 0, 1)
1135     #define MPP15_UNUSED MPP(15, 0x1, 0, 0, 1)
1136    
1137     #define MPP16_GPIO MPP(16, 0x0, 1, 1, 1)
1138     -#define MPP16_SATA1_PRESENTn MPP(16, 0x3, 0, 1, 1)
1139     -#define MPP16_UA2_TXD MPP(16, 0x4, 0, 1, 1)
1140     -#define MPP16_NAND_FLASH_REn3 MPP(16, 0x5, 0, 1, 1)
1141     -#define MPP16_TDM_INTn MPP(16, 0x6, 1, 0, 1)
1142     +#define MPP16_SATA1_PRESENTn MPP(16, 0x3, 0, 0, 1)
1143     +#define MPP16_UA2_TXD MPP(16, 0x4, 0, 0, 1)
1144     +#define MPP16_NAND_FLASH_REn3 MPP(16, 0x5, 0, 0, 1)
1145     +#define MPP16_TDM_INTn MPP(16, 0x6, 0, 0, 1)
1146     #define MPP16_UNUSED MPP(16, 0x1, 0, 0, 1)
1147    
1148    
1149     #define MPP17_GPIO MPP(17, 0x0, 1, 1, 1)
1150     -#define MPP17_SATA0_PRESENTn MPP(17, 0x3, 0, 1, 1)
1151     -#define MPP17_UA2_RXD MPP(17, 0x4, 1, 0, 1)
1152     -#define MPP17_NAND_FLASH_WEn3 MPP(17, 0x5, 0, 1, 1)
1153     -#define MPP17_TDM_RSTn MPP(17, 0x6, 0, 1, 1)
1154     +#define MPP17_SATA0_PRESENTn MPP(17, 0x3, 0, 0, 1)
1155     +#define MPP17_UA2_RXD MPP(17, 0x4, 0, 0, 1)
1156     +#define MPP17_NAND_FLASH_WEn3 MPP(17, 0x5, 0, 0, 1)
1157     +#define MPP17_TDM_RSTn MPP(17, 0x6, 0, 0, 1)
1158     #define MPP17_UNUSED MPP(17, 0x1, 0, 0, 1)
1159    
1160    
1161     #define MPP18_GPIO MPP(18, 0x0, 1, 1, 1)
1162     -#define MPP18_UA0_CTSn MPP(18, 0x4, 1, 0, 1)
1163     -#define MPP18_BOOT_FLASH_REn MPP(18, 0x5, 0, 1, 1)
1164     +#define MPP18_UA0_CTSn MPP(18, 0x4, 0, 0, 1)
1165     +#define MPP18_BOOT_FLASH_REn MPP(18, 0x5, 0, 0, 1)
1166     #define MPP18_UNUSED MPP(18, 0x1, 0, 0, 1)
1167    
1168    
1169    
1170     #define MPP19_GPIO MPP(19, 0x0, 1, 1, 1)
1171     -#define MPP19_UA0_CTSn MPP(19, 0x4, 0, 1, 1)
1172     -#define MPP19_BOOT_FLASH_WEn MPP(19, 0x5, 0, 1, 1)
1173     +#define MPP19_UA0_CTSn MPP(19, 0x4, 0, 0, 1)
1174     +#define MPP19_BOOT_FLASH_WEn MPP(19, 0x5, 0, 0, 1)
1175     #define MPP19_UNUSED MPP(19, 0x1, 0, 0, 1)
1176    
1177    
1178     #define MPP20_GPIO MPP(20, 0x0, 1, 1, 1)
1179     -#define MPP20_UA1_CTSs MPP(20, 0x4, 1, 0, 1)
1180     -#define MPP20_TDM_PCLK MPP(20, 0x6, 1, 1, 0)
1181     +#define MPP20_UA1_CTSs MPP(20, 0x4, 0, 0, 1)
1182     +#define MPP20_TDM_PCLK MPP(20, 0x6, 0, 0, 0)
1183     #define MPP20_UNUSED MPP(20, 0x1, 0, 0, 1)
1184    
1185    
1186    
1187     #define MPP21_GPIO MPP(21, 0x0, 1, 1, 1)
1188     -#define MPP21_UA1_CTSs MPP(21, 0x4, 0, 1, 1)
1189     -#define MPP21_TDM_FSYNC MPP(21, 0x6, 1, 1, 0)
1190     +#define MPP21_UA1_CTSs MPP(21, 0x4, 0, 0, 1)
1191     +#define MPP21_TDM_FSYNC MPP(21, 0x6, 0, 0, 0)
1192     #define MPP21_UNUSED MPP(21, 0x1, 0, 0, 1)
1193    
1194    
1195    
1196     #define MPP22_GPIO MPP(22, 0x0, 1, 1, 1)
1197     -#define MPP22_UA3_TDX MPP(22, 0x4, 0, 1, 1)
1198     -#define MPP22_NAND_FLASH_REn2 MPP(22, 0x5, 0, 1, 1)
1199     -#define MPP22_TDM_DRX MPP(22, 0x6, 1, 0, 1)
1200     +#define MPP22_UA3_TDX MPP(22, 0x4, 0, 0, 1)
1201     +#define MPP22_NAND_FLASH_REn2 MPP(22, 0x5, 0, 0, 1)
1202     +#define MPP22_TDM_DRX MPP(22, 0x6, 0, 0, 1)
1203     #define MPP22_UNUSED MPP(22, 0x1, 0, 0, 1)
1204    
1205    
1206    
1207     #define MPP23_GPIO MPP(23, 0x0, 1, 1, 1)
1208     -#define MPP23_UA3_RDX MPP(23, 0x4, 1, 0, 1)
1209     -#define MPP23_NAND_FLASH_WEn2 MPP(23, 0x5, 0, 1, 1)
1210     -#define MPP23_TDM_DTX MPP(23, 0x6, 0, 1, 1)
1211     +#define MPP23_UA3_RDX MPP(23, 0x4, 0, 0, 1)
1212     +#define MPP23_NAND_FLASH_WEn2 MPP(23, 0x5, 0, 0, 1)
1213     +#define MPP23_TDM_DTX MPP(23, 0x6, 0, 0, 1)
1214     #define MPP23_UNUSED MPP(23, 0x1, 0, 0, 1)
1215    
1216    
1217     #define MPP24_GPIO MPP(24, 0x0, 1, 1, 1)
1218     -#define MPP24_UA2_TXD MPP(24, 0x4, 0, 1, 1)
1219     -#define MPP24_TDM_INTn MPP(24, 0x6, 1, 0, 1)
1220     +#define MPP24_UA2_TXD MPP(24, 0x4, 0, 0, 1)
1221     +#define MPP24_TDM_INTn MPP(24, 0x6, 0, 0, 1)
1222     #define MPP24_UNUSED MPP(24, 0x1, 0, 0, 1)
1223    
1224    
1225     #define MPP25_GPIO MPP(25, 0x0, 1, 1, 1)
1226     -#define MPP25_UA2_RXD MPP(25, 0x4, 1, 0, 1)
1227     -#define MPP25_TDM_RSTn MPP(25, 0x6, 0, 1, 1)
1228     +#define MPP25_UA2_RXD MPP(25, 0x4, 0, 0, 1)
1229     +#define MPP25_TDM_RSTn MPP(25, 0x6, 0, 0, 1)
1230     #define MPP25_UNUSED MPP(25, 0x1, 0, 0, 1)
1231    
1232    
1233     #define MPP26_GPIO MPP(26, 0x0, 1, 1, 1)
1234     -#define MPP26_UA2_CTSn MPP(26, 0x4, 1, 0, 1)
1235     -#define MPP26_TDM_PCLK MPP(26, 0x6, 1, 1, 1)
1236     +#define MPP26_UA2_CTSn MPP(26, 0x4, 0, 0, 1)
1237     +#define MPP26_TDM_PCLK MPP(26, 0x6, 0, 0, 1)
1238     #define MPP26_UNUSED MPP(26, 0x1, 0, 0, 1)
1239    
1240    
1241     #define MPP27_GPIO MPP(27, 0x0, 1, 1, 1)
1242     -#define MPP27_UA2_RTSn MPP(27, 0x4, 0, 1, 1)
1243     -#define MPP27_TDM_FSYNC MPP(27, 0x6, 1, 1, 1)
1244     +#define MPP27_UA2_RTSn MPP(27, 0x4, 0, 0, 1)
1245     +#define MPP27_TDM_FSYNC MPP(27, 0x6, 0, 0, 1)
1246     #define MPP27_UNUSED MPP(27, 0x1, 0, 0, 1)
1247    
1248    
1249     #define MPP28_GPIO MPP(28, 0x0, 1, 1, 1)
1250     -#define MPP28_UA3_TXD MPP(28, 0x4, 0, 1, 1)
1251     -#define MPP28_TDM_DRX MPP(28, 0x6, 1, 0, 1)
1252     +#define MPP28_UA3_TXD MPP(28, 0x4, 0, 0, 1)
1253     +#define MPP28_TDM_DRX MPP(28, 0x6, 0, 0, 1)
1254     #define MPP28_UNUSED MPP(28, 0x1, 0, 0, 1)
1255    
1256     #define MPP29_GPIO MPP(29, 0x0, 1, 1, 1)
1257     -#define MPP29_UA3_RXD MPP(29, 0x4, 1, 0, 1)
1258     -#define MPP29_SYSRST_OUTn MPP(29, 0x5, 0, 1, 1)
1259     -#define MPP29_TDM_DTX MPP(29, 0x6, 0, 1, 1)
1260     +#define MPP29_UA3_RXD MPP(29, 0x4, 0, 0, 1)
1261     +#define MPP29_SYSRST_OUTn MPP(29, 0x5, 0, 0, 1)
1262     +#define MPP29_TDM_DTX MPP(29, 0x6, 0, 0, 1)
1263     #define MPP29_UNUSED MPP(29, 0x1, 0, 0, 1)
1264    
1265     #define MPP30_GPIO MPP(30, 0x0, 1, 1, 1)
1266     -#define MPP30_UA3_CTSn MPP(30, 0x4, 1, 0, 1)
1267     +#define MPP30_UA3_CTSn MPP(30, 0x4, 0, 0, 1)
1268     #define MPP30_UNUSED MPP(30, 0x1, 0, 0, 1)
1269    
1270     #define MPP31_GPIO MPP(31, 0x0, 1, 1, 1)
1271     -#define MPP31_UA3_RTSn MPP(31, 0x4, 0, 1, 1)
1272     -#define MPP31_TDM1_SCSn MPP(31, 0x6, 0, 1, 1)
1273     +#define MPP31_UA3_RTSn MPP(31, 0x4, 0, 0, 1)
1274     +#define MPP31_TDM1_SCSn MPP(31, 0x6, 0, 0, 1)
1275     #define MPP31_UNUSED MPP(31, 0x1, 0, 0, 1)
1276    
1277    
1278     #define MPP32_GPIO MPP(32, 0x1, 1, 1, 1)
1279     -#define MPP32_UA3_TDX MPP(32, 0x4, 0, 1, 1)
1280     -#define MPP32_SYSRST_OUTn MPP(32, 0x5, 0, 1, 1)
1281     -#define MPP32_TDM0_RXQ MPP(32, 0x6, 0, 1, 1)
1282     +#define MPP32_UA3_TDX MPP(32, 0x4, 0, 0, 1)
1283     +#define MPP32_SYSRST_OUTn MPP(32, 0x5, 0, 0, 1)
1284     +#define MPP32_TDM0_RXQ MPP(32, 0x6, 0, 0, 1)
1285     #define MPP32_UNUSED MPP(32, 0x3, 0, 0, 1)
1286    
1287    
1288     #define MPP33_GPIO MPP(33, 0x1, 1, 1, 1)
1289     -#define MPP33_UA3_RDX MPP(33, 0x4, 1, 0, 1)
1290     -#define MPP33_TDM0_TXQ MPP(33, 0x6, 0, 1, 1)
1291     +#define MPP33_UA3_RDX MPP(33, 0x4, 0, 0, 1)
1292     +#define MPP33_TDM0_TXQ MPP(33, 0x6, 0, 0, 1)
1293     #define MPP33_UNUSED MPP(33, 0x3, 0, 0, 1)
1294    
1295    
1296    
1297     #define MPP34_GPIO MPP(34, 0x1, 1, 1, 1)
1298     -#define MPP34_UA2_TDX MPP(34, 0x4, 0, 1, 1)
1299     -#define MPP34_TDM1_RXQ MPP(34, 0x6, 0, 1, 1)
1300     +#define MPP34_UA2_TDX MPP(34, 0x4, 0, 0, 1)
1301     +#define MPP34_TDM1_RXQ MPP(34, 0x6, 0, 0, 1)
1302     #define MPP34_UNUSED MPP(34, 0x3, 0, 0, 1)
1303    
1304    
1305    
1306     #define MPP35_GPIO MPP(35, 0x1, 1, 1, 1)
1307     -#define MPP35_UA2_RDX MPP(35, 0x4, 1, 0, 1)
1308     -#define MPP35_TDM1_TXQ MPP(35, 0x6, 0, 1, 1)
1309     +#define MPP35_UA2_RDX MPP(35, 0x4, 0, 0, 1)
1310     +#define MPP35_TDM1_TXQ MPP(35, 0x6, 0, 0, 1)
1311     #define MPP35_UNUSED MPP(35, 0x3, 0, 0, 1)
1312    
1313     #define MPP36_GPIO MPP(36, 0x1, 1, 1, 1)
1314     -#define MPP36_UA0_CTSn MPP(36, 0x2, 1, 0, 1)
1315     -#define MPP36_UA2_TDX MPP(36, 0x4, 0, 1, 1)
1316     -#define MPP36_TDM0_SCSn MPP(36, 0x6, 0, 1, 1)
1317     +#define MPP36_UA0_CTSn MPP(36, 0x2, 0, 0, 1)
1318     +#define MPP36_UA2_TDX MPP(36, 0x4, 0, 0, 1)
1319     +#define MPP36_TDM0_SCSn MPP(36, 0x6, 0, 0, 1)
1320     #define MPP36_UNUSED MPP(36, 0x3, 0, 0, 1)
1321    
1322    
1323     #define MPP37_GPIO MPP(37, 0x1, 1, 1, 1)
1324     -#define MPP37_UA0_RTSn MPP(37, 0x2, 0, 1, 1)
1325     -#define MPP37_UA2_RXD MPP(37, 0x4, 1, 0, 1)
1326     -#define MPP37_SYSRST_OUTn MPP(37, 0x5, 0, 1, 1)
1327     -#define MPP37_TDM_SCLK MPP(37, 0x6, 0, 1, 1)
1328     +#define MPP37_UA0_RTSn MPP(37, 0x2, 0, 0, 1)
1329     +#define MPP37_UA2_RXD MPP(37, 0x4, 0, 0, 1)
1330     +#define MPP37_SYSRST_OUTn MPP(37, 0x5, 0, 0, 1)
1331     +#define MPP37_TDM_SCLK MPP(37, 0x6, 0, 0, 1)
1332     #define MPP37_UNUSED MPP(37, 0x3, 0, 0, 1)
1333    
1334    
1335    
1336    
1337     #define MPP38_GPIO MPP(38, 0x1, 1, 1, 1)
1338     -#define MPP38_UA1_CTSn MPP(38, 0x2, 1, 0, 1)
1339     -#define MPP38_UA3_TXD MPP(38, 0x4, 0, 1, 1)
1340     -#define MPP38_SYSRST_OUTn MPP(38, 0x5, 0, 1, 1)
1341     -#define MPP38_TDM_SMOSI MPP(38, 0x6, 0, 1, 1)
1342     +#define MPP38_UA1_CTSn MPP(38, 0x2, 0, 0, 1)
1343     +#define MPP38_UA3_TXD MPP(38, 0x4, 0, 0, 1)
1344     +#define MPP38_SYSRST_OUTn MPP(38, 0x5, 0, 0, 1)
1345     +#define MPP38_TDM_SMOSI MPP(38, 0x6, 0, 0, 1)
1346     #define MPP38_UNUSED MPP(38, 0x3, 0, 0, 1)
1347    
1348    
1349    
1350    
1351     #define MPP39_GPIO MPP(39, 0x1, 1, 1, 1)
1352     -#define MPP39_UA1_RTSn MPP(39, 0x2, 0, 1, 1)
1353     -#define MPP39_UA3_RXD MPP(39, 0x4, 1, 0, 1)
1354     -#define MPP39_SYSRST_OUTn MPP(39, 0x5, 0, 1, 1)
1355     -#define MPP39_TDM_SMISO MPP(39, 0x6, 1, 0, 1)
1356     +#define MPP39_UA1_RTSn MPP(39, 0x2, 0, 0, 1)
1357     +#define MPP39_UA3_RXD MPP(39, 0x4, 0, 0, 1)
1358     +#define MPP39_SYSRST_OUTn MPP(39, 0x5, 0, 0, 1)
1359     +#define MPP39_TDM_SMISO MPP(39, 0x6, 0, 0, 1)
1360     #define MPP39_UNUSED MPP(39, 0x3, 0, 0, 1)
1361    
1362    
1363    
1364     #define MPP40_GPIO MPP(40, 0x1, 1, 1, 1)
1365     -#define MPP40_TDM_INTn MPP(40, 0x6, 1, 0, 1)
1366     +#define MPP40_TDM_INTn MPP(40, 0x6, 0, 0, 1)
1367     #define MPP40_UNUSED MPP(40, 0x0, 0, 0, 1)
1368    
1369    
1370    
1371     #define MPP41_GPIO MPP(41, 0x1, 1, 1, 1)
1372     -#define MPP41_TDM_RSTn MPP(41, 0x6, 0, 1, 1)
1373     +#define MPP41_TDM_RSTn MPP(41, 0x6, 0, 0, 1)
1374     #define MPP41_UNUSED MPP(41, 0x0, 0, 0, 1)
1375    
1376    
1377    
1378     #define MPP42_GPIO MPP(42, 0x1, 1, 1, 1)
1379     -#define MPP42_TDM_PCLK MPP(42, 0x6, 1, 1, 1)
1380     +#define MPP42_TDM_PCLK MPP(42, 0x6, 0, 0, 1)
1381     #define MPP42_UNUSED MPP(42, 0x0, 0, 0, 1)
1382    
1383    
1384    
1385     #define MPP43_GPIO MPP(43, 0x1, 1, 1, 1)
1386     -#define MPP43_TDM_FSYNC MPP(43, 0x6, 1, 1, 1)
1387     +#define MPP43_TDM_FSYNC MPP(43, 0x6, 0, 0, 1)
1388     #define MPP43_UNUSED MPP(43, 0x0, 0, 0, 1)
1389    
1390    
1391    
1392     #define MPP44_GPIO MPP(44, 0x1, 1, 1, 1)
1393     -#define MPP44_TDM_DRX MPP(44, 0x6, 1, 0, 1)
1394     +#define MPP44_TDM_DRX MPP(44, 0x6, 0, 0, 1)
1395     #define MPP44_UNUSED MPP(44, 0x0, 0, 0, 1)
1396    
1397    
1398    
1399     #define MPP45_GPIO MPP(45, 0x1, 1, 1, 1)
1400     -#define MPP45_SATA0_ACTn MPP(45, 0x3, 0, 1, 1)
1401     -#define MPP45_TDM_DRX MPP(45, 0x6, 0, 1, 1)
1402     +#define MPP45_SATA0_ACTn MPP(45, 0x3, 0, 0, 1)
1403     +#define MPP45_TDM_DRX MPP(45, 0x6, 0, 0, 1)
1404     #define MPP45_UNUSED MPP(45, 0x0, 0, 0, 1)
1405    
1406    
1407     #define MPP46_GPIO MPP(46, 0x1, 1, 1, 1)
1408     -#define MPP46_TDM_SCSn MPP(46, 0x6, 0, 1, 1)
1409     +#define MPP46_TDM_SCSn MPP(46, 0x6, 0, 0, 1)
1410     #define MPP46_UNUSED MPP(46, 0x0, 0, 0, 1)
1411    
1412    
1413     @@ -323,14 +323,14 @@
1414    
1415    
1416     #define MPP48_GPIO MPP(48, 0x1, 1, 1, 1)
1417     -#define MPP48_SATA1_ACTn MPP(48, 0x3, 0, 1, 1)
1418     +#define MPP48_SATA1_ACTn MPP(48, 0x3, 0, 0, 1)
1419     #define MPP48_UNUSED MPP(48, 0x2, 0, 0, 1)
1420    
1421    
1422    
1423     #define MPP49_GPIO MPP(49, 0x1, 1, 1, 1)
1424     -#define MPP49_SATA0_ACTn MPP(49, 0x3, 0, 1, 1)
1425     -#define MPP49_M_BB MPP(49, 0x4, 1, 0, 1)
1426     +#define MPP49_SATA0_ACTn MPP(49, 0x3, 0, 0, 1)
1427     +#define MPP49_M_BB MPP(49, 0x4, 0, 0, 1)
1428     #define MPP49_UNUSED MPP(49, 0x2, 0, 0, 1)
1429    
1430    
1431     diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
1432     index 5156468..02cd29a 100644
1433     --- a/arch/arm/mach-omap2/board-4430sdp.c
1434     +++ b/arch/arm/mach-omap2/board-4430sdp.c
1435     @@ -52,8 +52,9 @@
1436     #define ETH_KS8851_QUART 138
1437     #define OMAP4_SFH7741_SENSOR_OUTPUT_GPIO 184
1438     #define OMAP4_SFH7741_ENABLE_GPIO 188
1439     -#define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */
1440     +#define HDMI_GPIO_CT_CP_HPD 60 /* HPD mode enable/disable */
1441     #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
1442     +#define HDMI_GPIO_HPD 63 /* Hotplug detect */
1443     #define DISPLAY_SEL_GPIO 59 /* LCD2/PicoDLP switch */
1444     #define DLP_POWER_ON_GPIO 40
1445    
1446     @@ -597,12 +598,8 @@ static void __init omap_sfh7741prox_init(void)
1447    
1448     static void sdp4430_hdmi_mux_init(void)
1449     {
1450     - /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
1451     - omap_mux_init_signal("hdmi_hpd",
1452     - OMAP_PIN_INPUT_PULLUP);
1453     omap_mux_init_signal("hdmi_cec",
1454     OMAP_PIN_INPUT_PULLUP);
1455     - /* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
1456     omap_mux_init_signal("hdmi_ddc_scl",
1457     OMAP_PIN_INPUT_PULLUP);
1458     omap_mux_init_signal("hdmi_ddc_sda",
1459     @@ -610,8 +607,9 @@ static void sdp4430_hdmi_mux_init(void)
1460     }
1461    
1462     static struct gpio sdp4430_hdmi_gpios[] = {
1463     - { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
1464     + { HDMI_GPIO_CT_CP_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ct_cp_hpd" },
1465     { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
1466     + { HDMI_GPIO_HPD, GPIOF_DIR_IN, "hdmi_gpio_hpd" },
1467     };
1468    
1469     static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev)
1470     @@ -628,8 +626,7 @@ static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev)
1471    
1472     static void sdp4430_panel_disable_hdmi(struct omap_dss_device *dssdev)
1473     {
1474     - gpio_free(HDMI_GPIO_LS_OE);
1475     - gpio_free(HDMI_GPIO_HPD);
1476     + gpio_free_array(sdp4430_hdmi_gpios, ARRAY_SIZE(sdp4430_hdmi_gpios));
1477     }
1478    
1479     static struct nokia_dsi_panel_data dsi1_panel = {
1480     @@ -745,6 +742,10 @@ static void sdp4430_lcd_init(void)
1481     pr_err("%s: Could not get lcd2_reset_gpio\n", __func__);
1482     }
1483    
1484     +static struct omap_dss_hdmi_data sdp4430_hdmi_data = {
1485     + .hpd_gpio = HDMI_GPIO_HPD,
1486     +};
1487     +
1488     static struct omap_dss_device sdp4430_hdmi_device = {
1489     .name = "hdmi",
1490     .driver_name = "hdmi_panel",
1491     @@ -752,6 +753,7 @@ static struct omap_dss_device sdp4430_hdmi_device = {
1492     .platform_enable = sdp4430_panel_enable_hdmi,
1493     .platform_disable = sdp4430_panel_disable_hdmi,
1494     .channel = OMAP_DSS_CHANNEL_DIGIT,
1495     + .data = &sdp4430_hdmi_data,
1496     };
1497    
1498     static struct picodlp_panel_data sdp4430_picodlp_pdata = {
1499     @@ -829,6 +831,10 @@ static void omap_4430sdp_display_init(void)
1500     sdp4430_hdmi_mux_init();
1501     sdp4430_picodlp_init();
1502     omap_display_init(&sdp4430_dss_data);
1503     +
1504     + omap_mux_init_gpio(HDMI_GPIO_LS_OE, OMAP_PIN_OUTPUT);
1505     + omap_mux_init_gpio(HDMI_GPIO_CT_CP_HPD, OMAP_PIN_OUTPUT);
1506     + omap_mux_init_gpio(HDMI_GPIO_HPD, OMAP_PIN_INPUT_PULLDOWN);
1507     }
1508    
1509     #ifdef CONFIG_OMAP_MUX
1510     diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
1511     index a8c2c42..51b1c93 100644
1512     --- a/arch/arm/mach-omap2/board-omap4panda.c
1513     +++ b/arch/arm/mach-omap2/board-omap4panda.c
1514     @@ -51,8 +51,9 @@
1515     #define GPIO_HUB_NRESET 62
1516     #define GPIO_WIFI_PMENA 43
1517     #define GPIO_WIFI_IRQ 53
1518     -#define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */
1519     +#define HDMI_GPIO_CT_CP_HPD 60 /* HPD mode enable/disable */
1520     #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
1521     +#define HDMI_GPIO_HPD 63 /* Hotplug detect */
1522    
1523     /* wl127x BT, FM, GPS connectivity chip */
1524     static int wl1271_gpios[] = {46, -1, -1};
1525     @@ -481,12 +482,8 @@ int __init omap4_panda_dvi_init(void)
1526    
1527     static void omap4_panda_hdmi_mux_init(void)
1528     {
1529     - /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
1530     - omap_mux_init_signal("hdmi_hpd",
1531     - OMAP_PIN_INPUT_PULLUP);
1532     omap_mux_init_signal("hdmi_cec",
1533     OMAP_PIN_INPUT_PULLUP);
1534     - /* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
1535     omap_mux_init_signal("hdmi_ddc_scl",
1536     OMAP_PIN_INPUT_PULLUP);
1537     omap_mux_init_signal("hdmi_ddc_sda",
1538     @@ -494,8 +491,9 @@ static void omap4_panda_hdmi_mux_init(void)
1539     }
1540    
1541     static struct gpio panda_hdmi_gpios[] = {
1542     - { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
1543     + { HDMI_GPIO_CT_CP_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ct_cp_hpd" },
1544     { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
1545     + { HDMI_GPIO_HPD, GPIOF_DIR_IN, "hdmi_gpio_hpd" },
1546     };
1547    
1548     static int omap4_panda_panel_enable_hdmi(struct omap_dss_device *dssdev)
1549     @@ -512,10 +510,13 @@ static int omap4_panda_panel_enable_hdmi(struct omap_dss_device *dssdev)
1550    
1551     static void omap4_panda_panel_disable_hdmi(struct omap_dss_device *dssdev)
1552     {
1553     - gpio_free(HDMI_GPIO_LS_OE);
1554     - gpio_free(HDMI_GPIO_HPD);
1555     + gpio_free_array(panda_hdmi_gpios, ARRAY_SIZE(panda_hdmi_gpios));
1556     }
1557    
1558     +static struct omap_dss_hdmi_data omap4_panda_hdmi_data = {
1559     + .hpd_gpio = HDMI_GPIO_HPD,
1560     +};
1561     +
1562     static struct omap_dss_device omap4_panda_hdmi_device = {
1563     .name = "hdmi",
1564     .driver_name = "hdmi_panel",
1565     @@ -523,6 +524,7 @@ static struct omap_dss_device omap4_panda_hdmi_device = {
1566     .platform_enable = omap4_panda_panel_enable_hdmi,
1567     .platform_disable = omap4_panda_panel_disable_hdmi,
1568     .channel = OMAP_DSS_CHANNEL_DIGIT,
1569     + .data = &omap4_panda_hdmi_data,
1570     };
1571    
1572     static struct omap_dss_device *omap4_panda_dss_devices[] = {
1573     @@ -546,6 +548,10 @@ void omap4_panda_display_init(void)
1574    
1575     omap4_panda_hdmi_mux_init();
1576     omap_display_init(&omap4_panda_dss_data);
1577     +
1578     + omap_mux_init_gpio(HDMI_GPIO_LS_OE, OMAP_PIN_OUTPUT);
1579     + omap_mux_init_gpio(HDMI_GPIO_CT_CP_HPD, OMAP_PIN_OUTPUT);
1580     + omap_mux_init_gpio(HDMI_GPIO_HPD, OMAP_PIN_INPUT_PULLDOWN);
1581     }
1582    
1583     static void __init omap4_panda_init(void)
1584     diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c
1585     index b882204..ac49384 100644
1586     --- a/arch/arm/mach-omap2/omap-iommu.c
1587     +++ b/arch/arm/mach-omap2/omap-iommu.c
1588     @@ -150,7 +150,8 @@ err_out:
1589     platform_device_put(omap_iommu_pdev[i]);
1590     return err;
1591     }
1592     -module_init(omap_iommu_init);
1593     +/* must be ready before omap3isp is probed */
1594     +subsys_initcall(omap_iommu_init);
1595    
1596     static void __exit omap_iommu_exit(void)
1597     {
1598     diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c
1599     index 22ace0b..53b68b8 100644
1600     --- a/arch/arm/mach-orion5x/common.c
1601     +++ b/arch/arm/mach-orion5x/common.c
1602     @@ -29,6 +29,7 @@
1603     #include <mach/hardware.h>
1604     #include <mach/orion5x.h>
1605     #include <plat/orion_nand.h>
1606     +#include <plat/ehci-orion.h>
1607     #include <plat/time.h>
1608     #include <plat/common.h>
1609     #include "common.h"
1610     @@ -72,7 +73,8 @@ void __init orion5x_map_io(void)
1611     void __init orion5x_ehci0_init(void)
1612     {
1613     orion_ehci_init(&orion5x_mbus_dram_info,
1614     - ORION5X_USB0_PHYS_BASE, IRQ_ORION5X_USB0_CTRL);
1615     + ORION5X_USB0_PHYS_BASE, IRQ_ORION5X_USB0_CTRL,
1616     + EHCI_PHY_ORION);
1617     }
1618    
1619    
1620     diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
1621     index 40cc7aa..82ef81d 100644
1622     --- a/arch/arm/mm/proc-v7.S
1623     +++ b/arch/arm/mm/proc-v7.S
1624     @@ -352,9 +352,7 @@ __v7_setup:
1625     mcreq p15, 0, r10, c15, c0, 1 @ write diagnostic register
1626     #endif
1627     #ifdef CONFIG_ARM_ERRATA_743622
1628     - teq r6, #0x20 @ present in r2p0
1629     - teqne r6, #0x21 @ present in r2p1
1630     - teqne r6, #0x22 @ present in r2p2
1631     + teq r5, #0x00200000 @ only present in r2p*
1632     mrceq p15, 0, r10, c15, c0, 1 @ read diagnostic register
1633     orreq r10, r10, #1 << 6 @ set bit #6
1634     mcreq p15, 0, r10, c15, c0, 1 @ write diagnostic register
1635     diff --git a/arch/arm/plat-orion/common.c b/arch/arm/plat-orion/common.c
1636     index 9e5451b..11dce87 100644
1637     --- a/arch/arm/plat-orion/common.c
1638     +++ b/arch/arm/plat-orion/common.c
1639     @@ -806,10 +806,7 @@ void __init orion_xor1_init(unsigned long mapbase_low,
1640     /*****************************************************************************
1641     * EHCI
1642     ****************************************************************************/
1643     -static struct orion_ehci_data orion_ehci_data = {
1644     - .phy_version = EHCI_PHY_NA,
1645     -};
1646     -
1647     +static struct orion_ehci_data orion_ehci_data;
1648     static u64 ehci_dmamask = DMA_BIT_MASK(32);
1649    
1650    
1651     @@ -830,9 +827,11 @@ static struct platform_device orion_ehci = {
1652    
1653     void __init orion_ehci_init(struct mbus_dram_target_info *mbus_dram_info,
1654     unsigned long mapbase,
1655     - unsigned long irq)
1656     + unsigned long irq,
1657     + enum orion_ehci_phy_ver phy_version)
1658     {
1659     orion_ehci_data.dram = mbus_dram_info;
1660     + orion_ehci_data.phy_version = phy_version;
1661     fill_resources(&orion_ehci, orion_ehci_resources, mapbase, SZ_4K - 1,
1662     irq);
1663    
1664     diff --git a/arch/arm/plat-orion/include/plat/common.h b/arch/arm/plat-orion/include/plat/common.h
1665     index a63c357..a2c0e31 100644
1666     --- a/arch/arm/plat-orion/include/plat/common.h
1667     +++ b/arch/arm/plat-orion/include/plat/common.h
1668     @@ -95,7 +95,8 @@ void __init orion_xor1_init(unsigned long mapbase_low,
1669    
1670     void __init orion_ehci_init(struct mbus_dram_target_info *mbus_dram_info,
1671     unsigned long mapbase,
1672     - unsigned long irq);
1673     + unsigned long irq,
1674     + enum orion_ehci_phy_ver phy_version);
1675    
1676     void __init orion_ehci_1_init(struct mbus_dram_target_info *mbus_dram_info,
1677     unsigned long mapbase,
1678     diff --git a/arch/arm/plat-orion/mpp.c b/arch/arm/plat-orion/mpp.c
1679     index 9155343..3b1e17b 100644
1680     --- a/arch/arm/plat-orion/mpp.c
1681     +++ b/arch/arm/plat-orion/mpp.c
1682     @@ -64,8 +64,7 @@ void __init orion_mpp_conf(unsigned int *mpp_list, unsigned int variant_mask,
1683     gpio_mode |= GPIO_INPUT_OK;
1684     if (*mpp_list & MPP_OUTPUT_MASK)
1685     gpio_mode |= GPIO_OUTPUT_OK;
1686     - if (sel != 0)
1687     - gpio_mode = 0;
1688     +
1689     orion_gpio_set_valid(num, gpio_mode);
1690     }
1691    
1692     diff --git a/arch/arm/plat-s3c24xx/dma.c b/arch/arm/plat-s3c24xx/dma.c
1693     index 53754bc..8a90b6a 100644
1694     --- a/arch/arm/plat-s3c24xx/dma.c
1695     +++ b/arch/arm/plat-s3c24xx/dma.c
1696     @@ -1249,7 +1249,7 @@ static void s3c2410_dma_resume(void)
1697     struct s3c2410_dma_chan *cp = s3c2410_chans + dma_channels - 1;
1698     int channel;
1699    
1700     - for (channel = dma_channels - 1; channel >= 0; cp++, channel--)
1701     + for (channel = dma_channels - 1; channel >= 0; cp--, channel--)
1702     s3c2410_dma_resume_chan(cp);
1703     }
1704    
1705     diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig
1706     index 197e96f..3dea7231 100644
1707     --- a/arch/avr32/Kconfig
1708     +++ b/arch/avr32/Kconfig
1709     @@ -8,6 +8,7 @@ config AVR32
1710     select HAVE_KPROBES
1711     select HAVE_GENERIC_HARDIRQS
1712     select GENERIC_IRQ_PROBE
1713     + select GENERIC_ATOMIC64
1714     select HARDIRQS_SW_RESEND
1715     select GENERIC_IRQ_SHOW
1716     select ARCH_HAVE_NMI_SAFE_CMPXCHG
1717     diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
1718     index 373679b..f929db9 100644
1719     --- a/arch/s390/Kconfig
1720     +++ b/arch/s390/Kconfig
1721     @@ -230,6 +230,9 @@ config COMPAT
1722     config SYSVIPC_COMPAT
1723     def_bool y if COMPAT && SYSVIPC
1724    
1725     +config KEYS_COMPAT
1726     + def_bool y if COMPAT && KEYS
1727     +
1728     config AUDIT_ARCH
1729     def_bool y
1730    
1731     diff --git a/arch/s390/include/asm/compat.h b/arch/s390/include/asm/compat.h
1732     index 2e49748..234f1d8 100644
1733     --- a/arch/s390/include/asm/compat.h
1734     +++ b/arch/s390/include/asm/compat.h
1735     @@ -172,13 +172,6 @@ static inline int is_compat_task(void)
1736     return is_32bit_task();
1737     }
1738    
1739     -#else
1740     -
1741     -static inline int is_compat_task(void)
1742     -{
1743     - return 0;
1744     -}
1745     -
1746     #endif
1747    
1748     static inline void __user *arch_compat_alloc_user_space(long len)
1749     diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
1750     index 9451b21..53088e2 100644
1751     --- a/arch/s390/kernel/process.c
1752     +++ b/arch/s390/kernel/process.c
1753     @@ -29,7 +29,6 @@
1754     #include <asm/irq.h>
1755     #include <asm/timer.h>
1756     #include <asm/nmi.h>
1757     -#include <asm/compat.h>
1758     #include <asm/smp.h>
1759     #include "entry.h"
1760    
1761     diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c
1762     index 573bc29..afe82bc 100644
1763     --- a/arch/s390/kernel/ptrace.c
1764     +++ b/arch/s390/kernel/ptrace.c
1765     @@ -20,8 +20,8 @@
1766     #include <linux/regset.h>
1767     #include <linux/tracehook.h>
1768     #include <linux/seccomp.h>
1769     +#include <linux/compat.h>
1770     #include <trace/syscall.h>
1771     -#include <asm/compat.h>
1772     #include <asm/segment.h>
1773     #include <asm/page.h>
1774     #include <asm/pgtable.h>
1775     diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
1776     index e54c4ff..773f55e 100644
1777     --- a/arch/s390/kernel/setup.c
1778     +++ b/arch/s390/kernel/setup.c
1779     @@ -45,6 +45,7 @@
1780     #include <linux/kexec.h>
1781     #include <linux/crash_dump.h>
1782     #include <linux/memory.h>
1783     +#include <linux/compat.h>
1784    
1785     #include <asm/ipl.h>
1786     #include <asm/uaccess.h>
1787     @@ -58,7 +59,6 @@
1788     #include <asm/ptrace.h>
1789     #include <asm/sections.h>
1790     #include <asm/ebcdic.h>
1791     -#include <asm/compat.h>
1792     #include <asm/kvm_virtio.h>
1793     #include <asm/diag.h>
1794    
1795     diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c
1796     index 7f6f9f3..5086553 100644
1797     --- a/arch/s390/kernel/signal.c
1798     +++ b/arch/s390/kernel/signal.c
1799     @@ -30,7 +30,6 @@
1800     #include <asm/ucontext.h>
1801     #include <asm/uaccess.h>
1802     #include <asm/lowcore.h>
1803     -#include <asm/compat.h>
1804     #include "entry.h"
1805    
1806     #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
1807     diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
1808     index a9a3018..c7f0fbc 100644
1809     --- a/arch/s390/mm/fault.c
1810     +++ b/arch/s390/mm/fault.c
1811     @@ -36,7 +36,6 @@
1812     #include <asm/pgtable.h>
1813     #include <asm/irq.h>
1814     #include <asm/mmu_context.h>
1815     -#include <asm/compat.h>
1816     #include "../kernel/entry.h"
1817    
1818     #ifndef CONFIG_64BIT
1819     diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c
1820     index f09c748..a0155c0 100644
1821     --- a/arch/s390/mm/mmap.c
1822     +++ b/arch/s390/mm/mmap.c
1823     @@ -29,8 +29,8 @@
1824     #include <linux/mman.h>
1825     #include <linux/module.h>
1826     #include <linux/random.h>
1827     +#include <linux/compat.h>
1828     #include <asm/pgalloc.h>
1829     -#include <asm/compat.h>
1830    
1831     static unsigned long stack_maxrandom_size(void)
1832     {
1833     diff --git a/arch/x86/include/asm/perf_event.h b/arch/x86/include/asm/perf_event.h
1834     index f61c62f..50d7ff2 100644
1835     --- a/arch/x86/include/asm/perf_event.h
1836     +++ b/arch/x86/include/asm/perf_event.h
1837     @@ -212,4 +212,12 @@ static inline perf_guest_switch_msr *perf_guest_get_msrs(int *nr)
1838     static inline void perf_events_lapic_init(void) { }
1839     #endif
1840    
1841     +#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_AMD)
1842     + extern void amd_pmu_enable_virt(void);
1843     + extern void amd_pmu_disable_virt(void);
1844     +#else
1845     + static inline void amd_pmu_enable_virt(void) { }
1846     + static inline void amd_pmu_disable_virt(void) { }
1847     +#endif
1848     +
1849     #endif /* _ASM_X86_PERF_EVENT_H */
1850     diff --git a/arch/x86/kernel/cpu/perf_event.h b/arch/x86/kernel/cpu/perf_event.h
1851     index b9698d4..02e0295 100644
1852     --- a/arch/x86/kernel/cpu/perf_event.h
1853     +++ b/arch/x86/kernel/cpu/perf_event.h
1854     @@ -146,7 +146,9 @@ struct cpu_hw_events {
1855     /*
1856     * AMD specific bits
1857     */
1858     - struct amd_nb *amd_nb;
1859     + struct amd_nb *amd_nb;
1860     + /* Inverted mask of bits to clear in the perf_ctr ctrl registers */
1861     + u64 perf_ctr_virt_mask;
1862    
1863     void *kfree_on_online;
1864     };
1865     @@ -372,9 +374,11 @@ void x86_pmu_disable_all(void);
1866     static inline void __x86_pmu_enable_event(struct hw_perf_event *hwc,
1867     u64 enable_mask)
1868     {
1869     + u64 disable_mask = __this_cpu_read(cpu_hw_events.perf_ctr_virt_mask);
1870     +
1871     if (hwc->extra_reg.reg)
1872     wrmsrl(hwc->extra_reg.reg, hwc->extra_reg.config);
1873     - wrmsrl(hwc->config_base, hwc->config | enable_mask);
1874     + wrmsrl(hwc->config_base, (hwc->config | enable_mask) & ~disable_mask);
1875     }
1876    
1877     void x86_pmu_enable_all(int added);
1878     diff --git a/arch/x86/kernel/cpu/perf_event_amd.c b/arch/x86/kernel/cpu/perf_event_amd.c
1879     index aeefd45..f64a039 100644
1880     --- a/arch/x86/kernel/cpu/perf_event_amd.c
1881     +++ b/arch/x86/kernel/cpu/perf_event_amd.c
1882     @@ -1,4 +1,5 @@
1883     #include <linux/perf_event.h>
1884     +#include <linux/export.h>
1885     #include <linux/types.h>
1886     #include <linux/init.h>
1887     #include <linux/slab.h>
1888     @@ -357,7 +358,9 @@ static void amd_pmu_cpu_starting(int cpu)
1889     struct amd_nb *nb;
1890     int i, nb_id;
1891    
1892     - if (boot_cpu_data.x86_max_cores < 2)
1893     + cpuc->perf_ctr_virt_mask = AMD_PERFMON_EVENTSEL_HOSTONLY;
1894     +
1895     + if (boot_cpu_data.x86_max_cores < 2 || boot_cpu_data.x86 == 0x15)
1896     return;
1897    
1898     nb_id = amd_get_nb_id(cpu);
1899     @@ -587,9 +590,9 @@ static __initconst const struct x86_pmu amd_pmu_f15h = {
1900     .put_event_constraints = amd_put_event_constraints,
1901    
1902     .cpu_prepare = amd_pmu_cpu_prepare,
1903     - .cpu_starting = amd_pmu_cpu_starting,
1904     .cpu_dead = amd_pmu_cpu_dead,
1905     #endif
1906     + .cpu_starting = amd_pmu_cpu_starting,
1907     };
1908    
1909     __init int amd_pmu_init(void)
1910     @@ -621,3 +624,33 @@ __init int amd_pmu_init(void)
1911    
1912     return 0;
1913     }
1914     +
1915     +void amd_pmu_enable_virt(void)
1916     +{
1917     + struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
1918     +
1919     + cpuc->perf_ctr_virt_mask = 0;
1920     +
1921     + /* Reload all events */
1922     + x86_pmu_disable_all();
1923     + x86_pmu_enable_all(0);
1924     +}
1925     +EXPORT_SYMBOL_GPL(amd_pmu_enable_virt);
1926     +
1927     +void amd_pmu_disable_virt(void)
1928     +{
1929     + struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
1930     +
1931     + /*
1932     + * We only mask out the Host-only bit so that host-only counting works
1933     + * when SVM is disabled. If someone sets up a guest-only counter when
1934     + * SVM is disabled the Guest-only bits still gets set and the counter
1935     + * will not count anything.
1936     + */
1937     + cpuc->perf_ctr_virt_mask = AMD_PERFMON_EVENTSEL_HOSTONLY;
1938     +
1939     + /* Reload all events */
1940     + x86_pmu_disable_all();
1941     + x86_pmu_enable_all(0);
1942     +}
1943     +EXPORT_SYMBOL_GPL(amd_pmu_disable_virt);
1944     diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
1945     index e32243e..94a4672 100644
1946     --- a/arch/x86/kvm/svm.c
1947     +++ b/arch/x86/kvm/svm.c
1948     @@ -29,6 +29,7 @@
1949     #include <linux/ftrace_event.h>
1950     #include <linux/slab.h>
1951    
1952     +#include <asm/perf_event.h>
1953     #include <asm/tlbflush.h>
1954     #include <asm/desc.h>
1955     #include <asm/kvm_para.h>
1956     @@ -575,6 +576,8 @@ static void svm_hardware_disable(void *garbage)
1957     wrmsrl(MSR_AMD64_TSC_RATIO, TSC_RATIO_DEFAULT);
1958    
1959     cpu_svm_disable();
1960     +
1961     + amd_pmu_disable_virt();
1962     }
1963    
1964     static int svm_hardware_enable(void *garbage)
1965     @@ -622,6 +625,8 @@ static int svm_hardware_enable(void *garbage)
1966    
1967     svm_init_erratum_383();
1968    
1969     + amd_pmu_enable_virt();
1970     +
1971     return 0;
1972     }
1973    
1974     diff --git a/block/bsg.c b/block/bsg.c
1975     index 702f131..c0ab25c 100644
1976     --- a/block/bsg.c
1977     +++ b/block/bsg.c
1978     @@ -985,7 +985,8 @@ void bsg_unregister_queue(struct request_queue *q)
1979    
1980     mutex_lock(&bsg_mutex);
1981     idr_remove(&bsg_minor_idr, bcd->minor);
1982     - sysfs_remove_link(&q->kobj, "bsg");
1983     + if (q->kobj.sd)
1984     + sysfs_remove_link(&q->kobj, "bsg");
1985     device_unregister(bcd->class_dev);
1986     bcd->class_dev = NULL;
1987     kref_put(&bcd->ref, bsg_kref_release_function);
1988     diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
1989     index 6d9a3ab..0a7ed69 100644
1990     --- a/drivers/acpi/sleep.c
1991     +++ b/drivers/acpi/sleep.c
1992     @@ -476,6 +476,22 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
1993     DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW520F"),
1994     },
1995     },
1996     + {
1997     + .callback = init_nvs_nosave,
1998     + .ident = "Asus K54C",
1999     + .matches = {
2000     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."),
2001     + DMI_MATCH(DMI_PRODUCT_NAME, "K54C"),
2002     + },
2003     + },
2004     + {
2005     + .callback = init_nvs_nosave,
2006     + .ident = "Asus K54HR",
2007     + .matches = {
2008     + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."),
2009     + DMI_MATCH(DMI_PRODUCT_NAME, "K54HR"),
2010     + },
2011     + },
2012     {},
2013     };
2014     #endif /* CONFIG_SUSPEND */
2015     diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
2016     index dcd8bab..fe79635 100644
2017     --- a/drivers/crypto/mv_cesa.c
2018     +++ b/drivers/crypto/mv_cesa.c
2019     @@ -714,6 +714,7 @@ static int mv_hash_final(struct ahash_request *req)
2020     {
2021     struct mv_req_hash_ctx *ctx = ahash_request_ctx(req);
2022    
2023     + ahash_request_set_crypt(req, NULL, req->result, 0);
2024     mv_update_hash_req_ctx(ctx, 1, 0);
2025     return mv_handle_req(&req->base);
2026     }
2027     diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
2028     index a26d5b0..1608d2a 100644
2029     --- a/drivers/gpu/drm/i915/i915_reg.h
2030     +++ b/drivers/gpu/drm/i915/i915_reg.h
2031     @@ -2886,6 +2886,20 @@
2032     #define DISP_TILE_SURFACE_SWIZZLING (1<<13)
2033     #define DISP_FBC_WM_DIS (1<<15)
2034    
2035     +/* GEN7 chicken */
2036     +#define GEN7_COMMON_SLICE_CHICKEN1 0x7010
2037     +# define GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC ((1<<10) | (1<<26))
2038     +
2039     +#define GEN7_L3CNTLREG1 0xB01C
2040     +#define GEN7_WA_FOR_GEN7_L3_CONTROL 0x3C4FFF8C
2041     +
2042     +#define GEN7_L3_CHICKEN_MODE_REGISTER 0xB030
2043     +#define GEN7_WA_L3_CHICKEN_MODE 0x20000000
2044     +
2045     +/* WaCatErrorRejectionIssue */
2046     +#define GEN7_SQ_CHICKEN_MBCUNIT_CONFIG 0x9030
2047     +#define GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB (1<<11)
2048     +
2049     /* PCH */
2050    
2051     /* south display engine interrupt */
2052     @@ -3476,6 +3490,7 @@
2053     #define GT_FIFO_NUM_RESERVED_ENTRIES 20
2054    
2055     #define GEN6_UCGCTL2 0x9404
2056     +# define GEN6_RCZUNIT_CLOCK_GATE_DISABLE (1 << 13)
2057     # define GEN6_RCPBUNIT_CLOCK_GATE_DISABLE (1 << 12)
2058     # define GEN6_RCCUNIT_CLOCK_GATE_DISABLE (1 << 11)
2059    
2060     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
2061     index daa5743..9ec9755 100644
2062     --- a/drivers/gpu/drm/i915/intel_display.c
2063     +++ b/drivers/gpu/drm/i915/intel_display.c
2064     @@ -5876,14 +5876,14 @@ static void ironlake_write_eld(struct drm_connector *connector,
2065     int aud_cntl_st;
2066     int aud_cntrl_st2;
2067    
2068     - if (IS_IVYBRIDGE(connector->dev)) {
2069     - hdmiw_hdmiedid = GEN7_HDMIW_HDMIEDID_A;
2070     - aud_cntl_st = GEN7_AUD_CNTRL_ST_A;
2071     - aud_cntrl_st2 = GEN7_AUD_CNTRL_ST2;
2072     - } else {
2073     + if (HAS_PCH_IBX(connector->dev)) {
2074     hdmiw_hdmiedid = GEN5_HDMIW_HDMIEDID_A;
2075     aud_cntl_st = GEN5_AUD_CNTL_ST_A;
2076     aud_cntrl_st2 = GEN5_AUD_CNTL_ST2;
2077     + } else {
2078     + hdmiw_hdmiedid = GEN7_HDMIW_HDMIEDID_A;
2079     + aud_cntl_st = GEN7_AUD_CNTRL_ST_A;
2080     + aud_cntrl_st2 = GEN7_AUD_CNTRL_ST2;
2081     }
2082    
2083     i = to_intel_crtc(crtc)->pipe;
2084     @@ -5965,7 +5965,7 @@ void intel_crtc_load_lut(struct drm_crtc *crtc)
2085     int i;
2086    
2087     /* The clocks have to be on to load the palette. */
2088     - if (!crtc->enabled)
2089     + if (!crtc->enabled || !intel_crtc->active)
2090     return;
2091    
2092     /* use legacy palette for Ironlake */
2093     @@ -8248,8 +8248,28 @@ static void ivybridge_init_clock_gating(struct drm_device *dev)
2094     I915_WRITE(WM2_LP_ILK, 0);
2095     I915_WRITE(WM1_LP_ILK, 0);
2096    
2097     + /* According to the spec, bit 13 (RCZUNIT) must be set on IVB.
2098     + * This implements the WaDisableRCZUnitClockGating workaround.
2099     + */
2100     + I915_WRITE(GEN6_UCGCTL2, GEN6_RCZUNIT_CLOCK_GATE_DISABLE);
2101     +
2102     I915_WRITE(ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE);
2103    
2104     + /* Apply the WaDisableRHWOOptimizationForRenderHang workaround. */
2105     + I915_WRITE(GEN7_COMMON_SLICE_CHICKEN1,
2106     + GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC);
2107     +
2108     + /* WaApplyL3ControlAndL3ChickenMode requires those two on Ivy Bridge */
2109     + I915_WRITE(GEN7_L3CNTLREG1,
2110     + GEN7_WA_FOR_GEN7_L3_CONTROL);
2111     + I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER,
2112     + GEN7_WA_L3_CHICKEN_MODE);
2113     +
2114     + /* This is required by WaCatErrorRejectionIssue */
2115     + I915_WRITE(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,
2116     + I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
2117     + GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);
2118     +
2119     for_each_pipe(pipe) {
2120     I915_WRITE(DSPCNTR(pipe),
2121     I915_READ(DSPCNTR(pipe)) |
2122     diff --git a/drivers/gpu/drm/radeon/r600_blit_shaders.c b/drivers/gpu/drm/radeon/r600_blit_shaders.c
2123     index 2d1f6c5..73e2c7c 100644
2124     --- a/drivers/gpu/drm/radeon/r600_blit_shaders.c
2125     +++ b/drivers/gpu/drm/radeon/r600_blit_shaders.c
2126     @@ -314,6 +314,10 @@ const u32 r6xx_default_state[] =
2127     0x00000000, /* VGT_VTX_CNT_EN */
2128    
2129     0xc0016900,
2130     + 0x000000d4,
2131     + 0x00000000, /* SX_MISC */
2132     +
2133     + 0xc0016900,
2134     0x000002c8,
2135     0x00000000, /* VGT_STRMOUT_BUFFER_EN */
2136    
2137     @@ -626,6 +630,10 @@ const u32 r7xx_default_state[] =
2138     0x00000000, /* VGT_VTX_CNT_EN */
2139    
2140     0xc0016900,
2141     + 0x000000d4,
2142     + 0x00000000, /* SX_MISC */
2143     +
2144     + 0xc0016900,
2145     0x000002c8,
2146     0x00000000, /* VGT_STRMOUT_BUFFER_EN */
2147    
2148     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
2149     index 00cabb3..3c3daec 100644
2150     --- a/drivers/hid/hid-ids.h
2151     +++ b/drivers/hid/hid-ids.h
2152     @@ -59,6 +59,9 @@
2153     #define USB_VENDOR_ID_AIRCABLE 0x16CA
2154     #define USB_DEVICE_ID_AIRCABLE1 0x1502
2155    
2156     +#define USB_VENDOR_ID_AIREN 0x1a2c
2157     +#define USB_DEVICE_ID_AIREN_SLIMPLUS 0x0002
2158     +
2159     #define USB_VENDOR_ID_ALCOR 0x058f
2160     #define USB_DEVICE_ID_ALCOR_USBRS232 0x9720
2161    
2162     diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
2163     index 5028d60..1fe6b80 100644
2164     --- a/drivers/hid/usbhid/hid-quirks.c
2165     +++ b/drivers/hid/usbhid/hid-quirks.c
2166     @@ -53,6 +53,7 @@ static const struct hid_blacklist {
2167     { USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT },
2168     { USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS, HID_QUIRK_MULTI_INPUT },
2169    
2170     + { USB_VENDOR_ID_AIREN, USB_DEVICE_ID_AIREN_SLIMPLUS, HID_QUIRK_NOGET },
2171     { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET },
2172     { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET },
2173     { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
2174     diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
2175     index 91be41f..83e3e9d 100644
2176     --- a/drivers/hwmon/Kconfig
2177     +++ b/drivers/hwmon/Kconfig
2178     @@ -497,8 +497,9 @@ config SENSORS_JC42
2179     If you say yes here, you get support for JEDEC JC42.4 compliant
2180     temperature sensors, which are used on many DDR3 memory modules for
2181     mobile devices and servers. Support will include, but not be limited
2182     - to, ADT7408, CAT34TS02, CAT6095, MAX6604, MCP9805, MCP98242, MCP98243,
2183     - MCP9843, SE97, SE98, STTS424(E), TSE2002B3, and TS3000B3.
2184     + to, ADT7408, AT30TS00, CAT34TS02, CAT6095, MAX6604, MCP9804, MCP9805,
2185     + MCP98242, MCP98243, MCP9843, SE97, SE98, STTS424(E), STTS2002,
2186     + STTS3000, TSE2002B3, TSE2002GB2, TS3000B3, and TS3000GB2.
2187    
2188     This driver can also be built as a module. If so, the module
2189     will be called jc42.
2190     diff --git a/drivers/hwmon/jc42.c b/drivers/hwmon/jc42.c
2191     index 2d3d728..0274a05 100644
2192     --- a/drivers/hwmon/jc42.c
2193     +++ b/drivers/hwmon/jc42.c
2194     @@ -64,6 +64,7 @@ static const unsigned short normal_i2c[] = {
2195    
2196     /* Manufacturer IDs */
2197     #define ADT_MANID 0x11d4 /* Analog Devices */
2198     +#define ATMEL_MANID 0x001f /* Atmel */
2199     #define MAX_MANID 0x004d /* Maxim */
2200     #define IDT_MANID 0x00b3 /* IDT */
2201     #define MCP_MANID 0x0054 /* Microchip */
2202     @@ -77,15 +78,25 @@ static const unsigned short normal_i2c[] = {
2203     #define ADT7408_DEVID 0x0801
2204     #define ADT7408_DEVID_MASK 0xffff
2205    
2206     +/* Atmel */
2207     +#define AT30TS00_DEVID 0x8201
2208     +#define AT30TS00_DEVID_MASK 0xffff
2209     +
2210     /* IDT */
2211     #define TS3000B3_DEVID 0x2903 /* Also matches TSE2002B3 */
2212     #define TS3000B3_DEVID_MASK 0xffff
2213    
2214     +#define TS3000GB2_DEVID 0x2912 /* Also matches TSE2002GB2 */
2215     +#define TS3000GB2_DEVID_MASK 0xffff
2216     +
2217     /* Maxim */
2218     #define MAX6604_DEVID 0x3e00
2219     #define MAX6604_DEVID_MASK 0xffff
2220    
2221     /* Microchip */
2222     +#define MCP9804_DEVID 0x0200
2223     +#define MCP9804_DEVID_MASK 0xfffc
2224     +
2225     #define MCP98242_DEVID 0x2000
2226     #define MCP98242_DEVID_MASK 0xfffc
2227    
2228     @@ -113,6 +124,12 @@ static const unsigned short normal_i2c[] = {
2229     #define STTS424E_DEVID 0x0000
2230     #define STTS424E_DEVID_MASK 0xfffe
2231    
2232     +#define STTS2002_DEVID 0x0300
2233     +#define STTS2002_DEVID_MASK 0xffff
2234     +
2235     +#define STTS3000_DEVID 0x0200
2236     +#define STTS3000_DEVID_MASK 0xffff
2237     +
2238     static u16 jc42_hysteresis[] = { 0, 1500, 3000, 6000 };
2239    
2240     struct jc42_chips {
2241     @@ -123,8 +140,11 @@ struct jc42_chips {
2242    
2243     static struct jc42_chips jc42_chips[] = {
2244     { ADT_MANID, ADT7408_DEVID, ADT7408_DEVID_MASK },
2245     + { ATMEL_MANID, AT30TS00_DEVID, AT30TS00_DEVID_MASK },
2246     { IDT_MANID, TS3000B3_DEVID, TS3000B3_DEVID_MASK },
2247     + { IDT_MANID, TS3000GB2_DEVID, TS3000GB2_DEVID_MASK },
2248     { MAX_MANID, MAX6604_DEVID, MAX6604_DEVID_MASK },
2249     + { MCP_MANID, MCP9804_DEVID, MCP9804_DEVID_MASK },
2250     { MCP_MANID, MCP98242_DEVID, MCP98242_DEVID_MASK },
2251     { MCP_MANID, MCP98243_DEVID, MCP98243_DEVID_MASK },
2252     { MCP_MANID, MCP9843_DEVID, MCP9843_DEVID_MASK },
2253     @@ -133,6 +153,8 @@ static struct jc42_chips jc42_chips[] = {
2254     { NXP_MANID, SE98_DEVID, SE98_DEVID_MASK },
2255     { STM_MANID, STTS424_DEVID, STTS424_DEVID_MASK },
2256     { STM_MANID, STTS424E_DEVID, STTS424E_DEVID_MASK },
2257     + { STM_MANID, STTS2002_DEVID, STTS2002_DEVID_MASK },
2258     + { STM_MANID, STTS3000_DEVID, STTS3000_DEVID_MASK },
2259     };
2260    
2261     /* Each client has this additional data */
2262     @@ -159,10 +181,12 @@ static struct jc42_data *jc42_update_device(struct device *dev);
2263    
2264     static const struct i2c_device_id jc42_id[] = {
2265     { "adt7408", 0 },
2266     + { "at30ts00", 0 },
2267     { "cat94ts02", 0 },
2268     { "cat6095", 0 },
2269     { "jc42", 0 },
2270     { "max6604", 0 },
2271     + { "mcp9804", 0 },
2272     { "mcp9805", 0 },
2273     { "mcp98242", 0 },
2274     { "mcp98243", 0 },
2275     @@ -171,8 +195,10 @@ static const struct i2c_device_id jc42_id[] = {
2276     { "se97b", 0 },
2277     { "se98", 0 },
2278     { "stts424", 0 },
2279     - { "tse2002b3", 0 },
2280     - { "ts3000b3", 0 },
2281     + { "stts2002", 0 },
2282     + { "stts3000", 0 },
2283     + { "tse2002", 0 },
2284     + { "ts3000", 0 },
2285     { }
2286     };
2287     MODULE_DEVICE_TABLE(i2c, jc42_id);
2288     diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c
2289     index 00460d8..d89b339 100644
2290     --- a/drivers/hwmon/pmbus/pmbus_core.c
2291     +++ b/drivers/hwmon/pmbus/pmbus_core.c
2292     @@ -54,7 +54,8 @@
2293     lcrit_alarm, crit_alarm */
2294     #define PMBUS_IOUT_BOOLEANS_PER_PAGE 3 /* alarm, lcrit_alarm,
2295     crit_alarm */
2296     -#define PMBUS_POUT_BOOLEANS_PER_PAGE 2 /* alarm, crit_alarm */
2297     +#define PMBUS_POUT_BOOLEANS_PER_PAGE 3 /* cap_alarm, alarm, crit_alarm
2298     + */
2299     #define PMBUS_MAX_BOOLEANS_PER_FAN 2 /* alarm, fault */
2300     #define PMBUS_MAX_BOOLEANS_PER_TEMP 4 /* min_alarm, max_alarm,
2301     lcrit_alarm, crit_alarm */
2302     diff --git a/drivers/hwmon/pmbus/zl6100.c b/drivers/hwmon/pmbus/zl6100.c
2303     index 2bc9800..ba296fd 100644
2304     --- a/drivers/hwmon/pmbus/zl6100.c
2305     +++ b/drivers/hwmon/pmbus/zl6100.c
2306     @@ -33,6 +33,7 @@ enum chips { zl2004, zl2006, zl2008, zl2105, zl2106, zl6100, zl6105 };
2307     struct zl6100_data {
2308     int id;
2309     ktime_t access; /* chip access time */
2310     + int delay; /* Delay between chip accesses in uS */
2311     struct pmbus_driver_info info;
2312     };
2313    
2314     @@ -49,10 +50,10 @@ MODULE_PARM_DESC(delay, "Delay between chip accesses in uS");
2315     /* Some chips need a delay between accesses */
2316     static inline void zl6100_wait(const struct zl6100_data *data)
2317     {
2318     - if (delay) {
2319     + if (data->delay) {
2320     s64 delta = ktime_us_delta(ktime_get(), data->access);
2321     - if (delta < delay)
2322     - udelay(delay - delta);
2323     + if (delta < data->delay)
2324     + udelay(data->delay - delta);
2325     }
2326     }
2327    
2328     @@ -184,8 +185,9 @@ static int zl6100_probe(struct i2c_client *client,
2329     * can be cleared later for additional chips if tests show that it
2330     * is not needed (in other words, better be safe than sorry).
2331     */
2332     + data->delay = delay;
2333     if (data->id == zl2004 || data->id == zl6105)
2334     - delay = 0;
2335     + data->delay = 0;
2336    
2337     /*
2338     * Since there was a direct I2C device access above, wait before
2339     diff --git a/drivers/i2c/busses/i2c-mxs.c b/drivers/i2c/busses/i2c-mxs.c
2340     index 7e78f7c..3d471d5 100644
2341     --- a/drivers/i2c/busses/i2c-mxs.c
2342     +++ b/drivers/i2c/busses/i2c-mxs.c
2343     @@ -72,6 +72,7 @@
2344    
2345     #define MXS_I2C_QUEUESTAT (0x70)
2346     #define MXS_I2C_QUEUESTAT_RD_QUEUE_EMPTY 0x00002000
2347     +#define MXS_I2C_QUEUESTAT_WRITE_QUEUE_CNT_MASK 0x0000001F
2348    
2349     #define MXS_I2C_QUEUECMD (0x80)
2350    
2351     @@ -219,14 +220,14 @@ static int mxs_i2c_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg,
2352     int ret;
2353     int flags;
2354    
2355     - init_completion(&i2c->cmd_complete);
2356     -
2357     dev_dbg(i2c->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n",
2358     msg->addr, msg->len, msg->flags, stop);
2359    
2360     if (msg->len == 0)
2361     return -EINVAL;
2362    
2363     + init_completion(&i2c->cmd_complete);
2364     +
2365     flags = stop ? MXS_I2C_CTRL0_POST_SEND_STOP : 0;
2366    
2367     if (msg->flags & I2C_M_RD)
2368     @@ -286,6 +287,7 @@ static irqreturn_t mxs_i2c_isr(int this_irq, void *dev_id)
2369     {
2370     struct mxs_i2c_dev *i2c = dev_id;
2371     u32 stat = readl(i2c->regs + MXS_I2C_CTRL1) & MXS_I2C_IRQ_MASK;
2372     + bool is_last_cmd;
2373    
2374     if (!stat)
2375     return IRQ_NONE;
2376     @@ -300,9 +302,14 @@ static irqreturn_t mxs_i2c_isr(int this_irq, void *dev_id)
2377     else
2378     i2c->cmd_err = 0;
2379    
2380     - complete(&i2c->cmd_complete);
2381     + is_last_cmd = (readl(i2c->regs + MXS_I2C_QUEUESTAT) &
2382     + MXS_I2C_QUEUESTAT_WRITE_QUEUE_CNT_MASK) == 0;
2383     +
2384     + if (is_last_cmd || i2c->cmd_err)
2385     + complete(&i2c->cmd_complete);
2386    
2387     writel(stat, i2c->regs + MXS_I2C_CTRL1_CLR);
2388     +
2389     return IRQ_HANDLED;
2390     }
2391    
2392     diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
2393     index 003587c..9c40c11 100644
2394     --- a/drivers/input/mouse/alps.c
2395     +++ b/drivers/input/mouse/alps.c
2396     @@ -421,7 +421,9 @@ static const struct alps_model_info *alps_get_model(struct psmouse *psmouse, int
2397    
2398     /*
2399     * First try "E6 report".
2400     - * ALPS should return 0,0,10 or 0,0,100
2401     + * ALPS should return 0,0,10 or 0,0,100 if no buttons are pressed.
2402     + * The bits 0-2 of the first byte will be 1s if some buttons are
2403     + * pressed.
2404     */
2405     param[0] = 0;
2406     if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES) ||
2407     @@ -437,7 +439,8 @@ static const struct alps_model_info *alps_get_model(struct psmouse *psmouse, int
2408     psmouse_dbg(psmouse, "E6 report: %2.2x %2.2x %2.2x",
2409     param[0], param[1], param[2]);
2410    
2411     - if (param[0] != 0 || param[1] != 0 || (param[2] != 10 && param[2] != 100))
2412     + if ((param[0] & 0xf8) != 0 || param[1] != 0 ||
2413     + (param[2] != 10 && param[2] != 100))
2414     return NULL;
2415    
2416     /*
2417     diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
2418     index 82d2410..5c74179 100644
2419     --- a/drivers/iommu/amd_iommu_init.c
2420     +++ b/drivers/iommu/amd_iommu_init.c
2421     @@ -268,7 +268,7 @@ static void iommu_set_exclusion_range(struct amd_iommu *iommu)
2422     }
2423    
2424     /* Programs the physical address of the device table into the IOMMU hardware */
2425     -static void __init iommu_set_device_table(struct amd_iommu *iommu)
2426     +static void iommu_set_device_table(struct amd_iommu *iommu)
2427     {
2428     u64 entry;
2429    
2430     diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c
2431     index 8f32b2b..aba706c 100644
2432     --- a/drivers/iommu/omap-iommu.c
2433     +++ b/drivers/iommu/omap-iommu.c
2434     @@ -1229,7 +1229,8 @@ static int __init omap_iommu_init(void)
2435    
2436     return platform_driver_register(&omap_iommu_driver);
2437     }
2438     -module_init(omap_iommu_init);
2439     +/* must be ready before omap3isp is probed */
2440     +subsys_initcall(omap_iommu_init);
2441    
2442     static void __exit omap_iommu_exit(void)
2443     {
2444     diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
2445     index 9fb18c1..b280c43 100644
2446     --- a/drivers/md/dm-flakey.c
2447     +++ b/drivers/md/dm-flakey.c
2448     @@ -323,7 +323,7 @@ static int flakey_end_io(struct dm_target *ti, struct bio *bio,
2449     * Corrupt successful READs while in down state.
2450     * If flags were specified, only corrupt those that match.
2451     */
2452     - if (!error && bio_submitted_while_down &&
2453     + if (fc->corrupt_bio_byte && !error && bio_submitted_while_down &&
2454     (bio_data_dir(bio) == READ) && (fc->corrupt_bio_rw == READ) &&
2455     all_corrupt_bio_flags_match(bio, fc))
2456     corrupt_bio_data(bio, fc);
2457     diff --git a/drivers/md/dm-io.c b/drivers/md/dm-io.c
2458     index ad2eba4..ea5dd28 100644
2459     --- a/drivers/md/dm-io.c
2460     +++ b/drivers/md/dm-io.c
2461     @@ -296,6 +296,8 @@ static void do_region(int rw, unsigned region, struct dm_io_region *where,
2462     unsigned offset;
2463     unsigned num_bvecs;
2464     sector_t remaining = where->count;
2465     + struct request_queue *q = bdev_get_queue(where->bdev);
2466     + sector_t discard_sectors;
2467    
2468     /*
2469     * where->count may be zero if rw holds a flush and we need to
2470     @@ -305,9 +307,12 @@ static void do_region(int rw, unsigned region, struct dm_io_region *where,
2471     /*
2472     * Allocate a suitably sized-bio.
2473     */
2474     - num_bvecs = dm_sector_div_up(remaining,
2475     - (PAGE_SIZE >> SECTOR_SHIFT));
2476     - num_bvecs = min_t(int, bio_get_nr_vecs(where->bdev), num_bvecs);
2477     + if (rw & REQ_DISCARD)
2478     + num_bvecs = 1;
2479     + else
2480     + num_bvecs = min_t(int, bio_get_nr_vecs(where->bdev),
2481     + dm_sector_div_up(remaining, (PAGE_SIZE >> SECTOR_SHIFT)));
2482     +
2483     bio = bio_alloc_bioset(GFP_NOIO, num_bvecs, io->client->bios);
2484     bio->bi_sector = where->sector + (where->count - remaining);
2485     bio->bi_bdev = where->bdev;
2486     @@ -315,10 +320,14 @@ static void do_region(int rw, unsigned region, struct dm_io_region *where,
2487     bio->bi_destructor = dm_bio_destructor;
2488     store_io_and_region_in_bio(bio, io, region);
2489    
2490     - /*
2491     - * Try and add as many pages as possible.
2492     - */
2493     - while (remaining) {
2494     + if (rw & REQ_DISCARD) {
2495     + discard_sectors = min_t(sector_t, q->limits.max_discard_sectors, remaining);
2496     + bio->bi_size = discard_sectors << SECTOR_SHIFT;
2497     + remaining -= discard_sectors;
2498     + } else while (remaining) {
2499     + /*
2500     + * Try and add as many pages as possible.
2501     + */
2502     dp->get_page(dp, &page, &len, &offset);
2503     len = min(len, to_bytes(remaining));
2504     if (!bio_add_page(bio, page, len, offset))
2505     diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
2506     index 31c2dc2..1ce84ed 100644
2507     --- a/drivers/md/dm-ioctl.c
2508     +++ b/drivers/md/dm-ioctl.c
2509     @@ -1437,7 +1437,7 @@ static int target_message(struct dm_ioctl *param, size_t param_size)
2510    
2511     if (!argc) {
2512     DMWARN("Empty message received.");
2513     - goto out;
2514     + goto out_argv;
2515     }
2516    
2517     table = dm_get_live_table(md);
2518     diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
2519     index c2907d8..d2a3223 100644
2520     --- a/drivers/md/dm-raid.c
2521     +++ b/drivers/md/dm-raid.c
2522     @@ -667,7 +667,14 @@ static int super_load(struct md_rdev *rdev, struct md_rdev *refdev)
2523     return ret;
2524    
2525     sb = page_address(rdev->sb_page);
2526     - if (sb->magic != cpu_to_le32(DM_RAID_MAGIC)) {
2527     +
2528     + /*
2529     + * Two cases that we want to write new superblocks and rebuild:
2530     + * 1) New device (no matching magic number)
2531     + * 2) Device specified for rebuild (!In_sync w/ offset == 0)
2532     + */
2533     + if ((sb->magic != cpu_to_le32(DM_RAID_MAGIC)) ||
2534     + (!test_bit(In_sync, &rdev->flags) && !rdev->recovery_offset)) {
2535     super_sync(rdev->mddev, rdev);
2536    
2537     set_bit(FirstUse, &rdev->flags);
2538     @@ -744,11 +751,8 @@ static int super_init_validation(struct mddev *mddev, struct md_rdev *rdev)
2539     */
2540     rdev_for_each(r, t, mddev) {
2541     if (!test_bit(In_sync, &r->flags)) {
2542     - if (!test_bit(FirstUse, &r->flags))
2543     - DMERR("Superblock area of "
2544     - "rebuild device %d should have been "
2545     - "cleared.", r->raid_disk);
2546     - set_bit(FirstUse, &r->flags);
2547     + DMINFO("Device %d specified for rebuild: "
2548     + "Clearing superblock", r->raid_disk);
2549     rebuilds++;
2550     } else if (test_bit(FirstUse, &r->flags))
2551     new_devs++;
2552     @@ -970,6 +974,7 @@ static int raid_ctr(struct dm_target *ti, unsigned argc, char **argv)
2553    
2554     INIT_WORK(&rs->md.event_work, do_table_event);
2555     ti->private = rs;
2556     + ti->num_flush_requests = 1;
2557    
2558     mutex_lock(&rs->md.reconfig_mutex);
2559     ret = md_run(&rs->md);
2560     diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c
2561     index 59c4f04..237571a 100644
2562     --- a/drivers/md/dm-thin-metadata.c
2563     +++ b/drivers/md/dm-thin-metadata.c
2564     @@ -385,6 +385,7 @@ static int init_pmd(struct dm_pool_metadata *pmd,
2565     data_sm = dm_sm_disk_create(tm, nr_blocks);
2566     if (IS_ERR(data_sm)) {
2567     DMERR("sm_disk_create failed");
2568     + dm_tm_unlock(tm, sblock);
2569     r = PTR_ERR(data_sm);
2570     goto bad;
2571     }
2572     @@ -789,6 +790,11 @@ int dm_pool_metadata_close(struct dm_pool_metadata *pmd)
2573     return 0;
2574     }
2575    
2576     +/*
2577     + * __open_device: Returns @td corresponding to device with id @dev,
2578     + * creating it if @create is set and incrementing @td->open_count.
2579     + * On failure, @td is undefined.
2580     + */
2581     static int __open_device(struct dm_pool_metadata *pmd,
2582     dm_thin_id dev, int create,
2583     struct dm_thin_device **td)
2584     @@ -799,10 +805,16 @@ static int __open_device(struct dm_pool_metadata *pmd,
2585     struct disk_device_details details_le;
2586    
2587     /*
2588     - * Check the device isn't already open.
2589     + * If the device is already open, return it.
2590     */
2591     list_for_each_entry(td2, &pmd->thin_devices, list)
2592     if (td2->id == dev) {
2593     + /*
2594     + * May not create an already-open device.
2595     + */
2596     + if (create)
2597     + return -EEXIST;
2598     +
2599     td2->open_count++;
2600     *td = td2;
2601     return 0;
2602     @@ -817,6 +829,9 @@ static int __open_device(struct dm_pool_metadata *pmd,
2603     if (r != -ENODATA || !create)
2604     return r;
2605    
2606     + /*
2607     + * Create new device.
2608     + */
2609     changed = 1;
2610     details_le.mapped_blocks = 0;
2611     details_le.transaction_id = cpu_to_le64(pmd->trans_id);
2612     @@ -882,12 +897,10 @@ static int __create_thin(struct dm_pool_metadata *pmd,
2613    
2614     r = __open_device(pmd, dev, 1, &td);
2615     if (r) {
2616     - __close_device(td);
2617     dm_btree_remove(&pmd->tl_info, pmd->root, &key, &pmd->root);
2618     dm_btree_del(&pmd->bl_info, dev_root);
2619     return r;
2620     }
2621     - td->changed = 1;
2622     __close_device(td);
2623    
2624     return r;
2625     @@ -967,14 +980,14 @@ static int __create_snap(struct dm_pool_metadata *pmd,
2626     goto bad;
2627    
2628     r = __set_snapshot_details(pmd, td, origin, pmd->time);
2629     + __close_device(td);
2630     +
2631     if (r)
2632     goto bad;
2633    
2634     - __close_device(td);
2635     return 0;
2636    
2637     bad:
2638     - __close_device(td);
2639     dm_btree_remove(&pmd->tl_info, pmd->root, &key, &pmd->root);
2640     dm_btree_remove(&pmd->details_info, pmd->details_root,
2641     &key, &pmd->details_root);
2642     @@ -1211,6 +1224,8 @@ static int __remove(struct dm_thin_device *td, dm_block_t block)
2643     if (r)
2644     return r;
2645    
2646     + td->mapped_blocks--;
2647     + td->changed = 1;
2648     pmd->need_commit = 1;
2649    
2650     return 0;
2651     diff --git a/drivers/mfd/cs5535-mfd.c b/drivers/mfd/cs5535-mfd.c
2652     index 155fa04..e488a78 100644
2653     --- a/drivers/mfd/cs5535-mfd.c
2654     +++ b/drivers/mfd/cs5535-mfd.c
2655     @@ -179,7 +179,7 @@ static struct pci_device_id cs5535_mfd_pci_tbl[] = {
2656     };
2657     MODULE_DEVICE_TABLE(pci, cs5535_mfd_pci_tbl);
2658    
2659     -static struct pci_driver cs5535_mfd_drv = {
2660     +static struct pci_driver cs5535_mfd_driver = {
2661     .name = DRV_NAME,
2662     .id_table = cs5535_mfd_pci_tbl,
2663     .probe = cs5535_mfd_probe,
2664     @@ -188,12 +188,12 @@ static struct pci_driver cs5535_mfd_drv = {
2665    
2666     static int __init cs5535_mfd_init(void)
2667     {
2668     - return pci_register_driver(&cs5535_mfd_drv);
2669     + return pci_register_driver(&cs5535_mfd_driver);
2670     }
2671    
2672     static void __exit cs5535_mfd_exit(void)
2673     {
2674     - pci_unregister_driver(&cs5535_mfd_drv);
2675     + pci_unregister_driver(&cs5535_mfd_driver);
2676     }
2677    
2678     module_init(cs5535_mfd_init);
2679     diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c
2680     index 0f59228..411f523 100644
2681     --- a/drivers/mfd/mfd-core.c
2682     +++ b/drivers/mfd/mfd-core.c
2683     @@ -123,7 +123,7 @@ static int mfd_add_device(struct device *parent, int id,
2684     }
2685    
2686     if (!cell->ignore_resource_conflicts) {
2687     - ret = acpi_check_resource_conflict(res);
2688     + ret = acpi_check_resource_conflict(&res[r]);
2689     if (ret)
2690     goto fail_res;
2691     }
2692     diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c
2693     index 61894fc..9302d21 100644
2694     --- a/drivers/mfd/wm8994-core.c
2695     +++ b/drivers/mfd/wm8994-core.c
2696     @@ -252,6 +252,20 @@ static int wm8994_suspend(struct device *dev)
2697     break;
2698     }
2699    
2700     + switch (wm8994->type) {
2701     + case WM1811:
2702     + ret = wm8994_reg_read(wm8994, WM8994_ANTIPOP_2);
2703     + if (ret < 0) {
2704     + dev_err(dev, "Failed to read jackdet: %d\n", ret);
2705     + } else if (ret & WM1811_JACKDET_MODE_MASK) {
2706     + dev_dbg(dev, "CODEC still active, ignoring suspend\n");
2707     + return 0;
2708     + }
2709     + break;
2710     + default:
2711     + break;
2712     + }
2713     +
2714     /* Disable LDO pulldowns while the device is suspended if we
2715     * don't know that something will be driving them. */
2716     if (!wm8994->ldo_ena_always_driven)
2717     diff --git a/drivers/misc/cs5535-mfgpt.c b/drivers/misc/cs5535-mfgpt.c
2718     index bc685bf..87a390d 100644
2719     --- a/drivers/misc/cs5535-mfgpt.c
2720     +++ b/drivers/misc/cs5535-mfgpt.c
2721     @@ -262,7 +262,7 @@ static void __init reset_all_timers(void)
2722     * In other cases (such as with VSAless OpenFirmware), the system firmware
2723     * leaves timers available for us to use.
2724     */
2725     -static int __init scan_timers(struct cs5535_mfgpt_chip *mfgpt)
2726     +static int __devinit scan_timers(struct cs5535_mfgpt_chip *mfgpt)
2727     {
2728     struct cs5535_mfgpt_timer timer = { .chip = mfgpt };
2729     unsigned long flags;
2730     diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
2731     index 72bc756..9896933 100644
2732     --- a/drivers/mmc/host/atmel-mci.c
2733     +++ b/drivers/mmc/host/atmel-mci.c
2734     @@ -1944,12 +1944,12 @@ static bool atmci_filter(struct dma_chan *chan, void *slave)
2735     }
2736     }
2737    
2738     -static void atmci_configure_dma(struct atmel_mci *host)
2739     +static bool atmci_configure_dma(struct atmel_mci *host)
2740     {
2741     struct mci_platform_data *pdata;
2742    
2743     if (host == NULL)
2744     - return;
2745     + return false;
2746    
2747     pdata = host->pdev->dev.platform_data;
2748    
2749     @@ -1966,12 +1966,15 @@ static void atmci_configure_dma(struct atmel_mci *host)
2750     host->dma.chan =
2751     dma_request_channel(mask, atmci_filter, pdata->dma_slave);
2752     }
2753     - if (!host->dma.chan)
2754     - dev_notice(&host->pdev->dev, "DMA not available, using PIO\n");
2755     - else
2756     + if (!host->dma.chan) {
2757     + dev_warn(&host->pdev->dev, "no DMA channel available\n");
2758     + return false;
2759     + } else {
2760     dev_info(&host->pdev->dev,
2761     "Using %s for DMA transfers\n",
2762     dma_chan_name(host->dma.chan));
2763     + return true;
2764     + }
2765     }
2766    
2767     static inline unsigned int atmci_get_version(struct atmel_mci *host)
2768     @@ -2081,8 +2084,7 @@ static int __init atmci_probe(struct platform_device *pdev)
2769    
2770     /* Get MCI capabilities and set operations according to it */
2771     atmci_get_cap(host);
2772     - if (host->caps.has_dma) {
2773     - dev_info(&pdev->dev, "using DMA\n");
2774     + if (host->caps.has_dma && atmci_configure_dma(host)) {
2775     host->prepare_data = &atmci_prepare_data_dma;
2776     host->submit_data = &atmci_submit_data_dma;
2777     host->stop_transfer = &atmci_stop_transfer_dma;
2778     @@ -2092,15 +2094,12 @@ static int __init atmci_probe(struct platform_device *pdev)
2779     host->submit_data = &atmci_submit_data_pdc;
2780     host->stop_transfer = &atmci_stop_transfer_pdc;
2781     } else {
2782     - dev_info(&pdev->dev, "no DMA, no PDC\n");
2783     + dev_info(&pdev->dev, "using PIO\n");
2784     host->prepare_data = &atmci_prepare_data;
2785     host->submit_data = &atmci_submit_data;
2786     host->stop_transfer = &atmci_stop_transfer;
2787     }
2788    
2789     - if (host->caps.has_dma)
2790     - atmci_configure_dma(host);
2791     -
2792     platform_set_drvdata(pdev, host);
2793    
2794     /* We need at least one slot to succeed */
2795     diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
2796     index 38ebc4e..4540e37 100644
2797     --- a/drivers/mmc/host/sdhci-esdhc-imx.c
2798     +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
2799     @@ -269,8 +269,9 @@ static void esdhc_writew_le(struct sdhci_host *host, u16 val, int reg)
2800     imx_data->scratchpad = val;
2801     return;
2802     case SDHCI_COMMAND:
2803     - if ((host->cmd->opcode == MMC_STOP_TRANSMISSION)
2804     - && (imx_data->flags & ESDHC_FLAG_MULTIBLK_NO_INT))
2805     + if ((host->cmd->opcode == MMC_STOP_TRANSMISSION ||
2806     + host->cmd->opcode == MMC_SET_BLOCK_COUNT) &&
2807     + (imx_data->flags & ESDHC_FLAG_MULTIBLK_NO_INT))
2808     val |= SDHCI_CMD_ABORTCMD;
2809    
2810     if (is_imx6q_usdhc(imx_data)) {
2811     diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
2812     index 99ed6eb..4fd4144 100644
2813     --- a/drivers/net/usb/cdc_ether.c
2814     +++ b/drivers/net/usb/cdc_ether.c
2815     @@ -570,6 +570,13 @@ static const struct usb_device_id products [] = {
2816     .driver_info = 0,
2817     },
2818    
2819     +/* Logitech Harmony 900 - uses the pseudo-MDLM (BLAN) driver */
2820     +{
2821     + USB_DEVICE_AND_INTERFACE_INFO(0x046d, 0xc11f, USB_CLASS_COMM,
2822     + USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
2823     + .driver_info = 0,
2824     +},
2825     +
2826     /*
2827     * WHITELIST!!!
2828     *
2829     diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
2830     index fae0fbd..81b96e3 100644
2831     --- a/drivers/net/usb/usbnet.c
2832     +++ b/drivers/net/usb/usbnet.c
2833     @@ -589,6 +589,7 @@ static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
2834     entry = (struct skb_data *) skb->cb;
2835     urb = entry->urb;
2836    
2837     + spin_unlock_irqrestore(&q->lock, flags);
2838     // during some PM-driven resume scenarios,
2839     // these (async) unlinks complete immediately
2840     retval = usb_unlink_urb (urb);
2841     @@ -596,6 +597,7 @@ static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
2842     netdev_dbg(dev->net, "unlink urb err, %d\n", retval);
2843     else
2844     count++;
2845     + spin_lock_irqsave(&q->lock, flags);
2846     }
2847     spin_unlock_irqrestore (&q->lock, flags);
2848     return count;
2849     diff --git a/drivers/net/usb/zaurus.c b/drivers/net/usb/zaurus.c
2850     index 1a2234c..246b3bb 100644
2851     --- a/drivers/net/usb/zaurus.c
2852     +++ b/drivers/net/usb/zaurus.c
2853     @@ -349,6 +349,13 @@ static const struct usb_device_id products [] = {
2854     ZAURUS_MASTER_INTERFACE,
2855     .driver_info = OLYMPUS_MXL_INFO,
2856     },
2857     +
2858     +/* Logitech Harmony 900 - uses the pseudo-MDLM (BLAN) driver */
2859     +{
2860     + USB_DEVICE_AND_INTERFACE_INFO(0x046d, 0xc11f, USB_CLASS_COMM,
2861     + USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
2862     + .driver_info = (unsigned long) &bogus_mdlm_info,
2863     +},
2864     { }, // END
2865     };
2866     MODULE_DEVICE_TABLE(usb, products);
2867     diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
2868     index f199e9e..0a3c7c8 100644
2869     --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
2870     +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
2871     @@ -489,8 +489,6 @@ static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah)
2872     ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);
2873     ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows);
2874     ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);
2875     - ATH_ALLOC_BANK(ah->addac5416_21,
2876     - ah->iniAddac.ia_rows * ah->iniAddac.ia_columns);
2877     ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows);
2878    
2879     return 0;
2880     @@ -519,7 +517,6 @@ static void ar5008_hw_rf_free_ext_banks(struct ath_hw *ah)
2881     ATH_FREE_BANK(ah->analogBank6Data);
2882     ATH_FREE_BANK(ah->analogBank6TPCData);
2883     ATH_FREE_BANK(ah->analogBank7Data);
2884     - ATH_FREE_BANK(ah->addac5416_21);
2885     ATH_FREE_BANK(ah->bank6Temp);
2886    
2887     #undef ATH_FREE_BANK
2888     @@ -805,27 +802,7 @@ static int ar5008_hw_process_ini(struct ath_hw *ah,
2889     if (ah->eep_ops->set_addac)
2890     ah->eep_ops->set_addac(ah, chan);
2891    
2892     - if (AR_SREV_5416_22_OR_LATER(ah)) {
2893     - REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
2894     - } else {
2895     - struct ar5416IniArray temp;
2896     - u32 addacSize =
2897     - sizeof(u32) * ah->iniAddac.ia_rows *
2898     - ah->iniAddac.ia_columns;
2899     -
2900     - /* For AR5416 2.0/2.1 */
2901     - memcpy(ah->addac5416_21,
2902     - ah->iniAddac.ia_array, addacSize);
2903     -
2904     - /* override CLKDRV value at [row, column] = [31, 1] */
2905     - (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0;
2906     -
2907     - temp.ia_array = ah->addac5416_21;
2908     - temp.ia_columns = ah->iniAddac.ia_columns;
2909     - temp.ia_rows = ah->iniAddac.ia_rows;
2910     - REG_WRITE_ARRAY(&temp, 1, regWrites);
2911     - }
2912     -
2913     + REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
2914     REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC);
2915    
2916     ENABLE_REGWRITE_BUFFER(ah);
2917     diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
2918     index 11f192a..d190411 100644
2919     --- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
2920     +++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
2921     @@ -180,6 +180,25 @@ static void ar9002_hw_init_mode_regs(struct ath_hw *ah)
2922     INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac,
2923     ARRAY_SIZE(ar5416Addac), 2);
2924     }
2925     +
2926     + /* iniAddac needs to be modified for these chips */
2927     + if (AR_SREV_9160(ah) || !AR_SREV_5416_22_OR_LATER(ah)) {
2928     + struct ar5416IniArray *addac = &ah->iniAddac;
2929     + u32 size = sizeof(u32) * addac->ia_rows * addac->ia_columns;
2930     + u32 *data;
2931     +
2932     + data = kmalloc(size, GFP_KERNEL);
2933     + if (!data)
2934     + return;
2935     +
2936     + memcpy(data, addac->ia_array, size);
2937     + addac->ia_array = data;
2938     +
2939     + if (!AR_SREV_5416_22_OR_LATER(ah)) {
2940     + /* override CLKDRV value */
2941     + INI_RA(addac, 31,1) = 0;
2942     + }
2943     + }
2944     }
2945    
2946     /* Support for Japan ch.14 (2484) spread */
2947     diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
2948     index f389b3c..1bd8edf 100644
2949     --- a/drivers/net/wireless/ath/ath9k/hw.h
2950     +++ b/drivers/net/wireless/ath/ath9k/hw.h
2951     @@ -772,7 +772,6 @@ struct ath_hw {
2952     u32 *analogBank6Data;
2953     u32 *analogBank6TPCData;
2954     u32 *analogBank7Data;
2955     - u32 *addac5416_21;
2956     u32 *bank6Temp;
2957    
2958     u8 txpower_limit;
2959     diff --git a/drivers/net/wireless/ath/carl9170/tx.c b/drivers/net/wireless/ath/carl9170/tx.c
2960     index 59472e1..f6384af 100644
2961     --- a/drivers/net/wireless/ath/carl9170/tx.c
2962     +++ b/drivers/net/wireless/ath/carl9170/tx.c
2963     @@ -1234,6 +1234,7 @@ static bool carl9170_tx_ps_drop(struct ar9170 *ar, struct sk_buff *skb)
2964     {
2965     struct ieee80211_sta *sta;
2966     struct carl9170_sta_info *sta_info;
2967     + struct ieee80211_tx_info *tx_info;
2968    
2969     rcu_read_lock();
2970     sta = __carl9170_get_tx_sta(ar, skb);
2971     @@ -1241,16 +1242,18 @@ static bool carl9170_tx_ps_drop(struct ar9170 *ar, struct sk_buff *skb)
2972     goto out_rcu;
2973    
2974     sta_info = (void *) sta->drv_priv;
2975     - if (unlikely(sta_info->sleeping)) {
2976     - struct ieee80211_tx_info *tx_info;
2977     + tx_info = IEEE80211_SKB_CB(skb);
2978    
2979     + if (unlikely(sta_info->sleeping) &&
2980     + !(tx_info->flags & (IEEE80211_TX_CTL_POLL_RESPONSE |
2981     + IEEE80211_TX_CTL_CLEAR_PS_FILT))) {
2982     rcu_read_unlock();
2983    
2984     - tx_info = IEEE80211_SKB_CB(skb);
2985     if (tx_info->flags & IEEE80211_TX_CTL_AMPDU)
2986     atomic_dec(&ar->tx_ampdu_upload);
2987    
2988     tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
2989     + carl9170_release_dev_space(ar, skb);
2990     carl9170_tx_status(ar, skb, false);
2991     return true;
2992     }
2993     diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
2994     index 4b2aa1d..5cfb3d1 100644
2995     --- a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
2996     +++ b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
2997     @@ -1211,6 +1211,7 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
2998     unsigned long flags;
2999     struct iwl_addsta_cmd sta_cmd;
3000     u8 sta_id = iwlagn_key_sta_id(priv, ctx->vif, sta);
3001     + __le16 key_flags;
3002    
3003     /* if station isn't there, neither is the key */
3004     if (sta_id == IWL_INVALID_STATION)
3005     @@ -1236,7 +1237,14 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
3006     IWL_ERR(priv, "offset %d not used in uCode key table.\n",
3007     keyconf->hw_key_idx);
3008    
3009     - sta_cmd.key.key_flags = STA_KEY_FLG_NO_ENC | STA_KEY_FLG_INVALID;
3010     + key_flags = cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS);
3011     + key_flags |= STA_KEY_FLG_MAP_KEY_MSK | STA_KEY_FLG_NO_ENC |
3012     + STA_KEY_FLG_INVALID;
3013     +
3014     + if (!(keyconf->flags & IEEE80211_KEY_FLAG_PAIRWISE))
3015     + key_flags |= STA_KEY_MULTICAST_MSK;
3016     +
3017     + sta_cmd.key.key_flags = key_flags;
3018     sta_cmd.key.key_offset = WEP_INVALID_OFFSET;
3019     sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK;
3020     sta_cmd.mode = STA_CONTROL_MODIFY_MSK;
3021     diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
3022     index c244f2f..94a3e17 100644
3023     --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
3024     +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
3025     @@ -275,6 +275,8 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
3026     {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8191, rtl92cu_hal_cfg)},
3027    
3028     /****** 8188CU ********/
3029     + /* RTL8188CTV */
3030     + {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x018a, rtl92cu_hal_cfg)},
3031     /* 8188CE-VAU USB minCard */
3032     {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8170, rtl92cu_hal_cfg)},
3033     /* 8188cu 1*1 dongle */
3034     @@ -291,14 +293,14 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
3035     {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817e, rtl92cu_hal_cfg)},
3036     /* 8188RU in Alfa AWUS036NHR */
3037     {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817f, rtl92cu_hal_cfg)},
3038     + /* RTL8188CUS-VL */
3039     + {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x818a, rtl92cu_hal_cfg)},
3040     /* 8188 Combo for BC4 */
3041     {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8754, rtl92cu_hal_cfg)},
3042    
3043     /****** 8192CU ********/
3044     - /* 8191cu 1*2 */
3045     - {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8177, rtl92cu_hal_cfg)},
3046     /* 8192cu 2*2 */
3047     - {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817b, rtl92cu_hal_cfg)},
3048     + {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8178, rtl92cu_hal_cfg)},
3049     /* 8192CE-VAU USB minCard */
3050     {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817c, rtl92cu_hal_cfg)},
3051    
3052     @@ -309,13 +311,17 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
3053     {RTL_USB_DEVICE(0x07b8, 0x8188, rtl92cu_hal_cfg)}, /*Abocom - Abocom*/
3054     {RTL_USB_DEVICE(0x07b8, 0x8189, rtl92cu_hal_cfg)}, /*Funai - Abocom*/
3055     {RTL_USB_DEVICE(0x0846, 0x9041, rtl92cu_hal_cfg)}, /*NetGear WNA1000M*/
3056     - {RTL_USB_DEVICE(0x0Df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
3057     + {RTL_USB_DEVICE(0x0df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
3058     + {RTL_USB_DEVICE(0x0df6, 0x005c, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
3059     {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/
3060     /* HP - Lite-On ,8188CUS Slim Combo */
3061     {RTL_USB_DEVICE(0x103c, 0x1629, rtl92cu_hal_cfg)},
3062     {RTL_USB_DEVICE(0x13d3, 0x3357, rtl92cu_hal_cfg)}, /* AzureWave */
3063     {RTL_USB_DEVICE(0x2001, 0x3308, rtl92cu_hal_cfg)}, /*D-Link - Alpha*/
3064     + {RTL_USB_DEVICE(0x2019, 0x4902, rtl92cu_hal_cfg)}, /*Planex - Etop*/
3065     {RTL_USB_DEVICE(0x2019, 0xab2a, rtl92cu_hal_cfg)}, /*Planex - Abocom*/
3066     + /*SW-WF02-AD15 -Abocom*/
3067     + {RTL_USB_DEVICE(0x2019, 0xab2e, rtl92cu_hal_cfg)},
3068     {RTL_USB_DEVICE(0x2019, 0xed17, rtl92cu_hal_cfg)}, /*PCI - Edimax*/
3069     {RTL_USB_DEVICE(0x20f4, 0x648b, rtl92cu_hal_cfg)}, /*TRENDnet - Cameo*/
3070     {RTL_USB_DEVICE(0x7392, 0x7811, rtl92cu_hal_cfg)}, /*Edimax - Edimax*/
3071     @@ -326,14 +332,36 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
3072     {RTL_USB_DEVICE(0x4855, 0x0091, rtl92cu_hal_cfg)}, /* NetweeN-Feixun */
3073     {RTL_USB_DEVICE(0x9846, 0x9041, rtl92cu_hal_cfg)}, /* Netgear Cameo */
3074    
3075     + /****** 8188 RU ********/
3076     + /* Netcore */
3077     + {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x317f, rtl92cu_hal_cfg)},
3078     +
3079     + /****** 8188CUS Slim Solo********/
3080     + {RTL_USB_DEVICE(0x04f2, 0xaff7, rtl92cu_hal_cfg)}, /*Xavi*/
3081     + {RTL_USB_DEVICE(0x04f2, 0xaff9, rtl92cu_hal_cfg)}, /*Xavi*/
3082     + {RTL_USB_DEVICE(0x04f2, 0xaffa, rtl92cu_hal_cfg)}, /*Xavi*/
3083     +
3084     + /****** 8188CUS Slim Combo ********/
3085     + {RTL_USB_DEVICE(0x04f2, 0xaff8, rtl92cu_hal_cfg)}, /*Xavi*/
3086     + {RTL_USB_DEVICE(0x04f2, 0xaffb, rtl92cu_hal_cfg)}, /*Xavi*/
3087     + {RTL_USB_DEVICE(0x04f2, 0xaffc, rtl92cu_hal_cfg)}, /*Xavi*/
3088     + {RTL_USB_DEVICE(0x2019, 0x1201, rtl92cu_hal_cfg)}, /*Planex-Vencer*/
3089     +
3090     /****** 8192CU ********/
3091     + {RTL_USB_DEVICE(0x050d, 0x2102, rtl92cu_hal_cfg)}, /*Belcom-Sercomm*/
3092     + {RTL_USB_DEVICE(0x050d, 0x2103, rtl92cu_hal_cfg)}, /*Belcom-Edimax*/
3093     {RTL_USB_DEVICE(0x0586, 0x341f, rtl92cu_hal_cfg)}, /*Zyxel -Abocom*/
3094     {RTL_USB_DEVICE(0x07aa, 0x0056, rtl92cu_hal_cfg)}, /*ATKK-Gemtek*/
3095     {RTL_USB_DEVICE(0x07b8, 0x8178, rtl92cu_hal_cfg)}, /*Funai -Abocom*/
3096     + {RTL_USB_DEVICE(0x0846, 0x9021, rtl92cu_hal_cfg)}, /*Netgear-Sercomm*/
3097     + {RTL_USB_DEVICE(0x0b05, 0x17ab, rtl92cu_hal_cfg)}, /*ASUS-Edimax*/
3098     + {RTL_USB_DEVICE(0x0df6, 0x0061, rtl92cu_hal_cfg)}, /*Sitecom-Edimax*/
3099     + {RTL_USB_DEVICE(0x0e66, 0x0019, rtl92cu_hal_cfg)}, /*Hawking-Edimax*/
3100     {RTL_USB_DEVICE(0x2001, 0x3307, rtl92cu_hal_cfg)}, /*D-Link-Cameo*/
3101     {RTL_USB_DEVICE(0x2001, 0x3309, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/
3102     {RTL_USB_DEVICE(0x2001, 0x330a, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/
3103     {RTL_USB_DEVICE(0x2019, 0xab2b, rtl92cu_hal_cfg)}, /*Planex -Abocom*/
3104     + {RTL_USB_DEVICE(0x20f4, 0x624d, rtl92cu_hal_cfg)}, /*TRENDNet*/
3105     {RTL_USB_DEVICE(0x7392, 0x7822, rtl92cu_hal_cfg)}, /*Edimax -Edimax*/
3106     {}
3107     };
3108     diff --git a/drivers/rapidio/devices/tsi721.c b/drivers/rapidio/devices/tsi721.c
3109     index 691b1ab..30d2072 100644
3110     --- a/drivers/rapidio/devices/tsi721.c
3111     +++ b/drivers/rapidio/devices/tsi721.c
3112     @@ -410,13 +410,14 @@ static void tsi721_db_dpc(struct work_struct *work)
3113     */
3114     mport = priv->mport;
3115    
3116     - wr_ptr = ioread32(priv->regs + TSI721_IDQ_WP(IDB_QUEUE));
3117     - rd_ptr = ioread32(priv->regs + TSI721_IDQ_RP(IDB_QUEUE));
3118     + wr_ptr = ioread32(priv->regs + TSI721_IDQ_WP(IDB_QUEUE)) % IDB_QSIZE;
3119     + rd_ptr = ioread32(priv->regs + TSI721_IDQ_RP(IDB_QUEUE)) % IDB_QSIZE;
3120    
3121     while (wr_ptr != rd_ptr) {
3122     idb_entry = (u64 *)(priv->idb_base +
3123     (TSI721_IDB_ENTRY_SIZE * rd_ptr));
3124     rd_ptr++;
3125     + rd_ptr %= IDB_QSIZE;
3126     idb.msg = *idb_entry;
3127     *idb_entry = 0;
3128    
3129     diff --git a/drivers/regulator/88pm8607.c b/drivers/regulator/88pm8607.c
3130     index ca0d608..1cead1d 100644
3131     --- a/drivers/regulator/88pm8607.c
3132     +++ b/drivers/regulator/88pm8607.c
3133     @@ -196,7 +196,7 @@ static const unsigned int LDO12_suspend_table[] = {
3134     };
3135    
3136     static const unsigned int LDO13_table[] = {
3137     - 1300000, 1800000, 2000000, 2500000, 2800000, 3000000, 0, 0,
3138     + 1200000, 1300000, 1800000, 2000000, 2500000, 2800000, 3000000, 0,
3139     };
3140    
3141     static const unsigned int LDO13_suspend_table[] = {
3142     @@ -389,10 +389,10 @@ static struct pm8607_regulator_info pm8607_regulator_info[] = {
3143     PM8607_LDO( 7, LDO7, 0, 3, SUPPLIES_EN12, 1),
3144     PM8607_LDO( 8, LDO8, 0, 3, SUPPLIES_EN12, 2),
3145     PM8607_LDO( 9, LDO9, 0, 3, SUPPLIES_EN12, 3),
3146     - PM8607_LDO(10, LDO10, 0, 3, SUPPLIES_EN12, 4),
3147     + PM8607_LDO(10, LDO10, 0, 4, SUPPLIES_EN12, 4),
3148     PM8607_LDO(12, LDO12, 0, 4, SUPPLIES_EN12, 5),
3149     PM8607_LDO(13, VIBRATOR_SET, 1, 3, VIBRATOR_SET, 0),
3150     - PM8607_LDO(14, LDO14, 0, 4, SUPPLIES_EN12, 6),
3151     + PM8607_LDO(14, LDO14, 0, 3, SUPPLIES_EN12, 6),
3152     };
3153    
3154     static int __devinit pm8607_regulator_probe(struct platform_device *pdev)
3155     diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
3156     index 6ab2968..fe9dacc 100644
3157     --- a/drivers/s390/block/dasd_eckd.c
3158     +++ b/drivers/s390/block/dasd_eckd.c
3159     @@ -18,12 +18,12 @@
3160     #include <linux/hdreg.h> /* HDIO_GETGEO */
3161     #include <linux/bio.h>
3162     #include <linux/module.h>
3163     +#include <linux/compat.h>
3164     #include <linux/init.h>
3165    
3166     #include <asm/debug.h>
3167     #include <asm/idals.h>
3168     #include <asm/ebcdic.h>
3169     -#include <asm/compat.h>
3170     #include <asm/io.h>
3171     #include <asm/uaccess.h>
3172     #include <asm/cio.h>
3173     diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c
3174     index f1a2016..792c69e 100644
3175     --- a/drivers/s390/block/dasd_ioctl.c
3176     +++ b/drivers/s390/block/dasd_ioctl.c
3177     @@ -13,6 +13,7 @@
3178     #define KMSG_COMPONENT "dasd"
3179    
3180     #include <linux/interrupt.h>
3181     +#include <linux/compat.h>
3182     #include <linux/major.h>
3183     #include <linux/fs.h>
3184     #include <linux/blkpg.h>
3185     diff --git a/drivers/s390/char/fs3270.c b/drivers/s390/char/fs3270.c
3186     index e712981..9117045 100644
3187     --- a/drivers/s390/char/fs3270.c
3188     +++ b/drivers/s390/char/fs3270.c
3189     @@ -11,6 +11,7 @@
3190     #include <linux/console.h>
3191     #include <linux/init.h>
3192     #include <linux/interrupt.h>
3193     +#include <linux/compat.h>
3194     #include <linux/module.h>
3195     #include <linux/list.h>
3196     #include <linux/slab.h>
3197     diff --git a/drivers/s390/char/vmcp.c b/drivers/s390/char/vmcp.c
3198     index 75bde6a..89c03e6 100644
3199     --- a/drivers/s390/char/vmcp.c
3200     +++ b/drivers/s390/char/vmcp.c
3201     @@ -13,6 +13,7 @@
3202    
3203     #include <linux/fs.h>
3204     #include <linux/init.h>
3205     +#include <linux/compat.h>
3206     #include <linux/kernel.h>
3207     #include <linux/miscdevice.h>
3208     #include <linux/slab.h>
3209     diff --git a/drivers/s390/cio/chsc_sch.c b/drivers/s390/cio/chsc_sch.c
3210     index 0c87b0f..8f9a1a3 100644
3211     --- a/drivers/s390/cio/chsc_sch.c
3212     +++ b/drivers/s390/cio/chsc_sch.c
3213     @@ -8,6 +8,7 @@
3214     */
3215    
3216     #include <linux/slab.h>
3217     +#include <linux/compat.h>
3218     #include <linux/device.h>
3219     #include <linux/module.h>
3220     #include <linux/uaccess.h>
3221     diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
3222     index 3ef8d07..770a740 100644
3223     --- a/drivers/s390/cio/qdio_main.c
3224     +++ b/drivers/s390/cio/qdio_main.c
3225     @@ -167,7 +167,7 @@ again:
3226     DBF_ERROR("%4x EQBS ERROR", SCH_NO(q));
3227     DBF_ERROR("%3d%3d%2d", count, tmp_count, nr);
3228     q->handler(q->irq_ptr->cdev, QDIO_ERROR_ACTIVATE_CHECK_CONDITION,
3229     - 0, -1, -1, q->irq_ptr->int_parm);
3230     + q->nr, q->first_to_kick, count, q->irq_ptr->int_parm);
3231     return 0;
3232     }
3233    
3234     @@ -215,7 +215,7 @@ again:
3235     DBF_ERROR("%4x SQBS ERROR", SCH_NO(q));
3236     DBF_ERROR("%3d%3d%2d", count, tmp_count, nr);
3237     q->handler(q->irq_ptr->cdev, QDIO_ERROR_ACTIVATE_CHECK_CONDITION,
3238     - 0, -1, -1, q->irq_ptr->int_parm);
3239     + q->nr, q->first_to_kick, count, q->irq_ptr->int_parm);
3240     return 0;
3241     }
3242    
3243     diff --git a/drivers/s390/scsi/zfcp_cfdc.c b/drivers/s390/scsi/zfcp_cfdc.c
3244     index 303dde0..fab2c25 100644
3245     --- a/drivers/s390/scsi/zfcp_cfdc.c
3246     +++ b/drivers/s390/scsi/zfcp_cfdc.c
3247     @@ -11,6 +11,7 @@
3248     #define KMSG_COMPONENT "zfcp"
3249     #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
3250    
3251     +#include <linux/compat.h>
3252     #include <linux/slab.h>
3253     #include <linux/types.h>
3254     #include <linux/miscdevice.h>
3255     diff --git a/drivers/scsi/osd/osd_uld.c b/drivers/scsi/osd/osd_uld.c
3256     index b31a8e3..d4ed9eb 100644
3257     --- a/drivers/scsi/osd/osd_uld.c
3258     +++ b/drivers/scsi/osd/osd_uld.c
3259     @@ -69,10 +69,10 @@
3260     #ifndef SCSI_OSD_MAJOR
3261     # define SCSI_OSD_MAJOR 260
3262     #endif
3263     -#define SCSI_OSD_MAX_MINOR 64
3264     +#define SCSI_OSD_MAX_MINOR MINORMASK
3265    
3266     static const char osd_name[] = "osd";
3267     -static const char *osd_version_string = "open-osd 0.2.0";
3268     +static const char *osd_version_string = "open-osd 0.2.1";
3269    
3270     MODULE_AUTHOR("Boaz Harrosh <bharrosh@panasas.com>");
3271     MODULE_DESCRIPTION("open-osd Upper-Layer-Driver osd.ko");
3272     diff --git a/drivers/spi/spi-topcliff-pch.c b/drivers/spi/spi-topcliff-pch.c
3273     index 6a80749..027b6d0 100644
3274     --- a/drivers/spi/spi-topcliff-pch.c
3275     +++ b/drivers/spi/spi-topcliff-pch.c
3276     @@ -1717,7 +1717,7 @@ static int pch_spi_resume(struct pci_dev *pdev)
3277    
3278     #endif
3279    
3280     -static struct pci_driver pch_spi_pcidev = {
3281     +static struct pci_driver pch_spi_pcidev_driver = {
3282     .name = "pch_spi",
3283     .id_table = pch_spi_pcidev_id,
3284     .probe = pch_spi_probe,
3285     @@ -1733,7 +1733,7 @@ static int __init pch_spi_init(void)
3286     if (ret)
3287     return ret;
3288    
3289     - ret = pci_register_driver(&pch_spi_pcidev);
3290     + ret = pci_register_driver(&pch_spi_pcidev_driver);
3291     if (ret)
3292     return ret;
3293    
3294     @@ -1743,7 +1743,7 @@ module_init(pch_spi_init);
3295    
3296     static void __exit pch_spi_exit(void)
3297     {
3298     - pci_unregister_driver(&pch_spi_pcidev);
3299     + pci_unregister_driver(&pch_spi_pcidev_driver);
3300     platform_driver_unregister(&pch_spi_pd_driver);
3301     }
3302     module_exit(pch_spi_exit);
3303     diff --git a/drivers/staging/media/lirc/lirc_serial.c b/drivers/staging/media/lirc/lirc_serial.c
3304     index 8a060a8..1501e4e 100644
3305     --- a/drivers/staging/media/lirc/lirc_serial.c
3306     +++ b/drivers/staging/media/lirc/lirc_serial.c
3307     @@ -836,25 +836,22 @@ static int hardware_init_port(void)
3308     return 0;
3309     }
3310    
3311     -static int init_port(void)
3312     +static int __devinit lirc_serial_probe(struct platform_device *dev)
3313     {
3314     int i, nlow, nhigh, result;
3315    
3316     result = request_irq(irq, irq_handler,
3317     (share_irq ? IRQF_SHARED : 0),
3318     LIRC_DRIVER_NAME, (void *)&hardware);
3319     -
3320     - switch (result) {
3321     - case -EBUSY:
3322     - printk(KERN_ERR LIRC_DRIVER_NAME ": IRQ %d busy\n", irq);
3323     - return -EBUSY;
3324     - case -EINVAL:
3325     - printk(KERN_ERR LIRC_DRIVER_NAME
3326     - ": Bad irq number or handler\n");
3327     - return -EINVAL;
3328     - default:
3329     - break;
3330     - };
3331     + if (result < 0) {
3332     + if (result == -EBUSY)
3333     + printk(KERN_ERR LIRC_DRIVER_NAME ": IRQ %d busy\n",
3334     + irq);
3335     + else if (result == -EINVAL)
3336     + printk(KERN_ERR LIRC_DRIVER_NAME
3337     + ": Bad irq number or handler\n");
3338     + return result;
3339     + }
3340    
3341     /* Reserve io region. */
3342     /*
3343     @@ -875,11 +872,14 @@ static int init_port(void)
3344     ": or compile the serial port driver as module and\n");
3345     printk(KERN_WARNING LIRC_DRIVER_NAME
3346     ": make sure this module is loaded first\n");
3347     - return -EBUSY;
3348     + result = -EBUSY;
3349     + goto exit_free_irq;
3350     }
3351    
3352     - if (hardware_init_port() < 0)
3353     - return -EINVAL;
3354     + if (hardware_init_port() < 0) {
3355     + result = -EINVAL;
3356     + goto exit_release_region;
3357     + }
3358    
3359     /* Initialize pulse/space widths */
3360     init_timing_params(duty_cycle, freq);
3361     @@ -911,6 +911,28 @@ static int init_port(void)
3362    
3363     dprintk("Interrupt %d, port %04x obtained\n", irq, io);
3364     return 0;
3365     +
3366     +exit_release_region:
3367     + if (iommap != 0)
3368     + release_mem_region(iommap, 8 << ioshift);
3369     + else
3370     + release_region(io, 8);
3371     +exit_free_irq:
3372     + free_irq(irq, (void *)&hardware);
3373     +
3374     + return result;
3375     +}
3376     +
3377     +static int __devexit lirc_serial_remove(struct platform_device *dev)
3378     +{
3379     + free_irq(irq, (void *)&hardware);
3380     +
3381     + if (iommap != 0)
3382     + release_mem_region(iommap, 8 << ioshift);
3383     + else
3384     + release_region(io, 8);
3385     +
3386     + return 0;
3387     }
3388    
3389     static int set_use_inc(void *data)
3390     @@ -1076,16 +1098,6 @@ static struct lirc_driver driver = {
3391    
3392     static struct platform_device *lirc_serial_dev;
3393    
3394     -static int __devinit lirc_serial_probe(struct platform_device *dev)
3395     -{
3396     - return 0;
3397     -}
3398     -
3399     -static int __devexit lirc_serial_remove(struct platform_device *dev)
3400     -{
3401     - return 0;
3402     -}
3403     -
3404     static int lirc_serial_suspend(struct platform_device *dev,
3405     pm_message_t state)
3406     {
3407     @@ -1112,10 +1124,8 @@ static int lirc_serial_resume(struct platform_device *dev)
3408     {
3409     unsigned long flags;
3410    
3411     - if (hardware_init_port() < 0) {
3412     - lirc_serial_exit();
3413     + if (hardware_init_port() < 0)
3414     return -EINVAL;
3415     - }
3416    
3417     spin_lock_irqsave(&hardware[type].lock, flags);
3418     /* Enable Interrupt */
3419     @@ -1188,10 +1198,6 @@ static int __init lirc_serial_init_module(void)
3420     {
3421     int result;
3422    
3423     - result = lirc_serial_init();
3424     - if (result)
3425     - return result;
3426     -
3427     switch (type) {
3428     case LIRC_HOMEBREW:
3429     case LIRC_IRDEO:
3430     @@ -1211,8 +1217,7 @@ static int __init lirc_serial_init_module(void)
3431     break;
3432     #endif
3433     default:
3434     - result = -EINVAL;
3435     - goto exit_serial_exit;
3436     + return -EINVAL;
3437     }
3438     if (!softcarrier) {
3439     switch (type) {
3440     @@ -1228,37 +1233,26 @@ static int __init lirc_serial_init_module(void)
3441     }
3442     }
3443    
3444     - result = init_port();
3445     - if (result < 0)
3446     - goto exit_serial_exit;
3447     + result = lirc_serial_init();
3448     + if (result)
3449     + return result;
3450     +
3451     driver.features = hardware[type].features;
3452     driver.dev = &lirc_serial_dev->dev;
3453     driver.minor = lirc_register_driver(&driver);
3454     if (driver.minor < 0) {
3455     printk(KERN_ERR LIRC_DRIVER_NAME
3456     ": register_chrdev failed!\n");
3457     - result = -EIO;
3458     - goto exit_release;
3459     + lirc_serial_exit();
3460     + return -EIO;
3461     }
3462     return 0;
3463     -exit_release:
3464     - release_region(io, 8);
3465     -exit_serial_exit:
3466     - lirc_serial_exit();
3467     - return result;
3468     }
3469    
3470     static void __exit lirc_serial_exit_module(void)
3471     {
3472     - lirc_serial_exit();
3473     -
3474     - free_irq(irq, (void *)&hardware);
3475     -
3476     - if (iommap != 0)
3477     - release_mem_region(iommap, 8 << ioshift);
3478     - else
3479     - release_region(io, 8);
3480     lirc_unregister_driver(driver.minor);
3481     + lirc_serial_exit();
3482     dprintk("cleaned up module\n");
3483     }
3484    
3485     diff --git a/drivers/tty/Kconfig b/drivers/tty/Kconfig
3486     index b3d1741..830cd62 100644
3487     --- a/drivers/tty/Kconfig
3488     +++ b/drivers/tty/Kconfig
3489     @@ -365,7 +365,7 @@ config PPC_EPAPR_HV_BYTECHAN
3490    
3491     config PPC_EARLY_DEBUG_EHV_BC
3492     bool "Early console (udbg) support for ePAPR hypervisors"
3493     - depends on PPC_EPAPR_HV_BYTECHAN
3494     + depends on PPC_EPAPR_HV_BYTECHAN=y
3495     help
3496     Select this option to enable early console (a.k.a. "udbg") support
3497     via an ePAPR byte channel. You also need to choose the byte channel
3498     diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
3499     index c56378c..7099c31 100644
3500     --- a/drivers/video/omap2/dss/hdmi.c
3501     +++ b/drivers/video/omap2/dss/hdmi.c
3502     @@ -490,6 +490,7 @@ bool omapdss_hdmi_detect(void)
3503    
3504     int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev)
3505     {
3506     + struct omap_dss_hdmi_data *priv = dssdev->data;
3507     int r = 0;
3508    
3509     DSSDBG("ENTER hdmi_display_enable\n");
3510     @@ -502,6 +503,8 @@ int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev)
3511     goto err0;
3512     }
3513    
3514     + hdmi.ip_data.hpd_gpio = priv->hpd_gpio;
3515     +
3516     r = omap_dss_start_device(dssdev);
3517     if (r) {
3518     DSSERR("failed to start device\n");
3519     diff --git a/drivers/video/omap2/dss/ti_hdmi.h b/drivers/video/omap2/dss/ti_hdmi.h
3520     index 2c3443d..ec337b5d 100644
3521     --- a/drivers/video/omap2/dss/ti_hdmi.h
3522     +++ b/drivers/video/omap2/dss/ti_hdmi.h
3523     @@ -121,6 +121,10 @@ struct hdmi_ip_data {
3524     const struct ti_hdmi_ip_ops *ops;
3525     struct hdmi_config cfg;
3526     struct hdmi_pll_info pll_data;
3527     +
3528     + /* ti_hdmi_4xxx_ip private data. These should be in a separate struct */
3529     + int hpd_gpio;
3530     + bool phy_tx_enabled;
3531     };
3532     int ti_hdmi_4xxx_phy_enable(struct hdmi_ip_data *ip_data);
3533     void ti_hdmi_4xxx_phy_disable(struct hdmi_ip_data *ip_data);
3534     diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
3535     index e1a6ce5..aad48a1 100644
3536     --- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
3537     +++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
3538     @@ -28,6 +28,7 @@
3539     #include <linux/delay.h>
3540     #include <linux/string.h>
3541     #include <linux/seq_file.h>
3542     +#include <linux/gpio.h>
3543    
3544     #include "ti_hdmi_4xxx_ip.h"
3545     #include "dss.h"
3546     @@ -223,6 +224,49 @@ void ti_hdmi_4xxx_pll_disable(struct hdmi_ip_data *ip_data)
3547     hdmi_set_pll_pwr(ip_data, HDMI_PLLPWRCMD_ALLOFF);
3548     }
3549    
3550     +static int hdmi_check_hpd_state(struct hdmi_ip_data *ip_data)
3551     +{
3552     + unsigned long flags;
3553     + bool hpd;
3554     + int r;
3555     + /* this should be in ti_hdmi_4xxx_ip private data */
3556     + static DEFINE_SPINLOCK(phy_tx_lock);
3557     +
3558     + spin_lock_irqsave(&phy_tx_lock, flags);
3559     +
3560     + hpd = gpio_get_value(ip_data->hpd_gpio);
3561     +
3562     + if (hpd == ip_data->phy_tx_enabled) {
3563     + spin_unlock_irqrestore(&phy_tx_lock, flags);
3564     + return 0;
3565     + }
3566     +
3567     + if (hpd)
3568     + r = hdmi_set_phy_pwr(ip_data, HDMI_PHYPWRCMD_TXON);
3569     + else
3570     + r = hdmi_set_phy_pwr(ip_data, HDMI_PHYPWRCMD_LDOON);
3571     +
3572     + if (r) {
3573     + DSSERR("Failed to %s PHY TX power\n",
3574     + hpd ? "enable" : "disable");
3575     + goto err;
3576     + }
3577     +
3578     + ip_data->phy_tx_enabled = hpd;
3579     +err:
3580     + spin_unlock_irqrestore(&phy_tx_lock, flags);
3581     + return r;
3582     +}
3583     +
3584     +static irqreturn_t hpd_irq_handler(int irq, void *data)
3585     +{
3586     + struct hdmi_ip_data *ip_data = data;
3587     +
3588     + hdmi_check_hpd_state(ip_data);
3589     +
3590     + return IRQ_HANDLED;
3591     +}
3592     +
3593     int ti_hdmi_4xxx_phy_enable(struct hdmi_ip_data *ip_data)
3594     {
3595     u16 r = 0;
3596     @@ -232,10 +276,6 @@ int ti_hdmi_4xxx_phy_enable(struct hdmi_ip_data *ip_data)
3597     if (r)
3598     return r;
3599    
3600     - r = hdmi_set_phy_pwr(ip_data, HDMI_PHYPWRCMD_TXON);
3601     - if (r)
3602     - return r;
3603     -
3604     /*
3605     * Read address 0 in order to get the SCP reset done completed
3606     * Dummy access performed to make sure reset is done
3607     @@ -257,12 +297,32 @@ int ti_hdmi_4xxx_phy_enable(struct hdmi_ip_data *ip_data)
3608     /* Write to phy address 3 to change the polarity control */
3609     REG_FLD_MOD(phy_base, HDMI_TXPHY_PAD_CFG_CTRL, 0x1, 27, 27);
3610    
3611     + r = request_threaded_irq(gpio_to_irq(ip_data->hpd_gpio),
3612     + NULL, hpd_irq_handler,
3613     + IRQF_DISABLED | IRQF_TRIGGER_RISING |
3614     + IRQF_TRIGGER_FALLING, "hpd", ip_data);
3615     + if (r) {
3616     + DSSERR("HPD IRQ request failed\n");
3617     + hdmi_set_phy_pwr(ip_data, HDMI_PHYPWRCMD_OFF);
3618     + return r;
3619     + }
3620     +
3621     + r = hdmi_check_hpd_state(ip_data);
3622     + if (r) {
3623     + free_irq(gpio_to_irq(ip_data->hpd_gpio), ip_data);
3624     + hdmi_set_phy_pwr(ip_data, HDMI_PHYPWRCMD_OFF);
3625     + return r;
3626     + }
3627     +
3628     return 0;
3629     }
3630    
3631     void ti_hdmi_4xxx_phy_disable(struct hdmi_ip_data *ip_data)
3632     {
3633     + free_irq(gpio_to_irq(ip_data->hpd_gpio), ip_data);
3634     +
3635     hdmi_set_phy_pwr(ip_data, HDMI_PHYPWRCMD_OFF);
3636     + ip_data->phy_tx_enabled = false;
3637     }
3638    
3639     static int hdmi_core_ddc_init(struct hdmi_ip_data *ip_data)
3640     @@ -419,14 +479,7 @@ int ti_hdmi_4xxx_read_edid(struct hdmi_ip_data *ip_data,
3641    
3642     bool ti_hdmi_4xxx_detect(struct hdmi_ip_data *ip_data)
3643     {
3644     - int r;
3645     -
3646     - void __iomem *base = hdmi_core_sys_base(ip_data);
3647     -
3648     - /* HPD */
3649     - r = REG_GET(base, HDMI_CORE_SYS_SYS_STAT, 1, 1);
3650     -
3651     - return r == 1;
3652     + return gpio_get_value(ip_data->hpd_gpio);
3653     }
3654    
3655     static void hdmi_core_init(struct hdmi_core_video_config *video_cfg,
3656     diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c
3657     index d5aaca9..8497727 100644
3658     --- a/drivers/video/via/hw.c
3659     +++ b/drivers/video/via/hw.c
3660     @@ -1810,7 +1810,11 @@ static void hw_init(void)
3661     break;
3662     }
3663    
3664     + /* magic required on VX900 for correct modesetting on IGA1 */
3665     + via_write_reg_mask(VIACR, 0x45, 0x00, 0x01);
3666     +
3667     /* probably this should go to the scaling code one day */
3668     + via_write_reg_mask(VIACR, 0xFD, 0, 0x80); /* VX900 hw scale on IGA2 */
3669     viafb_write_regx(scaling_parameters, ARRAY_SIZE(scaling_parameters));
3670    
3671     /* Fill VPIT Parameters */
3672     diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c
3673     index 8464ea1..3c166d3 100644
3674     --- a/drivers/watchdog/hpwdt.c
3675     +++ b/drivers/watchdog/hpwdt.c
3676     @@ -231,7 +231,7 @@ static int __devinit cru_detect(unsigned long map_entry,
3677    
3678     cmn_regs.u1.reax = CRU_BIOS_SIGNATURE_VALUE;
3679    
3680     - set_memory_x((unsigned long)bios32_entrypoint, (2 * PAGE_SIZE));
3681     + set_memory_x((unsigned long)bios32_map, 2);
3682     asminline_call(&cmn_regs, bios32_entrypoint);
3683    
3684     if (cmn_regs.u1.ral != 0) {
3685     @@ -250,7 +250,8 @@ static int __devinit cru_detect(unsigned long map_entry,
3686     cru_rom_addr =
3687     ioremap(cru_physical_address, cru_length);
3688     if (cru_rom_addr) {
3689     - set_memory_x((unsigned long)cru_rom_addr, cru_length);
3690     + set_memory_x((unsigned long)cru_rom_addr & PAGE_MASK,
3691     + (cru_length + PAGE_SIZE - 1) >> PAGE_SHIFT);
3692     retval = 0;
3693     }
3694     }
3695     diff --git a/fs/aio.c b/fs/aio.c
3696     index 969beb0..67e4b90 100644
3697     --- a/fs/aio.c
3698     +++ b/fs/aio.c
3699     @@ -490,6 +490,8 @@ static void kiocb_batch_free(struct kioctx *ctx, struct kiocb_batch *batch)
3700     kmem_cache_free(kiocb_cachep, req);
3701     ctx->reqs_active--;
3702     }
3703     + if (unlikely(!ctx->reqs_active && ctx->dead))
3704     + wake_up_all(&ctx->wait);
3705     spin_unlock_irq(&ctx->ctx_lock);
3706     }
3707    
3708     diff --git a/fs/autofs4/autofs_i.h b/fs/autofs4/autofs_i.h
3709     index 326dc08..308a98b 100644
3710     --- a/fs/autofs4/autofs_i.h
3711     +++ b/fs/autofs4/autofs_i.h
3712     @@ -110,6 +110,7 @@ struct autofs_sb_info {
3713     int sub_version;
3714     int min_proto;
3715     int max_proto;
3716     + int compat_daemon;
3717     unsigned long exp_timeout;
3718     unsigned int type;
3719     int reghost_enabled;
3720     diff --git a/fs/autofs4/dev-ioctl.c b/fs/autofs4/dev-ioctl.c
3721     index 509fe1e..56bac70 100644
3722     --- a/fs/autofs4/dev-ioctl.c
3723     +++ b/fs/autofs4/dev-ioctl.c
3724     @@ -385,6 +385,7 @@ static int autofs_dev_ioctl_setpipefd(struct file *fp,
3725     sbi->pipefd = pipefd;
3726     sbi->pipe = pipe;
3727     sbi->catatonic = 0;
3728     + sbi->compat_daemon = is_compat_task();
3729     }
3730     out:
3731     mutex_unlock(&sbi->wq_mutex);
3732     diff --git a/fs/autofs4/inode.c b/fs/autofs4/inode.c
3733     index 8179f1a..98a5695 100644
3734     --- a/fs/autofs4/inode.c
3735     +++ b/fs/autofs4/inode.c
3736     @@ -19,6 +19,7 @@
3737     #include <linux/parser.h>
3738     #include <linux/bitops.h>
3739     #include <linux/magic.h>
3740     +#include <linux/compat.h>
3741     #include "autofs_i.h"
3742     #include <linux/module.h>
3743    
3744     @@ -224,6 +225,7 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent)
3745     set_autofs_type_indirect(&sbi->type);
3746     sbi->min_proto = 0;
3747     sbi->max_proto = 0;
3748     + sbi->compat_daemon = is_compat_task();
3749     mutex_init(&sbi->wq_mutex);
3750     spin_lock_init(&sbi->fs_lock);
3751     sbi->queues = NULL;
3752     diff --git a/fs/autofs4/waitq.c b/fs/autofs4/waitq.c
3753     index e1fbdee..6861f61 100644
3754     --- a/fs/autofs4/waitq.c
3755     +++ b/fs/autofs4/waitq.c
3756     @@ -90,7 +90,24 @@ static int autofs4_write(struct file *file, const void *addr, int bytes)
3757    
3758     return (bytes > 0);
3759     }
3760     -
3761     +
3762     +/*
3763     + * The autofs_v5 packet was misdesigned.
3764     + *
3765     + * The packets are identical on x86-32 and x86-64, but have different
3766     + * alignment. Which means that 'sizeof()' will give different results.
3767     + * Fix it up for the case of running 32-bit user mode on a 64-bit kernel.
3768     + */
3769     +static noinline size_t autofs_v5_packet_size(struct autofs_sb_info *sbi)
3770     +{
3771     + size_t pktsz = sizeof(struct autofs_v5_packet);
3772     +#if defined(CONFIG_X86_64) && defined(CONFIG_COMPAT)
3773     + if (sbi->compat_daemon > 0)
3774     + pktsz -= 4;
3775     +#endif
3776     + return pktsz;
3777     +}
3778     +
3779     static void autofs4_notify_daemon(struct autofs_sb_info *sbi,
3780     struct autofs_wait_queue *wq,
3781     int type)
3782     @@ -147,8 +164,7 @@ static void autofs4_notify_daemon(struct autofs_sb_info *sbi,
3783     {
3784     struct autofs_v5_packet *packet = &pkt.v5_pkt.v5_packet;
3785    
3786     - pktsz = sizeof(*packet);
3787     -
3788     + pktsz = autofs_v5_packet_size(sbi);
3789     packet->wait_queue_token = wq->wait_queue_token;
3790     packet->len = wq->name.len;
3791     memcpy(packet->name, wq->name.name, wq->name.len);
3792     diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
3793     index 21ac5ee..6ff96c6 100644
3794     --- a/fs/binfmt_elf.c
3795     +++ b/fs/binfmt_elf.c
3796     @@ -1421,7 +1421,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
3797     for (i = 1; i < view->n; ++i) {
3798     const struct user_regset *regset = &view->regsets[i];
3799     do_thread_regset_writeback(t->task, regset);
3800     - if (regset->core_note_type &&
3801     + if (regset->core_note_type && regset->get &&
3802     (!regset->active || regset->active(t->task, regset))) {
3803     int ret;
3804     size_t size = regset->n * regset->size;
3805     diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
3806     index e4c3334..bf68b4f 100644
3807     --- a/fs/cifs/dir.c
3808     +++ b/fs/cifs/dir.c
3809     @@ -584,10 +584,26 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
3810     * If either that or op not supported returned, follow
3811     * the normal lookup.
3812     */
3813     - if ((rc == 0) || (rc == -ENOENT))
3814     + switch (rc) {
3815     + case 0:
3816     + /*
3817     + * The server may allow us to open things like
3818     + * FIFOs, but the client isn't set up to deal
3819     + * with that. If it's not a regular file, just
3820     + * close it and proceed as if it were a normal
3821     + * lookup.
3822     + */
3823     + if (newInode && !S_ISREG(newInode->i_mode)) {
3824     + CIFSSMBClose(xid, pTcon, fileHandle);
3825     + break;
3826     + }
3827     + case -ENOENT:
3828     posix_open = true;
3829     - else if ((rc == -EINVAL) || (rc != -EOPNOTSUPP))
3830     + case -EOPNOTSUPP:
3831     + break;
3832     + default:
3833     pTcon->broken_posix_open = true;
3834     + }
3835     }
3836     if (!posix_open)
3837     rc = cifs_get_inode_info_unix(&newInode, full_path,
3838     diff --git a/include/linux/compat.h b/include/linux/compat.h
3839     index 66ed067..d42bd48 100644
3840     --- a/include/linux/compat.h
3841     +++ b/include/linux/compat.h
3842     @@ -561,5 +561,9 @@ asmlinkage ssize_t compat_sys_process_vm_writev(compat_pid_t pid,
3843     unsigned long liovcnt, const struct compat_iovec __user *rvec,
3844     unsigned long riovcnt, unsigned long flags);
3845    
3846     +#else
3847     +
3848     +#define is_compat_task() (0)
3849     +
3850     #endif /* CONFIG_COMPAT */
3851     #endif /* _LINUX_COMPAT_H */
3852     diff --git a/include/linux/regset.h b/include/linux/regset.h
3853     index 8abee65..686f373 100644
3854     --- a/include/linux/regset.h
3855     +++ b/include/linux/regset.h
3856     @@ -335,8 +335,11 @@ static inline int copy_regset_to_user(struct task_struct *target,
3857     {
3858     const struct user_regset *regset = &view->regsets[setno];
3859    
3860     + if (!regset->get)
3861     + return -EOPNOTSUPP;
3862     +
3863     if (!access_ok(VERIFY_WRITE, data, size))
3864     - return -EIO;
3865     + return -EFAULT;
3866    
3867     return regset->get(target, regset, offset, size, NULL, data);
3868     }
3869     @@ -358,8 +361,11 @@ static inline int copy_regset_from_user(struct task_struct *target,
3870     {
3871     const struct user_regset *regset = &view->regsets[setno];
3872    
3873     + if (!regset->set)
3874     + return -EOPNOTSUPP;
3875     +
3876     if (!access_ok(VERIFY_READ, data, size))
3877     - return -EIO;
3878     + return -EFAULT;
3879    
3880     return regset->set(target, regset, offset, size, NULL, data);
3881     }
3882     diff --git a/include/video/omapdss.h b/include/video/omapdss.h
3883     index 378c7ed..6582c45 100644
3884     --- a/include/video/omapdss.h
3885     +++ b/include/video/omapdss.h
3886     @@ -575,6 +575,11 @@ struct omap_dss_device {
3887     int (*get_backlight)(struct omap_dss_device *dssdev);
3888     };
3889    
3890     +struct omap_dss_hdmi_data
3891     +{
3892     + int hpd_gpio;
3893     +};
3894     +
3895     struct omap_dss_driver {
3896     struct device_driver driver;
3897    
3898     diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
3899     index cf2d7ae..ae95cd2 100644
3900     --- a/kernel/irq/manage.c
3901     +++ b/kernel/irq/manage.c
3902     @@ -985,6 +985,11 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
3903    
3904     /* add new interrupt at end of irq queue */
3905     do {
3906     + /*
3907     + * Or all existing action->thread_mask bits,
3908     + * so we can find the next zero bit for this
3909     + * new action.
3910     + */
3911     thread_mask |= old->thread_mask;
3912     old_ptr = &old->next;
3913     old = *old_ptr;
3914     @@ -993,14 +998,41 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
3915     }
3916    
3917     /*
3918     - * Setup the thread mask for this irqaction. Unlikely to have
3919     - * 32 resp 64 irqs sharing one line, but who knows.
3920     + * Setup the thread mask for this irqaction for ONESHOT. For
3921     + * !ONESHOT irqs the thread mask is 0 so we can avoid a
3922     + * conditional in irq_wake_thread().
3923     */
3924     - if (new->flags & IRQF_ONESHOT && thread_mask == ~0UL) {
3925     - ret = -EBUSY;
3926     - goto out_mask;
3927     + if (new->flags & IRQF_ONESHOT) {
3928     + /*
3929     + * Unlikely to have 32 resp 64 irqs sharing one line,
3930     + * but who knows.
3931     + */
3932     + if (thread_mask == ~0UL) {
3933     + ret = -EBUSY;
3934     + goto out_mask;
3935     + }
3936     + /*
3937     + * The thread_mask for the action is or'ed to
3938     + * desc->thread_active to indicate that the
3939     + * IRQF_ONESHOT thread handler has been woken, but not
3940     + * yet finished. The bit is cleared when a thread
3941     + * completes. When all threads of a shared interrupt
3942     + * line have completed desc->threads_active becomes
3943     + * zero and the interrupt line is unmasked. See
3944     + * handle.c:irq_wake_thread() for further information.
3945     + *
3946     + * If no thread is woken by primary (hard irq context)
3947     + * interrupt handlers, then desc->threads_active is
3948     + * also checked for zero to unmask the irq line in the
3949     + * affected hard irq flow handlers
3950     + * (handle_[fasteoi|level]_irq).
3951     + *
3952     + * The new action gets the first zero bit of
3953     + * thread_mask assigned. See the loop above which or's
3954     + * all existing action->thread_mask bits.
3955     + */
3956     + new->thread_mask = 1 << ffz(thread_mask);
3957     }
3958     - new->thread_mask = 1 << ffz(thread_mask);
3959    
3960     if (!shared) {
3961     init_waitqueue_head(&desc->wait_for_threads);
3962     diff --git a/kernel/kprobes.c b/kernel/kprobes.c
3963     index faa39d1..bc90b87 100644
3964     --- a/kernel/kprobes.c
3965     +++ b/kernel/kprobes.c
3966     @@ -1334,8 +1334,10 @@ int __kprobes register_kprobe(struct kprobe *p)
3967     if (!kernel_text_address((unsigned long) p->addr) ||
3968     in_kprobes_functions((unsigned long) p->addr) ||
3969     ftrace_text_reserved(p->addr, p->addr) ||
3970     - jump_label_text_reserved(p->addr, p->addr))
3971     - goto fail_with_jump_label;
3972     + jump_label_text_reserved(p->addr, p->addr)) {
3973     + ret = -EINVAL;
3974     + goto cannot_probe;
3975     + }
3976    
3977     /* User can pass only KPROBE_FLAG_DISABLED to register_kprobe */
3978     p->flags &= KPROBE_FLAG_DISABLED;
3979     @@ -1352,7 +1354,7 @@ int __kprobes register_kprobe(struct kprobe *p)
3980     * its code to prohibit unexpected unloading.
3981     */
3982     if (unlikely(!try_module_get(probed_mod)))
3983     - goto fail_with_jump_label;
3984     + goto cannot_probe;
3985    
3986     /*
3987     * If the module freed .init.text, we couldn't insert
3988     @@ -1361,7 +1363,7 @@ int __kprobes register_kprobe(struct kprobe *p)
3989     if (within_module_init((unsigned long)p->addr, probed_mod) &&
3990     probed_mod->state != MODULE_STATE_COMING) {
3991     module_put(probed_mod);
3992     - goto fail_with_jump_label;
3993     + goto cannot_probe;
3994     }
3995     /* ret will be updated by following code */
3996     }
3997     @@ -1409,7 +1411,7 @@ out:
3998    
3999     return ret;
4000    
4001     -fail_with_jump_label:
4002     +cannot_probe:
4003     preempt_enable();
4004     jump_label_unlock();
4005     return ret;
4006     diff --git a/mm/huge_memory.c b/mm/huge_memory.c
4007     index 33141f5..8f005e9 100644
4008     --- a/mm/huge_memory.c
4009     +++ b/mm/huge_memory.c
4010     @@ -642,6 +642,7 @@ static int __do_huge_pmd_anonymous_page(struct mm_struct *mm,
4011     set_pmd_at(mm, haddr, pmd, entry);
4012     prepare_pmd_huge_pte(pgtable, mm);
4013     add_mm_counter(mm, MM_ANONPAGES, HPAGE_PMD_NR);
4014     + mm->nr_ptes++;
4015     spin_unlock(&mm->page_table_lock);
4016     }
4017    
4018     @@ -760,6 +761,7 @@ int copy_huge_pmd(struct mm_struct *dst_mm, struct mm_struct *src_mm,
4019     pmd = pmd_mkold(pmd_wrprotect(pmd));
4020     set_pmd_at(dst_mm, addr, dst_pmd, pmd);
4021     prepare_pmd_huge_pte(pgtable, dst_mm);
4022     + dst_mm->nr_ptes++;
4023    
4024     ret = 0;
4025     out_unlock:
4026     @@ -858,7 +860,6 @@ static int do_huge_pmd_wp_page_fallback(struct mm_struct *mm,
4027     }
4028     kfree(pages);
4029    
4030     - mm->nr_ptes++;
4031     smp_wmb(); /* make pte visible before pmd */
4032     pmd_populate(mm, pmd, pgtable);
4033     page_remove_rmap(page);
4034     @@ -1017,6 +1018,7 @@ int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
4035     VM_BUG_ON(page_mapcount(page) < 0);
4036     add_mm_counter(tlb->mm, MM_ANONPAGES, -HPAGE_PMD_NR);
4037     VM_BUG_ON(!PageHead(page));
4038     + tlb->mm->nr_ptes--;
4039     spin_unlock(&tlb->mm->page_table_lock);
4040     tlb_remove_page(tlb, page);
4041     pte_free(tlb->mm, pgtable);
4042     @@ -1356,7 +1358,6 @@ static int __split_huge_page_map(struct page *page,
4043     pte_unmap(pte);
4044     }
4045    
4046     - mm->nr_ptes++;
4047     smp_wmb(); /* make pte visible before pmd */
4048     /*
4049     * Up to this point the pmd is present and huge and
4050     @@ -1969,7 +1970,6 @@ static void collapse_huge_page(struct mm_struct *mm,
4051     set_pmd_at(mm, address, pmd, _pmd);
4052     update_mmu_cache(vma, address, _pmd);
4053     prepare_pmd_huge_pte(pgtable, mm);
4054     - mm->nr_ptes--;
4055     spin_unlock(&mm->page_table_lock);
4056    
4057     #ifndef CONFIG_NUMA
4058     diff --git a/mm/memcontrol.c b/mm/memcontrol.c
4059     index f538e9b..de67e91 100644
4060     --- a/mm/memcontrol.c
4061     +++ b/mm/memcontrol.c
4062     @@ -4502,6 +4502,9 @@ static void mem_cgroup_usage_unregister_event(struct cgroup *cgrp,
4063     */
4064     BUG_ON(!thresholds);
4065    
4066     + if (!thresholds->primary)
4067     + goto unlock;
4068     +
4069     usage = mem_cgroup_usage(memcg, type == _MEMSWAP);
4070    
4071     /* Check if a threshold crossed before removing */
4072     @@ -4550,7 +4553,7 @@ swap_buffers:
4073    
4074     /* To be sure that nobody uses thresholds */
4075     synchronize_rcu();
4076     -
4077     +unlock:
4078     mutex_unlock(&memcg->thresholds_lock);
4079     }
4080    
4081     diff --git a/mm/nommu.c b/mm/nommu.c
4082     index ee7e57e..f59e170 100644
4083     --- a/mm/nommu.c
4084     +++ b/mm/nommu.c
4085     @@ -779,8 +779,6 @@ static void delete_vma_from_mm(struct vm_area_struct *vma)
4086    
4087     if (vma->vm_next)
4088     vma->vm_next->vm_prev = vma->vm_prev;
4089     -
4090     - vma->vm_mm = NULL;
4091     }
4092    
4093     /*
4094     diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c
4095     index 5a5a776..7d84b87 100644
4096     --- a/net/mac80211/rate.c
4097     +++ b/net/mac80211/rate.c
4098     @@ -344,7 +344,7 @@ void rate_control_get_rate(struct ieee80211_sub_if_data *sdata,
4099     for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
4100     info->control.rates[i].idx = -1;
4101     info->control.rates[i].flags = 0;
4102     - info->control.rates[i].count = 1;
4103     + info->control.rates[i].count = 0;
4104     }
4105    
4106     if (sdata->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL)
4107     diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
4108     index 05c8768..f3be54e 100644
4109     --- a/sound/pci/hda/hda_codec.c
4110     +++ b/sound/pci/hda/hda_codec.c
4111     @@ -1795,7 +1795,11 @@ static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,
4112     parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;
4113     parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;
4114     parm |= index << AC_AMP_SET_INDEX_SHIFT;
4115     - parm |= val;
4116     + if ((val & HDA_AMP_MUTE) && !(info->amp_caps & AC_AMPCAP_MUTE) &&
4117     + (info->amp_caps & AC_AMPCAP_MIN_MUTE))
4118     + ; /* set the zero value as a fake mute */
4119     + else
4120     + parm |= val;
4121     snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
4122     info->vol[ch] = val;
4123     }
4124     @@ -2062,7 +2066,7 @@ int snd_hda_mixer_amp_tlv(struct snd_kcontrol *kcontrol, int op_flag,
4125     val1 = -((caps & AC_AMPCAP_OFFSET) >> AC_AMPCAP_OFFSET_SHIFT);
4126     val1 += ofs;
4127     val1 = ((int)val1) * ((int)val2);
4128     - if (min_mute)
4129     + if (min_mute || (caps & AC_AMPCAP_MIN_MUTE))
4130     val2 |= TLV_DB_SCALE_MUTE;
4131     if (put_user(SNDRV_CTL_TLVT_DB_SCALE, _tlv))
4132     return -EFAULT;
4133     diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
4134     index 5644711..71f6744 100644
4135     --- a/sound/pci/hda/hda_codec.h
4136     +++ b/sound/pci/hda/hda_codec.h
4137     @@ -298,6 +298,9 @@ enum {
4138     #define AC_AMPCAP_MUTE (1<<31) /* mute capable */
4139     #define AC_AMPCAP_MUTE_SHIFT 31
4140    
4141     +/* driver-specific amp-caps: using bits 24-30 */
4142     +#define AC_AMPCAP_MIN_MUTE (1 << 30) /* min-volume = mute */
4143     +
4144     /* Connection list */
4145     #define AC_CLIST_LENGTH (0x7f<<0)
4146     #define AC_CLIST_LONG (1<<7)
4147     diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
4148     index 08bad5b..ae94929 100644
4149     --- a/sound/pci/hda/patch_conexant.c
4150     +++ b/sound/pci/hda/patch_conexant.c
4151     @@ -4132,7 +4132,8 @@ static int cx_auto_add_volume_idx(struct hda_codec *codec, const char *basename,
4152     err = snd_hda_ctl_add(codec, nid, kctl);
4153     if (err < 0)
4154     return err;
4155     - if (!(query_amp_caps(codec, nid, hda_dir) & AC_AMPCAP_MUTE))
4156     + if (!(query_amp_caps(codec, nid, hda_dir) &
4157     + (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)))
4158     break;
4159     }
4160     return 0;
4161     @@ -4425,6 +4426,22 @@ static const struct snd_pci_quirk cxt_fixups[] = {
4162     {}
4163     };
4164    
4165     +/* add "fake" mute amp-caps to DACs on cx5051 so that mixer mute switches
4166     + * can be created (bko#42825)
4167     + */
4168     +static void add_cx5051_fake_mutes(struct hda_codec *codec)
4169     +{
4170     + static hda_nid_t out_nids[] = {
4171     + 0x10, 0x11, 0
4172     + };
4173     + hda_nid_t *p;
4174     +
4175     + for (p = out_nids; *p; p++)
4176     + snd_hda_override_amp_caps(codec, *p, HDA_OUTPUT,
4177     + AC_AMPCAP_MIN_MUTE |
4178     + query_amp_caps(codec, *p, HDA_OUTPUT));
4179     +}
4180     +
4181     static int patch_conexant_auto(struct hda_codec *codec)
4182     {
4183     struct conexant_spec *spec;
4184     @@ -4443,6 +4460,9 @@ static int patch_conexant_auto(struct hda_codec *codec)
4185     case 0x14f15045:
4186     spec->single_adc_amp = 1;
4187     break;
4188     + case 0x14f15051:
4189     + add_cx5051_fake_mutes(codec);
4190     + break;
4191     }
4192    
4193     apply_pin_fixup(codec, cxt_fixups, cxt_pincfg_tbl);
4194     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
4195     index c4c8d78..3d8fbf4 100644
4196     --- a/sound/pci/hda/patch_realtek.c
4197     +++ b/sound/pci/hda/patch_realtek.c
4198     @@ -3695,7 +3695,7 @@ static void alc_auto_init_input_src(struct hda_codec *codec)
4199     else
4200     nums = spec->num_adc_nids;
4201     for (c = 0; c < nums; c++)
4202     - alc_mux_select(codec, 0, spec->cur_mux[c], true);
4203     + alc_mux_select(codec, c, spec->cur_mux[c], true);
4204     }
4205    
4206     /* add mic boosts if needed */
4207     diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
4208     index ccdac27..ed67698 100644
4209     --- a/sound/pci/hda/patch_sigmatel.c
4210     +++ b/sound/pci/hda/patch_sigmatel.c
4211     @@ -4719,7 +4719,7 @@ static void stac92xx_hp_detect(struct hda_codec *codec)
4212     unsigned int val = AC_PINCTL_OUT_EN | AC_PINCTL_HP_EN;
4213     if (no_hp_sensing(spec, i))
4214     continue;
4215     - if (presence)
4216     + if (1 /*presence*/)
4217     stac92xx_set_pinctl(codec, cfg->hp_pins[i], val);
4218     #if 0 /* FIXME */
4219     /* Resetting the pinctl like below may lead to (a sort of) regressions
4220     diff --git a/sound/soc/imx/imx-ssi.c b/sound/soc/imx/imx-ssi.c
4221     index 4c05e2b..971eaf0 100644
4222     --- a/sound/soc/imx/imx-ssi.c
4223     +++ b/sound/soc/imx/imx-ssi.c
4224     @@ -112,7 +112,7 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
4225     break;
4226     case SND_SOC_DAIFMT_DSP_A:
4227     /* data on rising edge of bclk, frame high 1clk before data */
4228     - strcr |= SSI_STCR_TFSL | SSI_STCR_TEFS;
4229     + strcr |= SSI_STCR_TFSL | SSI_STCR_TXBIT0 | SSI_STCR_TEFS;
4230     break;
4231     }
4232    
4233     diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
4234     index f42e8b9..ea909c5 100644
4235     --- a/sound/soc/soc-dapm.c
4236     +++ b/sound/soc/soc-dapm.c
4237     @@ -2982,9 +2982,13 @@ static void soc_dapm_shutdown_codec(struct snd_soc_dapm_context *dapm)
4238     * standby.
4239     */
4240     if (powerdown) {
4241     - snd_soc_dapm_set_bias_level(dapm, SND_SOC_BIAS_PREPARE);
4242     + if (dapm->bias_level == SND_SOC_BIAS_ON)
4243     + snd_soc_dapm_set_bias_level(dapm,
4244     + SND_SOC_BIAS_PREPARE);
4245     dapm_seq_run(dapm, &down_list, 0, false);
4246     - snd_soc_dapm_set_bias_level(dapm, SND_SOC_BIAS_STANDBY);
4247     + if (dapm->bias_level == SND_SOC_BIAS_PREPARE)
4248     + snd_soc_dapm_set_bias_level(dapm,
4249     + SND_SOC_BIAS_STANDBY);
4250     }
4251     }
4252    
4253     @@ -2997,7 +3001,9 @@ void snd_soc_dapm_shutdown(struct snd_soc_card *card)
4254    
4255     list_for_each_entry(codec, &card->codec_dev_list, list) {
4256     soc_dapm_shutdown_codec(&codec->dapm);
4257     - snd_soc_dapm_set_bias_level(&codec->dapm, SND_SOC_BIAS_OFF);
4258     + if (codec->dapm.bias_level == SND_SOC_BIAS_STANDBY)
4259     + snd_soc_dapm_set_bias_level(&codec->dapm,
4260     + SND_SOC_BIAS_OFF);
4261     }
4262     }
4263