diff options
author | Quinn Jensen <quinn.jensen@freescale.com> | 2007-10-24 21:23:18 -0600 |
---|---|---|
committer | Quinn Jensen <quinn.jensen@freescale.com> | 2007-10-24 21:23:18 -0600 |
commit | 4866f27718e82f947bbd5c03cb0751e7619e42e8 (patch) | |
tree | 2af50adfaa69ae5ecc639b6425e612010f311dd4 /arch | |
parent | e611ea00d04e3c4cac46a71f14042b749f1d4008 (diff) |
USB: check return codes from gpio_request_mux() and gpio_set_puen()
Patch to fix Bugzilla 741. USB: check return codes from
gpio_request_mux() and gpio_set_puen() in gpio_usbh1_active(),
gpio_usbh2_active(), gpio_usbotg_hs_active() and return an
error if they fail. Applies to linux 2.6.22 kernel for
MX27 platform.
http://www.bitshrine.org/gpp/linux-2.6.22-mx-USB-check-return-codes-from-gpio_request_m.patch
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-mx27/mx27ads_gpio.c | 115 |
1 files changed, 62 insertions, 53 deletions
diff --git a/arch/arm/mach-mx27/mx27ads_gpio.c b/arch/arm/mach-mx27/mx27ads_gpio.c index 51aa55f3c0d6..d1339c40e7d8 100644 --- a/arch/arm/mach-mx27/mx27ads_gpio.c +++ b/arch/arm/mach-mx27/mx27ads_gpio.c @@ -185,19 +185,21 @@ void config_uartdma_event(int port) * PB25 - PB31 -- PRIMARY PB22 -- PRIMARY */ -void gpio_usbh1_active(void) +int gpio_usbh1_active(void) { - gpio_request_mux(MX27_PIN_USBH1_SUSP, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBH1_RCV, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBH1_FS, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBH1_OE_B, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBH1_TXDM, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBH1_TXDP, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBH1_RXDM, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBH1_RXDP, GPIO_MUX_PRIMARY); + if (gpio_request_mux(MX27_PIN_USBH1_SUSP, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBH1_RCV, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBH1_FS, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBH1_OE_B, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBH1_TXDM, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBH1_TXDP, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBH1_RXDM, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBH1_RXDP, GPIO_MUX_PRIMARY)) + return -EINVAL; __raw_writew(PBC_BCTRL3_FSH_MOD, PBC_BCTRL3_CLEAR_REG); __raw_writew(PBC_BCTRL3_FSH_VBUS_EN, PBC_BCTRL3_CLEAR_REG); + return 0; } void gpio_usbh1_inactive(void) { @@ -215,35 +217,38 @@ void gpio_usbh1_inactive(void) /* * conflicts with CSPI1 (MC13783) and CSPI2 (Connector) */ -void gpio_usbh2_active(void) +int gpio_usbh2_active(void) { - gpio_set_puen(MX27_PIN_USBH2_CLK, 0); - gpio_set_puen(MX27_PIN_USBH2_DIR, 0); - gpio_set_puen(MX27_PIN_USBH2_DATA7, 0); - gpio_set_puen(MX27_PIN_USBH2_NXT, 0); - gpio_set_puen(MX27_PIN_USBH2_STP, 0); - gpio_set_puen(MX27_PIN_CSPI2_SS2, 0); - gpio_set_puen(MX27_PIN_CSPI2_SS1, 0); - gpio_set_puen(MX27_PIN_CSPI2_SS0, 0); - gpio_set_puen(MX27_PIN_CSPI2_SCLK, 0); - gpio_set_puen(MX27_PIN_CSPI2_MISO, 0); - gpio_set_puen(MX27_PIN_CSPI2_MOSI, 0); - gpio_set_puen(MX27_PIN_CSPI1_SS2, 0); - - gpio_request_mux(MX27_PIN_USBH2_CLK, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBH2_DIR, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBH2_DATA7, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBH2_NXT, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBH2_STP, GPIO_MUX_PRIMARY); - - gpio_request_mux(MX27_PIN_CSPI2_SS2, GPIO_MUX_ALT); - gpio_request_mux(MX27_PIN_CSPI2_SS1, GPIO_MUX_ALT); - gpio_request_mux(MX27_PIN_CSPI2_SS0, GPIO_MUX_ALT); - gpio_request_mux(MX27_PIN_CSPI2_SCLK, GPIO_MUX_ALT); - gpio_request_mux(MX27_PIN_CSPI2_MISO, GPIO_MUX_ALT); - gpio_request_mux(MX27_PIN_CSPI2_MOSI, GPIO_MUX_ALT); - gpio_request_mux(MX27_PIN_CSPI1_SS2, GPIO_MUX_ALT); + if (gpio_set_puen(MX27_PIN_USBH2_CLK, 0) || + gpio_set_puen(MX27_PIN_USBH2_DIR, 0) || + gpio_set_puen(MX27_PIN_USBH2_DATA7, 0) || + gpio_set_puen(MX27_PIN_USBH2_NXT, 0) || + gpio_set_puen(MX27_PIN_USBH2_STP, 0) || + gpio_set_puen(MX27_PIN_CSPI2_SS2, 0) || + gpio_set_puen(MX27_PIN_CSPI2_SS1, 0) || + gpio_set_puen(MX27_PIN_CSPI2_SS0, 0) || + gpio_set_puen(MX27_PIN_CSPI2_SCLK, 0) || + gpio_set_puen(MX27_PIN_CSPI2_MISO, 0) || + gpio_set_puen(MX27_PIN_CSPI2_MOSI, 0) || + gpio_set_puen(MX27_PIN_CSPI1_SS2, 0)) + return -EINVAL; + + if (gpio_request_mux(MX27_PIN_USBH2_CLK, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBH2_DIR, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBH2_DATA7, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBH2_NXT, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBH2_STP, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_CSPI2_SS2, GPIO_MUX_ALT) || + gpio_request_mux(MX27_PIN_CSPI2_SS1, GPIO_MUX_ALT) || + gpio_request_mux(MX27_PIN_CSPI2_SS0, GPIO_MUX_ALT) || + gpio_request_mux(MX27_PIN_CSPI2_SCLK, GPIO_MUX_ALT) || + gpio_request_mux(MX27_PIN_CSPI2_MISO, GPIO_MUX_ALT) || + gpio_request_mux(MX27_PIN_CSPI2_MOSI, GPIO_MUX_ALT) || + gpio_request_mux(MX27_PIN_CSPI1_SS2, GPIO_MUX_ALT)) + return -EINVAL; + __raw_writew(PBC_BCTRL3_HSH_EN, PBC_BCTRL3_CLEAR_REG); + return 0; } void gpio_usbh2_inactive(void) { @@ -278,23 +283,27 @@ void gpio_usbh2_inactive(void) int gpio_usbotg_hs_active(void) { - gpio_request_mux(MX27_PIN_USBOTG_DATA5, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBOTG_DATA6, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBOTG_DATA0, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBOTG_DATA2, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBOTG_DATA1, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBOTG_DATA3, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBOTG_DATA4, GPIO_MUX_PRIMARY); - - gpio_request_mux(MX27_PIN_USBOTG_DIR, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBOTG_STP, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBOTG_NXT, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBOTG_CLK, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USBOTG_DATA7, GPIO_MUX_PRIMARY); - - gpio_request_mux(MX27_PIN_USB_OC_B, GPIO_MUX_PRIMARY); - gpio_request_mux(MX27_PIN_USB_PWR, GPIO_MUX_PRIMARY); + if (gpio_request_mux(MX27_PIN_USBOTG_DATA5, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBOTG_DATA6, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBOTG_DATA0, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBOTG_DATA2, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBOTG_DATA1, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBOTG_DATA3, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBOTG_DATA4, GPIO_MUX_PRIMARY) || + + gpio_request_mux(MX27_PIN_USBOTG_DIR, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBOTG_STP, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBOTG_NXT, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBOTG_CLK, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USBOTG_DATA7, GPIO_MUX_PRIMARY) || + + gpio_request_mux(MX27_PIN_USB_OC_B, GPIO_MUX_PRIMARY) || + gpio_request_mux(MX27_PIN_USB_PWR, GPIO_MUX_PRIMARY)) + return -EINVAL; + __raw_writew(PBC_BCTRL3_OTG_HS_EN, PBC_BCTRL3_CLEAR_REG); + __raw_writew(PBC_BCTRL3_OTG_VBUS_EN, PBC_BCTRL3_CLEAR_REG); + return 0; } @@ -326,7 +335,7 @@ int gpio_usbotg_fs_active(void) void gpio_usbotg_fs_inactive(void) { - return gpio_usbotg_hs_inactive(); + gpio_usbotg_hs_inactive(); } /*! |