]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/suse-2.6.27.39/patches.kernel.org/patch-2.6.27.2-3
Fix oinkmaster patch.
[ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.kernel.org / patch-2.6.27.2-3
CommitLineData
82094b55
AF
1From: Greg Kroah-Hartman <gregkh@suse.de>
2Subject: Linux 2.6.27.3
3
4Upstream 2.6.27.3 release from kernel.org
5
6Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
7
8diff --git a/Documentation/video4linux/CARDLIST.au0828 b/Documentation/video4linux/CARDLIST.au0828
9index aa05e5b..d5cb4ea 100644
10--- a/Documentation/video4linux/CARDLIST.au0828
11+++ b/Documentation/video4linux/CARDLIST.au0828
12@@ -1,5 +1,5 @@
13 0 -> Unknown board (au0828)
14- 1 -> Hauppauge HVR950Q (au0828) [2040:7200,2040:7210,2040:7217,2040:721b,2040:721f,2040:7280,0fd9:0008]
15+ 1 -> Hauppauge HVR950Q (au0828) [2040:7200,2040:7210,2040:7217,2040:721b,2040:721e,2040:721f,2040:7280,0fd9:0008]
16 2 -> Hauppauge HVR850 (au0828) [2040:7240]
17 3 -> DViCO FusionHDTV USB (au0828) [0fe9:d620]
18 4 -> Hauppauge HVR950Q rev xxF8 (au0828) [2040:7201,2040:7211,2040:7281]
19diff --git a/Makefile b/Makefile
20index 063fbe4..e4b635a 100644
21--- a/Makefile
22+++ b/Makefile
23@@ -1,8 +1,8 @@
24 VERSION = 2
25 PATCHLEVEL = 6
26 SUBLEVEL = 27
27-EXTRAVERSION = .2
28-NAME = Rotary Wombat
29+EXTRAVERSION = .3
30+NAME = Trembling Tortoise
31
32 # *DOCUMENTATION*
33 # To see a list of typical targets execute "make help"
34diff --git a/drivers/base/core.c b/drivers/base/core.c
35index d021c98..473c323 100644
36--- a/drivers/base/core.c
37+++ b/drivers/base/core.c
38@@ -523,11 +523,16 @@ static void klist_children_put(struct klist_node *n)
39 * device_initialize - init device structure.
40 * @dev: device.
41 *
42- * This prepares the device for use by other layers,
43- * including adding it to the device hierarchy.
44+ * This prepares the device for use by other layers by initializing
45+ * its fields.
46 * It is the first half of device_register(), if called by
47- * that, though it can also be called separately, so one
48- * may use @dev's fields (e.g. the refcount).
49+ * that function, though it can also be called separately, so one
50+ * may use @dev's fields. In particular, get_device()/put_device()
51+ * may be used for reference counting of @dev after calling this
52+ * function.
53+ *
54+ * NOTE: Use put_device() to give up your reference instead of freeing
55+ * @dev directly once you have called this function.
56 */
57 void device_initialize(struct device *dev)
58 {
59@@ -836,9 +841,13 @@ static void device_remove_sys_dev_entry(struct device *dev)
60 * This is part 2 of device_register(), though may be called
61 * separately _iff_ device_initialize() has been called separately.
62 *
63- * This adds it to the kobject hierarchy via kobject_add(), adds it
64+ * This adds @dev to the kobject hierarchy via kobject_add(), adds it
65 * to the global and sibling lists for the device, then
66 * adds it to the other relevant subsystems of the driver model.
67+ *
68+ * NOTE: _Never_ directly free @dev after calling this function, even
69+ * if it returned an error! Always use put_device() to give up your
70+ * reference instead.
71 */
72 int device_add(struct device *dev)
73 {
74@@ -965,6 +974,10 @@ done:
75 * I.e. you should only call the two helpers separately if
76 * have a clearly defined need to use and refcount the device
77 * before it is added to the hierarchy.
78+ *
79+ * NOTE: _Never_ directly free @dev after calling this function, even
80+ * if it returned an error! Always use put_device() to give up the
81+ * reference initialized in this function instead.
82 */
83 int device_register(struct device *dev)
84 {
85@@ -1243,7 +1256,7 @@ struct device *device_create_vargs(struct class *class, struct device *parent,
86 return dev;
87
88 error:
89- kfree(dev);
90+ put_device(dev);
91 return ERR_PTR(retval);
92 }
93 EXPORT_SYMBOL_GPL(device_create_vargs);
94diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
95index 8897434..a219ae4 100644
96--- a/drivers/gpu/drm/i915/i915_dma.c
97+++ b/drivers/gpu/drm/i915/i915_dma.c
98@@ -836,7 +836,7 @@ struct drm_ioctl_desc i915_ioctls[] = {
99 DRM_IOCTL_DEF(DRM_I915_SET_VBLANK_PIPE, i915_vblank_pipe_set, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY ),
100 DRM_IOCTL_DEF(DRM_I915_GET_VBLANK_PIPE, i915_vblank_pipe_get, DRM_AUTH ),
101 DRM_IOCTL_DEF(DRM_I915_VBLANK_SWAP, i915_vblank_swap, DRM_AUTH),
102- DRM_IOCTL_DEF(DRM_I915_HWS_ADDR, i915_set_status_page, DRM_AUTH),
103+ DRM_IOCTL_DEF(DRM_I915_HWS_ADDR, i915_set_status_page, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
104 };
105
106 int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);
107diff --git a/drivers/md/md.c b/drivers/md/md.c
108index deeac4b..fe6eccd 100644
109--- a/drivers/md/md.c
110+++ b/drivers/md/md.c
111@@ -2109,8 +2109,6 @@ rdev_size_store(mdk_rdev_t *rdev, const char *buf, size_t len)
112
113 if (strict_strtoull(buf, 10, &size) < 0)
114 return -EINVAL;
115- if (size < my_mddev->size)
116- return -EINVAL;
117 if (my_mddev->pers && rdev->raid_disk >= 0) {
118 if (my_mddev->persistent) {
119 size = super_types[my_mddev->major_version].
120@@ -2121,9 +2119,9 @@ rdev_size_store(mdk_rdev_t *rdev, const char *buf, size_t len)
121 size = (rdev->bdev->bd_inode->i_size >> 10);
122 size -= rdev->data_offset/2;
123 }
124- if (size < my_mddev->size)
125- return -EINVAL; /* component must fit device */
126 }
127+ if (size < my_mddev->size)
128+ return -EINVAL; /* component must fit device */
129
130 rdev->size = size;
131 if (size > oldsize && my_mddev->external) {
132diff --git a/drivers/media/dvb/siano/sms-cards.c b/drivers/media/dvb/siano/sms-cards.c
133index 9da260f..6f9b773 100644
134--- a/drivers/media/dvb/siano/sms-cards.c
135+++ b/drivers/media/dvb/siano/sms-cards.c
136@@ -42,6 +42,10 @@ struct usb_device_id smsusb_id_table[] = {
137 .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
138 { USB_DEVICE(0x2040, 0x5510),
139 .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
140+ { USB_DEVICE(0x2040, 0x5520),
141+ .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
142+ { USB_DEVICE(0x2040, 0x5530),
143+ .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
144 { USB_DEVICE(0x2040, 0x5580),
145 .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
146 { USB_DEVICE(0x2040, 0x5590),
147diff --git a/drivers/media/video/au0828/au0828-cards.c b/drivers/media/video/au0828/au0828-cards.c
148index ed48908..6294938 100644
149--- a/drivers/media/video/au0828/au0828-cards.c
150+++ b/drivers/media/video/au0828/au0828-cards.c
151@@ -90,6 +90,7 @@ static void hauppauge_eeprom(struct au0828_dev *dev, u8 *eeprom_data)
152 case 72221: /* WinTV-HVR950q (OEM, IR, ATSC/QAM and basic analog video */
153 case 72231: /* WinTV-HVR950q (OEM, IR, ATSC/QAM and basic analog video */
154 case 72241: /* WinTV-HVR950q (OEM, No IR, ATSC/QAM and basic analog video */
155+ case 72251: /* WinTV-HVR950q (Retail, IR, ATSC/QAM and basic analog video */
156 case 72301: /* WinTV-HVR850 (Retail, IR, ATSC and basic analog video */
157 case 72500: /* WinTV-HVR950q (OEM, No IR, ATSC/QAM */
158 break;
159@@ -198,6 +199,8 @@ struct usb_device_id au0828_usb_id_table [] = {
160 .driver_info = AU0828_BOARD_HAUPPAUGE_HVR950Q },
161 { USB_DEVICE(0x2040, 0x721b),
162 .driver_info = AU0828_BOARD_HAUPPAUGE_HVR950Q },
163+ { USB_DEVICE(0x2040, 0x721e),
164+ .driver_info = AU0828_BOARD_HAUPPAUGE_HVR950Q },
165 { USB_DEVICE(0x2040, 0x721f),
166 .driver_info = AU0828_BOARD_HAUPPAUGE_HVR950Q },
167 { USB_DEVICE(0x2040, 0x7280),
168diff --git a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c
169index 463680b..b59e472 100644
170--- a/drivers/media/video/tvaudio.c
171+++ b/drivers/media/video/tvaudio.c
172@@ -1792,7 +1792,7 @@ static int chip_command(struct i2c_client *client,
173 break;
174 case VIDIOC_S_FREQUENCY:
175 chip->mode = 0; /* automatic */
176- if (desc->checkmode) {
177+ if (desc->checkmode && desc->setmode) {
178 desc->setmode(chip,V4L2_TUNER_MODE_MONO);
179 if (chip->prevmode != V4L2_TUNER_MODE_MONO)
180 chip->prevmode = -1; /* reset previous mode */
181diff --git a/drivers/net/wireless/ath9k/core.h b/drivers/net/wireless/ath9k/core.h
182index 2f84093..88f4cc3 100644
183--- a/drivers/net/wireless/ath9k/core.h
184+++ b/drivers/net/wireless/ath9k/core.h
185@@ -316,7 +316,7 @@ void ath_descdma_cleanup(struct ath_softc *sc,
186 #define ATH_RX_TIMEOUT 40 /* 40 milliseconds */
187 #define WME_NUM_TID 16
188 #define IEEE80211_BAR_CTL_TID_M 0xF000 /* tid mask */
189-#define IEEE80211_BAR_CTL_TID_S 2 /* tid shift */
190+#define IEEE80211_BAR_CTL_TID_S 12 /* tid shift */
191
192 enum ATH_RX_TYPE {
193 ATH_RX_NON_CONSUMED = 0,
194diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c
195index acebdf1..b4c7174 100644
196--- a/drivers/net/wireless/ath9k/main.c
197+++ b/drivers/net/wireless/ath9k/main.c
198@@ -1007,6 +1007,11 @@ static int ath9k_ampdu_action(struct ieee80211_hw *hw,
199 return ret;
200 }
201
202+static int ath9k_no_fragmentation(struct ieee80211_hw *hw, u32 value)
203+{
204+ return -EOPNOTSUPP;
205+}
206+
207 static struct ieee80211_ops ath9k_ops = {
208 .tx = ath9k_tx,
209 .start = ath9k_start,
210@@ -1031,7 +1036,8 @@ static struct ieee80211_ops ath9k_ops = {
211 .get_tsf = ath9k_get_tsf,
212 .reset_tsf = ath9k_reset_tsf,
213 .tx_last_beacon = NULL,
214- .ampdu_action = ath9k_ampdu_action
215+ .ampdu_action = ath9k_ampdu_action,
216+ .set_frag_threshold = ath9k_no_fragmentation,
217 };
218
219 void ath_get_beaconconfig(struct ath_softc *sc,
220diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
221index 8ab389d..706f3e6 100644
222--- a/drivers/usb/core/hcd.c
223+++ b/drivers/usb/core/hcd.c
224@@ -81,6 +81,10 @@
225
226 /*-------------------------------------------------------------------------*/
227
228+/* Keep track of which host controller drivers are loaded */
229+unsigned long usb_hcds_loaded;
230+EXPORT_SYMBOL_GPL(usb_hcds_loaded);
231+
232 /* host controllers we manage */
233 LIST_HEAD (usb_bus_list);
234 EXPORT_SYMBOL_GPL (usb_bus_list);
235diff --git a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h
236index e710ce0..2dcde61 100644
237--- a/drivers/usb/core/hcd.h
238+++ b/drivers/usb/core/hcd.h
239@@ -482,4 +482,10 @@ static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb,
240 */
241 extern struct rw_semaphore ehci_cf_port_reset_rwsem;
242
243+/* Keep track of which host controller drivers are loaded */
244+#define USB_UHCI_LOADED 0
245+#define USB_OHCI_LOADED 1
246+#define USB_EHCI_LOADED 2
247+extern unsigned long usb_hcds_loaded;
248+
249 #endif /* __KERNEL__ */
250diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c
251index 29d13eb..48f51b1 100644
252--- a/drivers/usb/gadget/s3c2410_udc.c
253+++ b/drivers/usb/gadget/s3c2410_udc.c
254@@ -1651,7 +1651,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
255 return -EBUSY;
256
257 if (!driver->bind || !driver->setup
258- || driver->speed != USB_SPEED_FULL) {
259+ || driver->speed < USB_SPEED_FULL) {
260 printk(KERN_ERR "Invalid driver: bind %p setup %p speed %d\n",
261 driver->bind, driver->setup, driver->speed);
262 return -EINVAL;
263diff --git a/drivers/usb/gadget/u_ether.c b/drivers/usb/gadget/u_ether.c
264index 3791e62..38a55af 100644
265--- a/drivers/usb/gadget/u_ether.c
266+++ b/drivers/usb/gadget/u_ether.c
267@@ -873,6 +873,13 @@ struct net_device *gether_connect(struct gether *link)
268 spin_lock(&dev->lock);
269 dev->port_usb = link;
270 link->ioport = dev;
271+ if (netif_running(dev->net)) {
272+ if (link->open)
273+ link->open(link);
274+ } else {
275+ if (link->close)
276+ link->close(link);
277+ }
278 spin_unlock(&dev->lock);
279
280 netif_carrier_on(dev->net);
281diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
282index 8409e07..86e38b0 100644
283--- a/drivers/usb/host/ehci-hcd.c
284+++ b/drivers/usb/host/ehci-hcd.c
285@@ -1049,6 +1049,12 @@ static int __init ehci_hcd_init(void)
286 {
287 int retval = 0;
288
289+ set_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
290+ if (test_bit(USB_UHCI_LOADED, &usb_hcds_loaded) ||
291+ test_bit(USB_OHCI_LOADED, &usb_hcds_loaded))
292+ printk(KERN_WARNING "Warning! ehci_hcd should always be loaded"
293+ " before uhci_hcd and ohci_hcd, not after\n");
294+
295 pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n",
296 hcd_name,
297 sizeof(struct ehci_qh), sizeof(struct ehci_qtd),
298@@ -1056,8 +1062,10 @@ static int __init ehci_hcd_init(void)
299
300 #ifdef DEBUG
301 ehci_debug_root = debugfs_create_dir("ehci", NULL);
302- if (!ehci_debug_root)
303- return -ENOENT;
304+ if (!ehci_debug_root) {
305+ retval = -ENOENT;
306+ goto err_debug;
307+ }
308 #endif
309
310 #ifdef PLATFORM_DRIVER
311@@ -1104,7 +1112,9 @@ clean0:
312 #ifdef DEBUG
313 debugfs_remove(ehci_debug_root);
314 ehci_debug_root = NULL;
315+err_debug:
316 #endif
317+ clear_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
318 return retval;
319 }
320 module_init(ehci_hcd_init);
321@@ -1126,6 +1136,7 @@ static void __exit ehci_hcd_cleanup(void)
322 #ifdef DEBUG
323 debugfs_remove(ehci_debug_root);
324 #endif
325+ clear_bit(USB_EHCI_LOADED, &usb_hcds_loaded);
326 }
327 module_exit(ehci_hcd_cleanup);
328
329diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
330index 8990196..8bec02c 100644
331--- a/drivers/usb/host/ohci-hcd.c
332+++ b/drivers/usb/host/ohci-hcd.c
333@@ -1098,6 +1098,7 @@ static int __init ohci_hcd_mod_init(void)
334 printk (KERN_DEBUG "%s: " DRIVER_INFO "\n", hcd_name);
335 pr_debug ("%s: block sizes: ed %Zd td %Zd\n", hcd_name,
336 sizeof (struct ed), sizeof (struct td));
337+ set_bit(USB_OHCI_LOADED, &usb_hcds_loaded);
338
339 #ifdef DEBUG
340 ohci_debug_root = debugfs_create_dir("ohci", NULL);
341@@ -1184,6 +1185,7 @@ static int __init ohci_hcd_mod_init(void)
342 error_debug:
343 #endif
344
345+ clear_bit(USB_OHCI_LOADED, &usb_hcds_loaded);
346 return retval;
347 }
348 module_init(ohci_hcd_mod_init);
349@@ -1214,6 +1216,7 @@ static void __exit ohci_hcd_mod_exit(void)
350 #ifdef DEBUG
351 debugfs_remove(ohci_debug_root);
352 #endif
353+ clear_bit(USB_OHCI_LOADED, &usb_hcds_loaded);
354 }
355 module_exit(ohci_hcd_mod_exit);
356
357diff --git a/drivers/usb/host/ohci-hub.c b/drivers/usb/host/ohci-hub.c
358index 7ea9a7b..32bbce9 100644
359--- a/drivers/usb/host/ohci-hub.c
360+++ b/drivers/usb/host/ohci-hub.c
361@@ -359,21 +359,24 @@ static void ohci_finish_controller_resume(struct usb_hcd *hcd)
362
363 /* Carry out polling-, autostop-, and autoresume-related state changes */
364 static int ohci_root_hub_state_changes(struct ohci_hcd *ohci, int changed,
365- int any_connected)
366+ int any_connected, int rhsc_status)
367 {
368 int poll_rh = 1;
369- int rhsc;
370+ int rhsc_enable;
371
372- rhsc = ohci_readl(ohci, &ohci->regs->intrenable) & OHCI_INTR_RHSC;
373- switch (ohci->hc_control & OHCI_CTRL_HCFS) {
374+ /* Some broken controllers never turn off RHCS in the interrupt
375+ * status register. For their sake we won't re-enable RHSC
376+ * interrupts if the interrupt bit is already active.
377+ */
378+ rhsc_enable = ohci_readl(ohci, &ohci->regs->intrenable) &
379+ OHCI_INTR_RHSC;
380
381+ switch (ohci->hc_control & OHCI_CTRL_HCFS) {
382 case OHCI_USB_OPER:
383- /* If no status changes are pending, enable status-change
384- * interrupts.
385- */
386- if (!rhsc && !changed) {
387- rhsc = OHCI_INTR_RHSC;
388- ohci_writel(ohci, rhsc, &ohci->regs->intrenable);
389+ /* If no status changes are pending, enable RHSC interrupts. */
390+ if (!rhsc_enable && !rhsc_status && !changed) {
391+ rhsc_enable = OHCI_INTR_RHSC;
392+ ohci_writel(ohci, rhsc_enable, &ohci->regs->intrenable);
393 }
394
395 /* Keep on polling until we know a device is connected
396@@ -383,7 +386,7 @@ static int ohci_root_hub_state_changes(struct ohci_hcd *ohci, int changed,
397 if (any_connected ||
398 !device_may_wakeup(&ohci_to_hcd(ohci)
399 ->self.root_hub->dev)) {
400- if (rhsc)
401+ if (rhsc_enable)
402 poll_rh = 0;
403 } else {
404 ohci->autostop = 1;
405@@ -396,34 +399,45 @@ static int ohci_root_hub_state_changes(struct ohci_hcd *ohci, int changed,
406 ohci->autostop = 0;
407 ohci->next_statechange = jiffies +
408 STATECHANGE_DELAY;
409- } else if (rhsc && time_after_eq(jiffies,
410+ } else if (time_after_eq(jiffies,
411 ohci->next_statechange)
412 && !ohci->ed_rm_list
413 && !(ohci->hc_control &
414 OHCI_SCHED_ENABLES)) {
415 ohci_rh_suspend(ohci, 1);
416- poll_rh = 0;
417+ if (rhsc_enable)
418+ poll_rh = 0;
419 }
420 }
421 break;
422
423- /* if there is a port change, autostart or ask to be resumed */
424 case OHCI_USB_SUSPEND:
425 case OHCI_USB_RESUME:
426+ /* if there is a port change, autostart or ask to be resumed */
427 if (changed) {
428 if (ohci->autostop)
429 ohci_rh_resume(ohci);
430 else
431 usb_hcd_resume_root_hub(ohci_to_hcd(ohci));
432- } else {
433- if (!rhsc && (ohci->autostop ||
434- ohci_to_hcd(ohci)->self.root_hub->
435- do_remote_wakeup))
436- ohci_writel(ohci, OHCI_INTR_RHSC,
437- &ohci->regs->intrenable);
438
439- /* everything is idle, no need for polling */
440+ /* If remote wakeup is disabled, stop polling */
441+ } else if (!ohci->autostop &&
442+ !ohci_to_hcd(ohci)->self.root_hub->
443+ do_remote_wakeup) {
444 poll_rh = 0;
445+
446+ } else {
447+ /* If no status changes are pending,
448+ * enable RHSC interrupts
449+ */
450+ if (!rhsc_enable && !rhsc_status) {
451+ rhsc_enable = OHCI_INTR_RHSC;
452+ ohci_writel(ohci, rhsc_enable,
453+ &ohci->regs->intrenable);
454+ }
455+ /* Keep polling until RHSC is enabled */
456+ if (rhsc_enable)
457+ poll_rh = 0;
458 }
459 break;
460 }
461@@ -441,18 +455,22 @@ static inline int ohci_rh_resume(struct ohci_hcd *ohci)
462 * autostop isn't used when CONFIG_PM is turned off.
463 */
464 static int ohci_root_hub_state_changes(struct ohci_hcd *ohci, int changed,
465- int any_connected)
466+ int any_connected, int rhsc_status)
467 {
468 /* If RHSC is enabled, don't poll */
469 if (ohci_readl(ohci, &ohci->regs->intrenable) & OHCI_INTR_RHSC)
470 return 0;
471
472- /* If no status changes are pending, enable status-change interrupts */
473- if (!changed) {
474- ohci_writel(ohci, OHCI_INTR_RHSC, &ohci->regs->intrenable);
475- return 0;
476- }
477- return 1;
478+ /* If status changes are pending, continue polling.
479+ * Conversely, if no status changes are pending but the RHSC
480+ * status bit was set, then RHSC may be broken so continue polling.
481+ */
482+ if (changed || rhsc_status)
483+ return 1;
484+
485+ /* It's safe to re-enable RHSC interrupts */
486+ ohci_writel(ohci, OHCI_INTR_RHSC, &ohci->regs->intrenable);
487+ return 0;
488 }
489
490 #endif /* CONFIG_PM */
491@@ -467,6 +485,7 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf)
492 struct ohci_hcd *ohci = hcd_to_ohci (hcd);
493 int i, changed = 0, length = 1;
494 int any_connected = 0;
495+ int rhsc_status;
496 unsigned long flags;
497
498 spin_lock_irqsave (&ohci->lock, flags);
499@@ -492,12 +511,10 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf)
500 length++;
501 }
502
503- /* Some broken controllers never turn off RHCS in the interrupt
504- * status register. For their sake we won't re-enable RHSC
505- * interrupts if the flag is already set.
506- */
507- if (ohci_readl(ohci, &ohci->regs->intrstatus) & OHCI_INTR_RHSC)
508- changed = 1;
509+ /* Clear the RHSC status flag before reading the port statuses */
510+ ohci_writel(ohci, OHCI_INTR_RHSC, &ohci->regs->intrstatus);
511+ rhsc_status = ohci_readl(ohci, &ohci->regs->intrstatus) &
512+ OHCI_INTR_RHSC;
513
514 /* look at each port */
515 for (i = 0; i < ohci->num_ports; i++) {
516@@ -517,7 +534,7 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf)
517 }
518
519 hcd->poll_rh = ohci_root_hub_state_changes(ohci, changed,
520- any_connected);
521+ any_connected, rhsc_status);
522
523 done:
524 spin_unlock_irqrestore (&ohci->lock, flags);
525diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
526index 3a7bfe7..59bed3c 100644
527--- a/drivers/usb/host/uhci-hcd.c
528+++ b/drivers/usb/host/uhci-hcd.c
529@@ -953,6 +953,7 @@ static int __init uhci_hcd_init(void)
530
531 printk(KERN_INFO DRIVER_DESC " " DRIVER_VERSION "%s\n",
532 ignore_oc ? ", overcurrent ignored" : "");
533+ set_bit(USB_UHCI_LOADED, &usb_hcds_loaded);
534
535 if (usb_disabled())
536 return -ENODEV;
537@@ -988,6 +989,7 @@ debug_failed:
538
539 errbuf_failed:
540
541+ clear_bit(USB_UHCI_LOADED, &usb_hcds_loaded);
542 return retval;
543 }
544
545@@ -997,6 +999,7 @@ static void __exit uhci_hcd_cleanup(void)
546 kmem_cache_destroy(uhci_up_cachep);
547 debugfs_remove(uhci_debugfs_root);
548 kfree(errbuf);
549+ clear_bit(USB_UHCI_LOADED, &usb_hcds_loaded);
550 }
551
552 module_init(uhci_hcd_init);
553diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
554index 58b2b8f..4b9542b 100644
555--- a/drivers/usb/musb/Kconfig
556+++ b/drivers/usb/musb/Kconfig
557@@ -33,10 +33,6 @@ config USB_MUSB_SOC
558 default y if ARCH_DAVINCI
559 default y if ARCH_OMAP2430
560 default y if ARCH_OMAP34XX
561- help
562- Use a static <asm/arch/hdrc_cnf.h> file to describe how the
563- controller is configured (endpoints, mechanisms, etc) on the
564- current iteration of a given system-on-chip.
565
566 comment "DaVinci 644x USB support"
567 depends on USB_MUSB_HDRC && ARCH_DAVINCI
568diff --git a/drivers/usb/musb/cppi_dma.h b/drivers/usb/musb/cppi_dma.h
569index fc5216b..729b407 100644
570--- a/drivers/usb/musb/cppi_dma.h
571+++ b/drivers/usb/musb/cppi_dma.h
572@@ -119,8 +119,8 @@ struct cppi {
573 void __iomem *mregs; /* Mentor regs */
574 void __iomem *tibase; /* TI/CPPI regs */
575
576- struct cppi_channel tx[MUSB_C_NUM_EPT - 1];
577- struct cppi_channel rx[MUSB_C_NUM_EPR - 1];
578+ struct cppi_channel tx[4];
579+ struct cppi_channel rx[4];
580
581 struct dma_pool *pool;
582
583diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c
584index 75baf18..dfb3bcb 100644
585--- a/drivers/usb/musb/davinci.c
586+++ b/drivers/usb/musb/davinci.c
587@@ -30,6 +30,7 @@
588 #include <linux/delay.h>
589 #include <linux/clk.h>
590 #include <linux/io.h>
591+#include <linux/gpio.h>
592
593 #include <asm/arch/hardware.h>
594 #include <asm/arch/memory.h>
595@@ -39,7 +40,7 @@
596 #include "musb_core.h"
597
598 #ifdef CONFIG_MACH_DAVINCI_EVM
599-#include <asm/arch/i2c-client.h>
600+#define GPIO_nVBUS_DRV 87
601 #endif
602
603 #include "davinci.h"
604@@ -138,7 +139,6 @@ static int vbus_state = -1;
605 /* VBUS SWITCHING IS BOARD-SPECIFIC */
606
607 #ifdef CONFIG_MACH_DAVINCI_EVM
608-#ifndef CONFIG_MACH_DAVINCI_EVM_OTG
609
610 /* I2C operations are always synchronous, and require a task context.
611 * With unloaded systems, using the shared workqueue seems to suffice
612@@ -146,12 +146,11 @@ static int vbus_state = -1;
613 */
614 static void evm_deferred_drvvbus(struct work_struct *ignored)
615 {
616- davinci_i2c_expander_op(0x3a, USB_DRVVBUS, vbus_state);
617+ gpio_set_value_cansleep(GPIO_nVBUS_DRV, vbus_state);
618 vbus_state = !vbus_state;
619 }
620 static DECLARE_WORK(evm_vbus_work, evm_deferred_drvvbus);
621
622-#endif /* modified board */
623 #endif /* EVM */
624
625 static void davinci_source_power(struct musb *musb, int is_on, int immediate)
626@@ -165,21 +164,10 @@ static void davinci_source_power(struct musb *musb, int is_on, int immediate)
627
628 #ifdef CONFIG_MACH_DAVINCI_EVM
629 if (machine_is_davinci_evm()) {
630-#ifdef CONFIG_MACH_DAVINCI_EVM_OTG
631- /* modified EVM board switching VBUS with GPIO(6) not I2C
632- * NOTE: PINMUX0.RGB888 (bit23) must be clear
633- */
634- if (is_on)
635- gpio_set(GPIO(6));
636- else
637- gpio_clear(GPIO(6));
638- immediate = 1;
639-#else
640 if (immediate)
641- davinci_i2c_expander_op(0x3a, USB_DRVVBUS, !is_on);
642+ gpio_set_value_cansleep(GPIO_nVBUS_DRV, vbus_state);
643 else
644 schedule_work(&evm_vbus_work);
645-#endif
646 }
647 #endif
648 if (immediate)
649diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
650index 128e949..5c5bc1a 100644
651--- a/drivers/usb/musb/musb_core.c
652+++ b/drivers/usb/musb/musb_core.c
653@@ -82,9 +82,9 @@
654 /*
655 * This gets many kinds of configuration information:
656 * - Kconfig for everything user-configurable
657- * - <asm/arch/hdrc_cnf.h> for SOC or family details
658 * - platform_device for addressing, irq, and platform_data
659 * - platform_data is mostly for board-specific informarion
660+ * (plus recentrly, SOC or family details)
661 *
662 * Most of the conditional compilation will (someday) vanish.
663 */
664@@ -974,9 +974,9 @@ static void musb_shutdown(struct platform_device *pdev)
665 /*
666 * The silicon either has hard-wired endpoint configurations, or else
667 * "dynamic fifo" sizing. The driver has support for both, though at this
668- * writing only the dynamic sizing is very well tested. We use normal
669- * idioms to so both modes are compile-tested, but dead code elimination
670- * leaves only the relevant one in the object file.
671+ * writing only the dynamic sizing is very well tested. Since we switched
672+ * away from compile-time hardware parameters, we can no longer rely on
673+ * dead code elimination to leave only the relevant one in the object file.
674 *
675 * We don't currently use dynamic fifo setup capability to do anything
676 * more than selecting one of a bunch of predefined configurations.
677diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
678index 8b4be01..13205fe 100644
679--- a/drivers/usb/musb/musb_host.c
680+++ b/drivers/usb/musb/musb_host.c
681@@ -108,7 +108,7 @@ static void musb_ep_program(struct musb *musb, u8 epnum,
682 /*
683 * Clear TX fifo. Needed to avoid BABBLE errors.
684 */
685-static inline void musb_h_tx_flush_fifo(struct musb_hw_ep *ep)
686+static void musb_h_tx_flush_fifo(struct musb_hw_ep *ep)
687 {
688 void __iomem *epio = ep->regs;
689 u16 csr;
690@@ -436,7 +436,7 @@ musb_advance_schedule(struct musb *musb, struct urb *urb,
691 }
692 }
693
694-static inline u16 musb_h_flush_rxfifo(struct musb_hw_ep *hw_ep, u16 csr)
695+static u16 musb_h_flush_rxfifo(struct musb_hw_ep *hw_ep, u16 csr)
696 {
697 /* we don't want fifo to fill itself again;
698 * ignore dma (various models),
699@@ -1005,7 +1005,7 @@ static bool musb_h_ep0_continue(struct musb *musb, u16 len, struct urb *urb)
700
701 /*
702 * Handle default endpoint interrupt as host. Only called in IRQ time
703- * from the LinuxIsr() interrupt service routine.
704+ * from musb_interrupt().
705 *
706 * called with controller irqlocked
707 */
708diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
709index 9cbff84..038ea62 100644
710--- a/drivers/video/console/fbcon.c
711+++ b/drivers/video/console/fbcon.c
712@@ -2996,8 +2996,8 @@ static void fbcon_set_all_vcs(struct fb_info *info)
713 p = &fb_display[vc->vc_num];
714 set_blitting_type(vc, info);
715 var_to_display(p, &info->var, info);
716- cols = FBCON_SWAP(p->rotate, info->var.xres, info->var.yres);
717- rows = FBCON_SWAP(p->rotate, info->var.yres, info->var.xres);
718+ cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres);
719+ rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres);
720 cols /= vc->vc_font.width;
721 rows /= vc->vc_font.height;
722 vc_resize(vc, cols, rows);
723diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c
724index 18d3c84..cbdf97d 100644
725--- a/fs/xfs/linux-2.6/xfs_super.c
726+++ b/fs/xfs/linux-2.6/xfs_super.c
727@@ -1323,7 +1323,7 @@ xfs_fs_remount(
728 "XFS: mount option \"%s\" not supported for remount\n", p);
729 return -EINVAL;
730 #else
731- return 0;
732+ break;
733 #endif
734 }
735 }
736diff --git a/kernel/module.c b/kernel/module.c
737index 9db1191..d5fcd24 100644
738--- a/kernel/module.c
739+++ b/kernel/module.c
740@@ -1173,7 +1173,7 @@ static void free_notes_attrs(struct module_notes_attrs *notes_attrs,
741 while (i-- > 0)
742 sysfs_remove_bin_file(notes_attrs->dir,
743 &notes_attrs->attrs[i]);
744- kobject_del(notes_attrs->dir);
745+ kobject_put(notes_attrs->dir);
746 }
747 kfree(notes_attrs);
748 }
749diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c
750index 34fa8ed..48db9bb 100644
751--- a/net/mac80211/wext.c
752+++ b/net/mac80211/wext.c
753@@ -804,7 +804,7 @@ static int ieee80211_ioctl_siwfrag(struct net_device *dev,
754 * configure it here */
755
756 if (local->ops->set_frag_threshold)
757- local->ops->set_frag_threshold(
758+ return local->ops->set_frag_threshold(
759 local_to_hw(local),
760 local->fragmentation_threshold);
761