diff options
-rw-r--r-- | arch/arm/mach-s5pv210/include/mach/gpio-herring.h | 49 | ||||
-rw-r--r--[-rwxr-xr-x] | arch/arm/mach-s5pv210/mach-herring.c | 98 |
2 files changed, 118 insertions, 29 deletions
diff --git a/arch/arm/mach-s5pv210/include/mach/gpio-herring.h b/arch/arm/mach-s5pv210/include/mach/gpio-herring.h index bc1be08..b55d0f0 100644 --- a/arch/arm/mach-s5pv210/include/mach/gpio-herring.h +++ b/arch/arm/mach-s5pv210/include/mach/gpio-herring.h @@ -73,23 +73,23 @@ #define GPIO_REC_PCM_OUT S5PV210_GPC0(4) #define GPIO_REC_PCM_OUT_AF 3 -#define BLOW_PCM_CLK S5PV210_GPC1(0) +#define GPIO_WIMAX_PM_SDA S5PV210_GPC1(0) -#define GPIO_GPC11 S5PV210_GPC1(1) +#define GPIO_WIMAX_I2C_CON S5PV210_GPC1(1) -#define GPIO_GPC12 S5PV210_GPC1(2) +#define GPIO_WIMAX_PM_SCL S5PV210_GPC1(2) #define GPIO_GPC13 S5PV210_GPC1(3) #define GPIO_GPC14 S5PV210_GPC1(4) -#define GPIO_GPD00 S5PV210_GPD0(0) +#define GPIO_WIMAX_DBGEN_28V S5PV210_GPD0(0) #define GPIO_VIBTONE_PWM S5PV210_GPD0(1) #define GPIO_VIBTONE_PWM1 S5PV210_GPD0(2) -#define GPIO_GPD03 S5PV210_GPD0(3) +#define GPIO_WIMAX_RESET_N S5PV210_GPD0(3) #define GPIO_CAM_SDA_29V S5PV210_GPD1(0) #define GPIO_CAM_SDA_29V_AF 2 @@ -269,25 +269,19 @@ #define GPIO_NAND_D7 S5PV210_GPG1(6) #define GPIO_NAND_D7_AF 3 -#define GPIO_T_FLASH_CLK S5PV210_GPG2(0) -#define GPIO_T_FLASH_CLK_AF 2 +#define GPIO_WIMAX_SDIO_CLK S5PV210_GPG2(0) -#define GPIO_T_FLASH_CMD S5PV210_GPG2(1) -#define GPIO_T_FLASH_CMD_AF 2 +#define GPIO_WIMAX_SDIO_CMD S5PV210_GPG2(1) #define GPIO_ALS_SDA_28V S5PV210_GPG2(2) -#define GPIO_T_FLASH_D0 S5PV210_GPG2(3) -#define GPIO_T_FLASH_D0_AF 2 +#define GPIO_WIMAX_SDIO_D0 S5PV210_GPG2(3) -#define GPIO_T_FLASH_D1 S5PV210_GPG2(4) -#define GPIO_T_FLASH_D1_AF 2 +#define GPIO_WIMAX_SDIO_D1 S5PV210_GPG2(4) -#define GPIO_T_FLASH_D2 S5PV210_GPG2(5) -#define GPIO_T_FLASH_D2_AF 2 +#define GPIO_WIMAX_SDIO_D2 S5PV210_GPG2(5) -#define GPIO_T_FLASH_D3 S5PV210_GPG2(6) -#define GPIO_T_FLASH_D3_AF 2 +#define GPIO_WIMAX_SDIO_D3 S5PV210_GPG2(6) #define GPIO_WLAN_SDIO_CLK S5PV210_GPG3(0) #define GPIO_WLAN_SDIO_CLK_AF 2 @@ -328,11 +322,12 @@ #define GPIO_AP_PMIC_IRQ S5PV210_GPH0(7) #define GPIO_AP_PMIC_IRQ_AF 0xFF -#define GPIO_GPH10 S5PV210_GPH1(0) +#define GPIO_WIMAX_EN S5PV210_GPH1(0) #define GPIO_PDA_ACTIVE S5PV210_GPH1(1) -#define GPIO_GPH12 S5PV210_GPH1(2) +#define GPIO_WIMAX_WAKEUP S5PV210_GPH1(2) + #define GPIO_nINT_ONEDRAM_AP S5PV210_GPH1(3) #define GPIO_nINT_ONEDRAM_AP_AF 0xF @@ -424,7 +419,11 @@ #define GPIO_VIBTONE_EN1 S5PV210_GPJ1(1) +#define GPIO_USB_HS_SEL S5PV210_GPJ2(0) +#define GPIO_PHONE_ON S5PV210_GPJ2(1) + #define GPIO_EAR_SEL S5PV210_GPJ2(3) +#define GPIO_UART_SEL1 S5PV210_GPJ2(4) #define GPIO_FLASH_EN S5PV210_GPJ1(2) #define GPIO_TOUCH_EN S5PV210_GPJ1(3) @@ -471,7 +470,7 @@ #define GPIO_DISPLAY_CS S5PV210_MP01(1) -#define GPIO_SUB_DISPLAY_CS S5PV210_MP01(2) +#define GPIO_WIMAX_CON0 S5PV210_MP01(2) #define GPIO_OLED_ID S5PV210_MP01(3) @@ -512,7 +511,7 @@ #define GPIO_DISPLAY_CLK S5PV210_MP04(1) -#define GPIO_MP042 S5PV210_MP04(2) +#define GPIO_WIMAX_IF_MODE0 S5PV210_MP04(2) #define GPIO_DISPLAY_SI S5PV210_MP04(3) @@ -522,7 +521,7 @@ #define GPIO_GPS_CLK_EN S5PV210_MP04(6) -#define GPIO_MHL_RST S5PV210_MP04(7) +#define GPIO_WIMAX_CON1 S5PV210_MP04(7) #define FUEL_SCL_18V S5PV210_MP05(0) #define FUEL_SDA_18V S5PV210_MP05(1) @@ -531,14 +530,16 @@ #define GPIO_AP_SDA_18V S5PV210_MP05(3) -#define GPIO_MP054 S5PV210_MP05(4) +#define GPIO_WIMAX_IF_MODE1 S5PV210_MP05(4) #define GPIO_MLCD_RST S5PV210_MP05(5) -#define GPIO_MP056 S5PV210_MP05(6) +#define GPIO_WIMAX_CON2 S5PV210_MP05(6) #define GPIO_UART_SEL S5PV210_MP05(7) +#define GPOI_WIMAX_WAKEUP S5PV210_MP06(5) + #define AP_I2C_SDA S5PV210_MP05(3) #define AP_I2C_SCL S5PV210_MP05(2) #define AP_I2C_SDA_28V S5PV210_GPJ3(6) diff --git a/arch/arm/mach-s5pv210/mach-herring.c b/arch/arm/mach-s5pv210/mach-herring.c index 2595e91..460065d 100755..100644 --- a/arch/arm/mach-s5pv210/mach-herring.c +++ b/arch/arm/mach-s5pv210/mach-herring.c @@ -199,11 +199,31 @@ static void uart_switch_init(void) } s3c_gpio_setpull(GPIO_UART_SEL, S3C_GPIO_PULL_NONE); s3c_gpio_cfgpin(GPIO_UART_SEL, S3C_GPIO_OUTPUT); - gpio_direction_output(GPIO_UART_SEL, 1); + + if (is_cdma_wimax_dev()) + gpio_direction_output(GPIO_UART_SEL, 0); + else + gpio_direction_output(GPIO_UART_SEL, 1); gpio_export(GPIO_UART_SEL, 1); gpio_export_link(uartswitch_dev, "UART_SEL", GPIO_UART_SEL); + + if (is_cdma_wimax_dev()) { + ret = gpio_request(GPIO_UART_SEL1, "UART_SEL1"); + if (ret < 0) { + pr_err("Failed to request GPIO_UART_SEL1!\n"); + gpio_free(GPIO_UART_SEL); + return; + } + + s3c_gpio_cfgpin(GPIO_UART_SEL1, S3C_GPIO_OUTPUT); + s3c_gpio_setpull(GPIO_UART_SEL1, S3C_GPIO_PULL_NONE); + gpio_direction_output(GPIO_UART_SEL1, 0); + + gpio_export(GPIO_UART_SEL1, 1); + gpio_export_link(uartswitch_dev, "UART_SEL1", GPIO_UART_SEL1); + } } static void herring_switch_init(void) @@ -3522,9 +3542,9 @@ static struct gpio_init_data herring_init_gpios[] = { .drv = S3C_GPIO_DRVSTR_1X, }, { .num = S5PV210_GPJ2(1), - .cfg = S3C_GPIO_INPUT, + .cfg = S3C_GPIO_OUTPUT, .val = S3C_GPIO_SETPIN_NONE, - .pud = S3C_GPIO_PULL_DOWN, + .pud = S3C_GPIO_PULL_NONE, .drv = S3C_GPIO_DRVSTR_1X, }, { .num = S5PV210_GPJ2(2), @@ -3808,6 +3828,38 @@ void s3c_config_gpio_table(void) s3c_gpio_set_drvstrength(gpio, herring_init_gpios[i].drv); } } + + if (is_cdma_wimax_dev()) { + gpio = S5PV210_GPC1(1); + s3c_gpio_cfgpin(gpio, S3C_GPIO_OUTPUT); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); + gpio_set_value(gpio, S3C_GPIO_SETPIN_ONE); + s3c_gpio_set_drvstrength(gpio, S3C_GPIO_DRVSTR_4X); + + gpio = S5PV210_GPC1(3); + s3c_gpio_cfgpin(gpio, S3C_GPIO_INPUT); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); + gpio_set_value(gpio, S3C_GPIO_SETPIN_NONE); + s3c_gpio_set_drvstrength(gpio, S3C_GPIO_DRVSTR_4X); + + gpio = S5PV210_GPC1(4); + s3c_gpio_cfgpin(gpio, S3C_GPIO_INPUT); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); + gpio_set_value(gpio, S3C_GPIO_SETPIN_NONE); + s3c_gpio_set_drvstrength(gpio, S3C_GPIO_DRVSTR_4X); + + gpio = S5PV210_MP05(2); + s3c_gpio_cfgpin(gpio, S3C_GPIO_INPUT); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); + gpio_set_value(gpio, S3C_GPIO_SETPIN_NONE); + s3c_gpio_set_drvstrength(gpio, S3C_GPIO_DRVSTR_4X); + + gpio = S5PV210_MP05(3); + s3c_gpio_cfgpin(gpio, S3C_GPIO_INPUT); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); + gpio_set_value(gpio, S3C_GPIO_SETPIN_NONE); + s3c_gpio_set_drvstrength(gpio, S3C_GPIO_DRVSTR_4X); + } } #define S5PV210_PS_HOLD_CONTROL_REG (S3C_VA_SYS+0xE81C) @@ -4083,6 +4135,26 @@ static unsigned int herring_sleep_gpio_table[][3] = { /* Memory part ending and off part ending */ }; +static unsigned int herring_cdma_wimax_sleep_gpio_table[][3] = { + { S5PV210_GPC1(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, + { S5PV210_GPC1(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, + { S5PV210_GPD0(3), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, + { S5PV210_GPG0(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, + { S5PV210_GPG2(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, + { S5PV210_GPG2(1), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, + { S5PV210_GPG2(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, + { S5PV210_GPG2(3), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, + { S5PV210_GPG2(4), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, + { S5PV210_GPG2(5), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, + { S5PV210_GPG2(6), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, + { S5PV210_GPJ3(6), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, + { S5PV210_GPJ3(7), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, + { S5PV210_MP04(0), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, + { S5PV210_MP04(7), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, + { S5PV210_MP05(4), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, + { S5PV210_MP05(6), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, +}; + void s3c_config_sleep_gpio_table(int array_size, unsigned int (*gpio_table)[3]) { u32 i, gpio; @@ -4100,6 +4172,11 @@ void s3c_config_sleep_gpio(void) s3c_gpio_cfgpin(S5PV210_GPH0(1), S3C_GPIO_INPUT); s3c_gpio_setpull(S5PV210_GPH0(1), S3C_GPIO_PULL_NONE); + if (is_cdma_wimax_dev()) { + s3c_gpio_cfgpin(S5PV210_GPH0(1), S3C_GPIO_INPUT); + s3c_gpio_setpull(S5PV210_GPH0(1), S3C_GPIO_PULL_NONE); + } + s3c_gpio_cfgpin(S5PV210_GPH0(3), S3C_GPIO_OUTPUT); s3c_gpio_setpull(S5PV210_GPH0(3), S3C_GPIO_PULL_NONE); gpio_set_value(S5PV210_GPH0(3), 0); @@ -4551,12 +4628,23 @@ static void herring_init_gpio(void) s3c_config_gpio_table(); s3c_config_sleep_gpio_table(ARRAY_SIZE(herring_sleep_gpio_table), herring_sleep_gpio_table); + if (is_cdma_wimax_dev()) + s3c_config_sleep_gpio_table( + ARRAY_SIZE(herring_cdma_wimax_sleep_gpio_table), + herring_cdma_wimax_sleep_gpio_table); + } static void __init fsa9480_gpio_init(void) { - s3c_gpio_cfgpin(GPIO_USB_SEL, S3C_GPIO_OUTPUT); - s3c_gpio_setpull(GPIO_USB_SEL, S3C_GPIO_PULL_NONE); + if (is_cdma_wimax_dev()) { + s3c_gpio_cfgpin(GPIO_USB_HS_SEL, S3C_GPIO_OUTPUT); + gpio_set_value(GPIO_USB_HS_SEL, 1); + } else { + s3c_gpio_cfgpin(GPIO_USB_SEL, S3C_GPIO_OUTPUT); + s3c_gpio_setpull(GPIO_USB_SEL, S3C_GPIO_PULL_NONE); + } + s3c_gpio_cfgpin(GPIO_UART_SEL, S3C_GPIO_OUTPUT); s3c_gpio_setpull(GPIO_UART_SEL, S3C_GPIO_PULL_NONE); |