diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-05-21 12:59:23 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-05-21 12:59:23 -0400 |
commit | cda4db53e9c28061c100400e1a4d273ea61dfba9 (patch) | |
tree | 42fe432a412fdbd2313d3d0270b53e0877594316 | |
parent | 8e192910d96615a32646b8978b201b650f62ef34 (diff) | |
parent | c88db160a30cccb81303212b256680f2e37e35ae (diff) |
Merge tag 'for-usb-next-2012-05-21' of git://git.kernel.org/pub/scm/linux/kernel/git/sarah/xhci into usb-next
xhci/usb: Build error fixes for 3.5
Hi Greg,
Here's four patches that fix the build errors introduced by the USB 3.0 Link PM
patches. Please pull for inclusion in 3.5.
Sarah Sharp
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/usb.c | 2 | ||||
-rw-r--r-- | drivers/usb/core/hub.c | 4 | ||||
-rw-r--r-- | drivers/usb/host/xhci.c | 76 | ||||
-rw-r--r-- | include/linux/usb.h | 12 |
4 files changed, 57 insertions, 37 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/brcm80211/brcmfmac/usb.c index 8852d23ef82..f2bc48b745e 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/usb.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/usb.c | |||
@@ -1604,7 +1604,7 @@ static struct usb_driver brcmf_usbdrvr = { | |||
1604 | .id_table = brcmf_usb_devid_table, | 1604 | .id_table = brcmf_usb_devid_table, |
1605 | .suspend = brcmf_usb_suspend, | 1605 | .suspend = brcmf_usb_suspend, |
1606 | .resume = brcmf_usb_resume, | 1606 | .resume = brcmf_usb_resume, |
1607 | .supports_autosuspend = 1 | 1607 | .supports_autosuspend = 1, |
1608 | .disable_hub_initiated_lpm = 1, | 1608 | .disable_hub_initiated_lpm = 1, |
1609 | }; | 1609 | }; |
1610 | 1610 | ||
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index fcc244e9056..04fb834c3fa 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -3472,15 +3472,19 @@ int usb_disable_lpm(struct usb_device *udev) | |||
3472 | { | 3472 | { |
3473 | return 0; | 3473 | return 0; |
3474 | } | 3474 | } |
3475 | EXPORT_SYMBOL_GPL(usb_disable_lpm); | ||
3475 | 3476 | ||
3476 | void usb_enable_lpm(struct usb_device *udev) { } | 3477 | void usb_enable_lpm(struct usb_device *udev) { } |
3478 | EXPORT_SYMBOL_GPL(usb_enable_lpm); | ||
3477 | 3479 | ||
3478 | int usb_unlocked_disable_lpm(struct usb_device *udev) | 3480 | int usb_unlocked_disable_lpm(struct usb_device *udev) |
3479 | { | 3481 | { |
3480 | return 0; | 3482 | return 0; |
3481 | } | 3483 | } |
3484 | EXPORT_SYMBOL_GPL(usb_unlocked_disable_lpm); | ||
3482 | 3485 | ||
3483 | void usb_unlocked_enable_lpm(struct usb_device *udev) { } | 3486 | void usb_unlocked_enable_lpm(struct usb_device *udev) { } |
3487 | EXPORT_SYMBOL_GPL(usb_unlocked_enable_lpm); | ||
3484 | #endif | 3488 | #endif |
3485 | 3489 | ||
3486 | 3490 | ||
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 4ceba145fa8..afdc73ee84a 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c | |||
@@ -3837,8 +3837,43 @@ int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd, | |||
3837 | return 0; | 3837 | return 0; |
3838 | } | 3838 | } |
3839 | 3839 | ||
3840 | int xhci_update_device(struct usb_hcd *hcd, struct usb_device *udev) | ||
3841 | { | ||
3842 | struct xhci_hcd *xhci = hcd_to_xhci(hcd); | ||
3843 | int ret; | ||
3844 | |||
3845 | ret = xhci_usb2_software_lpm_test(hcd, udev); | ||
3846 | if (!ret) { | ||
3847 | xhci_dbg(xhci, "software LPM test succeed\n"); | ||
3848 | if (xhci->hw_lpm_support == 1) { | ||
3849 | udev->usb2_hw_lpm_capable = 1; | ||
3850 | ret = xhci_set_usb2_hardware_lpm(hcd, udev, 1); | ||
3851 | if (!ret) | ||
3852 | udev->usb2_hw_lpm_enabled = 1; | ||
3853 | } | ||
3854 | } | ||
3855 | |||
3856 | return 0; | ||
3857 | } | ||
3858 | |||
3859 | #else | ||
3860 | |||
3861 | int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd, | ||
3862 | struct usb_device *udev, int enable) | ||
3863 | { | ||
3864 | return 0; | ||
3865 | } | ||
3866 | |||
3867 | int xhci_update_device(struct usb_hcd *hcd, struct usb_device *udev) | ||
3868 | { | ||
3869 | return 0; | ||
3870 | } | ||
3871 | |||
3872 | #endif /* CONFIG_USB_SUSPEND */ | ||
3873 | |||
3840 | /*---------------------- USB 3.0 Link PM functions ------------------------*/ | 3874 | /*---------------------- USB 3.0 Link PM functions ------------------------*/ |
3841 | 3875 | ||
3876 | #ifdef CONFIG_PM | ||
3842 | /* Service interval in nanoseconds = 2^(bInterval - 1) * 125us * 1000ns / 1us */ | 3877 | /* Service interval in nanoseconds = 2^(bInterval - 1) * 125us * 1000ns / 1us */ |
3843 | static unsigned long long xhci_service_interval_to_ns( | 3878 | static unsigned long long xhci_service_interval_to_ns( |
3844 | struct usb_endpoint_descriptor *desc) | 3879 | struct usb_endpoint_descriptor *desc) |
@@ -3921,7 +3956,7 @@ static u16 xhci_calculate_intel_u1_timeout(struct usb_device *udev, | |||
3921 | /* Otherwise the calculation is the same as isoc eps */ | 3956 | /* Otherwise the calculation is the same as isoc eps */ |
3922 | case USB_ENDPOINT_XFER_ISOC: | 3957 | case USB_ENDPOINT_XFER_ISOC: |
3923 | timeout_ns = xhci_service_interval_to_ns(desc); | 3958 | timeout_ns = xhci_service_interval_to_ns(desc); |
3924 | timeout_ns = DIV_ROUND_UP(timeout_ns * 105, 100); | 3959 | timeout_ns = DIV_ROUND_UP_ULL(timeout_ns * 105, 100); |
3925 | if (timeout_ns < udev->u1_params.sel * 2) | 3960 | if (timeout_ns < udev->u1_params.sel * 2) |
3926 | timeout_ns = udev->u1_params.sel * 2; | 3961 | timeout_ns = udev->u1_params.sel * 2; |
3927 | break; | 3962 | break; |
@@ -3930,7 +3965,7 @@ static u16 xhci_calculate_intel_u1_timeout(struct usb_device *udev, | |||
3930 | } | 3965 | } |
3931 | 3966 | ||
3932 | /* The U1 timeout is encoded in 1us intervals. */ | 3967 | /* The U1 timeout is encoded in 1us intervals. */ |
3933 | timeout_ns = DIV_ROUND_UP(timeout_ns, 1000); | 3968 | timeout_ns = DIV_ROUND_UP_ULL(timeout_ns, 1000); |
3934 | /* Don't return a timeout of zero, because that's USB3_LPM_DISABLED. */ | 3969 | /* Don't return a timeout of zero, because that's USB3_LPM_DISABLED. */ |
3935 | if (timeout_ns == USB3_LPM_DISABLED) | 3970 | if (timeout_ns == USB3_LPM_DISABLED) |
3936 | timeout_ns++; | 3971 | timeout_ns++; |
@@ -3969,7 +4004,7 @@ static u16 xhci_calculate_intel_u2_timeout(struct usb_device *udev, | |||
3969 | timeout_ns = u2_del_ns; | 4004 | timeout_ns = u2_del_ns; |
3970 | 4005 | ||
3971 | /* The U2 timeout is encoded in 256us intervals */ | 4006 | /* The U2 timeout is encoded in 256us intervals */ |
3972 | timeout_ns = DIV_ROUND_UP(timeout_ns, 256 * 1000); | 4007 | timeout_ns = DIV_ROUND_UP_ULL(timeout_ns, 256 * 1000); |
3973 | /* If the necessary timeout value is bigger than what we can set in the | 4008 | /* If the necessary timeout value is bigger than what we can set in the |
3974 | * USB 3.0 hub, we have to disable hub-initiated U2. | 4009 | * USB 3.0 hub, we have to disable hub-initiated U2. |
3975 | */ | 4010 | */ |
@@ -4287,41 +4322,22 @@ int xhci_disable_usb3_lpm_timeout(struct usb_hcd *hcd, | |||
4287 | return ret; | 4322 | return ret; |
4288 | return 0; | 4323 | return 0; |
4289 | } | 4324 | } |
4290 | /*-------------------------------------------------------------------------*/ | 4325 | #else /* CONFIG_PM */ |
4291 | |||
4292 | int xhci_update_device(struct usb_hcd *hcd, struct usb_device *udev) | ||
4293 | { | ||
4294 | struct xhci_hcd *xhci = hcd_to_xhci(hcd); | ||
4295 | int ret; | ||
4296 | |||
4297 | ret = xhci_usb2_software_lpm_test(hcd, udev); | ||
4298 | if (!ret) { | ||
4299 | xhci_dbg(xhci, "software LPM test succeed\n"); | ||
4300 | if (xhci->hw_lpm_support == 1) { | ||
4301 | udev->usb2_hw_lpm_capable = 1; | ||
4302 | ret = xhci_set_usb2_hardware_lpm(hcd, udev, 1); | ||
4303 | if (!ret) | ||
4304 | udev->usb2_hw_lpm_enabled = 1; | ||
4305 | } | ||
4306 | } | ||
4307 | 4326 | ||
4308 | return 0; | 4327 | int xhci_enable_usb3_lpm_timeout(struct usb_hcd *hcd, |
4309 | } | 4328 | struct usb_device *udev, enum usb3_link_state state) |
4310 | |||
4311 | #else | ||
4312 | |||
4313 | int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd, | ||
4314 | struct usb_device *udev, int enable) | ||
4315 | { | 4329 | { |
4316 | return 0; | 4330 | return USB3_LPM_DISABLED; |
4317 | } | 4331 | } |
4318 | 4332 | ||
4319 | int xhci_update_device(struct usb_hcd *hcd, struct usb_device *udev) | 4333 | int xhci_disable_usb3_lpm_timeout(struct usb_hcd *hcd, |
4334 | struct usb_device *udev, enum usb3_link_state state) | ||
4320 | { | 4335 | { |
4321 | return 0; | 4336 | return 0; |
4322 | } | 4337 | } |
4338 | #endif /* CONFIG_PM */ | ||
4323 | 4339 | ||
4324 | #endif /* CONFIG_USB_SUSPEND */ | 4340 | /*-------------------------------------------------------------------------*/ |
4325 | 4341 | ||
4326 | /* Once a hub descriptor is fetched for a device, we need to update the xHC's | 4342 | /* Once a hub descriptor is fetched for a device, we need to update the xHC's |
4327 | * internal data structures for the device. | 4343 | * internal data structures for the device. |
diff --git a/include/linux/usb.h b/include/linux/usb.h index c19297a8779..dea39dc551d 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -592,12 +592,6 @@ extern void usb_autopm_put_interface_async(struct usb_interface *intf); | |||
592 | extern void usb_autopm_get_interface_no_resume(struct usb_interface *intf); | 592 | extern void usb_autopm_get_interface_no_resume(struct usb_interface *intf); |
593 | extern void usb_autopm_put_interface_no_suspend(struct usb_interface *intf); | 593 | extern void usb_autopm_put_interface_no_suspend(struct usb_interface *intf); |
594 | 594 | ||
595 | extern int usb_disable_lpm(struct usb_device *udev); | ||
596 | extern void usb_enable_lpm(struct usb_device *udev); | ||
597 | /* Same as above, but these functions lock/unlock the bandwidth_mutex. */ | ||
598 | extern int usb_unlocked_disable_lpm(struct usb_device *udev); | ||
599 | extern void usb_unlocked_enable_lpm(struct usb_device *udev); | ||
600 | |||
601 | static inline void usb_mark_last_busy(struct usb_device *udev) | 595 | static inline void usb_mark_last_busy(struct usb_device *udev) |
602 | { | 596 | { |
603 | pm_runtime_mark_last_busy(&udev->dev); | 597 | pm_runtime_mark_last_busy(&udev->dev); |
@@ -629,6 +623,12 @@ static inline void usb_mark_last_busy(struct usb_device *udev) | |||
629 | { } | 623 | { } |
630 | #endif | 624 | #endif |
631 | 625 | ||
626 | extern int usb_disable_lpm(struct usb_device *udev); | ||
627 | extern void usb_enable_lpm(struct usb_device *udev); | ||
628 | /* Same as above, but these functions lock/unlock the bandwidth_mutex. */ | ||
629 | extern int usb_unlocked_disable_lpm(struct usb_device *udev); | ||
630 | extern void usb_unlocked_enable_lpm(struct usb_device *udev); | ||
631 | |||
632 | /*-------------------------------------------------------------------------*/ | 632 | /*-------------------------------------------------------------------------*/ |
633 | 633 | ||
634 | /* for drivers using iso endpoints */ | 634 | /* for drivers using iso endpoints */ |