diff options
22 files changed, 508 insertions, 160 deletions
diff --git a/arch/arm/boot/dts/omap3-beagle.dts b/arch/arm/boot/dts/omap3-beagle.dts index f624dc85d441..02d23f15fd86 100644 --- a/arch/arm/boot/dts/omap3-beagle.dts +++ b/arch/arm/boot/dts/omap3-beagle.dts | |||
@@ -38,6 +38,57 @@ | |||
38 | }; | 38 | }; |
39 | }; | 39 | }; |
40 | 40 | ||
41 | /* HS USB Port 2 RESET */ | ||
42 | hsusb2_reset: hsusb2_reset_reg { | ||
43 | compatible = "regulator-fixed"; | ||
44 | regulator-name = "hsusb2_reset"; | ||
45 | regulator-min-microvolt = <3300000>; | ||
46 | regulator-max-microvolt = <3300000>; | ||
47 | gpio = <&gpio5 19 0>; /* gpio_147 */ | ||
48 | startup-delay-us = <70000>; | ||
49 | enable-active-high; | ||
50 | }; | ||
51 | |||
52 | /* HS USB Port 2 Power */ | ||
53 | hsusb2_power: hsusb2_power_reg { | ||
54 | compatible = "regulator-fixed"; | ||
55 | regulator-name = "hsusb2_vbus"; | ||
56 | regulator-min-microvolt = <3300000>; | ||
57 | regulator-max-microvolt = <3300000>; | ||
58 | gpio = <&twl_gpio 18 0>; /* GPIO LEDA */ | ||
59 | startup-delay-us = <70000>; | ||
60 | }; | ||
61 | |||
62 | /* HS USB Host PHY on PORT 2 */ | ||
63 | hsusb2_phy: hsusb2_phy { | ||
64 | compatible = "usb-nop-xceiv"; | ||
65 | reset-supply = <&hsusb2_reset>; | ||
66 | vcc-supply = <&hsusb2_power>; | ||
67 | }; | ||
68 | }; | ||
69 | |||
70 | &omap3_pmx_core { | ||
71 | pinctrl-names = "default"; | ||
72 | pinctrl-0 = < | ||
73 | &hsusbb2_pins | ||
74 | >; | ||
75 | |||
76 | hsusbb2_pins: pinmux_hsusbb2_pins { | ||
77 | pinctrl-single,pins = < | ||
78 | 0x5c0 0x3 /* USBB2_ULPITLL_CLK_MUXMODE.usbb1_ulpiphy_clk OUTPUT */ | ||
79 | 0x5c2 0x3 /* USBB2_ULPITLL_CLK_MUXMODE.usbb1_ulpiphy_stp OUTPUT */ | ||
80 | 0x5c4 0x10b /* USBB2_ULPITLL_CLK_MUXMODE.usbb1_ulpiphy_dir INPUT | PULLDOWN */ | ||
81 | 0x5c6 0x10b /* USBB2_ULPITLL_CLK_MUXMODE.usbb1_ulpiphy_nxt INPUT | PULLDOWN */ | ||
82 | 0x5c8 0x10b /* USBB2_ULPITLL_CLK_MUXMODE.usbb1_ulpiphy_dat0 INPUT | PULLDOWN */ | ||
83 | 0x5cA 0x10b /* USBB2_ULPITLL_CLK_MUXMODE.usbb1_ulpiphy_dat1 INPUT | PULLDOWN */ | ||
84 | 0x1a4 0x10b /* USBB2_ULPITLL_CLK_MUXMODE.usbb1_ulpiphy_dat2 INPUT | PULLDOWN */ | ||
85 | 0x1a6 0x10b /* USBB2_ULPITLL_CLK_MUXMODE.usbb1_ulpiphy_dat3 INPUT | PULLDOWN */ | ||
86 | 0x1a8 0x10b /* USBB2_ULPITLL_CLK_MUXMODE.usbb1_ulpiphy_dat4 INPUT | PULLDOWN */ | ||
87 | 0x1aa 0x10b /* USBB2_ULPITLL_CLK_MUXMODE.usbb1_ulpiphy_dat5 INPUT | PULLDOWN */ | ||
88 | 0x1ac 0x10b /* USBB2_ULPITLL_CLK_MUXMODE.usbb1_ulpiphy_dat6 INPUT | PULLDOWN */ | ||
89 | 0x1ae 0x10b /* USBB2_ULPITLL_CLK_MUXMODE.usbb1_ulpiphy_dat7 INPUT | PULLDOWN */ | ||
90 | >; | ||
91 | }; | ||
41 | }; | 92 | }; |
42 | 93 | ||
43 | &i2c1 { | 94 | &i2c1 { |
@@ -65,3 +116,23 @@ | |||
65 | &mmc3 { | 116 | &mmc3 { |
66 | status = "disabled"; | 117 | status = "disabled"; |
67 | }; | 118 | }; |
119 | |||
120 | &usbhshost { | ||
121 | port2-mode = "ehci-phy"; | ||
122 | }; | ||
123 | |||
124 | &usbhsehci { | ||
125 | phys = <0 &hsusb2_phy>; | ||
126 | }; | ||
127 | |||
128 | &twl_gpio { | ||
129 | ti,use-leds; | ||
130 | /* pullups: BIT(1) */ | ||
131 | ti,pullups = <0x000002>; | ||
132 | /* | ||
133 | * pulldowns: | ||
134 | * BIT(2), BIT(6), BIT(7), BIT(8), BIT(13) | ||
135 | * BIT(15), BIT(16), BIT(17) | ||
136 | */ | ||
137 | ti,pulldowns = <0x03a1c4>; | ||
138 | }; | ||
diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi index 1acc26148ffc..a14f74bbce7c 100644 --- a/arch/arm/boot/dts/omap3.dtsi +++ b/arch/arm/boot/dts/omap3.dtsi | |||
@@ -397,5 +397,36 @@ | |||
397 | ti,timer-alwon; | 397 | ti,timer-alwon; |
398 | ti,timer-secure; | 398 | ti,timer-secure; |
399 | }; | 399 | }; |
400 | |||
401 | usbhstll: usbhstll@48062000 { | ||
402 | compatible = "ti,usbhs-tll"; | ||
403 | reg = <0x48062000 0x1000>; | ||
404 | interrupts = <78>; | ||
405 | ti,hwmods = "usb_tll_hs"; | ||
406 | }; | ||
407 | |||
408 | usbhshost: usbhshost@48064000 { | ||
409 | compatible = "ti,usbhs-host"; | ||
410 | reg = <0x48064000 0x400>; | ||
411 | ti,hwmods = "usb_host_hs"; | ||
412 | #address-cells = <1>; | ||
413 | #size-cells = <1>; | ||
414 | ranges; | ||
415 | |||
416 | usbhsohci: ohci@48064400 { | ||
417 | compatible = "ti,ohci-omap3", "usb-ohci"; | ||
418 | reg = <0x48064400 0x400>; | ||
419 | interrupt-parent = <&intc>; | ||
420 | interrupts = <76>; | ||
421 | }; | ||
422 | |||
423 | usbhsehci: ehci@48064800 { | ||
424 | compatible = "ti,ehci-omap", "usb-ehci"; | ||
425 | reg = <0x48064800 0x400>; | ||
426 | interrupt-parent = <&intc>; | ||
427 | interrupts = <77>; | ||
428 | }; | ||
429 | }; | ||
430 | |||
400 | }; | 431 | }; |
401 | }; | 432 | }; |
diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi index 739bb79e410e..b7db1a2b6ca7 100644 --- a/arch/arm/boot/dts/omap4.dtsi +++ b/arch/arm/boot/dts/omap4.dtsi | |||
@@ -529,5 +529,35 @@ | |||
529 | ti,hwmods = "timer11"; | 529 | ti,hwmods = "timer11"; |
530 | ti,timer-pwm; | 530 | ti,timer-pwm; |
531 | }; | 531 | }; |
532 | |||
533 | usbhstll: usbhstll@4a062000 { | ||
534 | compatible = "ti,usbhs-tll"; | ||
535 | reg = <0x4a062000 0x1000>; | ||
536 | interrupts = <0 78 0x4>; | ||
537 | ti,hwmods = "usb_tll_hs"; | ||
538 | }; | ||
539 | |||
540 | usbhshost: usbhshost@4a064000 { | ||
541 | compatible = "ti,usbhs-host"; | ||
542 | reg = <0x4a064000 0x800>; | ||
543 | ti,hwmods = "usb_host_hs"; | ||
544 | #address-cells = <1>; | ||
545 | #size-cells = <1>; | ||
546 | ranges; | ||
547 | |||
548 | usbhsohci: ohci@4a064800 { | ||
549 | compatible = "ti,ohci-omap3", "usb-ohci"; | ||
550 | reg = <0x4a064800 0x400>; | ||
551 | interrupt-parent = <&gic>; | ||
552 | interrupts = <0 76 0x4>; | ||
553 | }; | ||
554 | |||
555 | usbhsehci: ehci@4a064c00 { | ||
556 | compatible = "ti,ehci-omap", "usb-ehci"; | ||
557 | reg = <0x4a064c00 0x400>; | ||
558 | interrupt-parent = <&gic>; | ||
559 | interrupts = <0 77 0x4>; | ||
560 | }; | ||
561 | }; | ||
532 | }; | 562 | }; |
533 | }; | 563 | }; |
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index ce812decfaca..7eb9651dd0f7 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c | |||
@@ -445,16 +445,23 @@ static void enable_board_wakeup_source(void) | |||
445 | OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP); | 445 | OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP); |
446 | } | 446 | } |
447 | 447 | ||
448 | static struct usbhs_phy_data phy_data[] __initdata = { | ||
449 | { | ||
450 | .port = 1, | ||
451 | .reset_gpio = 57, | ||
452 | .vcc_gpio = -EINVAL, | ||
453 | }, | ||
454 | { | ||
455 | .port = 2, | ||
456 | .reset_gpio = 61, | ||
457 | .vcc_gpio = -EINVAL, | ||
458 | }, | ||
459 | }; | ||
460 | |||
448 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 461 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
449 | 462 | ||
450 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 463 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, |
451 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 464 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
452 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
453 | |||
454 | .phy_reset = true, | ||
455 | .reset_gpio_port[0] = 57, | ||
456 | .reset_gpio_port[1] = 61, | ||
457 | .reset_gpio_port[2] = -EINVAL | ||
458 | }; | 465 | }; |
459 | 466 | ||
460 | #ifdef CONFIG_OMAP_MUX | 467 | #ifdef CONFIG_OMAP_MUX |
@@ -606,6 +613,8 @@ static void __init omap_3430sdp_init(void) | |||
606 | board_flash_init(sdp_flash_partitions, chip_sel_3430, 0); | 613 | board_flash_init(sdp_flash_partitions, chip_sel_3430, 0); |
607 | sdp3430_display_init(); | 614 | sdp3430_display_init(); |
608 | enable_board_wakeup_source(); | 615 | enable_board_wakeup_source(); |
616 | |||
617 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
609 | usbhs_init(&usbhs_bdata); | 618 | usbhs_init(&usbhs_bdata); |
610 | } | 619 | } |
611 | 620 | ||
diff --git a/arch/arm/mach-omap2/board-3630sdp.c b/arch/arm/mach-omap2/board-3630sdp.c index 67447bd4564f..20d6d8189240 100644 --- a/arch/arm/mach-omap2/board-3630sdp.c +++ b/arch/arm/mach-omap2/board-3630sdp.c | |||
@@ -53,16 +53,23 @@ static void enable_board_wakeup_source(void) | |||
53 | OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP); | 53 | OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP); |
54 | } | 54 | } |
55 | 55 | ||
56 | static struct usbhs_phy_data phy_data[] __initdata = { | ||
57 | { | ||
58 | .port = 1, | ||
59 | .reset_gpio = 126, | ||
60 | .vcc_gpio = -EINVAL, | ||
61 | }, | ||
62 | { | ||
63 | .port = 2, | ||
64 | .reset_gpio = 61, | ||
65 | .vcc_gpio = -EINVAL, | ||
66 | }, | ||
67 | }; | ||
68 | |||
56 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 69 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
57 | 70 | ||
58 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 71 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, |
59 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 72 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
60 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
61 | |||
62 | .phy_reset = true, | ||
63 | .reset_gpio_port[0] = 126, | ||
64 | .reset_gpio_port[1] = 61, | ||
65 | .reset_gpio_port[2] = -EINVAL | ||
66 | }; | 73 | }; |
67 | 74 | ||
68 | #ifdef CONFIG_OMAP_MUX | 75 | #ifdef CONFIG_OMAP_MUX |
@@ -199,6 +206,8 @@ static void __init omap_sdp_init(void) | |||
199 | board_smc91x_init(); | 206 | board_smc91x_init(); |
200 | board_flash_init(sdp_flash_partitions, chip_sel_sdp, NAND_BUSWIDTH_16); | 207 | board_flash_init(sdp_flash_partitions, chip_sel_sdp, NAND_BUSWIDTH_16); |
201 | enable_board_wakeup_source(); | 208 | enable_board_wakeup_source(); |
209 | |||
210 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
202 | usbhs_init(&usbhs_bdata); | 211 | usbhs_init(&usbhs_bdata); |
203 | } | 212 | } |
204 | 213 | ||
diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c index 7d3358b2e593..fc53911d0d13 100644 --- a/arch/arm/mach-omap2/board-am3517crane.c +++ b/arch/arm/mach-omap2/board-am3517crane.c | |||
@@ -47,15 +47,17 @@ static struct omap_board_mux board_mux[] __initdata = { | |||
47 | }; | 47 | }; |
48 | #endif | 48 | #endif |
49 | 49 | ||
50 | static struct usbhs_phy_data phy_data[] __initdata = { | ||
51 | { | ||
52 | .port = 1, | ||
53 | .reset_gpio = GPIO_USB_NRESET, | ||
54 | .vcc_gpio = GPIO_USB_POWER, | ||
55 | .vcc_polarity = 1, | ||
56 | }, | ||
57 | }; | ||
58 | |||
50 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 59 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
51 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 60 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, |
52 | .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
53 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
54 | |||
55 | .phy_reset = true, | ||
56 | .reset_gpio_port[0] = GPIO_USB_NRESET, | ||
57 | .reset_gpio_port[1] = -EINVAL, | ||
58 | .reset_gpio_port[2] = -EINVAL | ||
59 | }; | 61 | }; |
60 | 62 | ||
61 | static struct mtd_partition crane_nand_partitions[] = { | 63 | static struct mtd_partition crane_nand_partitions[] = { |
@@ -131,13 +133,7 @@ static void __init am3517_crane_init(void) | |||
131 | return; | 133 | return; |
132 | } | 134 | } |
133 | 135 | ||
134 | ret = gpio_request_one(GPIO_USB_POWER, GPIOF_OUT_INIT_HIGH, | 136 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); |
135 | "usb_ehci_enable"); | ||
136 | if (ret < 0) { | ||
137 | pr_err("Can not request GPIO %d\n", GPIO_USB_POWER); | ||
138 | return; | ||
139 | } | ||
140 | |||
141 | usbhs_init(&usbhs_bdata); | 137 | usbhs_init(&usbhs_bdata); |
142 | am35xx_emac_init(AM35XX_DEFAULT_MDIO_FREQUENCY, 1); | 138 | am35xx_emac_init(AM35XX_DEFAULT_MDIO_FREQUENCY, 1); |
143 | } | 139 | } |
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c index 9fb85908a61e..191f9762ba63 100644 --- a/arch/arm/mach-omap2/board-am3517evm.c +++ b/arch/arm/mach-omap2/board-am3517evm.c | |||
@@ -274,6 +274,14 @@ static __init void am3517_evm_mcbsp1_init(void) | |||
274 | omap_ctrl_writel(devconf0, OMAP2_CONTROL_DEVCONF0); | 274 | omap_ctrl_writel(devconf0, OMAP2_CONTROL_DEVCONF0); |
275 | } | 275 | } |
276 | 276 | ||
277 | static struct usbhs_phy_data phy_data[] __initdata = { | ||
278 | { | ||
279 | .port = 1, | ||
280 | .reset_gpio = 57, | ||
281 | .vcc_gpio = -EINVAL, | ||
282 | }, | ||
283 | }; | ||
284 | |||
277 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 285 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
278 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 286 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, |
279 | #if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \ | 287 | #if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \ |
@@ -282,12 +290,6 @@ static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | |||
282 | #else | 290 | #else |
283 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 291 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
284 | #endif | 292 | #endif |
285 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
286 | |||
287 | .phy_reset = true, | ||
288 | .reset_gpio_port[0] = 57, | ||
289 | .reset_gpio_port[1] = -EINVAL, | ||
290 | .reset_gpio_port[2] = -EINVAL | ||
291 | }; | 293 | }; |
292 | 294 | ||
293 | #ifdef CONFIG_OMAP_MUX | 295 | #ifdef CONFIG_OMAP_MUX |
@@ -349,7 +351,6 @@ static struct omap2_hsmmc_info mmc[] = { | |||
349 | {} /* Terminator */ | 351 | {} /* Terminator */ |
350 | }; | 352 | }; |
351 | 353 | ||
352 | |||
353 | static void __init am3517_evm_init(void) | 354 | static void __init am3517_evm_init(void) |
354 | { | 355 | { |
355 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); | 356 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); |
@@ -361,6 +362,8 @@ static void __init am3517_evm_init(void) | |||
361 | 362 | ||
362 | /* Configure GPIO for EHCI port */ | 363 | /* Configure GPIO for EHCI port */ |
363 | omap_mux_init_gpio(57, OMAP_PIN_OUTPUT); | 364 | omap_mux_init_gpio(57, OMAP_PIN_OUTPUT); |
365 | |||
366 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
364 | usbhs_init(&usbhs_bdata); | 367 | usbhs_init(&usbhs_bdata); |
365 | am3517_evm_hecc_init(&am3517_evm_hecc_pdata); | 368 | am3517_evm_hecc_init(&am3517_evm_hecc_pdata); |
366 | /* DSS */ | 369 | /* DSS */ |
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index af2bb219e214..7fda3f5f8a7f 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c | |||
@@ -419,15 +419,22 @@ static struct omap2_hsmmc_info mmc[] = { | |||
419 | {} /* Terminator */ | 419 | {} /* Terminator */ |
420 | }; | 420 | }; |
421 | 421 | ||
422 | static struct usbhs_phy_data phy_data[] __initdata = { | ||
423 | { | ||
424 | .port = 1, | ||
425 | .reset_gpio = OMAP_MAX_GPIO_LINES + 6, | ||
426 | .vcc_gpio = -EINVAL, | ||
427 | }, | ||
428 | { | ||
429 | .port = 2, | ||
430 | .reset_gpio = OMAP_MAX_GPIO_LINES + 7, | ||
431 | .vcc_gpio = -EINVAL, | ||
432 | }, | ||
433 | }; | ||
434 | |||
422 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 435 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
423 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 436 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, |
424 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 437 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
425 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
426 | |||
427 | .phy_reset = true, | ||
428 | .reset_gpio_port[0] = OMAP_MAX_GPIO_LINES + 6, | ||
429 | .reset_gpio_port[1] = OMAP_MAX_GPIO_LINES + 7, | ||
430 | .reset_gpio_port[2] = -EINVAL | ||
431 | }; | 438 | }; |
432 | 439 | ||
433 | static void __init cm_t35_init_usbh(void) | 440 | static void __init cm_t35_init_usbh(void) |
@@ -444,6 +451,7 @@ static void __init cm_t35_init_usbh(void) | |||
444 | msleep(1); | 451 | msleep(1); |
445 | } | 452 | } |
446 | 453 | ||
454 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
447 | usbhs_init(&usbhs_bdata); | 455 | usbhs_init(&usbhs_bdata); |
448 | } | 456 | } |
449 | 457 | ||
diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c index a66da808cc4a..6920f6cfc97c 100644 --- a/arch/arm/mach-omap2/board-cm-t3517.c +++ b/arch/arm/mach-omap2/board-cm-t3517.c | |||
@@ -188,15 +188,22 @@ static inline void cm_t3517_init_rtc(void) {} | |||
188 | #define HSUSB2_RESET_GPIO (147) | 188 | #define HSUSB2_RESET_GPIO (147) |
189 | #define USB_HUB_RESET_GPIO (152) | 189 | #define USB_HUB_RESET_GPIO (152) |
190 | 190 | ||
191 | static struct usbhs_phy_data phy_data[] __initdata = { | ||
192 | { | ||
193 | .port = 1, | ||
194 | .reset_gpio = HSUSB1_RESET_GPIO, | ||
195 | .vcc_gpio = -EINVAL, | ||
196 | }, | ||
197 | { | ||
198 | .port = 2, | ||
199 | .reset_gpio = HSUSB2_RESET_GPIO, | ||
200 | .vcc_gpio = -EINVAL, | ||
201 | }, | ||
202 | }; | ||
203 | |||
191 | static struct usbhs_omap_platform_data cm_t3517_ehci_pdata __initdata = { | 204 | static struct usbhs_omap_platform_data cm_t3517_ehci_pdata __initdata = { |
192 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 205 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, |
193 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 206 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
194 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
195 | |||
196 | .phy_reset = true, | ||
197 | .reset_gpio_port[0] = HSUSB1_RESET_GPIO, | ||
198 | .reset_gpio_port[1] = HSUSB2_RESET_GPIO, | ||
199 | .reset_gpio_port[2] = -EINVAL, | ||
200 | }; | 207 | }; |
201 | 208 | ||
202 | static int __init cm_t3517_init_usbh(void) | 209 | static int __init cm_t3517_init_usbh(void) |
@@ -213,6 +220,7 @@ static int __init cm_t3517_init_usbh(void) | |||
213 | msleep(1); | 220 | msleep(1); |
214 | } | 221 | } |
215 | 222 | ||
223 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
216 | usbhs_init(&cm_t3517_ehci_pdata); | 224 | usbhs_init(&cm_t3517_ehci_pdata); |
217 | 225 | ||
218 | return 0; | 226 | return 0; |
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index 53056c3b0836..42fbf1ef12a9 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c | |||
@@ -437,15 +437,7 @@ static struct platform_device *devkit8000_devices[] __initdata = { | |||
437 | }; | 437 | }; |
438 | 438 | ||
439 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 439 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
440 | |||
441 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 440 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, |
442 | .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
443 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
444 | |||
445 | .phy_reset = true, | ||
446 | .reset_gpio_port[0] = -EINVAL, | ||
447 | .reset_gpio_port[1] = -EINVAL, | ||
448 | .reset_gpio_port[2] = -EINVAL | ||
449 | }; | 441 | }; |
450 | 442 | ||
451 | #ifdef CONFIG_OMAP_MUX | 443 | #ifdef CONFIG_OMAP_MUX |
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c index bf92678a01d0..95ccec0eeab9 100644 --- a/arch/arm/mach-omap2/board-igep0020.c +++ b/arch/arm/mach-omap2/board-igep0020.c | |||
@@ -527,26 +527,28 @@ static void __init igep_i2c_init(void) | |||
527 | omap3_pmic_init("twl4030", &igep_twldata); | 527 | omap3_pmic_init("twl4030", &igep_twldata); |
528 | } | 528 | } |
529 | 529 | ||
530 | static struct usbhs_phy_data igep2_phy_data[] __initdata = { | ||
531 | { | ||
532 | .port = 1, | ||
533 | .reset_gpio = IGEP2_GPIO_USBH_NRESET, | ||
534 | .vcc_gpio = -EINVAL, | ||
535 | }, | ||
536 | }; | ||
537 | |||
538 | static struct usbhs_phy_data igep3_phy_data[] __initdata = { | ||
539 | { | ||
540 | .port = 2, | ||
541 | .reset_gpio = IGEP3_GPIO_USBH_NRESET, | ||
542 | .vcc_gpio = -EINVAL, | ||
543 | }, | ||
544 | }; | ||
545 | |||
530 | static struct usbhs_omap_platform_data igep2_usbhs_bdata __initdata = { | 546 | static struct usbhs_omap_platform_data igep2_usbhs_bdata __initdata = { |
531 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 547 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, |
532 | .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
533 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
534 | |||
535 | .phy_reset = true, | ||
536 | .reset_gpio_port[0] = IGEP2_GPIO_USBH_NRESET, | ||
537 | .reset_gpio_port[1] = -EINVAL, | ||
538 | .reset_gpio_port[2] = -EINVAL, | ||
539 | }; | 548 | }; |
540 | 549 | ||
541 | static struct usbhs_omap_platform_data igep3_usbhs_bdata __initdata = { | 550 | static struct usbhs_omap_platform_data igep3_usbhs_bdata __initdata = { |
542 | .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
543 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 551 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
544 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
545 | |||
546 | .phy_reset = true, | ||
547 | .reset_gpio_port[0] = -EINVAL, | ||
548 | .reset_gpio_port[1] = IGEP3_GPIO_USBH_NRESET, | ||
549 | .reset_gpio_port[2] = -EINVAL, | ||
550 | }; | 552 | }; |
551 | 553 | ||
552 | #ifdef CONFIG_OMAP_MUX | 554 | #ifdef CONFIG_OMAP_MUX |
@@ -642,8 +644,10 @@ static void __init igep_init(void) | |||
642 | if (machine_is_igep0020()) { | 644 | if (machine_is_igep0020()) { |
643 | omap_display_init(&igep2_dss_data); | 645 | omap_display_init(&igep2_dss_data); |
644 | igep2_init_smsc911x(); | 646 | igep2_init_smsc911x(); |
647 | usbhs_init_phys(igep2_phy_data, ARRAY_SIZE(igep2_phy_data)); | ||
645 | usbhs_init(&igep2_usbhs_bdata); | 648 | usbhs_init(&igep2_usbhs_bdata); |
646 | } else { | 649 | } else { |
650 | usbhs_init_phys(igep3_phy_data, ARRAY_SIZE(igep3_phy_data)); | ||
647 | usbhs_init(&igep3_usbhs_bdata); | 651 | usbhs_init(&igep3_usbhs_bdata); |
648 | } | 652 | } |
649 | } | 653 | } |
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index c3558f93d42c..5382215a49bc 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/mtd/nand.h> | 33 | #include <linux/mtd/nand.h> |
34 | #include <linux/mmc/host.h> | 34 | #include <linux/mmc/host.h> |
35 | #include <linux/usb/phy.h> | 35 | #include <linux/usb/phy.h> |
36 | #include <linux/usb/nop-usb-xceiv.h> | ||
36 | 37 | ||
37 | #include <linux/regulator/machine.h> | 38 | #include <linux/regulator/machine.h> |
38 | #include <linux/i2c/twl.h> | 39 | #include <linux/i2c/twl.h> |
@@ -277,6 +278,21 @@ static struct regulator_consumer_supply beagle_vsim_supply[] = { | |||
277 | 278 | ||
278 | static struct gpio_led gpio_leds[]; | 279 | static struct gpio_led gpio_leds[]; |
279 | 280 | ||
281 | /* PHY's VCC regulator might be added later, so flag that we need it */ | ||
282 | static struct nop_usb_xceiv_platform_data hsusb2_phy_data = { | ||
283 | .needs_vcc = true, | ||
284 | }; | ||
285 | |||
286 | static struct usbhs_phy_data phy_data[] = { | ||
287 | { | ||
288 | .port = 2, | ||
289 | .reset_gpio = 147, | ||
290 | .vcc_gpio = -1, /* updated in beagle_twl_gpio_setup */ | ||
291 | .vcc_polarity = 1, /* updated in beagle_twl_gpio_setup */ | ||
292 | .platform_data = &hsusb2_phy_data, | ||
293 | }, | ||
294 | }; | ||
295 | |||
280 | static int beagle_twl_gpio_setup(struct device *dev, | 296 | static int beagle_twl_gpio_setup(struct device *dev, |
281 | unsigned gpio, unsigned ngpio) | 297 | unsigned gpio, unsigned ngpio) |
282 | { | 298 | { |
@@ -318,9 +334,11 @@ static int beagle_twl_gpio_setup(struct device *dev, | |||
318 | } | 334 | } |
319 | dvi_panel.power_down_gpio = beagle_config.dvi_pd_gpio; | 335 | dvi_panel.power_down_gpio = beagle_config.dvi_pd_gpio; |
320 | 336 | ||
321 | gpio_request_one(gpio + TWL4030_GPIO_MAX, beagle_config.usb_pwr_level, | 337 | /* TWL4030_GPIO_MAX i.e. LED_GPO controls HS USB Port 2 power */ |
322 | "nEN_USB_PWR"); | 338 | phy_data[0].vcc_gpio = gpio + TWL4030_GPIO_MAX; |
339 | phy_data[0].vcc_polarity = beagle_config.usb_pwr_level; | ||
323 | 340 | ||
341 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
324 | return 0; | 342 | return 0; |
325 | } | 343 | } |
326 | 344 | ||
@@ -453,15 +471,7 @@ static struct platform_device *omap3_beagle_devices[] __initdata = { | |||
453 | }; | 471 | }; |
454 | 472 | ||
455 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 473 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
456 | |||
457 | .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
458 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 474 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
459 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
460 | |||
461 | .phy_reset = true, | ||
462 | .reset_gpio_port[0] = -EINVAL, | ||
463 | .reset_gpio_port[1] = 147, | ||
464 | .reset_gpio_port[2] = -EINVAL | ||
465 | }; | 475 | }; |
466 | 476 | ||
467 | #ifdef CONFIG_OMAP_MUX | 477 | #ifdef CONFIG_OMAP_MUX |
@@ -543,7 +553,9 @@ static void __init omap3_beagle_init(void) | |||
543 | 553 | ||
544 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | 554 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); |
545 | usb_musb_init(NULL); | 555 | usb_musb_init(NULL); |
556 | |||
546 | usbhs_init(&usbhs_bdata); | 557 | usbhs_init(&usbhs_bdata); |
558 | |||
547 | board_nand_init(omap3beagle_nand_partitions, | 559 | board_nand_init(omap3beagle_nand_partitions, |
548 | ARRAY_SIZE(omap3beagle_nand_partitions), NAND_CS, | 560 | ARRAY_SIZE(omap3beagle_nand_partitions), NAND_CS, |
549 | NAND_BUSWIDTH_16, NULL); | 561 | NAND_BUSWIDTH_16, NULL); |
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index 48789e0bb915..2de92facc8a3 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c | |||
@@ -496,7 +496,7 @@ struct wl12xx_platform_data omap3evm_wlan_data __initdata = { | |||
496 | static struct regulator_consumer_supply omap3evm_vaux2_supplies[] = { | 496 | static struct regulator_consumer_supply omap3evm_vaux2_supplies[] = { |
497 | REGULATOR_SUPPLY("VDD_CSIPHY1", "omap3isp"), /* OMAP ISP */ | 497 | REGULATOR_SUPPLY("VDD_CSIPHY1", "omap3isp"), /* OMAP ISP */ |
498 | REGULATOR_SUPPLY("VDD_CSIPHY2", "omap3isp"), /* OMAP ISP */ | 498 | REGULATOR_SUPPLY("VDD_CSIPHY2", "omap3isp"), /* OMAP ISP */ |
499 | REGULATOR_SUPPLY("hsusb1", "ehci-omap.0"), | 499 | REGULATOR_SUPPLY("vcc", "nop_usb_xceiv.2"), /* hsusb port 2 */ |
500 | REGULATOR_SUPPLY("vaux2", NULL), | 500 | REGULATOR_SUPPLY("vaux2", NULL), |
501 | }; | 501 | }; |
502 | 502 | ||
@@ -539,17 +539,16 @@ static int __init omap3_evm_i2c_init(void) | |||
539 | return 0; | 539 | return 0; |
540 | } | 540 | } |
541 | 541 | ||
542 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 542 | static struct usbhs_phy_data phy_data[] __initdata = { |
543 | { | ||
544 | .port = 2, | ||
545 | .reset_gpio = -1, /* set at runtime */ | ||
546 | .vcc_gpio = -EINVAL, | ||
547 | }, | ||
548 | }; | ||
543 | 549 | ||
544 | .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, | 550 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
545 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 551 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
546 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
547 | |||
548 | .phy_reset = true, | ||
549 | /* PHY reset GPIO will be runtime programmed based on EVM version */ | ||
550 | .reset_gpio_port[0] = -EINVAL, | ||
551 | .reset_gpio_port[1] = -EINVAL, | ||
552 | .reset_gpio_port[2] = -EINVAL | ||
553 | }; | 552 | }; |
554 | 553 | ||
555 | #ifdef CONFIG_OMAP_MUX | 554 | #ifdef CONFIG_OMAP_MUX |
@@ -725,7 +724,7 @@ static void __init omap3_evm_init(void) | |||
725 | 724 | ||
726 | /* setup EHCI phy reset config */ | 725 | /* setup EHCI phy reset config */ |
727 | omap_mux_init_gpio(21, OMAP_PIN_INPUT_PULLUP); | 726 | omap_mux_init_gpio(21, OMAP_PIN_INPUT_PULLUP); |
728 | usbhs_bdata.reset_gpio_port[1] = 21; | 727 | phy_data[0].reset_gpio = 21; |
729 | 728 | ||
730 | /* EVM REV >= E can supply 500mA with EXTVBUS programming */ | 729 | /* EVM REV >= E can supply 500mA with EXTVBUS programming */ |
731 | musb_board_data.power = 500; | 730 | musb_board_data.power = 500; |
@@ -733,10 +732,12 @@ static void __init omap3_evm_init(void) | |||
733 | } else { | 732 | } else { |
734 | /* setup EHCI phy reset on MDC */ | 733 | /* setup EHCI phy reset on MDC */ |
735 | omap_mux_init_gpio(135, OMAP_PIN_OUTPUT); | 734 | omap_mux_init_gpio(135, OMAP_PIN_OUTPUT); |
736 | usbhs_bdata.reset_gpio_port[1] = 135; | 735 | phy_data[0].reset_gpio = 135; |
737 | } | 736 | } |
738 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | 737 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); |
739 | usb_musb_init(&musb_board_data); | 738 | usb_musb_init(&musb_board_data); |
739 | |||
740 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
740 | usbhs_init(&usbhs_bdata); | 741 | usbhs_init(&usbhs_bdata); |
741 | board_nand_init(omap3evm_nand_partitions, | 742 | board_nand_init(omap3evm_nand_partitions, |
742 | ARRAY_SIZE(omap3evm_nand_partitions), NAND_CS, | 743 | ARRAY_SIZE(omap3evm_nand_partitions), NAND_CS, |
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c index 2bba362148a0..1004d2aaa68f 100644 --- a/arch/arm/mach-omap2/board-omap3pandora.c +++ b/arch/arm/mach-omap2/board-omap3pandora.c | |||
@@ -346,7 +346,7 @@ static struct regulator_consumer_supply pandora_vcc_lcd_supply[] = { | |||
346 | }; | 346 | }; |
347 | 347 | ||
348 | static struct regulator_consumer_supply pandora_usb_phy_supply[] = { | 348 | static struct regulator_consumer_supply pandora_usb_phy_supply[] = { |
349 | REGULATOR_SUPPLY("hsusb1", "ehci-omap.0"), | 349 | REGULATOR_SUPPLY("vcc", "nop_usb_xceiv.2"), /* hsusb port 2 */ |
350 | }; | 350 | }; |
351 | 351 | ||
352 | /* ads7846 on SPI and 2 nub controllers on I2C */ | 352 | /* ads7846 on SPI and 2 nub controllers on I2C */ |
@@ -561,6 +561,14 @@ fail: | |||
561 | printk(KERN_ERR "wl1251 board initialisation failed\n"); | 561 | printk(KERN_ERR "wl1251 board initialisation failed\n"); |
562 | } | 562 | } |
563 | 563 | ||
564 | static struct usbhs_phy_data phy_data[] __initdata = { | ||
565 | { | ||
566 | .port = 2, | ||
567 | .reset_gpio = 16, | ||
568 | .vcc_gpio = -EINVAL, | ||
569 | }, | ||
570 | }; | ||
571 | |||
564 | static struct platform_device *omap3pandora_devices[] __initdata = { | 572 | static struct platform_device *omap3pandora_devices[] __initdata = { |
565 | &pandora_leds_gpio, | 573 | &pandora_leds_gpio, |
566 | &pandora_keys_gpio, | 574 | &pandora_keys_gpio, |
@@ -569,15 +577,7 @@ static struct platform_device *omap3pandora_devices[] __initdata = { | |||
569 | }; | 577 | }; |
570 | 578 | ||
571 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 579 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
572 | |||
573 | .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
574 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 580 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
575 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
576 | |||
577 | .phy_reset = true, | ||
578 | .reset_gpio_port[0] = -EINVAL, | ||
579 | .reset_gpio_port[1] = 16, | ||
580 | .reset_gpio_port[2] = -EINVAL | ||
581 | }; | 581 | }; |
582 | 582 | ||
583 | #ifdef CONFIG_OMAP_MUX | 583 | #ifdef CONFIG_OMAP_MUX |
@@ -601,7 +601,10 @@ static void __init omap3pandora_init(void) | |||
601 | spi_register_board_info(omap3pandora_spi_board_info, | 601 | spi_register_board_info(omap3pandora_spi_board_info, |
602 | ARRAY_SIZE(omap3pandora_spi_board_info)); | 602 | ARRAY_SIZE(omap3pandora_spi_board_info)); |
603 | omap_ads7846_init(1, OMAP3_PANDORA_TS_GPIO, 0, NULL); | 603 | omap_ads7846_init(1, OMAP3_PANDORA_TS_GPIO, 0, NULL); |
604 | |||
605 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
604 | usbhs_init(&usbhs_bdata); | 606 | usbhs_init(&usbhs_bdata); |
607 | |||
605 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | 608 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); |
606 | usb_musb_init(NULL); | 609 | usb_musb_init(NULL); |
607 | gpmc_nand_init(&pandora_nand_data, NULL); | 610 | gpmc_nand_init(&pandora_nand_data, NULL); |
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c index 95c10b3aa678..bf0956489899 100644 --- a/arch/arm/mach-omap2/board-omap3stalker.c +++ b/arch/arm/mach-omap2/board-omap3stalker.c | |||
@@ -358,19 +358,20 @@ static int __init omap3_stalker_i2c_init(void) | |||
358 | 358 | ||
359 | #define OMAP3_STALKER_TS_GPIO 175 | 359 | #define OMAP3_STALKER_TS_GPIO 175 |
360 | 360 | ||
361 | static struct usbhs_phy_data phy_data[] __initdata = { | ||
362 | { | ||
363 | .port = 2, | ||
364 | .reset_gpio = 21, | ||
365 | .vcc_gpio = -EINVAL, | ||
366 | }, | ||
367 | }; | ||
368 | |||
361 | static struct platform_device *omap3_stalker_devices[] __initdata = { | 369 | static struct platform_device *omap3_stalker_devices[] __initdata = { |
362 | &keys_gpio, | 370 | &keys_gpio, |
363 | }; | 371 | }; |
364 | 372 | ||
365 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 373 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
366 | .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
367 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 374 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
368 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
369 | |||
370 | .phy_reset = true, | ||
371 | .reset_gpio_port[0] = -EINVAL, | ||
372 | .reset_gpio_port[1] = 21, | ||
373 | .reset_gpio_port[2] = -EINVAL, | ||
374 | }; | 375 | }; |
375 | 376 | ||
376 | #ifdef CONFIG_OMAP_MUX | 377 | #ifdef CONFIG_OMAP_MUX |
@@ -407,6 +408,8 @@ static void __init omap3_stalker_init(void) | |||
407 | omap_sdrc_init(mt46h32m32lf6_sdrc_params, NULL); | 408 | omap_sdrc_init(mt46h32m32lf6_sdrc_params, NULL); |
408 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | 409 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); |
409 | usb_musb_init(NULL); | 410 | usb_musb_init(NULL); |
411 | |||
412 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
410 | usbhs_init(&usbhs_bdata); | 413 | usbhs_init(&usbhs_bdata); |
411 | omap_ads7846_init(1, OMAP3_STALKER_TS_GPIO, 310, NULL); | 414 | omap_ads7846_init(1, OMAP3_STALKER_TS_GPIO, 310, NULL); |
412 | 415 | ||
diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c index bcd44fbcd877..7da48bc42bbf 100644 --- a/arch/arm/mach-omap2/board-omap3touchbook.c +++ b/arch/arm/mach-omap2/board-omap3touchbook.c | |||
@@ -305,21 +305,22 @@ static struct omap_board_mux board_mux[] __initdata = { | |||
305 | }; | 305 | }; |
306 | #endif | 306 | #endif |
307 | 307 | ||
308 | static struct usbhs_phy_data phy_data[] __initdata = { | ||
309 | { | ||
310 | .port = 2, | ||
311 | .reset_gpio = 147, | ||
312 | .vcc_gpio = -EINVAL, | ||
313 | }, | ||
314 | }; | ||
315 | |||
308 | static struct platform_device *omap3_touchbook_devices[] __initdata = { | 316 | static struct platform_device *omap3_touchbook_devices[] __initdata = { |
309 | &leds_gpio, | 317 | &leds_gpio, |
310 | &keys_gpio, | 318 | &keys_gpio, |
311 | }; | 319 | }; |
312 | 320 | ||
313 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 321 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
314 | |||
315 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 322 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, |
316 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 323 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
317 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
318 | |||
319 | .phy_reset = true, | ||
320 | .reset_gpio_port[0] = -EINVAL, | ||
321 | .reset_gpio_port[1] = 147, | ||
322 | .reset_gpio_port[2] = -EINVAL | ||
323 | }; | 324 | }; |
324 | 325 | ||
325 | static void omap3_touchbook_poweroff(void) | 326 | static void omap3_touchbook_poweroff(void) |
@@ -368,6 +369,8 @@ static void __init omap3_touchbook_init(void) | |||
368 | omap_ads7846_init(4, OMAP3_TS_GPIO, 310, &ads7846_pdata); | 369 | omap_ads7846_init(4, OMAP3_TS_GPIO, 310, &ads7846_pdata); |
369 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | 370 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); |
370 | usb_musb_init(NULL); | 371 | usb_musb_init(NULL); |
372 | |||
373 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
371 | usbhs_init(&usbhs_bdata); | 374 | usbhs_init(&usbhs_bdata); |
372 | board_nand_init(omap3touchbook_nand_partitions, | 375 | board_nand_init(omap3touchbook_nand_partitions, |
373 | ARRAY_SIZE(omap3touchbook_nand_partitions), NAND_CS, | 376 | ARRAY_SIZE(omap3touchbook_nand_partitions), NAND_CS, |
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index b02c2f00609b..a71ad345f20d 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/ti_wilink_st.h> | 31 | #include <linux/ti_wilink_st.h> |
32 | #include <linux/usb/musb.h> | 32 | #include <linux/usb/musb.h> |
33 | #include <linux/usb/phy.h> | 33 | #include <linux/usb/phy.h> |
34 | #include <linux/usb/nop-usb-xceiv.h> | ||
34 | #include <linux/wl12xx.h> | 35 | #include <linux/wl12xx.h> |
35 | #include <linux/irqchip/arm-gic.h> | 36 | #include <linux/irqchip/arm-gic.h> |
36 | #include <linux/platform_data/omap-abe-twl6040.h> | 37 | #include <linux/platform_data/omap-abe-twl6040.h> |
@@ -132,6 +133,22 @@ static struct platform_device btwilink_device = { | |||
132 | .id = -1, | 133 | .id = -1, |
133 | }; | 134 | }; |
134 | 135 | ||
136 | /* PHY device on HS USB Port 1 i.e. nop_usb_xceiv.1 */ | ||
137 | static struct nop_usb_xceiv_platform_data hsusb1_phy_data = { | ||
138 | /* FREF_CLK3 provides the 19.2 MHz reference clock to the PHY */ | ||
139 | .clk_rate = 19200000, | ||
140 | }; | ||
141 | |||
142 | static struct usbhs_phy_data phy_data[] __initdata = { | ||
143 | { | ||
144 | .port = 1, | ||
145 | .reset_gpio = GPIO_HUB_NRESET, | ||
146 | .vcc_gpio = GPIO_HUB_POWER, | ||
147 | .vcc_polarity = 1, | ||
148 | .platform_data = &hsusb1_phy_data, | ||
149 | }, | ||
150 | }; | ||
151 | |||
135 | static struct platform_device *panda_devices[] __initdata = { | 152 | static struct platform_device *panda_devices[] __initdata = { |
136 | &leds_gpio, | 153 | &leds_gpio, |
137 | &wl1271_device, | 154 | &wl1271_device, |
@@ -142,49 +159,19 @@ static struct platform_device *panda_devices[] __initdata = { | |||
142 | 159 | ||
143 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 160 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
144 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 161 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, |
145 | .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
146 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
147 | .phy_reset = false, | ||
148 | .reset_gpio_port[0] = -EINVAL, | ||
149 | .reset_gpio_port[1] = -EINVAL, | ||
150 | .reset_gpio_port[2] = -EINVAL | ||
151 | }; | ||
152 | |||
153 | static struct gpio panda_ehci_gpios[] __initdata = { | ||
154 | { GPIO_HUB_POWER, GPIOF_OUT_INIT_LOW, "hub_power" }, | ||
155 | { GPIO_HUB_NRESET, GPIOF_OUT_INIT_LOW, "hub_nreset" }, | ||
156 | }; | 162 | }; |
157 | 163 | ||
158 | static void __init omap4_ehci_init(void) | 164 | static void __init omap4_ehci_init(void) |
159 | { | 165 | { |
160 | int ret; | 166 | int ret; |
161 | struct clk *phy_ref_clk; | ||
162 | 167 | ||
163 | /* FREF_CLK3 provides the 19.2 MHz reference clock to the PHY */ | 168 | /* FREF_CLK3 provides the 19.2 MHz reference clock to the PHY */ |
164 | phy_ref_clk = clk_get(NULL, "auxclk3_ck"); | 169 | ret = clk_add_alias("main_clk", "nop_usb_xceiv.1", "auxclk3_ck", NULL); |
165 | if (IS_ERR(phy_ref_clk)) { | 170 | if (ret) |
166 | pr_err("Cannot request auxclk3\n"); | 171 | pr_err("Failed to add main_clk alias to auxclk3_ck\n"); |
167 | return; | ||
168 | } | ||
169 | clk_set_rate(phy_ref_clk, 19200000); | ||
170 | clk_prepare_enable(phy_ref_clk); | ||
171 | |||
172 | /* disable the power to the usb hub prior to init and reset phy+hub */ | ||
173 | ret = gpio_request_array(panda_ehci_gpios, | ||
174 | ARRAY_SIZE(panda_ehci_gpios)); | ||
175 | if (ret) { | ||
176 | pr_err("Unable to initialize EHCI power/reset\n"); | ||
177 | return; | ||
178 | } | ||
179 | |||
180 | gpio_export(GPIO_HUB_POWER, 0); | ||
181 | gpio_export(GPIO_HUB_NRESET, 0); | ||
182 | gpio_set_value(GPIO_HUB_NRESET, 1); | ||
183 | 172 | ||
173 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
184 | usbhs_init(&usbhs_bdata); | 174 | usbhs_init(&usbhs_bdata); |
185 | |||
186 | /* enable power to hub */ | ||
187 | gpio_set_value(GPIO_HUB_POWER, 1); | ||
188 | } | 175 | } |
189 | 176 | ||
190 | static struct omap_musb_board_data musb_board_data = { | 177 | static struct omap_musb_board_data musb_board_data = { |
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index 86bab51154ee..ab79a4422bcc 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c | |||
@@ -458,14 +458,16 @@ static int __init overo_spi_init(void) | |||
458 | return 0; | 458 | return 0; |
459 | } | 459 | } |
460 | 460 | ||
461 | static struct usbhs_phy_data phy_data[] __initdata = { | ||
462 | { | ||
463 | .port = 2, | ||
464 | .reset_gpio = OVERO_GPIO_USBH_NRESET, | ||
465 | .vcc_gpio = -EINVAL, | ||
466 | }, | ||
467 | }; | ||
468 | |||
461 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 469 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
462 | .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
463 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 470 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
464 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
465 | .phy_reset = true, | ||
466 | .reset_gpio_port[0] = -EINVAL, | ||
467 | .reset_gpio_port[1] = OVERO_GPIO_USBH_NRESET, | ||
468 | .reset_gpio_port[2] = -EINVAL | ||
469 | }; | 471 | }; |
470 | 472 | ||
471 | #ifdef CONFIG_OMAP_MUX | 473 | #ifdef CONFIG_OMAP_MUX |
@@ -502,6 +504,8 @@ static void __init overo_init(void) | |||
502 | ARRAY_SIZE(overo_nand_partitions), NAND_CS, 0, NULL); | 504 | ARRAY_SIZE(overo_nand_partitions), NAND_CS, 0, NULL); |
503 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | 505 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); |
504 | usb_musb_init(NULL); | 506 | usb_musb_init(NULL); |
507 | |||
508 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
505 | usbhs_init(&usbhs_bdata); | 509 | usbhs_init(&usbhs_bdata); |
506 | overo_spi_init(); | 510 | overo_spi_init(); |
507 | overo_init_smsc911x(); | 511 | overo_init_smsc911x(); |
diff --git a/arch/arm/mach-omap2/board-zoom.c b/arch/arm/mach-omap2/board-zoom.c index 5e4d4c9fe61a..1a3dd865d8eb 100644 --- a/arch/arm/mach-omap2/board-zoom.c +++ b/arch/arm/mach-omap2/board-zoom.c | |||
@@ -92,14 +92,16 @@ static struct mtd_partition zoom_nand_partitions[] = { | |||
92 | }, | 92 | }, |
93 | }; | 93 | }; |
94 | 94 | ||
95 | static struct usbhs_phy_data phy_data[] __initdata = { | ||
96 | { | ||
97 | .port = 2, | ||
98 | .reset_gpio = ZOOM3_EHCI_RESET_GPIO, | ||
99 | .vcc_gpio = -EINVAL, | ||
100 | }, | ||
101 | }; | ||
102 | |||
95 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { | 103 | static struct usbhs_omap_platform_data usbhs_bdata __initdata = { |
96 | .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
97 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 104 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
98 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | ||
99 | .phy_reset = true, | ||
100 | .reset_gpio_port[0] = -EINVAL, | ||
101 | .reset_gpio_port[1] = ZOOM3_EHCI_RESET_GPIO, | ||
102 | .reset_gpio_port[2] = -EINVAL, | ||
103 | }; | 105 | }; |
104 | 106 | ||
105 | static void __init omap_zoom_init(void) | 107 | static void __init omap_zoom_init(void) |
@@ -109,6 +111,8 @@ static void __init omap_zoom_init(void) | |||
109 | } else if (machine_is_omap_zoom3()) { | 111 | } else if (machine_is_omap_zoom3()) { |
110 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBP); | 112 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBP); |
111 | omap_mux_init_gpio(ZOOM3_EHCI_RESET_GPIO, OMAP_PIN_OUTPUT); | 113 | omap_mux_init_gpio(ZOOM3_EHCI_RESET_GPIO, OMAP_PIN_OUTPUT); |
114 | |||
115 | usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data)); | ||
112 | usbhs_init(&usbhs_bdata); | 116 | usbhs_init(&usbhs_bdata); |
113 | } | 117 | } |
114 | 118 | ||
diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c index 5706bdccf45e..aa27d7f5cbb7 100644 --- a/arch/arm/mach-omap2/usb-host.c +++ b/arch/arm/mach-omap2/usb-host.c | |||
@@ -22,8 +22,12 @@ | |||
22 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
23 | #include <linux/slab.h> | 23 | #include <linux/slab.h> |
24 | #include <linux/dma-mapping.h> | 24 | #include <linux/dma-mapping.h> |
25 | 25 | #include <linux/regulator/machine.h> | |
26 | #include <asm/io.h> | 26 | #include <linux/regulator/fixed.h> |
27 | #include <linux/string.h> | ||
28 | #include <linux/io.h> | ||
29 | #include <linux/gpio.h> | ||
30 | #include <linux/usb/phy.h> | ||
27 | 31 | ||
28 | #include "soc.h" | 32 | #include "soc.h" |
29 | #include "omap_device.h" | 33 | #include "omap_device.h" |
@@ -526,3 +530,155 @@ void __init usbhs_init(struct usbhs_omap_platform_data *pdata) | |||
526 | } | 530 | } |
527 | 531 | ||
528 | #endif | 532 | #endif |
533 | |||
534 | /* Template for PHY regulators */ | ||
535 | static struct fixed_voltage_config hsusb_reg_config = { | ||
536 | /* .supply_name filled later */ | ||
537 | .microvolts = 3300000, | ||
538 | .gpio = -1, /* updated later */ | ||
539 | .startup_delay = 70000, /* 70msec */ | ||
540 | .enable_high = 1, /* updated later */ | ||
541 | .enabled_at_boot = 0, /* keep in RESET */ | ||
542 | /* .init_data filled later */ | ||
543 | }; | ||
544 | |||
545 | static const char *nop_name = "nop_usb_xceiv"; /* NOP PHY driver */ | ||
546 | static const char *reg_name = "reg-fixed-voltage"; /* Regulator driver */ | ||
547 | |||
548 | /** | ||
549 | * usbhs_add_regulator - Add a gpio based fixed voltage regulator device | ||
550 | * @name: name for the regulator | ||
551 | * @dev_id: device id of the device this regulator supplies power to | ||
552 | * @dev_supply: supply name that the device expects | ||
553 | * @gpio: GPIO number | ||
554 | * @polarity: 1 - Active high, 0 - Active low | ||
555 | */ | ||
556 | static int usbhs_add_regulator(char *name, char *dev_id, char *dev_supply, | ||
557 | int gpio, int polarity) | ||
558 | { | ||
559 | struct regulator_consumer_supply *supplies; | ||
560 | struct regulator_init_data *reg_data; | ||
561 | struct fixed_voltage_config *config; | ||
562 | struct platform_device *pdev; | ||
563 | int ret; | ||
564 | |||
565 | supplies = kzalloc(sizeof(*supplies), GFP_KERNEL); | ||
566 | if (!supplies) | ||
567 | return -ENOMEM; | ||
568 | |||
569 | supplies->supply = dev_supply; | ||
570 | supplies->dev_name = dev_id; | ||
571 | |||
572 | reg_data = kzalloc(sizeof(*reg_data), GFP_KERNEL); | ||
573 | if (!reg_data) | ||
574 | return -ENOMEM; | ||
575 | |||
576 | reg_data->constraints.valid_ops_mask = REGULATOR_CHANGE_STATUS; | ||
577 | reg_data->consumer_supplies = supplies; | ||
578 | reg_data->num_consumer_supplies = 1; | ||
579 | |||
580 | config = kmemdup(&hsusb_reg_config, sizeof(hsusb_reg_config), | ||
581 | GFP_KERNEL); | ||
582 | if (!config) | ||
583 | return -ENOMEM; | ||
584 | |||
585 | config->supply_name = name; | ||
586 | config->gpio = gpio; | ||
587 | config->enable_high = polarity; | ||
588 | config->init_data = reg_data; | ||
589 | |||
590 | /* create a regulator device */ | ||
591 | pdev = kzalloc(sizeof(*pdev), GFP_KERNEL); | ||
592 | if (!pdev) | ||
593 | return -ENOMEM; | ||
594 | |||
595 | pdev->id = PLATFORM_DEVID_AUTO; | ||
596 | pdev->name = reg_name; | ||
597 | pdev->dev.platform_data = config; | ||
598 | |||
599 | ret = platform_device_register(pdev); | ||
600 | if (ret) | ||
601 | pr_err("%s: Failed registering regulator %s for %s\n", | ||
602 | __func__, name, dev_id); | ||
603 | |||
604 | return ret; | ||
605 | } | ||
606 | |||
607 | int usbhs_init_phys(struct usbhs_phy_data *phy, int num_phys) | ||
608 | { | ||
609 | char *rail_name; | ||
610 | int i, len; | ||
611 | struct platform_device *pdev; | ||
612 | char *phy_id; | ||
613 | |||
614 | /* the phy_id will be something like "nop_usb_xceiv.1" */ | ||
615 | len = strlen(nop_name) + 3; /* 3 -> ".1" and NULL terminator */ | ||
616 | |||
617 | for (i = 0; i < num_phys; i++) { | ||
618 | |||
619 | if (!phy->port) { | ||
620 | pr_err("%s: Invalid port 0. Must start from 1\n", | ||
621 | __func__); | ||
622 | continue; | ||
623 | } | ||
624 | |||
625 | /* do we need a NOP PHY device ? */ | ||
626 | if (!gpio_is_valid(phy->reset_gpio) && | ||
627 | !gpio_is_valid(phy->vcc_gpio)) | ||
628 | continue; | ||
629 | |||
630 | /* create a NOP PHY device */ | ||
631 | pdev = kzalloc(sizeof(*pdev), GFP_KERNEL); | ||
632 | if (!pdev) | ||
633 | return -ENOMEM; | ||
634 | |||
635 | pdev->id = phy->port; | ||
636 | pdev->name = nop_name; | ||
637 | pdev->dev.platform_data = phy->platform_data; | ||
638 | |||
639 | phy_id = kmalloc(len, GFP_KERNEL); | ||
640 | if (!phy_id) | ||
641 | return -ENOMEM; | ||
642 | |||
643 | scnprintf(phy_id, len, "nop_usb_xceiv.%d\n", | ||
644 | pdev->id); | ||
645 | |||
646 | if (platform_device_register(pdev)) { | ||
647 | pr_err("%s: Failed to register device %s\n", | ||
648 | __func__, phy_id); | ||
649 | continue; | ||
650 | } | ||
651 | |||
652 | usb_bind_phy("ehci-omap.0", phy->port - 1, phy_id); | ||
653 | |||
654 | /* Do we need RESET regulator ? */ | ||
655 | if (gpio_is_valid(phy->reset_gpio)) { | ||
656 | |||
657 | rail_name = kmalloc(13, GFP_KERNEL); | ||
658 | if (!rail_name) | ||
659 | return -ENOMEM; | ||
660 | |||
661 | scnprintf(rail_name, 13, "hsusb%d_reset", phy->port); | ||
662 | |||
663 | usbhs_add_regulator(rail_name, phy_id, "reset", | ||
664 | phy->reset_gpio, 1); | ||
665 | } | ||
666 | |||
667 | /* Do we need VCC regulator ? */ | ||
668 | if (gpio_is_valid(phy->vcc_gpio)) { | ||
669 | |||
670 | rail_name = kmalloc(13, GFP_KERNEL); | ||
671 | if (!rail_name) | ||
672 | return -ENOMEM; | ||
673 | |||
674 | scnprintf(rail_name, 13, "hsusb%d_vcc", phy->port); | ||
675 | |||
676 | usbhs_add_regulator(rail_name, phy_id, "vcc", | ||
677 | phy->vcc_gpio, phy->vcc_polarity); | ||
678 | } | ||
679 | |||
680 | phy++; | ||
681 | } | ||
682 | |||
683 | return 0; | ||
684 | } | ||
diff --git a/arch/arm/mach-omap2/usb.h b/arch/arm/mach-omap2/usb.h index 3319f5cf47a3..e7261ebcf7b0 100644 --- a/arch/arm/mach-omap2/usb.h +++ b/arch/arm/mach-omap2/usb.h | |||
@@ -53,8 +53,17 @@ | |||
53 | #define USBPHY_OTGSESSEND_EN (1 << 20) | 53 | #define USBPHY_OTGSESSEND_EN (1 << 20) |
54 | #define USBPHY_DATA_POLARITY (1 << 23) | 54 | #define USBPHY_DATA_POLARITY (1 << 23) |
55 | 55 | ||
56 | struct usbhs_phy_data { | ||
57 | int port; /* 1 indexed port number */ | ||
58 | int reset_gpio; | ||
59 | int vcc_gpio; | ||
60 | bool vcc_polarity; /* 1 active high, 0 active low */ | ||
61 | void *platform_data; | ||
62 | }; | ||
63 | |||
56 | extern void usb_musb_init(struct omap_musb_board_data *board_data); | 64 | extern void usb_musb_init(struct omap_musb_board_data *board_data); |
57 | extern void usbhs_init(struct usbhs_omap_platform_data *pdata); | 65 | extern void usbhs_init(struct usbhs_omap_platform_data *pdata); |
66 | extern int usbhs_init_phys(struct usbhs_phy_data *phy, int num_phys); | ||
58 | 67 | ||
59 | extern void am35x_musb_reset(void); | 68 | extern void am35x_musb_reset(void); |
60 | extern void am35x_musb_phy_power(u8 on); | 69 | extern void am35x_musb_phy_power(u8 on); |
diff --git a/include/linux/usb/nop-usb-xceiv.h b/include/linux/usb/nop-usb-xceiv.h index 28884c717411..148d35171aac 100644 --- a/include/linux/usb/nop-usb-xceiv.h +++ b/include/linux/usb/nop-usb-xceiv.h | |||
@@ -5,6 +5,11 @@ | |||
5 | 5 | ||
6 | struct nop_usb_xceiv_platform_data { | 6 | struct nop_usb_xceiv_platform_data { |
7 | enum usb_phy_type type; | 7 | enum usb_phy_type type; |
8 | unsigned long clk_rate; | ||
9 | |||
10 | /* if set fails with -EPROBE_DEFER if can't get regulator */ | ||
11 | unsigned int needs_vcc:1; | ||
12 | unsigned int needs_reset:1; | ||
8 | }; | 13 | }; |
9 | 14 | ||
10 | #if defined(CONFIG_NOP_USB_XCEIV) || (defined(CONFIG_NOP_USB_XCEIV_MODULE) && defined(MODULE)) | 15 | #if defined(CONFIG_NOP_USB_XCEIV) || (defined(CONFIG_NOP_USB_XCEIV_MODULE) && defined(MODULE)) |