static void __init origen_bt_setup(void) { gpio_request(EXYNOS4_GPA0(0), "GPIO BT_UART"); /* 4 UART Pins configuration */ s3c_gpio_cfgrange_nopull(EXYNOS4_GPA0(0), 4, S3C_GPIO_SFN(2)); /* Setup BT Reset, this gpio will be requesed by rfkill-gpio */ s3c_gpio_cfgpin(EXYNOS4_GPX2(2), S3C_GPIO_OUTPUT); s3c_gpio_setpull(EXYNOS4_GPX2(2), S3C_GPIO_PULL_NONE); }
void s3c_i2c2_cfg_gpio(struct platform_device *dev) { if (soc_is_exynos5250()) s3c_gpio_cfgall_range(EXYNOS5_GPA0(6), 2, S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP); else if (soc_is_exynos5260()) s3c_gpio_cfgall_range(EXYNOS5260_GPB4(4), 2, S3C_GPIO_SFN(2), S3C_GPIO_PULL_UP); else if (soc_is_exynos5410()) s3c_gpio_cfgall_range(EXYNOS5410_GPA0(6), 2, S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP); else if (soc_is_exynos5420()) s3c_gpio_cfgall_range(EXYNOS5420_GPA0(6), 2, S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP); else if (soc_is_exynos3250()) s3c_gpio_cfgall_range(EXYNOS3_GPA0(6), 2, S3C_GPIO_SFN(3), S3C_GPIO_PULL_NONE); else /* EXYNOS4210, EXYNOS4212, and EXYNOS4412 */ s3c_gpio_cfgall_range(EXYNOS4_GPA0(6), 2, S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP); }
void bt_uart_rts_ctrl(int flag) { if (!gpio_get_value(GPIO_BT_EN)) return; if (flag) { /* BT RTS Set to HIGH */ s3c_gpio_cfgpin(EXYNOS4_GPA0(3), S3C_GPIO_OUTPUT); s3c_gpio_setpull(EXYNOS4_GPA0(3), S3C_GPIO_PULL_NONE); gpio_set_value(EXYNOS4_GPA0(3), 1); s3c_gpio_slp_cfgpin(EXYNOS4_GPA0(3), S3C_GPIO_SLP_OUT0); s3c_gpio_slp_setpull_updown(EXYNOS4_GPA0(3), S3C_GPIO_PULL_NONE); } else { /* BT RTS Set to LOW */ s3c_gpio_cfgpin(EXYNOS4_GPA0(3), S3C_GPIO_OUTPUT); gpio_set_value(EXYNOS4_GPA0(3), 0); s3c_gpio_cfgpin(EXYNOS4_GPA0(3), S3C_GPIO_SFN(2)); s3c_gpio_setpull(EXYNOS4_GPA0(3), S3C_GPIO_PULL_NONE); } }
S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, {EXYNOS4_GPY6(3), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, {EXYNOS4_GPY6(4), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, {EXYNOS4_GPY6(5), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, {EXYNOS4_GPY6(6), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, {EXYNOS4_GPY6(7), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, }; /* this table only for GC1 board */ static unsigned int u1_sleep_gpio_table[][3] = { {EXYNOS4_GPA0(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA0(1), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA0(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ {EXYNOS4_GPA0(3), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ {EXYNOS4_GPA0(4), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA0(5), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA0(6), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA0(7), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA1(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA1(1), S3C_GPIO_SLP_OUT0, S3C_GPIO_PULL_NONE}, {EXYNOS4_GPA1(2), S3C_GPIO_SLP_OUT0, S3C_GPIO_PULL_NONE}, {EXYNOS4_GPA1(3), S3C_GPIO_SLP_OUT0, S3C_GPIO_PULL_NONE}, {EXYNOS4_GPA1(4), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */ {EXYNOS4_GPA1(5), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* NC */
struct hci_dev *hdev; struct wake_lock host_wake_lock; struct wake_lock bt_wake_lock; char wake_lock_name[100]; } bt_lpm; #ifdef BT_UART_CFG int bt_is_running; EXPORT_SYMBOL(bt_is_running); extern int s3c_gpio_slp_cfgpin(unsigned int pin, unsigned int config); extern int s3c_gpio_slp_setpull_updown(unsigned int pin, unsigned int config); static unsigned int bt_uart_on_table[][4] = { {EXYNOS4_GPA0(0), 2, 2, S3C_GPIO_PULL_NONE}, {EXYNOS4_GPA0(1), 2, 2, S3C_GPIO_PULL_NONE}, {EXYNOS4_GPA0(2), 2, 2, S3C_GPIO_PULL_NONE}, {EXYNOS4_GPA0(3), 2, 2, S3C_GPIO_PULL_NONE}, }; void bt_config_gpio_table(int array_size, unsigned int (*gpio_table)[4]) { u32 i, gpio; for (i = 0; i < array_size; i++) { gpio = gpio_table[i][0]; s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(gpio_table[i][1])); s3c_gpio_setpull(gpio, gpio_table[i][3]); if (gpio_table[i][2] != 2) gpio_set_value(gpio, gpio_table[i][2]);
#include <plat/gpio-cfg.h> #include <plat/regs-serial.h> #include <mach/gpio.h> #include "u1.h" struct gpio_init_data { uint num; uint cfg; uint val; uint pud; uint drv; }; static struct gpio_init_data u1_init_gpios[] = { #if defined(CONFIG_MACH_U1_KOR_LGT) {EXYNOS4_GPA0(4), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, /* NC */ {EXYNOS4_GPA0(5), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, /* NC */ {EXYNOS4_GPC0(7), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, /* NC */ #endif #if defined(CONFIG_TDMB) || defined(CONFIG_TDMB_MODULE) {EXYNOS4_GPB(4), S3C_GPIO_OUTPUT, S3C_GPIO_SETPIN_ZERO, S3C_GPIO_PULL_NONE, S5P_GPIO_DRVSTR_LV1}, /* TDMB_INT */ {EXYNOS4_GPB(5), S3C_GPIO_OUTPUT, S3C_GPIO_SETPIN_ZERO, S3C_GPIO_PULL_NONE, S5P_GPIO_DRVSTR_LV1}, /* TDMB_RST_N */ {EXYNOS4_GPC0(1), S3C_GPIO_OUTPUT, S3C_GPIO_SETPIN_ZERO, S3C_GPIO_PULL_NONE, S5P_GPIO_DRVSTR_LV1}, /* TDMB_EN */ #endif #if defined(CONFIG_LEDS_GPIO)
{ EXYNOS4212_GPJ0(7), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_UP, S5P_GPIO_DRVSTR_LV3 }, /* GPIO_MSENSOR_INT */ { EXYNOS4212_GPJ1(3), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV3 }, /* CAM_MCLK */ { EXYNOS4212_GPM2(2), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV3 }, /* VTCAM_MCLK */ }; /* * GRANDE GPIO Sleep Table */ static unsigned int grande_sleep_gpio_table[][3] = { {EXYNOS4_GPA0(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, {EXYNOS4_GPA0(1), S3C_GPIO_SLP_OUT0, S3C_GPIO_PULL_NONE}, {EXYNOS4_GPA0(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, {EXYNOS4_GPA0(3), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_UP}, {EXYNOS4_GPA0(4), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA0(5), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA0(6), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA0(7), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA1(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA1(1), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA1(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA1(3), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA1(4), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, {EXYNOS4_GPA1(5), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN},
void s3c_i2c2_cfg_gpio(struct platform_device *dev) { s3c_gpio_cfgall_range(EXYNOS4_GPA0(6), 2, S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP); }
* The 'config' member when left to NULL, is initialized to the default * structure gpio_cfg in the init function below. * * The 'base' member is also initialized in the init function below. * Note: The initialization of 'base' member of s3c_gpio_chip structure * uses the above macro and depends on the banks being listed in order here. */ static struct s3c_gpio_pm s3c_gpio_pm_nop = { NULL, NULL }; static struct s3c_gpio_chip exynos4_gpio_common_4bit[] = { { .base = S5P_VA_GPIO1, .eint_offset = 0x0, .group = 0, .chip = { .base = EXYNOS4_GPA0(0), .ngpio = EXYNOS4_GPIO_A0_NR, .label = "GPA0", }, }, { .base = (S5P_VA_GPIO1 + 0x20), .eint_offset = 0x4, .group = 1, .chip = { .base = EXYNOS4_GPA1(0), .ngpio = EXYNOS4_GPIO_A1_NR, .label = "GPA1", }, }, { .base = (S5P_VA_GPIO1 + 0x40), .eint_offset = 0x8,
uint num; uint cfg; uint val; uint pud; uint drv; }; extern int s3c_gpio_slp_cfgpin(unsigned int pin, unsigned int config); extern int s3c_gpio_slp_setpull_updown(unsigned int pin, unsigned int config); /* * GT3 GPIO Init Table */ static struct gpio_init_data gt3_init_gpios[] = { #if defined(CONFIG_QC_MODEM) {EXYNOS4_GPA0(4), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, /* NC */ {EXYNOS4_GPA0(5), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, /* NC */ {EXYNOS4_GPA0(6), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, /* NC */ {EXYNOS4_GPA0(7), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, /* NC */ #endif #if defined(CONFIG_TARGET_TAB3_WIFI8) || defined(CONFIG_TARGET_TAB3_3G8) || \ defined(CONFIG_TARGET_TAB3_LTE8) {EXYNOS4_GPA1(4), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, /* NC */ {EXYNOS4_GPA1(5), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, /* NC */
for (i = 0; i < ARRAY_SIZE(p10_init_gpios); i++) { gpio = p10_init_gpios[i].num; s3c_gpio_cfgpin(gpio, p10_init_gpios[i].cfg); s3c_gpio_setpull(gpio, p10_init_gpios[i].pud); if (p10_init_gpios[i].val != S3C_GPIO_SETPIN_NONE) gpio_set_value(gpio, p10_init_gpios[i].val); s5p_gpio_set_drvstr(gpio, p10_init_gpios[i].drv); } } /* this table only for p10 board */ static unsigned int exynos5_sleep_gpio_table[][3] = { {EXYNOS4_GPA0(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_UP}, /* BT_UART_RXD */ {EXYNOS4_GPA0(1), S3C_GPIO_SLP_OUT1, S3C_GPIO_PULL_NONE}, /* BT_UART_TXD */ {EXYNOS4_GPA0(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* BT_UART_CTS */ {EXYNOS4_GPA0(3), S3C_GPIO_SLP_OUT1, S3C_GPIO_PULL_NONE}, /* BT_UART_RTS */ {EXYNOS4_GPA0(4), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_UP}, /* GPS_UART_RXD */ {EXYNOS4_GPA0(5), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_UP}, /* GPS_UART_TXD */ {EXYNOS4_GPA0(6), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* GPS_UART_CTS */ {EXYNOS4_GPA0(7), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* GPS_UART_RTS */
#if defined(CONFIG_MACH_SUPERIOR_KOR_SKT) {EXYNOS4_GPY2(2), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_ZERO, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, /* NC */ #else {EXYNOS4_GPY2(2), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_ZERO, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, /* VIB_ON */ #endif {EXYNOS4_GPY2(3), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_ZERO, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, /* NC */ }; /* * BAFFIN GPIO Sleep Table */ static unsigned int baffin_sleep_gpio_table[][3] = { {EXYNOS4_GPA0(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, /* BT_UART_RXD */ {EXYNOS4_GPA0(1), S3C_GPIO_SLP_OUT0, S3C_GPIO_PULL_NONE}, /* BT_UART_TXD */ {EXYNOS4_GPA0(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, /* BT_UART_CTS */ {EXYNOS4_GPA0(3), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_UP}, /* BT_UART_RTS */ {EXYNOS4_GPA0(4), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_NONE}, /* GPS_UART_RXD */ {EXYNOS4_GPA0(5), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* GPS_UART_TXD */ {EXYNOS4_GPA0(6), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* GPS_UART_CTS */ {EXYNOS4_GPA0(7), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_UP}, /* GPS_UART_RTS */ {EXYNOS4_GPA1(0), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* AP_RXD */ {EXYNOS4_GPA1(1), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* AP_TXD */ {EXYNOS4_GPA1(2), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* TSP_SDA_1.8V */ {EXYNOS4_GPA1(3), S3C_GPIO_SLP_INPUT, S3C_GPIO_PULL_DOWN}, /* TSP_SCL_1.8V */ #if defined(CONFIG_MACH_BAFFIN_KOR_LGT) {EXYNOS4_GPA1(4), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* AP_VIA_TXD_1.8V */ {EXYNOS4_GPA1(5), S3C_GPIO_SLP_PREV, S3C_GPIO_PULL_NONE}, /* AP_VIA_RXD_1.8V */
#include <mach/pmu.h> struct gpio_init_data { uint num; uint cfg; uint val; uint pud; uint drv; }; /* * GC2PD GPIO Init Table */ static struct gpio_init_data m0_init_gpios[] = { #if defined(CONFIG_GC2PD_LTE_EUR_OPEN) {EXYNOS4_GPA0(4), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, /* NC */ S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, {EXYNOS4_GPA0(5), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, /* NC */ S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, {EXYNOS4_GPA0(6), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, /* NC */ S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, {EXYNOS4_GPA0(7), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, /* NC */ S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, #endif {EXYNOS4_GPA1(4), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, {EXYNOS4_GPA1(5), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_NONE, S3C_GPIO_PULL_DOWN, S5P_GPIO_DRVSTR_LV1}, {EXYNOS4_GPB(0), S3C_GPIO_INPUT, S3C_GPIO_SETPIN_ONE, S3C_GPIO_PULL_NONE, S5P_GPIO_DRVSTR_LV1},