/* * mx27lite_gpio.c * * GPIO Assignments for the MX27Litekit * * Copyright 2008 TimeSys Corp. * * The code contained herein is licensed under the GNU General Public * License. You may obtain a copy of the GNU General Public License * Version 2 or later at the following locations: * * http://www.opensource.org/licenses/gpl-license.html * http://www.gnu.org/copyleft/gpl.html */ #include #include #include #include #include #include #include #include "board-mx27lite.h" #include "gpio_mux.h" #include "crm_regs.h" static int g_uart_activated[MXC_UART_NR] = { 0, 0, 0, 0, 0, 0 }; /* -------------------------------------------------------------------- * UART * -------------------------------------------------------------------- */ /* * Setup GPIO for a UART port to be active * * port a UART port * ir_mode indicates if the port is used for SIR */ void gpio_uart_active(int port, int ir_mode) { if (port < 0 || port >= MXC_UART_NR) { pr_info("Wrong port number: %d\n", port); BUG(); } if (g_uart_activated[port]) { pr_info("UART %d has been activated multiple times\n", port + 1); return; } g_uart_activated[port] = 1; switch (port) { case 0: gpio_request_mux(MX27_PIN_UART1_TXD, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_UART1_RXD, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_UART1_CTS, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_UART1_RTS, GPIO_MUX_PRIMARY); break; case 1: gpio_request_mux(MX27_PIN_UART2_TXD, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_UART2_RXD, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_UART2_CTS, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_UART2_RTS, GPIO_MUX_PRIMARY); break; case 2: gpio_request_mux(MX27_PIN_UART3_TXD, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_UART3_RXD, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_UART3_CTS, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_UART3_RTS, GPIO_MUX_PRIMARY); break; case 3: gpio_request_mux(MX27_PIN_USBH1_TXDM, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_USBH1_RXDP, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_USBH1_TXDP, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_USBH1_FS, GPIO_MUX_ALT); break; case 4: gpio_request_mux(MX27_PIN_CSI_D6, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_CSI_D7, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_CSI_VSYNC, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_CSI_HSYNC, GPIO_MUX_ALT); break; case 5: gpio_request_mux(MX27_PIN_CSI_D0, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_CSI_D1, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_CSI_D2, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_CSI_D3, GPIO_MUX_ALT); break; default: break; } } /* * Setup GPIO for a UART port to be inactive * * port a UART port * ir_mode indicates if the port is used for SIR */ void gpio_uart_inactive(int port, int ir_mode) { if (port < 0 || port >= MXC_UART_NR) { pr_info("Wrong port number: %d\n", port); BUG(); } if (g_uart_activated[port] == 0) { pr_info("UART %d has not been activated \n", port + 1); return; } g_uart_activated[port] = 0; switch (port) { case 0: gpio_free_mux(MX27_PIN_UART1_TXD); gpio_free_mux(MX27_PIN_UART1_RXD); gpio_free_mux(MX27_PIN_UART1_CTS); gpio_free_mux(MX27_PIN_UART1_RTS); break; case 1: gpio_free_mux(MX27_PIN_UART2_TXD); gpio_free_mux(MX27_PIN_UART2_RXD); gpio_free_mux(MX27_PIN_UART2_CTS); gpio_free_mux(MX27_PIN_UART2_RTS); break; case 2: gpio_free_mux(MX27_PIN_UART3_TXD); gpio_free_mux(MX27_PIN_UART3_RXD); gpio_free_mux(MX27_PIN_UART3_CTS); gpio_free_mux(MX27_PIN_UART3_RTS); break; case 3: gpio_free_mux(MX27_PIN_USBH1_TXDM); gpio_free_mux(MX27_PIN_USBH1_RXDP); gpio_free_mux(MX27_PIN_USBH1_TXDP); gpio_free_mux(MX27_PIN_USBH1_FS); break; case 4: gpio_free_mux(MX27_PIN_CSI_D6); gpio_free_mux(MX27_PIN_CSI_D7); gpio_free_mux(MX27_PIN_CSI_VSYNC); gpio_free_mux(MX27_PIN_CSI_HSYNC); break; case 5: gpio_free_mux(MX27_PIN_CSI_D0); gpio_free_mux(MX27_PIN_CSI_D1); gpio_free_mux(MX27_PIN_CSI_D2); gpio_free_mux(MX27_PIN_CSI_D3); break; default: break; } } /* * Configure the IOMUX GPR register to receive shared SDMA UART events * * port a UART port */ void config_uartdma_event(int port) { return; } /* -------------------------------------------------------------------- * USB * -------------------------------------------------------------------- */ /* * Setup GPIO for USBH1 to be active * * USBH1 is not used on the Litekit because its pins are multiplexed * with LCD and OTG. It may be possible to modify the hardware or use a * different baseboard to use this interface. * */ int gpio_usbh1_active(void) { 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; return 0; } /* * Setup GPIO for USBH1 to be inactive */ void gpio_usbh1_inactive(void) { gpio_free_mux(MX27_PIN_USBH1_SUSP); gpio_free_mux(MX27_PIN_USBH1_RCV); gpio_free_mux(MX27_PIN_USBH1_FS); gpio_free_mux(MX27_PIN_USBH1_OE_B); gpio_free_mux(MX27_PIN_USBH1_TXDM); gpio_free_mux(MX27_PIN_USBH1_TXDP); gpio_free_mux(MX27_PIN_USBH1_RXDM); gpio_free_mux(MX27_PIN_USBH1_RXDP); } /* * Setup GPIO for USBH2 to be active * * USBH2 conflicts with CSPI1 (MC13783) and CSPI2 (Connector). CSPI1 is * still usable with USBH2 enabled, but only two of the three slave select * pins are active. * */ int gpio_usbh2_active(void) { 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) || gpio_request_mux(MX27_PIN_USB_OC_B, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_USB_PWR, GPIO_MUX_PRIMARY)) return -EINVAL; return 0; } /* * Setup GPIO for USBH2 to be inactive */ void gpio_usbh2_inactive(void) { gpio_free_mux(MX27_PIN_USBH2_CLK); gpio_free_mux(MX27_PIN_USBH2_DIR); gpio_free_mux(MX27_PIN_USBH2_DATA7); gpio_free_mux(MX27_PIN_USBH2_NXT); gpio_free_mux(MX27_PIN_USBH2_STP); gpio_free_mux(MX27_PIN_CSPI2_SS2); gpio_free_mux(MX27_PIN_CSPI2_SS1); gpio_free_mux(MX27_PIN_CSPI2_SS0); gpio_free_mux(MX27_PIN_CSPI2_SCLK); gpio_free_mux(MX27_PIN_CSPI2_MISO); gpio_free_mux(MX27_PIN_CSPI2_MOSI); gpio_free_mux(MX27_PIN_CSPI1_SS2); gpio_set_puen(MX27_PIN_USBH2_CLK, 1); gpio_set_puen(MX27_PIN_USBH2_DIR, 1); gpio_set_puen(MX27_PIN_USBH2_DATA7, 1); gpio_set_puen(MX27_PIN_USBH2_NXT, 1); gpio_set_puen(MX27_PIN_USBH2_STP, 1); gpio_set_puen(MX27_PIN_CSPI2_SS2, 1); gpio_set_puen(MX27_PIN_CSPI2_SS1, 1); gpio_set_puen(MX27_PIN_CSPI2_SS0, 1); gpio_set_puen(MX27_PIN_CSPI2_SCLK, 1); gpio_set_puen(MX27_PIN_CSPI2_MISO, 1); gpio_set_puen(MX27_PIN_CSPI2_MOSI, 1); gpio_set_puen(MX27_PIN_CSPI1_SS2, 1); gpio_free_mux(MX27_PIN_USB_OC_B); gpio_free_mux(MX27_PIN_USB_PWR); } /* * Setup GPIO for USBOTG to be active */ int gpio_usbotg_hs_active(void) { 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) || /* Use TXDM and TXDP pins as power and Overcurrent control */ gpio_request_mux(MX27_PIN_USBH1_TXDM, GPIO_MUX_GPIO) || gpio_request_mux(MX27_PIN_USBH1_TXDP, GPIO_MUX_GPIO)) return -EINVAL; mxc_set_gpio_direction(MX27_PIN_USBH1_TXDM, 0); /* USB1_PWR_nEN */ mxc_set_gpio_direction(MX27_PIN_USBH1_TXDP, 1); /* USB1_nOC */ mxc_set_gpio_dataout(MX27_PIN_USBH1_TXDM, 0); return 0; } /* * Setup GPIO for USBOTG to be inactive */ void gpio_usbotg_hs_inactive(void) { gpio_free_mux(MX27_PIN_USBOTG_DATA5); gpio_free_mux(MX27_PIN_USBOTG_DATA6); gpio_free_mux(MX27_PIN_USBOTG_DATA0); gpio_free_mux(MX27_PIN_USBOTG_DATA2); gpio_free_mux(MX27_PIN_USBOTG_DATA1); gpio_free_mux(MX27_PIN_USBOTG_DATA3); gpio_free_mux(MX27_PIN_USBOTG_DATA4); gpio_free_mux(MX27_PIN_USBOTG_DIR); gpio_free_mux(MX27_PIN_USBOTG_STP); gpio_free_mux(MX27_PIN_USBOTG_NXT); gpio_free_mux(MX27_PIN_USBOTG_CLK); gpio_free_mux(MX27_PIN_USBOTG_DATA7); gpio_free_mux(MX27_PIN_USBH1_TXDM); gpio_free_mux(MX27_PIN_USBH1_TXDP); } int gpio_usbotg_fs_active(void) { return gpio_usbotg_hs_active(); } void gpio_usbotg_fs_inactive(void) { gpio_usbotg_hs_inactive(); } /* -------------------------------------------------------------------- * I2C * -------------------------------------------------------------------- */ /* * Setup GPIO for I2C device to be active * * i2c_num an I2C device */ void gpio_i2c_active(int i2c_num) { switch (i2c_num) { case 0: gpio_request_mux(MX27_PIN_I2C_CLK, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_I2C_DATA, GPIO_MUX_PRIMARY); break; case 1: gpio_request_mux(MX27_PIN_I2C2_SCL, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_I2C2_SDA, GPIO_MUX_PRIMARY); break; default: printk(KERN_ERR "gpio_i2c_active no compatible I2C adapter\n"); break; } } /* * Setup GPIO for an I2C device to be inactive * * i2c_num an I2C device */ void gpio_i2c_inactive(int i2c_num) { switch (i2c_num) { case 0: gpio_free_mux(MX27_PIN_I2C_CLK); gpio_free_mux(MX27_PIN_I2C_DATA); break; case 1: gpio_free_mux(MX27_PIN_I2C2_SCL); gpio_free_mux(MX27_PIN_I2C2_SDA); break; default: break; } } /* -------------------------------------------------------------------- * CSPI * -------------------------------------------------------------------- */ /* * Setup GPIO for a CSPI device to be active * * cspi_mod an CSPI device */ void gpio_spi_active(int cspi_mod) { switch (cspi_mod) { case 0: /* SPI1 */ gpio_request_mux(MX27_PIN_CSPI1_MOSI, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSPI1_MISO, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSPI1_SCLK, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSPI1_RDY, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSPI1_SS0, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSPI1_SS1, GPIO_MUX_PRIMARY); /* This pin conflicts with the USB Host 2 Interface. */ #if !defined(CONFIG_USB_EHCI_ARC_H2) gpio_request_mux(MX27_PIN_CSPI1_SS2, GPIO_MUX_PRIMARY); #endif break; case 1: /*SPI2 */ gpio_request_mux(MX27_PIN_CSPI2_MOSI, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSPI2_MISO, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSPI2_SCLK, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSPI2_SS0, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSPI2_SS1, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSPI2_SS2, GPIO_MUX_PRIMARY); break; case 2: /*SPI3 */ gpio_request_mux(MX27_PIN_SD1_D0, GPIO_MUX_ALT); /* MISO */ gpio_request_mux(MX27_PIN_SD1_CMD, GPIO_MUX_ALT); /* MOSI */ gpio_request_mux(MX27_PIN_SD1_CLK, GPIO_MUX_ALT); /* SCLK */ gpio_request_mux(MX27_PIN_SD1_D3, GPIO_MUX_ALT); /* SS */ break; default: break; } } /* * Setup GPIO for a CSPI device to be inactive * * cspi_mod a CSPI device */ void gpio_spi_inactive(int cspi_mod) { switch (cspi_mod) { case 0: /* SPI1 */ gpio_free_mux(MX27_PIN_CSPI1_MOSI); gpio_free_mux(MX27_PIN_CSPI1_MISO); gpio_free_mux(MX27_PIN_CSPI1_SCLK); gpio_free_mux(MX27_PIN_CSPI1_RDY); gpio_free_mux(MX27_PIN_CSPI1_SS0); gpio_free_mux(MX27_PIN_CSPI1_SS1); #if !defined(CONFIG_USB_EHCI_ARC_H2) gpio_free_mux(MX27_PIN_CSPI1_SS2); #endif break; case 1: /*SPI2 */ gpio_free_mux(MX27_PIN_CSPI2_MOSI); gpio_free_mux(MX27_PIN_CSPI2_MISO); gpio_free_mux(MX27_PIN_CSPI2_SCLK); gpio_free_mux(MX27_PIN_CSPI2_SS0); gpio_free_mux(MX27_PIN_CSPI2_SS1); gpio_free_mux(MX27_PIN_CSPI2_SS2); break; case 2: /*SPI3 */ gpio_free_mux(MX27_PIN_SD1_D0); gpio_free_mux(MX27_PIN_SD1_CMD); gpio_free_mux(MX27_PIN_SD1_CLK); gpio_free_mux(MX27_PIN_SD1_D3); break; default: break; } } /* -------------------------------------------------------------------- * NAND * -------------------------------------------------------------------- */ /* * Setup GPIO for a nand flash device to be active */ void gpio_nand_active(void) { unsigned long reg; /* Ensure 8-Bit operation */ reg = __raw_readl(SYS_FMCR); reg &= ~(1 << 4); __raw_writel(reg, SYS_FMCR); gpio_request_mux(MX27_PIN_NFRB, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_NFCE_B, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_NFWP_B, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_NFCLE, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_NFALE, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_NFRE_B, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_NFWE_B, GPIO_MUX_PRIMARY); } /* * Setup GPIO for a nand flash device to be inactive */ void gpio_nand_inactive(void) { gpio_free_mux(MX27_PIN_NFRB); gpio_free_mux(MX27_PIN_NFCE_B); gpio_free_mux(MX27_PIN_NFWP_B); gpio_free_mux(MX27_PIN_NFCLE); gpio_free_mux(MX27_PIN_NFALE); gpio_free_mux(MX27_PIN_NFRE_B); gpio_free_mux(MX27_PIN_NFWE_B); } /* -------------------------------------------------------------------- * CSI (Camera Sensor Interface) * -------------------------------------------------------------------- */ /* * Setup GPIO for CSI device to be active */ void gpio_sensor_active(void) { gpio_request_mux(MX27_PIN_CSI_D0, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSI_D1, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSI_D2, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSI_D3, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSI_D4, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSI_MCLK, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSI_PIXCLK, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSI_D5, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSI_D6, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSI_D7, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSI_VSYNC, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CSI_HSYNC, GPIO_MUX_PRIMARY); } /* * Setup GPIO for CSI device to be inactive */ void gpio_sensor_inactive(void) { gpio_free_mux(MX27_PIN_CSI_D0); gpio_free_mux(MX27_PIN_CSI_D1); gpio_free_mux(MX27_PIN_CSI_D2); gpio_free_mux(MX27_PIN_CSI_D3); gpio_free_mux(MX27_PIN_CSI_D4); gpio_free_mux(MX27_PIN_CSI_MCLK); gpio_free_mux(MX27_PIN_CSI_PIXCLK); gpio_free_mux(MX27_PIN_CSI_D5); gpio_free_mux(MX27_PIN_CSI_D6); gpio_free_mux(MX27_PIN_CSI_D7); gpio_free_mux(MX27_PIN_CSI_VSYNC); gpio_free_mux(MX27_PIN_CSI_HSYNC); } void gpio_sensor_reset(bool flag) { /* TODO: Write me */ } /* -------------------------------------------------------------------- * LCD Controller * -------------------------------------------------------------------- */ /* * Setup GPIO for LCDC device to be active */ void gpio_lcdc_active(void) { gpio_request_mux(MX27_PIN_LSCLK, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD0, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD1, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD2, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD3, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD4, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD5, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD6, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD7, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD8, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD9, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD10, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD11, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD12, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD13, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD14, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD15, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD16, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_LD17, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_REV, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CLS, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_PS, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SPL_SPR, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_HSYNC, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_VSYNC, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_CONTRAST, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_OE_ACD, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SSI2_CLK,GPIO_MUX_GPIO); /* Backlight Power */ mxc_set_gpio_direction(MX27_PIN_SSI2_CLK,0); gpio_request_mux(MX27_PIN_USBH1_RXDP,GPIO_MUX_GPIO); /* Panel Power */ mxc_set_gpio_direction(MX27_PIN_USBH1_RXDP,0); } /* * Setup GPIO for LCDC device to be inactive */ void gpio_lcdc_inactive(void) { gpio_free_mux(MX27_PIN_LSCLK); gpio_free_mux(MX27_PIN_LD0); gpio_free_mux(MX27_PIN_LD1); gpio_free_mux(MX27_PIN_LD2); gpio_free_mux(MX27_PIN_LD3); gpio_free_mux(MX27_PIN_LD4); gpio_free_mux(MX27_PIN_LD5); gpio_free_mux(MX27_PIN_LD6); gpio_free_mux(MX27_PIN_LD7); gpio_free_mux(MX27_PIN_LD8); gpio_free_mux(MX27_PIN_LD9); gpio_free_mux(MX27_PIN_LD10); gpio_free_mux(MX27_PIN_LD11); gpio_free_mux(MX27_PIN_LD12); gpio_free_mux(MX27_PIN_LD13); gpio_free_mux(MX27_PIN_LD14); gpio_free_mux(MX27_PIN_LD15); gpio_free_mux(MX27_PIN_LD16); gpio_free_mux(MX27_PIN_LD17); gpio_free_mux(MX27_PIN_REV); gpio_free_mux(MX27_PIN_CLS); gpio_free_mux(MX27_PIN_PS); gpio_free_mux(MX27_PIN_SPL_SPR); gpio_free_mux(MX27_PIN_HSYNC); gpio_free_mux(MX27_PIN_VSYNC); gpio_free_mux(MX27_PIN_CONTRAST); gpio_free_mux(MX27_PIN_OE_ACD); gpio_free_mux(MX27_PIN_SSI2_CLK); gpio_free_mux(MX27_PIN_USBH1_RXDP); } /* * Setup GPIO PA25 low to start hard reset FS453 TV encoder */ void gpio_fs453_reset_low(void) { gpio_free_mux(MX27_PIN_CLS); if (gpio_request_mux(MX27_PIN_CLS, GPIO_MUX_GPIO)) { printk(KERN_ERR "bug: request GPIO PA25 failed.\n"); return; } /* PA25 (CLS) as output */ mxc_set_gpio_direction(MX27_PIN_CLS, 0); gpio_config_mux(MX27_PIN_CLS, GPIO_MUX_GPIO); mxc_set_gpio_dataout(MX27_PIN_CLS, 0); } /* * Setup GPIO PA25 high to end hard reset FS453 TV encoder */ void gpio_fs453_reset_high(void) { gpio_free_mux(MX27_PIN_CLS); if (gpio_request_mux(MX27_PIN_CLS, GPIO_MUX_GPIO)) { printk(KERN_ERR "bug: request GPIO PA25 failed.\n"); return; } /* PA25 (CLS) as output */ mxc_set_gpio_direction(MX27_PIN_CLS, 0); gpio_config_mux(MX27_PIN_CLS, GPIO_MUX_GPIO); mxc_set_gpio_dataout(MX27_PIN_CLS, 1); } /* -------------------------------------------------------------------- * PMIC/Atlas * -------------------------------------------------------------------- */ /* * Configure the IOMux block for PMIC standard operations. */ void gpio_pmic_active(void) { gpio_config_mux(MX27_PIN_SD1_D1, GPIO_MUX_GPIO); mxc_set_gpio_direction(MX27_PIN_SD1_D1, 1); } /* -------------------------------------------------------------------- * Keypad * -------------------------------------------------------------------- */ /* * GPIO settings not required for keypad */ void gpio_keypad_active(void) { } /* * GPIO settings not required for keypad */ void gpio_keypad_inactive(void) { } /* -------------------------------------------------------------------- * ATA * -------------------------------------------------------------------- */ /* * Setup GPIO for ATA device to be active */ void gpio_ata_active(void) { printk("\n\nATA active, don't think this is right\n\n"); gpio_request_mux(MX27_PIN_ATA_DATA0, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA1, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA2, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA3, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA4, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA5, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA6, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA7, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA8, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA9, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA10, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA11, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA12, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA13, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA14, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA15, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_PC_CD1_B, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_PC_CD2_B, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_PC_WAIT_B, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_PC_READY, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_PC_PWRON, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_PC_VS1, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_PC_VS2, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_PC_BVD1, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_PC_BVD2, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_PC_RST, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_IOIS16, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_PC_RW_B, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_PC_POE, GPIO_MUX_ALT); } /* * Setup GPIO for ATA device to be inactive */ void gpio_ata_inactive(void) { gpio_free_mux(MX27_PIN_ATA_DATA0); gpio_free_mux(MX27_PIN_ATA_DATA1); gpio_free_mux(MX27_PIN_ATA_DATA2); gpio_free_mux(MX27_PIN_ATA_DATA3); gpio_free_mux(MX27_PIN_ATA_DATA4); gpio_free_mux(MX27_PIN_ATA_DATA5); gpio_free_mux(MX27_PIN_ATA_DATA6); gpio_free_mux(MX27_PIN_ATA_DATA7); gpio_free_mux(MX27_PIN_ATA_DATA8); gpio_free_mux(MX27_PIN_ATA_DATA9); gpio_free_mux(MX27_PIN_ATA_DATA10); gpio_free_mux(MX27_PIN_ATA_DATA11); gpio_free_mux(MX27_PIN_ATA_DATA12); gpio_free_mux(MX27_PIN_ATA_DATA13); gpio_free_mux(MX27_PIN_ATA_DATA14); gpio_free_mux(MX27_PIN_ATA_DATA15); gpio_free_mux(MX27_PIN_PC_CD1_B); gpio_free_mux(MX27_PIN_PC_CD2_B); gpio_free_mux(MX27_PIN_PC_WAIT_B); gpio_free_mux(MX27_PIN_PC_READY); gpio_free_mux(MX27_PIN_PC_PWRON); gpio_free_mux(MX27_PIN_PC_VS1); gpio_free_mux(MX27_PIN_PC_VS2); gpio_free_mux(MX27_PIN_PC_BVD1); gpio_free_mux(MX27_PIN_PC_BVD2); gpio_free_mux(MX27_PIN_PC_RST); gpio_free_mux(MX27_PIN_IOIS16); gpio_free_mux(MX27_PIN_PC_RW_B); gpio_free_mux(MX27_PIN_PC_POE); } /* -------------------------------------------------------------------- * Ethernet (FEC) * -------------------------------------------------------------------- */ /* * Setup GPIO for FEC device to be active */ void gpio_fec_active(void) { gpio_request_mux(MX27_PIN_ATA_DATA15, GPIO_MUX_OUTPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA15, 0); gpio_request_mux(MX27_PIN_ATA_DATA14, GPIO_MUX_OUTPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA14, 0); gpio_request_mux(MX27_PIN_ATA_DATA13, GPIO_MUX_INPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA13, 1); gpio_request_mux(MX27_PIN_ATA_DATA12, GPIO_MUX_INPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA12, 1); gpio_request_mux(MX27_PIN_ATA_DATA11, GPIO_MUX_INPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA11, 1); gpio_request_mux(MX27_PIN_ATA_DATA10, GPIO_MUX_INPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA10, 1); gpio_request_mux(MX27_PIN_ATA_DATA9, GPIO_MUX_INPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA9, 1); gpio_request_mux(MX27_PIN_ATA_DATA8, GPIO_MUX_INPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA8, 1); gpio_request_mux(MX27_PIN_ATA_DATA7, GPIO_MUX_OUTPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA7, 0); gpio_request_mux(MX27_PIN_ATA_DATA6, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_ATA_DATA5, GPIO_MUX_INPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA5, 1); gpio_request_mux(MX27_PIN_ATA_DATA4, GPIO_MUX_INPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA4, 1); gpio_request_mux(MX27_PIN_ATA_DATA3, GPIO_MUX_INPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA3, 1); gpio_request_mux(MX27_PIN_ATA_DATA2, GPIO_MUX_INPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA2, 1); gpio_request_mux(MX27_PIN_ATA_DATA1, GPIO_MUX_OUTPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA1, 0); gpio_request_mux(MX27_PIN_ATA_DATA0, GPIO_MUX_OUTPUT1); mxc_set_gpio_direction(MX27_PIN_ATA_DATA0, 0); gpio_request_mux(MX27_PIN_SD3_CLK, GPIO_MUX_OUTPUT1); mxc_set_gpio_direction(MX27_PIN_SD3_CLK, 0); gpio_request_mux(MX27_PIN_SD3_CMD, GPIO_MUX_OUTPUT1); mxc_set_gpio_direction(MX27_PIN_SD3_CMD, 0); } /* * Setup GPIO for FEC device to be inactive */ void gpio_fec_inactive(void) { gpio_free_mux(MX27_PIN_ATA_DATA0); gpio_free_mux(MX27_PIN_ATA_DATA1); gpio_free_mux(MX27_PIN_ATA_DATA2); gpio_free_mux(MX27_PIN_ATA_DATA3); gpio_free_mux(MX27_PIN_ATA_DATA4); gpio_free_mux(MX27_PIN_ATA_DATA5); gpio_free_mux(MX27_PIN_ATA_DATA6); gpio_free_mux(MX27_PIN_ATA_DATA7); gpio_free_mux(MX27_PIN_ATA_DATA8); gpio_free_mux(MX27_PIN_ATA_DATA9); gpio_free_mux(MX27_PIN_ATA_DATA10); gpio_free_mux(MX27_PIN_ATA_DATA11); gpio_free_mux(MX27_PIN_ATA_DATA12); gpio_free_mux(MX27_PIN_ATA_DATA13); gpio_free_mux(MX27_PIN_ATA_DATA14); gpio_free_mux(MX27_PIN_ATA_DATA15); gpio_free_mux(MX27_PIN_SD3_CMD); gpio_free_mux(MX27_PIN_SD3_CLK); } /* -------------------------------------------------------------------- * SLCD Controller * -------------------------------------------------------------------- */ /* * Setup GPIO for SLCDC device to be active */ void gpio_slcdc_active(int type) { switch (type) { case 0: gpio_request_mux(MX27_PIN_SSI3_CLK, GPIO_MUX_ALT); /* CLK */ gpio_request_mux(MX27_PIN_SSI3_TXDAT, GPIO_MUX_ALT); /* CS */ gpio_request_mux(MX27_PIN_SSI3_RXDAT, GPIO_MUX_ALT); /* RS */ gpio_request_mux(MX27_PIN_SSI3_FS, GPIO_MUX_ALT); /* D0 */ break; case 1: gpio_request_mux(MX27_PIN_SD2_D1, GPIO_MUX_GPIO); /* CLK */ gpio_request_mux(MX27_PIN_SD2_D2, GPIO_MUX_GPIO); /* D0 */ gpio_request_mux(MX27_PIN_SD2_D3, GPIO_MUX_GPIO); /* RS */ gpio_request_mux(MX27_PIN_SD2_CMD, GPIO_MUX_GPIO); /* CS */ break; case 2: gpio_request_mux(MX27_PIN_LD0, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD1, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD2, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD3, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD4, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD5, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD6, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD7, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD8, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD9, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD10, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD11, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD12, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD13, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD14, GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_LD15, GPIO_MUX_GPIO); break; default: break; } return; } /* * Setup GPIO for SLCDC device to be inactive */ void gpio_slcdc_inactive(int type) { switch (type) { case 0: gpio_free_mux(MX27_PIN_SSI3_CLK); /* CLK */ gpio_free_mux(MX27_PIN_SSI3_TXDAT); /* CS */ gpio_free_mux(MX27_PIN_SSI3_RXDAT); /* RS */ gpio_free_mux(MX27_PIN_SSI3_FS); /* D0 */ break; case 1: gpio_free_mux(MX27_PIN_SD2_D1); /* CLK */ gpio_free_mux(MX27_PIN_SD2_D2); /* D0 */ gpio_free_mux(MX27_PIN_SD2_D3); /* RS */ gpio_free_mux(MX27_PIN_SD2_CMD); /* CS */ break; case 2: gpio_free_mux(MX27_PIN_LD0); gpio_free_mux(MX27_PIN_LD1); gpio_free_mux(MX27_PIN_LD2); gpio_free_mux(MX27_PIN_LD3); gpio_free_mux(MX27_PIN_LD4); gpio_free_mux(MX27_PIN_LD5); gpio_free_mux(MX27_PIN_LD6); gpio_free_mux(MX27_PIN_LD7); gpio_free_mux(MX27_PIN_LD8); gpio_free_mux(MX27_PIN_LD9); gpio_free_mux(MX27_PIN_LD10); gpio_free_mux(MX27_PIN_LD11); gpio_free_mux(MX27_PIN_LD12); gpio_free_mux(MX27_PIN_LD13); gpio_free_mux(MX27_PIN_LD14); gpio_free_mux(MX27_PIN_LD15); break; default: break; } return; } /* -------------------------------------------------------------------- * SSI * -------------------------------------------------------------------- */ /* * Setup GPIO for a SSI port to be active * * ssi_num an SSI port num */ void gpio_ssi_active(int ssi_num) { switch (ssi_num) { case 0: gpio_request_mux(MX27_PIN_SSI1_FS, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SSI1_RXDAT, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SSI1_TXDAT, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SSI1_CLK, GPIO_MUX_PRIMARY); gpio_set_puen(MX27_PIN_SSI1_FS, 0); gpio_set_puen(MX27_PIN_SSI1_RXDAT, 0); gpio_set_puen(MX27_PIN_SSI1_TXDAT, 0); gpio_set_puen(MX27_PIN_SSI1_CLK, 0); break; case 1: gpio_request_mux(MX27_PIN_SSI2_FS, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SSI2_RXDAT, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SSI2_TXDAT, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SSI2_CLK, GPIO_MUX_PRIMARY); gpio_set_puen(MX27_PIN_SSI2_FS, 0); gpio_set_puen(MX27_PIN_SSI2_RXDAT, 0); gpio_set_puen(MX27_PIN_SSI2_TXDAT, 0); gpio_set_puen(MX27_PIN_SSI2_CLK, 0); break; default: break; } return; } /* * Setup GPIO for a SSI port to be inactive * * ssi_num an SSI port num */ void gpio_ssi_inactive(int ssi_num) { switch (ssi_num) { case 0: gpio_free_mux(MX27_PIN_SSI1_FS); gpio_free_mux(MX27_PIN_SSI1_RXDAT); gpio_free_mux(MX27_PIN_SSI1_TXDAT); gpio_free_mux(MX27_PIN_SSI1_CLK); break; case 1: gpio_free_mux(MX27_PIN_SSI2_FS); gpio_free_mux(MX27_PIN_SSI2_RXDAT); gpio_free_mux(MX27_PIN_SSI2_TXDAT); gpio_free_mux(MX27_PIN_SSI2_CLK); break; default: break; } return; } /* -------------------------------------------------------------------- * SDHC (Secure Digital Controller) * -------------------------------------------------------------------- */ /* * Setup GPIO for SDHC to be active * * module SDHC module number */ void gpio_sdhc_active(int module) { u16 data; switch (module) { case 0: gpio_request_mux(MX27_PIN_SD1_CLK, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SD1_CMD, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SD1_D0, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SD1_D1, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SD1_D2, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SD1_D3, GPIO_MUX_PRIMARY); /* 22k pull up for sd1 dat3 pins */ data = __raw_readw(SYS_PSCR); data |= 0x0c; __raw_writew(data, SYS_PSCR); break; case 1: gpio_request_mux(MX27_PIN_SD2_CLK, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SD2_CMD, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SD2_D0, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SD2_D1, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SD2_D2, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SD2_D3, GPIO_MUX_PRIMARY); /* Pins for Write-protect and Chip Select */ gpio_request_mux(MX27_PIN_USBH1_RCV, GPIO_MUX_GPIO); mxc_set_gpio_direction(MX27_PIN_USBH1_RCV, 1); gpio_request_mux(MX27_PIN_USBH1_SUSP, GPIO_MUX_GPIO); mxc_set_gpio_direction(MX27_PIN_USBH1_SUSP, 1); /* 22k pull up for sd2 pins */ data = __raw_readw(SYS_PSCR); data &= ~0xfff0; data |= 0xfff0; __raw_writew(data, SYS_PSCR); break; case 2: gpio_request_mux(MX27_PIN_SD3_CLK, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_SD3_CMD, GPIO_MUX_PRIMARY); gpio_request_mux(MX27_PIN_ATA_DATA0, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_ATA_DATA1, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_ATA_DATA2, GPIO_MUX_ALT); gpio_request_mux(MX27_PIN_ATA_DATA3, GPIO_MUX_ALT); break; default: break; } } /* * Setup GPIO for SDHC1 to be inactive * * module SDHC module number */ void gpio_sdhc_inactive(int module) { switch (module) { case 0: gpio_free_mux(MX27_PIN_SD1_CLK); gpio_free_mux(MX27_PIN_SD1_CMD); gpio_free_mux(MX27_PIN_SD1_D0); gpio_free_mux(MX27_PIN_SD1_D1); gpio_free_mux(MX27_PIN_SD1_D2); gpio_free_mux(MX27_PIN_SD1_D3); break; case 1: gpio_free_mux(MX27_PIN_SD2_CLK); gpio_free_mux(MX27_PIN_SD2_CMD); gpio_free_mux(MX27_PIN_SD2_D0); gpio_free_mux(MX27_PIN_SD2_D1); gpio_free_mux(MX27_PIN_SD2_D2); gpio_free_mux(MX27_PIN_SD2_D3); gpio_free_mux(MX27_PIN_USBH1_RCV); gpio_free_mux(MX27_PIN_USBH1_SUSP); break; case 2: gpio_free_mux(MX27_PIN_SD3_CLK); gpio_free_mux(MX27_PIN_SD3_CMD); gpio_free_mux(MX27_PIN_ATA_DATA0); gpio_free_mux(MX27_PIN_ATA_DATA1); gpio_free_mux(MX27_PIN_ATA_DATA2); gpio_free_mux(MX27_PIN_ATA_DATA3); break; default: break; } } /* * Probe for the card. If present the GPIO data would be set. */ int sdhc_get_card_det_status(struct device *dev) { int ret = 0; switch (to_platform_device(dev)->id) { case 1: ret = mxc_get_gpio_datain(MX27_PIN_USBH1_SUSP); break; } return ret; } /* * Return the card detect pin. */ int sdhc_init_card_det(int id) { int ret = 0; switch (id) { case 1: ret = IOMUX_TO_IRQ(MX27_PIN_USBH1_SUSP); break; } return ret; } int gpio_pcmcia_active(void) { printk("Setting all pcmcia pins \n\t0x%08x\n\t0x%08x\n\t0x%08x\n\t0x%08x" "\n\t0x%08x\n\t0x%08x\n\t0x%08x\n\t0x%08x\n\t0x%08x" "\n\t0x%08x\n\t0x%08x\n\t0x%08x\n\t0x%08x\n\t0x%08x\n", mxc_get_gpio_datain(MX27_PIN_PC_CD1_B), mxc_get_gpio_datain(MX27_PIN_PC_CD2_B), mxc_get_gpio_datain(MX27_PIN_PC_WAIT_B), mxc_get_gpio_datain(MX27_PIN_PC_READY), mxc_get_gpio_datain(MX27_PIN_PC_PWRON), mxc_get_gpio_datain(MX27_PIN_PC_VS1), mxc_get_gpio_datain(MX27_PIN_PC_VS1), mxc_get_gpio_datain(MX27_PIN_PC_VS2), mxc_get_gpio_datain(MX27_PIN_PC_BVD1), mxc_get_gpio_datain(MX27_PIN_PC_BVD2), mxc_get_gpio_datain(MX27_PIN_PC_RST), mxc_get_gpio_datain(MX27_PIN_IOIS16), mxc_get_gpio_datain(MX27_PIN_PC_RW_B), mxc_get_gpio_datain(MX27_PIN_PC_POE)); printk("OUTPUT values 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", mxc_get_gpio_datain(MX27_PIN_TOUT), mxc_get_gpio_datain(MX27_PIN_TIN), mxc_get_gpio_datain(MX27_PIN_SSI4_FS), mxc_get_gpio_datain(MX27_PIN_SSI4_RXDAT) ); gpio_request_mux(MX27_PIN_SSI4_FS,GPIO_MUX_GPIO); gpio_request_mux(MX27_PIN_SSI4_RXDAT,GPIO_MUX_GPIO); mxc_set_gpio_direction( MX27_PIN_SSI4_FS, 0 ); mxc_set_gpio_direction( MX27_PIN_SSI4_RXDAT, 0 ); printk("OUTPUT values 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", mxc_get_gpio_datain(MX27_PIN_TOUT), mxc_get_gpio_datain(MX27_PIN_TIN), mxc_get_gpio_datain(MX27_PIN_SSI4_FS), mxc_get_gpio_datain(MX27_PIN_SSI4_RXDAT) ); printk("OUTPUT values 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", mxc_get_gpio_datain(MX27_PIN_SSI3_FS), mxc_get_gpio_datain(MX27_PIN_SSI3_RXDAT), mxc_get_gpio_datain(MX27_PIN_SSI3_TXDAT), mxc_get_gpio_datain(MX27_PIN_SSI3_CLK) ); gpio_request_mux( MX27_PIN_SSI3_FS, GPIO_MUX_OUTPUT1); gpio_request_mux( MX27_PIN_SSI3_RXDAT, GPIO_MUX_OUTPUT1); gpio_request_mux( MX27_PIN_SSI3_TXDAT, GPIO_MUX_OUTPUT1); gpio_request_mux( MX27_PIN_SSI3_CLK, GPIO_MUX_OUTPUT1); mxc_set_gpio_direction( MX27_PIN_SSI3_FS, 1); mxc_set_gpio_direction( MX27_PIN_SSI3_RXDAT, 1); mxc_set_gpio_direction( MX27_PIN_SSI3_TXDAT, 1); mxc_set_gpio_direction( MX27_PIN_SSI3_CLK, 1); mxc_set_gpio_dataout( MX27_PIN_SSI3_FS, 1); mxc_set_gpio_dataout( MX27_PIN_SSI3_RXDAT, 1); mxc_set_gpio_dataout( MX27_PIN_SSI3_TXDAT, 1); mxc_set_gpio_dataout( MX27_PIN_SSI3_CLK, 1); printk("OUTPUT values 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", mxc_get_gpio_datain(MX27_PIN_SSI3_FS), mxc_get_gpio_datain(MX27_PIN_SSI3_RXDAT), mxc_get_gpio_datain(MX27_PIN_SSI3_TXDAT), mxc_get_gpio_datain(MX27_PIN_SSI3_CLK) ); if ( gpio_request_mux(MX27_PIN_PC_CD1_B, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_PC_CD2_B, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_PC_WAIT_B, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_PC_READY, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_PC_PWRON, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_PC_VS1, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_PC_VS2, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_PC_BVD1, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_PC_BVD2, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_PC_RST, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_IOIS16, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_PC_RW_B, GPIO_MUX_PRIMARY) || gpio_request_mux(MX27_PIN_PC_POE, GPIO_MUX_PRIMARY) ) return -EINVAL; printk("Setting all pcmcia pins \n\t0x%08x\n\t0x%08x\n\t0x%08x\n\t0x%08x" "\n\t0x%08x\n\t0x%08x\n\t0x%08x\n\t0x%08x\n\t0x%08x" "\n\t0x%08x\n\t0x%08x\n\t0x%08x\n\t0x%08x\n\t0x%08x\n", mxc_get_gpio_datain(MX27_PIN_PC_CD1_B), mxc_get_gpio_datain(MX27_PIN_PC_CD2_B), mxc_get_gpio_datain(MX27_PIN_PC_WAIT_B), mxc_get_gpio_datain(MX27_PIN_PC_READY), mxc_get_gpio_datain(MX27_PIN_PC_PWRON), mxc_get_gpio_datain(MX27_PIN_PC_VS1), mxc_get_gpio_datain(MX27_PIN_PC_VS1), mxc_get_gpio_datain(MX27_PIN_PC_VS2), mxc_get_gpio_datain(MX27_PIN_PC_BVD1), mxc_get_gpio_datain(MX27_PIN_PC_BVD2), mxc_get_gpio_datain(MX27_PIN_PC_RST), mxc_get_gpio_datain(MX27_PIN_IOIS16), mxc_get_gpio_datain(MX27_PIN_PC_RW_B), mxc_get_gpio_datain(MX27_PIN_PC_POE)); return 0; } /*! * Setup GPIO for pcmcia to be inactive */ void gpio_pcmcia_inactive(void) { gpio_free_mux(MX27_PIN_IOIS16); gpio_free_mux(MX27_PIN_PC_BVD1); gpio_free_mux(MX27_PIN_PC_BVD2); gpio_free_mux(MX27_PIN_PC_CD1_B); gpio_free_mux(MX27_PIN_PC_CD2_B); gpio_free_mux(MX27_PIN_PC_POE); gpio_free_mux(MX27_PIN_PC_PWRON); gpio_free_mux(MX27_PIN_PC_READY); gpio_free_mux(MX27_PIN_PC_RST); gpio_free_mux(MX27_PIN_PC_RW_B); gpio_free_mux(MX27_PIN_PC_VS1); gpio_free_mux(MX27_PIN_PC_VS2); gpio_free_mux(MX27_PIN_PC_WAIT_B); } /* -------------------------------------------------------------------- * Miscellaneous * -------------------------------------------------------------------- */ /* * Power on/off Sharp QVGA panel. */ void board_power_lcd(int on) { if (on) mxc_set_gpio_dataout(MX27_PIN_USBH1_RXDP,1); else mxc_set_gpio_dataout(MX27_PIN_USBH1_RXDP,0); } void gpio_owire_active(void) { gpio_request_mux(MX27_PIN_RTCK, GPIO_MUX_ALT); } void gpio_owire_inactive(void) { gpio_request_mux(MX27_PIN_RTCK, GPIO_MUX_PRIMARY); } EXPORT_SYMBOL(gpio_uart_active); EXPORT_SYMBOL(gpio_uart_inactive); EXPORT_SYMBOL(config_uartdma_event); EXPORT_SYMBOL(gpio_usbh1_active); EXPORT_SYMBOL(gpio_usbh1_inactive); EXPORT_SYMBOL(gpio_usbh2_active); EXPORT_SYMBOL(gpio_usbh2_inactive); EXPORT_SYMBOL(gpio_usbotg_hs_active); EXPORT_SYMBOL(gpio_usbotg_hs_inactive); EXPORT_SYMBOL(gpio_usbotg_fs_active); EXPORT_SYMBOL(gpio_usbotg_fs_inactive); EXPORT_SYMBOL(gpio_i2c_active); EXPORT_SYMBOL(gpio_i2c_inactive); EXPORT_SYMBOL(gpio_spi_active); EXPORT_SYMBOL(gpio_spi_inactive); EXPORT_SYMBOL(gpio_nand_active); EXPORT_SYMBOL(gpio_nand_inactive); EXPORT_SYMBOL(gpio_sensor_active); EXPORT_SYMBOL(gpio_sensor_inactive); EXPORT_SYMBOL(gpio_sensor_reset); EXPORT_SYMBOL(gpio_lcdc_active); EXPORT_SYMBOL(gpio_lcdc_inactive); EXPORT_SYMBOL(gpio_fs453_reset_low); EXPORT_SYMBOL(gpio_fs453_reset_high); EXPORT_SYMBOL(gpio_pmic_active); EXPORT_SYMBOL(gpio_keypad_active); EXPORT_SYMBOL(gpio_keypad_inactive); EXPORT_SYMBOL(gpio_ata_active); EXPORT_SYMBOL(gpio_ata_inactive); EXPORT_SYMBOL(gpio_fec_active); EXPORT_SYMBOL(gpio_fec_inactive); EXPORT_SYMBOL(gpio_slcdc_active); EXPORT_SYMBOL(gpio_slcdc_inactive); EXPORT_SYMBOL(gpio_ssi_active); EXPORT_SYMBOL(gpio_ssi_inactive); EXPORT_SYMBOL(gpio_sdhc_active); EXPORT_SYMBOL(gpio_sdhc_inactive); EXPORT_SYMBOL(sdhc_get_card_det_status); EXPORT_SYMBOL(sdhc_init_card_det); EXPORT_SYMBOL(board_power_lcd); EXPORT_SYMBOL(gpio_pcmcia_active); EXPORT_SYMBOL(gpio_pcmcia_inactive); EXPORT_SYMBOL(gpio_owire_active); EXPORT_SYMBOL(gpio_owire_inactive);