diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-08-07 21:27:51 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-08-07 21:27:51 -0400 |
commit | d5a8ab400bf15d673f1791e250f08699a4d9f8bd (patch) | |
tree | 214c1252e7cafa0b8b4b7a3530296676cb3eaa5b | |
parent | 9f21a8bdaa0ec47730675ddac962c1415dd1451d (diff) | |
parent | 0a1b6f63198f6e51d12c8d8c4ed4e7d759b3b73d (diff) |
Merge tag 'usb-4.2-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB fixes from Greg KH:
"Here are some USB and PHY fixes for 4.2-rc6 that resolve some reported
issues.
All of these have been in the linux-next tree for a while, full
details on the patches are in the shortlog below"
* tag 'usb-4.2-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
ARM: dts: dra7: Add syscon-pllreset syscon to SATA PHY
drivers/usb: Delete XHCI command timer if necessary
xhci: fix off by one error in TRB DMA address boundary check
usb: udc: core: add device_del() call to error pathway
phy: ti-pipe3: i783 workaround for SATA lockup after dpll unlock/relock
phy-sun4i-usb: Add missing EXPORT_SYMBOL_GPL for sun4i_usb_phy_set_squelch_detect
USB: sierra: add 1199:68AB device ID
usb: gadget: f_printer: actually limit the number of instances
usb: gadget: f_hid: actually limit the number of instances
usb: gadget: f_uac2: fix calculation of uac2->p_interval
usb: gadget: bdc: fix a driver crash on disconnect
usb: chipidea: ehci_init_driver is intended to call one time
USB: qcserial: Add support for Dell Wireless 5809e 4G Modem
USB: qcserial/option: make AT URCs work for Sierra Wireless MC7305/MC7355
-rw-r--r-- | Documentation/devicetree/bindings/phy/ti-phy.txt | 16 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra7.dtsi | 1 | ||||
-rw-r--r-- | drivers/phy/phy-sun4i-usb.c | 1 | ||||
-rw-r--r-- | drivers/phy/phy-ti-pipe3.c | 61 | ||||
-rw-r--r-- | drivers/usb/chipidea/core.c | 13 | ||||
-rw-r--r-- | drivers/usb/chipidea/host.c | 7 | ||||
-rw-r--r-- | drivers/usb/chipidea/host.h | 6 | ||||
-rw-r--r-- | drivers/usb/gadget/function/f_hid.c | 4 | ||||
-rw-r--r-- | drivers/usb/gadget/function/f_printer.c | 10 | ||||
-rw-r--r-- | drivers/usb/gadget/function/f_uac2.c | 4 | ||||
-rw-r--r-- | drivers/usb/gadget/udc/bdc/bdc_ep.c | 2 | ||||
-rw-r--r-- | drivers/usb/gadget/udc/udc-core.c | 1 | ||||
-rw-r--r-- | drivers/usb/host/xhci-mem.c | 3 | ||||
-rw-r--r-- | drivers/usb/host/xhci-ring.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/option.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/qcserial.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/sierra.c | 1 |
17 files changed, 120 insertions, 16 deletions
diff --git a/Documentation/devicetree/bindings/phy/ti-phy.txt b/Documentation/devicetree/bindings/phy/ti-phy.txt index 305e3df3d9b1..9cf9446eaf2e 100644 --- a/Documentation/devicetree/bindings/phy/ti-phy.txt +++ b/Documentation/devicetree/bindings/phy/ti-phy.txt | |||
@@ -82,6 +82,9 @@ Optional properties: | |||
82 | - id: If there are multiple instance of the same type, in order to | 82 | - id: If there are multiple instance of the same type, in order to |
83 | differentiate between each instance "id" can be used (e.g., multi-lane PCIe | 83 | differentiate between each instance "id" can be used (e.g., multi-lane PCIe |
84 | PHY). If "id" is not provided, it is set to default value of '1'. | 84 | PHY). If "id" is not provided, it is set to default value of '1'. |
85 | - syscon-pllreset: Handle to system control region that contains the | ||
86 | CTRL_CORE_SMA_SW_0 register and register offset to the CTRL_CORE_SMA_SW_0 | ||
87 | register that contains the SATA_PLL_SOFT_RESET bit. Only valid for sata_phy. | ||
85 | 88 | ||
86 | This is usually a subnode of ocp2scp to which it is connected. | 89 | This is usually a subnode of ocp2scp to which it is connected. |
87 | 90 | ||
@@ -100,3 +103,16 @@ usb3phy@4a084400 { | |||
100 | "sysclk", | 103 | "sysclk", |
101 | "refclk"; | 104 | "refclk"; |
102 | }; | 105 | }; |
106 | |||
107 | sata_phy: phy@4A096000 { | ||
108 | compatible = "ti,phy-pipe3-sata"; | ||
109 | reg = <0x4A096000 0x80>, /* phy_rx */ | ||
110 | <0x4A096400 0x64>, /* phy_tx */ | ||
111 | <0x4A096800 0x40>; /* pll_ctrl */ | ||
112 | reg-names = "phy_rx", "phy_tx", "pll_ctrl"; | ||
113 | ctrl-module = <&omap_control_sata>; | ||
114 | clocks = <&sys_clkin1>, <&sata_ref_clk>; | ||
115 | clock-names = "sysclk", "refclk"; | ||
116 | syscon-pllreset = <&scm_conf 0x3fc>; | ||
117 | #phy-cells = <0>; | ||
118 | }; | ||
diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi index 8f1e25bcecbd..4a0718ccf68e 100644 --- a/arch/arm/boot/dts/dra7.dtsi +++ b/arch/arm/boot/dts/dra7.dtsi | |||
@@ -1140,6 +1140,7 @@ | |||
1140 | ctrl-module = <&omap_control_sata>; | 1140 | ctrl-module = <&omap_control_sata>; |
1141 | clocks = <&sys_clkin1>, <&sata_ref_clk>; | 1141 | clocks = <&sys_clkin1>, <&sata_ref_clk>; |
1142 | clock-names = "sysclk", "refclk"; | 1142 | clock-names = "sysclk", "refclk"; |
1143 | syscon-pllreset = <&scm_conf 0x3fc>; | ||
1143 | #phy-cells = <0>; | 1144 | #phy-cells = <0>; |
1144 | }; | 1145 | }; |
1145 | 1146 | ||
diff --git a/drivers/phy/phy-sun4i-usb.c b/drivers/phy/phy-sun4i-usb.c index e17c539e4f6f..2dad7e820ff0 100644 --- a/drivers/phy/phy-sun4i-usb.c +++ b/drivers/phy/phy-sun4i-usb.c | |||
@@ -212,6 +212,7 @@ void sun4i_usb_phy_set_squelch_detect(struct phy *_phy, bool enabled) | |||
212 | 212 | ||
213 | sun4i_usb_phy_write(phy, PHY_SQUELCH_DETECT, enabled ? 0 : 2, 2); | 213 | sun4i_usb_phy_write(phy, PHY_SQUELCH_DETECT, enabled ? 0 : 2, 2); |
214 | } | 214 | } |
215 | EXPORT_SYMBOL_GPL(sun4i_usb_phy_set_squelch_detect); | ||
215 | 216 | ||
216 | static struct phy_ops sun4i_usb_phy_ops = { | 217 | static struct phy_ops sun4i_usb_phy_ops = { |
217 | .init = sun4i_usb_phy_init, | 218 | .init = sun4i_usb_phy_init, |
diff --git a/drivers/phy/phy-ti-pipe3.c b/drivers/phy/phy-ti-pipe3.c index 3510b81db3fa..08020dc2c7c8 100644 --- a/drivers/phy/phy-ti-pipe3.c +++ b/drivers/phy/phy-ti-pipe3.c | |||
@@ -28,6 +28,8 @@ | |||
28 | #include <linux/delay.h> | 28 | #include <linux/delay.h> |
29 | #include <linux/phy/omap_control_phy.h> | 29 | #include <linux/phy/omap_control_phy.h> |
30 | #include <linux/of_platform.h> | 30 | #include <linux/of_platform.h> |
31 | #include <linux/mfd/syscon.h> | ||
32 | #include <linux/regmap.h> | ||
31 | 33 | ||
32 | #define PLL_STATUS 0x00000004 | 34 | #define PLL_STATUS 0x00000004 |
33 | #define PLL_GO 0x00000008 | 35 | #define PLL_GO 0x00000008 |
@@ -52,6 +54,8 @@ | |||
52 | #define PLL_LOCK 0x2 | 54 | #define PLL_LOCK 0x2 |
53 | #define PLL_IDLE 0x1 | 55 | #define PLL_IDLE 0x1 |
54 | 56 | ||
57 | #define SATA_PLL_SOFT_RESET BIT(18) | ||
58 | |||
55 | /* | 59 | /* |
56 | * This is an Empirical value that works, need to confirm the actual | 60 | * This is an Empirical value that works, need to confirm the actual |
57 | * value required for the PIPE3PHY_PLL_CONFIGURATION2.PLL_IDLE status | 61 | * value required for the PIPE3PHY_PLL_CONFIGURATION2.PLL_IDLE status |
@@ -82,6 +86,9 @@ struct ti_pipe3 { | |||
82 | struct clk *refclk; | 86 | struct clk *refclk; |
83 | struct clk *div_clk; | 87 | struct clk *div_clk; |
84 | struct pipe3_dpll_map *dpll_map; | 88 | struct pipe3_dpll_map *dpll_map; |
89 | struct regmap *dpll_reset_syscon; /* ctrl. reg. acces */ | ||
90 | unsigned int dpll_reset_reg; /* reg. index within syscon */ | ||
91 | bool sata_refclk_enabled; | ||
85 | }; | 92 | }; |
86 | 93 | ||
87 | static struct pipe3_dpll_map dpll_map_usb[] = { | 94 | static struct pipe3_dpll_map dpll_map_usb[] = { |
@@ -249,8 +256,11 @@ static int ti_pipe3_exit(struct phy *x) | |||
249 | u32 val; | 256 | u32 val; |
250 | unsigned long timeout; | 257 | unsigned long timeout; |
251 | 258 | ||
252 | /* SATA DPLL can't be powered down due to Errata i783 */ | 259 | /* If dpll_reset_syscon is not present we wont power down SATA DPLL |
253 | if (of_device_is_compatible(phy->dev->of_node, "ti,phy-pipe3-sata")) | 260 | * due to Errata i783 |
261 | */ | ||
262 | if (of_device_is_compatible(phy->dev->of_node, "ti,phy-pipe3-sata") && | ||
263 | !phy->dpll_reset_syscon) | ||
254 | return 0; | 264 | return 0; |
255 | 265 | ||
256 | /* PCIe doesn't have internal DPLL */ | 266 | /* PCIe doesn't have internal DPLL */ |
@@ -276,6 +286,14 @@ static int ti_pipe3_exit(struct phy *x) | |||
276 | } | 286 | } |
277 | } | 287 | } |
278 | 288 | ||
289 | /* i783: SATA needs control bit toggle after PLL unlock */ | ||
290 | if (of_device_is_compatible(phy->dev->of_node, "ti,phy-pipe3-sata")) { | ||
291 | regmap_update_bits(phy->dpll_reset_syscon, phy->dpll_reset_reg, | ||
292 | SATA_PLL_SOFT_RESET, SATA_PLL_SOFT_RESET); | ||
293 | regmap_update_bits(phy->dpll_reset_syscon, phy->dpll_reset_reg, | ||
294 | SATA_PLL_SOFT_RESET, 0); | ||
295 | } | ||
296 | |||
279 | ti_pipe3_disable_clocks(phy); | 297 | ti_pipe3_disable_clocks(phy); |
280 | 298 | ||
281 | return 0; | 299 | return 0; |
@@ -350,6 +368,21 @@ static int ti_pipe3_probe(struct platform_device *pdev) | |||
350 | } | 368 | } |
351 | } else { | 369 | } else { |
352 | phy->wkupclk = ERR_PTR(-ENODEV); | 370 | phy->wkupclk = ERR_PTR(-ENODEV); |
371 | phy->dpll_reset_syscon = syscon_regmap_lookup_by_phandle(node, | ||
372 | "syscon-pllreset"); | ||
373 | if (IS_ERR(phy->dpll_reset_syscon)) { | ||
374 | dev_info(&pdev->dev, | ||
375 | "can't get syscon-pllreset, sata dpll won't idle\n"); | ||
376 | phy->dpll_reset_syscon = NULL; | ||
377 | } else { | ||
378 | if (of_property_read_u32_index(node, | ||
379 | "syscon-pllreset", 1, | ||
380 | &phy->dpll_reset_reg)) { | ||
381 | dev_err(&pdev->dev, | ||
382 | "couldn't get pllreset reg. offset\n"); | ||
383 | return -EINVAL; | ||
384 | } | ||
385 | } | ||
353 | } | 386 | } |
354 | 387 | ||
355 | if (of_device_is_compatible(node, "ti,phy-pipe3-pcie")) { | 388 | if (of_device_is_compatible(node, "ti,phy-pipe3-pcie")) { |
@@ -402,10 +435,16 @@ static int ti_pipe3_probe(struct platform_device *pdev) | |||
402 | 435 | ||
403 | platform_set_drvdata(pdev, phy); | 436 | platform_set_drvdata(pdev, phy); |
404 | pm_runtime_enable(phy->dev); | 437 | pm_runtime_enable(phy->dev); |
405 | /* Prevent auto-disable of refclk for SATA PHY due to Errata i783 */ | 438 | |
406 | if (of_device_is_compatible(node, "ti,phy-pipe3-sata")) | 439 | /* |
407 | if (!IS_ERR(phy->refclk)) | 440 | * Prevent auto-disable of refclk for SATA PHY due to Errata i783 |
441 | */ | ||
442 | if (of_device_is_compatible(node, "ti,phy-pipe3-sata")) { | ||
443 | if (!IS_ERR(phy->refclk)) { | ||
408 | clk_prepare_enable(phy->refclk); | 444 | clk_prepare_enable(phy->refclk); |
445 | phy->sata_refclk_enabled = true; | ||
446 | } | ||
447 | } | ||
409 | 448 | ||
410 | generic_phy = devm_phy_create(phy->dev, NULL, &ops); | 449 | generic_phy = devm_phy_create(phy->dev, NULL, &ops); |
411 | if (IS_ERR(generic_phy)) | 450 | if (IS_ERR(generic_phy)) |
@@ -472,8 +511,18 @@ static void ti_pipe3_disable_clocks(struct ti_pipe3 *phy) | |||
472 | { | 511 | { |
473 | if (!IS_ERR(phy->wkupclk)) | 512 | if (!IS_ERR(phy->wkupclk)) |
474 | clk_disable_unprepare(phy->wkupclk); | 513 | clk_disable_unprepare(phy->wkupclk); |
475 | if (!IS_ERR(phy->refclk)) | 514 | if (!IS_ERR(phy->refclk)) { |
476 | clk_disable_unprepare(phy->refclk); | 515 | clk_disable_unprepare(phy->refclk); |
516 | /* | ||
517 | * SATA refclk needs an additional disable as we left it | ||
518 | * on in probe to avoid Errata i783 | ||
519 | */ | ||
520 | if (phy->sata_refclk_enabled) { | ||
521 | clk_disable_unprepare(phy->refclk); | ||
522 | phy->sata_refclk_enabled = false; | ||
523 | } | ||
524 | } | ||
525 | |||
477 | if (!IS_ERR(phy->div_clk)) | 526 | if (!IS_ERR(phy->div_clk)) |
478 | clk_disable_unprepare(phy->div_clk); | 527 | clk_disable_unprepare(phy->div_clk); |
479 | } | 528 | } |
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c index 74fea4fa41b1..3ad48e1c0c57 100644 --- a/drivers/usb/chipidea/core.c +++ b/drivers/usb/chipidea/core.c | |||
@@ -1024,7 +1024,18 @@ static struct platform_driver ci_hdrc_driver = { | |||
1024 | }, | 1024 | }, |
1025 | }; | 1025 | }; |
1026 | 1026 | ||
1027 | module_platform_driver(ci_hdrc_driver); | 1027 | static int __init ci_hdrc_platform_register(void) |
1028 | { | ||
1029 | ci_hdrc_host_driver_init(); | ||
1030 | return platform_driver_register(&ci_hdrc_driver); | ||
1031 | } | ||
1032 | module_init(ci_hdrc_platform_register); | ||
1033 | |||
1034 | static void __exit ci_hdrc_platform_unregister(void) | ||
1035 | { | ||
1036 | platform_driver_unregister(&ci_hdrc_driver); | ||
1037 | } | ||
1038 | module_exit(ci_hdrc_platform_unregister); | ||
1028 | 1039 | ||
1029 | MODULE_ALIAS("platform:ci_hdrc"); | 1040 | MODULE_ALIAS("platform:ci_hdrc"); |
1030 | MODULE_LICENSE("GPL v2"); | 1041 | MODULE_LICENSE("GPL v2"); |
diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c index 6cf87b8b13a8..7161439def19 100644 --- a/drivers/usb/chipidea/host.c +++ b/drivers/usb/chipidea/host.c | |||
@@ -249,9 +249,12 @@ int ci_hdrc_host_init(struct ci_hdrc *ci) | |||
249 | rdrv->name = "host"; | 249 | rdrv->name = "host"; |
250 | ci->roles[CI_ROLE_HOST] = rdrv; | 250 | ci->roles[CI_ROLE_HOST] = rdrv; |
251 | 251 | ||
252 | return 0; | ||
253 | } | ||
254 | |||
255 | void ci_hdrc_host_driver_init(void) | ||
256 | { | ||
252 | ehci_init_driver(&ci_ehci_hc_driver, &ehci_ci_overrides); | 257 | ehci_init_driver(&ci_ehci_hc_driver, &ehci_ci_overrides); |
253 | orig_bus_suspend = ci_ehci_hc_driver.bus_suspend; | 258 | orig_bus_suspend = ci_ehci_hc_driver.bus_suspend; |
254 | ci_ehci_hc_driver.bus_suspend = ci_ehci_bus_suspend; | 259 | ci_ehci_hc_driver.bus_suspend = ci_ehci_bus_suspend; |
255 | |||
256 | return 0; | ||
257 | } | 260 | } |
diff --git a/drivers/usb/chipidea/host.h b/drivers/usb/chipidea/host.h index 5707bf379bfb..0f12f131bdd3 100644 --- a/drivers/usb/chipidea/host.h +++ b/drivers/usb/chipidea/host.h | |||
@@ -5,6 +5,7 @@ | |||
5 | 5 | ||
6 | int ci_hdrc_host_init(struct ci_hdrc *ci); | 6 | int ci_hdrc_host_init(struct ci_hdrc *ci); |
7 | void ci_hdrc_host_destroy(struct ci_hdrc *ci); | 7 | void ci_hdrc_host_destroy(struct ci_hdrc *ci); |
8 | void ci_hdrc_host_driver_init(void); | ||
8 | 9 | ||
9 | #else | 10 | #else |
10 | 11 | ||
@@ -18,6 +19,11 @@ static inline void ci_hdrc_host_destroy(struct ci_hdrc *ci) | |||
18 | 19 | ||
19 | } | 20 | } |
20 | 21 | ||
22 | static void ci_hdrc_host_driver_init(void) | ||
23 | { | ||
24 | |||
25 | } | ||
26 | |||
21 | #endif | 27 | #endif |
22 | 28 | ||
23 | #endif /* __DRIVERS_USB_CHIPIDEA_HOST_H */ | 29 | #endif /* __DRIVERS_USB_CHIPIDEA_HOST_H */ |
diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c index f7f35a36c09a..6df9715a4bcd 100644 --- a/drivers/usb/gadget/function/f_hid.c +++ b/drivers/usb/gadget/function/f_hid.c | |||
@@ -699,6 +699,10 @@ static inline int hidg_get_minor(void) | |||
699 | int ret; | 699 | int ret; |
700 | 700 | ||
701 | ret = ida_simple_get(&hidg_ida, 0, 0, GFP_KERNEL); | 701 | ret = ida_simple_get(&hidg_ida, 0, 0, GFP_KERNEL); |
702 | if (ret >= HIDG_MINORS) { | ||
703 | ida_simple_remove(&hidg_ida, ret); | ||
704 | ret = -ENODEV; | ||
705 | } | ||
702 | 706 | ||
703 | return ret; | 707 | return ret; |
704 | } | 708 | } |
diff --git a/drivers/usb/gadget/function/f_printer.c b/drivers/usb/gadget/function/f_printer.c index 44173df27273..357f63f47b42 100644 --- a/drivers/usb/gadget/function/f_printer.c +++ b/drivers/usb/gadget/function/f_printer.c | |||
@@ -1248,7 +1248,15 @@ static struct config_item_type printer_func_type = { | |||
1248 | 1248 | ||
1249 | static inline int gprinter_get_minor(void) | 1249 | static inline int gprinter_get_minor(void) |
1250 | { | 1250 | { |
1251 | return ida_simple_get(&printer_ida, 0, 0, GFP_KERNEL); | 1251 | int ret; |
1252 | |||
1253 | ret = ida_simple_get(&printer_ida, 0, 0, GFP_KERNEL); | ||
1254 | if (ret >= PRINTER_MINORS) { | ||
1255 | ida_simple_remove(&printer_ida, ret); | ||
1256 | ret = -ENODEV; | ||
1257 | } | ||
1258 | |||
1259 | return ret; | ||
1252 | } | 1260 | } |
1253 | 1261 | ||
1254 | static inline void gprinter_put_minor(int minor) | 1262 | static inline void gprinter_put_minor(int minor) |
diff --git a/drivers/usb/gadget/function/f_uac2.c b/drivers/usb/gadget/function/f_uac2.c index 6d3eb8b00a48..531861547253 100644 --- a/drivers/usb/gadget/function/f_uac2.c +++ b/drivers/usb/gadget/function/f_uac2.c | |||
@@ -1162,14 +1162,14 @@ afunc_set_alt(struct usb_function *fn, unsigned intf, unsigned alt) | |||
1162 | factor = 1000; | 1162 | factor = 1000; |
1163 | } else { | 1163 | } else { |
1164 | ep_desc = &hs_epin_desc; | 1164 | ep_desc = &hs_epin_desc; |
1165 | factor = 125; | 1165 | factor = 8000; |
1166 | } | 1166 | } |
1167 | 1167 | ||
1168 | /* pre-compute some values for iso_complete() */ | 1168 | /* pre-compute some values for iso_complete() */ |
1169 | uac2->p_framesize = opts->p_ssize * | 1169 | uac2->p_framesize = opts->p_ssize * |
1170 | num_channels(opts->p_chmask); | 1170 | num_channels(opts->p_chmask); |
1171 | rate = opts->p_srate * uac2->p_framesize; | 1171 | rate = opts->p_srate * uac2->p_framesize; |
1172 | uac2->p_interval = (1 << (ep_desc->bInterval - 1)) * factor; | 1172 | uac2->p_interval = factor / (1 << (ep_desc->bInterval - 1)); |
1173 | uac2->p_pktsize = min_t(unsigned int, rate / uac2->p_interval, | 1173 | uac2->p_pktsize = min_t(unsigned int, rate / uac2->p_interval, |
1174 | prm->max_psize); | 1174 | prm->max_psize); |
1175 | 1175 | ||
diff --git a/drivers/usb/gadget/udc/bdc/bdc_ep.c b/drivers/usb/gadget/udc/bdc/bdc_ep.c index b04980cf6dc4..1efa61265d8d 100644 --- a/drivers/usb/gadget/udc/bdc/bdc_ep.c +++ b/drivers/usb/gadget/udc/bdc/bdc_ep.c | |||
@@ -779,7 +779,7 @@ static int ep_dequeue(struct bdc_ep *ep, struct bdc_req *req) | |||
779 | /* The current hw dequeue pointer */ | 779 | /* The current hw dequeue pointer */ |
780 | tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS0(0)); | 780 | tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS0(0)); |
781 | deq_ptr_64 = tmp_32; | 781 | deq_ptr_64 = tmp_32; |
782 | tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS0(1)); | 782 | tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS1(0)); |
783 | deq_ptr_64 |= ((u64)tmp_32 << 32); | 783 | deq_ptr_64 |= ((u64)tmp_32 << 32); |
784 | 784 | ||
785 | /* we have the dma addr of next bd that will be fetched by hardware */ | 785 | /* we have the dma addr of next bd that will be fetched by hardware */ |
diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c index 362ee8af5fce..89ed5e71a199 100644 --- a/drivers/usb/gadget/udc/udc-core.c +++ b/drivers/usb/gadget/udc/udc-core.c | |||
@@ -323,6 +323,7 @@ err4: | |||
323 | 323 | ||
324 | err3: | 324 | err3: |
325 | put_device(&udc->dev); | 325 | put_device(&udc->dev); |
326 | device_del(&gadget->dev); | ||
326 | 327 | ||
327 | err2: | 328 | err2: |
328 | put_device(&gadget->dev); | 329 | put_device(&gadget->dev); |
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index 3e442f77a2b9..9a8c936cd42c 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c | |||
@@ -1792,7 +1792,8 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci) | |||
1792 | int size; | 1792 | int size; |
1793 | int i, j, num_ports; | 1793 | int i, j, num_ports; |
1794 | 1794 | ||
1795 | del_timer_sync(&xhci->cmd_timer); | 1795 | if (timer_pending(&xhci->cmd_timer)) |
1796 | del_timer_sync(&xhci->cmd_timer); | ||
1796 | 1797 | ||
1797 | /* Free the Event Ring Segment Table and the actual Event Ring */ | 1798 | /* Free the Event Ring Segment Table and the actual Event Ring */ |
1798 | size = sizeof(struct xhci_erst_entry)*(xhci->erst.num_entries); | 1799 | size = sizeof(struct xhci_erst_entry)*(xhci->erst.num_entries); |
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index 6a8fc52aed58..32f4d564494a 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c | |||
@@ -82,7 +82,7 @@ dma_addr_t xhci_trb_virt_to_dma(struct xhci_segment *seg, | |||
82 | return 0; | 82 | return 0; |
83 | /* offset in TRBs */ | 83 | /* offset in TRBs */ |
84 | segment_offset = trb - seg->trbs; | 84 | segment_offset = trb - seg->trbs; |
85 | if (segment_offset > TRBS_PER_SEGMENT) | 85 | if (segment_offset >= TRBS_PER_SEGMENT) |
86 | return 0; | 86 | return 0; |
87 | return seg->dma + (segment_offset * sizeof(*trb)); | 87 | return seg->dma + (segment_offset * sizeof(*trb)); |
88 | } | 88 | } |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 19b85ee98a72..876423b8892c 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -1099,6 +1099,8 @@ static const struct usb_device_id option_ids[] = { | |||
1099 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */ | 1099 | { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */ |
1100 | { USB_DEVICE_INTERFACE_CLASS(SIERRA_VENDOR_ID, 0x68c0, 0xff), | 1100 | { USB_DEVICE_INTERFACE_CLASS(SIERRA_VENDOR_ID, 0x68c0, 0xff), |
1101 | .driver_info = (kernel_ulong_t)&sierra_mc73xx_blacklist }, /* MC73xx */ | 1101 | .driver_info = (kernel_ulong_t)&sierra_mc73xx_blacklist }, /* MC73xx */ |
1102 | { USB_DEVICE_INTERFACE_CLASS(SIERRA_VENDOR_ID, 0x9041, 0xff), | ||
1103 | .driver_info = (kernel_ulong_t)&sierra_mc73xx_blacklist }, /* MC7305/MC7355 */ | ||
1102 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, | 1104 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, |
1103 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) }, | 1105 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) }, |
1104 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003), | 1106 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003), |
diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c index 9c63897b3a56..d156545728c2 100644 --- a/drivers/usb/serial/qcserial.c +++ b/drivers/usb/serial/qcserial.c | |||
@@ -145,7 +145,6 @@ static const struct usb_device_id id_table[] = { | |||
145 | {DEVICE_SWI(0x1199, 0x901c)}, /* Sierra Wireless EM7700 */ | 145 | {DEVICE_SWI(0x1199, 0x901c)}, /* Sierra Wireless EM7700 */ |
146 | {DEVICE_SWI(0x1199, 0x901f)}, /* Sierra Wireless EM7355 */ | 146 | {DEVICE_SWI(0x1199, 0x901f)}, /* Sierra Wireless EM7355 */ |
147 | {DEVICE_SWI(0x1199, 0x9040)}, /* Sierra Wireless Modem */ | 147 | {DEVICE_SWI(0x1199, 0x9040)}, /* Sierra Wireless Modem */ |
148 | {DEVICE_SWI(0x1199, 0x9041)}, /* Sierra Wireless MC7305/MC7355 */ | ||
149 | {DEVICE_SWI(0x1199, 0x9051)}, /* Netgear AirCard 340U */ | 148 | {DEVICE_SWI(0x1199, 0x9051)}, /* Netgear AirCard 340U */ |
150 | {DEVICE_SWI(0x1199, 0x9053)}, /* Sierra Wireless Modem */ | 149 | {DEVICE_SWI(0x1199, 0x9053)}, /* Sierra Wireless Modem */ |
151 | {DEVICE_SWI(0x1199, 0x9054)}, /* Sierra Wireless Modem */ | 150 | {DEVICE_SWI(0x1199, 0x9054)}, /* Sierra Wireless Modem */ |
@@ -158,6 +157,7 @@ static const struct usb_device_id id_table[] = { | |||
158 | {DEVICE_SWI(0x413c, 0x81a4)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */ | 157 | {DEVICE_SWI(0x413c, 0x81a4)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */ |
159 | {DEVICE_SWI(0x413c, 0x81a8)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card */ | 158 | {DEVICE_SWI(0x413c, 0x81a8)}, /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card */ |
160 | {DEVICE_SWI(0x413c, 0x81a9)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */ | 159 | {DEVICE_SWI(0x413c, 0x81a9)}, /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */ |
160 | {DEVICE_SWI(0x413c, 0x81b1)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card */ | ||
161 | 161 | ||
162 | /* Huawei devices */ | 162 | /* Huawei devices */ |
163 | {DEVICE_HWI(0x03f0, 0x581d)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e) */ | 163 | {DEVICE_HWI(0x03f0, 0x581d)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e) */ |
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index 46179a0828eb..07d1ecd564f7 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c | |||
@@ -289,6 +289,7 @@ static const struct usb_device_id id_table[] = { | |||
289 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x68AA, 0xFF, 0xFF, 0xFF), | 289 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x68AA, 0xFF, 0xFF, 0xFF), |
290 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist | 290 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist |
291 | }, | 291 | }, |
292 | { USB_DEVICE(0x1199, 0x68AB) }, /* Sierra Wireless AR8550 */ | ||
292 | /* AT&T Direct IP LTE modems */ | 293 | /* AT&T Direct IP LTE modems */ |
293 | { USB_DEVICE_AND_INTERFACE_INFO(0x0F3D, 0x68AA, 0xFF, 0xFF, 0xFF), | 294 | { USB_DEVICE_AND_INTERFACE_INFO(0x0F3D, 0x68AA, 0xFF, 0xFF, 0xFF), |
294 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist | 295 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist |