static void exynos_dwmci_cfg_gpio(int width) { unsigned int gpio; for (gpio = EXYNOS5_GPC0(0); gpio < EXYNOS5_GPC0(2); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV2); } switch (width) { case 8: for (gpio = EXYNOS5_GPC1(3); gpio <= EXYNOS5_GPC1(6); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(4)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV2); } case 4: for (gpio = EXYNOS5_GPC0(3); gpio <= EXYNOS5_GPC0(6); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV2); } break; case 1: gpio = EXYNOS5_GPC0(3); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV2); default: break; } }
void exynos4_setup_sdhci1_cfg_gpio(struct platform_device *dev, int width) { struct s3c_sdhci_platdata *pdata = dev->dev.platform_data; unsigned int gpio; /* Set all the necessary GPK1[0:1] pins to special-function 2 */ for (gpio = EXYNOS4_GPK1(0); gpio < EXYNOS4_GPK1(2); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } for (gpio = EXYNOS4_GPK1(3); gpio <= EXYNOS4_GPK1(6); gpio++) { /* Data pin GPK1[3:6] to special-function 2 */ s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) { s3c_gpio_cfgpin(EXYNOS4_GPK1(2), S3C_GPIO_SFN(2)); s3c_gpio_setpull(EXYNOS4_GPK1(2), S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } }
static void sii8240_cfg_gpio(void) { pr_info("%s()\n", __func__); #ifdef USE_GPIO_I2C_MHL /* AP_MHL_SDA */ s3c_gpio_cfgpin(GPIO_MHL_SDA_18V, S3C_GPIO_SFN(0x0)); s3c_gpio_setpull(GPIO_MHL_SDA_18V, S3C_GPIO_PULL_NONE); /* AP_MHL_SCL */ s3c_gpio_cfgpin(GPIO_MHL_SCL_18V, S3C_GPIO_SFN(0x0)); s3c_gpio_setpull(GPIO_MHL_SCL_18V, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(GPIO_MHL_SCL_18V, S5P_GPIO_DRVSTR_LV4); s5p_gpio_set_drvstr(GPIO_MHL_SDA_18V, S5P_GPIO_DRVSTR_LV4); #endif gpio_request(GPIO_MHL_INT, "MHL_INT"); s5p_register_gpio_interrupt(GPIO_MHL_INT); s3c_gpio_setpull(GPIO_MHL_INT, S3C_GPIO_PULL_DOWN); irq_set_irq_type(gpio_to_irq(GPIO_MHL_INT), IRQ_TYPE_EDGE_RISING); s3c_gpio_cfgpin(GPIO_MHL_INT, S3C_GPIO_SFN(0xF)); s3c_gpio_cfgpin(GPIO_MHL_RST, S3C_GPIO_OUTPUT); s3c_gpio_setpull(GPIO_MHL_RST, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_MHL_RST, 0); }
void exynos4_fimd0_gpio_setup_24bpp(void) { unsigned int reg; exynos4_fimd0_cfg_gpios(EXYNOS4_GPF0(0), 8, S3C_GPIO_SFN(2), S5P_GPIO_DRVSTR_LV3); exynos4_fimd0_cfg_gpios(EXYNOS4_GPF1(0), 8, S3C_GPIO_SFN(2), S5P_GPIO_DRVSTR_LV3); exynos4_fimd0_cfg_gpios(EXYNOS4_GPF2(0), 8, S3C_GPIO_SFN(2), S5P_GPIO_DRVSTR_LV3); exynos4_fimd0_cfg_gpios(EXYNOS4_GPF3(0), 4, S3C_GPIO_SFN(2), S5P_GPIO_DRVSTR_LV3); s5p_gpio_set_drvstr(EXYNOS4_GPF0(0), S5P_GPIO_DRVSTR_LV2); s5p_gpio_set_drvstr(EXYNOS4_GPF0(1), S5P_GPIO_DRVSTR_LV2); s5p_gpio_set_drvstr(EXYNOS4_GPF0(2), S5P_GPIO_DRVSTR_LV2); s5p_gpio_set_drvstr(EXYNOS4_GPF0(3), S5P_GPIO_DRVSTR_LV2); /* * Set DISPLAY_CONTROL register for Display path selection. * * DISPLAY_CONTROL[1:0] * --------------------- * 00 | MIE * 01 | MDINE * 10 | FIMD : selected * 11 | FIMD */ reg = __raw_readl(S3C_VA_SYS + 0x0210); reg |= (1 << 1); __raw_writel(reg, S3C_VA_SYS + 0x0210); }
static int ak8963c_gpio_init(void) { int ret; pr_info("%s\n", __func__); ret = gpio_request(GPIO_MSENSOR_INT, "gpio_akm_int"); if (ret) { pr_err("%s, Failed to request gpio akm_int.(%d)\n", __func__, ret); return ret; } s3c_gpio_cfgpin(GPIO_MSENSOR_INT, S3C_GPIO_INPUT); s3c_gpio_setpull(GPIO_MSENSOR_INT, S3C_GPIO_PULL_DOWN); s5p_gpio_set_drvstr(GPIO_MSENSOR_INT, S5P_GPIO_DRVSTR_LV1); ret = gpio_request(GPIO_MSENSE_RST_N, "gpio_akm_rst"); if (ret) { pr_err("%s, Failed to request gpio akm_rst.(%d)\n", __func__, ret); return ret; } s3c_gpio_cfgpin(GPIO_MSENSE_RST_N, S3C_GPIO_OUTPUT); s3c_gpio_setpull(GPIO_MSENSE_RST_N, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(GPIO_MSENSE_RST_N, S5P_GPIO_DRVSTR_LV1); gpio_direction_output(GPIO_MSENSE_RST_N, 1); return ret; }
static int gyro_gpio_init(void) { int ret = gpio_request(GPIO_GYRO_INT, "stm_gyro_irq"); pr_info("%s\n", __func__); if (ret) { pr_err("%s, Failed to request gpio stm_gyro_irq(%d)\n", __func__, ret); return ret; } ret = gpio_request(GPIO_GYRO_DE, "stm_gyro_data_enable"); if (ret) { pr_err("%s, Failed to request gpio stm_gyro_data_enable(%d)\n", __func__, ret); return ret; } /* Gyro sensor interrupt pin initialization */ s3c_gpio_cfgpin(GPIO_GYRO_INT, S3C_GPIO_INPUT); gpio_set_value(GPIO_GYRO_INT, 2); s3c_gpio_setpull(GPIO_GYRO_INT, S3C_GPIO_PULL_DOWN); s5p_gpio_set_drvstr(GPIO_GYRO_INT, S5P_GPIO_DRVSTR_LV1); /* Gyro sensor data enable pin initialization */ s3c_gpio_cfgpin(GPIO_GYRO_DE, S3C_GPIO_OUTPUT); gpio_set_value(GPIO_GYRO_DE, 0); s3c_gpio_setpull(GPIO_GYRO_DE, S3C_GPIO_PULL_DOWN); s5p_gpio_set_drvstr(GPIO_GYRO_DE, S5P_GPIO_DRVSTR_LV1); return ret; }
void s3cfb_cfg_gpio(struct platform_device *pdev) { int i; for (i = 0; i < 8; i++) { s3c_gpio_cfgpin(S5PV210_GPF0(i), S3C_GPIO_SFN(2)); s3c_gpio_setpull(S5PV210_GPF0(i), S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(S5PV210_GPF0(i), S5P_GPIO_DRVSTR_LV4); } for (i = 0; i < 8; i++) { s3c_gpio_cfgpin(S5PV210_GPF1(i), S3C_GPIO_SFN(2)); s3c_gpio_setpull(S5PV210_GPF1(i), S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(S5PV210_GPF1(i), S5P_GPIO_DRVSTR_LV4); } for (i = 0; i < 8; i++) { s3c_gpio_cfgpin(S5PV210_GPF2(i), S3C_GPIO_SFN(2)); s3c_gpio_setpull(S5PV210_GPF2(i), S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(S5PV210_GPF2(i), S5P_GPIO_DRVSTR_LV4); } for (i = 0; i < 4; i++) { s3c_gpio_cfgpin(S5PV210_GPF3(i), S3C_GPIO_SFN(2)); s3c_gpio_setpull(S5PV210_GPF3(i), S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(S5PV210_GPF3(i), S5P_GPIO_DRVSTR_LV4); } /* mDNIe SEL: why we shall write 0x2 ? */ writel(0x2, S5P_MDNIE_SEL); }
void exynos4_setup_sdhci1_cfg_gpio(struct platform_device *dev, int width) { struct s3c_sdhci_platdata *pdata = dev->dev.platform_data; unsigned int gpio; for (gpio = EXYNOS4_GPK1(0); gpio < EXYNOS4_GPK1(2); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } for (gpio = EXYNOS4_GPK1(3); gpio <= EXYNOS4_GPK1(6); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) { s3c_gpio_cfgpin(EXYNOS4_GPK1(2), S3C_GPIO_SFN(2)); s3c_gpio_setpull(EXYNOS4_GPK1(2), S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } }
static inline void s5p_ehci_phy_init(int cmd, struct usb_hcd *hcd) { /* charge pump enable */ s3c_gpio_setpull(S5PV210_ETC2(6), S3C_GPIO_PULL_DOWN); s5p_gpio_set_drvstr(S5PV210_ETC2(6), S3C_GPIO_DRVSTR_2X); /* overcurrent flag */ s3c_gpio_setpull(S5PV210_ETC2(7), S3C_GPIO_PULL_DOWN); s5p_gpio_set_drvstr(S5PV210_ETC2(7), S3C_GPIO_DRVSTR_2X); /* FriendlyARM's version void __iomem *gpio_regs = (void __iomem *) 0xFE500000; u32 tmp; tmp = readl(gpio_regs + 0x648); tmp |= (1 << (6 * 2)) | (1 << (7 * 2)); writel(tmp, gpio_regs + 0x648); tmp = readl(gpio_regs + 0x64c); tmp |= (1 << (6 * 2)) | (1 << (7 * 2)); writel(tmp, gpio_regs + 0x64c); */ if (!hcd) return; if (!hcd->regs || ((unsigned int) hcd->regs == 0xFFFFFFBF)) return; /* set AHB burst mode (INSNREG00) */ if (cmd == PHY_CMD_EHCI) /* INCR4/8/16 burst mode */ writel(0xF0000, hcd->regs + 0x90); else /* INCR4/8 bust mode */ writel(0x70000, hcd->regs + 0x90); }
int s3c64xx_spi0_cfg_gpio(struct platform_device *dev) { int gpio; if (soc_is_exynos5410()) { s3c_gpio_cfgpin(EXYNOS5410_GPA2(0), S3C_GPIO_SFN(2)); s3c_gpio_setpull(EXYNOS5410_GPA2(0), S3C_GPIO_PULL_UP); s3c_gpio_cfgall_range(EXYNOS5410_GPA2(2), 2, S3C_GPIO_SFN(2), S3C_GPIO_PULL_UP); for (gpio = EXYNOS5410_GPA2(0); gpio < EXYNOS5410_GPA2(4); gpio++) s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); } else if (soc_is_exynos5250()) { s3c_gpio_cfgpin(EXYNOS5_GPA2(0), S3C_GPIO_SFN(2)); s3c_gpio_setpull(EXYNOS5_GPA2(0), S3C_GPIO_PULL_UP); s3c_gpio_cfgall_range(EXYNOS5_GPA2(2), 2, S3C_GPIO_SFN(2), S3C_GPIO_PULL_UP); for (gpio = EXYNOS5_GPA2(0); gpio < EXYNOS5_GPA2(4); gpio++) s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); } else { s3c_gpio_cfgpin(EXYNOS4_GPB(0), S3C_GPIO_SFN(2)); s3c_gpio_setpull(EXYNOS4_GPB(0), S3C_GPIO_PULL_UP); s3c_gpio_cfgall_range(EXYNOS4_GPB(2), 2, S3C_GPIO_SFN(2), S3C_GPIO_PULL_UP); for (gpio = EXYNOS4_GPB(0); gpio < EXYNOS4_GPB(4); gpio++) s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); } return 0; }
void s3c_i2c1_cfg_gpio(struct platform_device *dev) { s3c_gpio_cfgpin(S5PV310_GPD1(2), S3C_GPIO_SFN(2)); s3c_gpio_setpull(S5PV310_GPD1(2), S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(S5PV310_GPD1(2), S5P_GPIO_DRVSTR_LV2); s3c_gpio_cfgpin(S5PV310_GPD1(3), S3C_GPIO_SFN(2)); s3c_gpio_setpull(S5PV310_GPD1(3), S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(S5PV310_GPD1(3), S5P_GPIO_DRVSTR_LV2); }
static void exynos_dwmci1_cfg_gpio(int width) { unsigned int gpio; for (gpio = EXYNOS5420_GPC1(0); gpio < EXYNOS5420_GPC1(3); gpio++) { #if defined(CONFIG_V1A) || defined(CONFIG_V2A) || defined(CONFIG_CHAGALL) || defined(CONFIG_KLIMT) if (gpio == EXYNOS5420_GPC1(2)) { /* GPS_EN */ continue; } #endif s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); if (gpio == EXYNOS5420_GPC1(0)) s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); else s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); } #if !defined(CONFIG_N1A) && !defined(CONFIG_N2A) gpio = EXYNOS5420_GPD1(1); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); #endif switch (width) { case 8: case 4: for (gpio = EXYNOS5420_GPC1(3); gpio <= EXYNOS5420_GPC1(6); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); } #if !(defined(CONFIG_CHAGALL) || defined(CONFIG_KLIMT)) for (gpio = EXYNOS5420_GPD1(4); gpio <= EXYNOS5420_GPD1(7); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); } #endif break; case 1: gpio = EXYNOS5420_GPC1(3); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); default: break; } }
void s3c_i2c0_cfg_gpio(struct platform_device *dev) { if (soc_is_exynos5210() || soc_is_exynos5250()) s3c_gpio_cfgall_range(EXYNOS5_GPB3(0), 2, S3C_GPIO_SFN(2), S3C_GPIO_PULL_UP); else { s3c_gpio_cfgall_range(EXYNOS4_GPD1(0), 2, S3C_GPIO_SFN(2), S3C_GPIO_PULL_UP); #if defined(CONFIG_TARGET_TAB3_3G8) || defined(CONFIG_TARGET_TAB3_LTE8) s5p_gpio_set_drvstr(EXYNOS4_GPD1(0), S5P_GPIO_DRVSTR_LV3); s5p_gpio_set_drvstr(EXYNOS4_GPD1(1), S5P_GPIO_DRVSTR_LV3); #endif } }
static void lsm331dlc_gpio_init(void) { int ret = gpio_request(GPIO_GYRO_INT, "lsm330dlc_gyro_irq"); printk(KERN_INFO "%s\n", __func__); if (ret) printk(KERN_ERR "Failed to request gpio lsm330dlc_gyro_irq\n"); ret = gpio_request(GPIO_GYRO_DE, "lsm330dlc_gyro_data_enable"); if (ret) printk(KERN_ERR "Failed to request gpio lsm330dlc_gyro_data_enable\n"); ret = gpio_request(GPIO_ACC_INT, "lsm330dlc_accel_irq"); if (ret) printk(KERN_ERR "Failed to request gpio lsm330dlc_accel_irq\n"); /* Accelerometer sensor interrupt pin initialization */ s3c_gpio_cfgpin(GPIO_ACC_INT, S3C_GPIO_INPUT); gpio_set_value(GPIO_ACC_INT, 2); s3c_gpio_setpull(GPIO_ACC_INT, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(GPIO_ACC_INT, S5P_GPIO_DRVSTR_LV1); i2c_devs1[0].irq = gpio_to_irq(GPIO_ACC_INT); /* Gyro sensor interrupt pin initialization */ #if defined(CONFIG_MACH_C1) || defined(CONFIG_MACH_C1VZW) ||\ defined(CONFIG_MACH_JENGA) || defined(CONFIG_MACH_S2PLUS) || \ defined(CONFIG_MACH_M0) || defined(CONFIG_MACH_M3) || \ defined(CONFIG_MACH_C1CTC) s5p_register_gpio_interrupt(GPIO_GYRO_INT); s3c_gpio_cfgpin(GPIO_GYRO_INT, S3C_GPIO_SFN(0xF)); #else /* For Midas */ s3c_gpio_cfgpin(GPIO_GYRO_INT, S3C_GPIO_INPUT); #endif gpio_set_value(GPIO_GYRO_INT, 2); s3c_gpio_setpull(GPIO_GYRO_INT, S3C_GPIO_PULL_DOWN); s5p_gpio_set_drvstr(GPIO_GYRO_INT, S5P_GPIO_DRVSTR_LV1); i2c_devs1[1].irq = -1;/*gpio_to_irq(GPIO_GYRO_INT);*/ /* Gyro sensor data enable pin initialization */ s3c_gpio_cfgpin(GPIO_GYRO_DE, S3C_GPIO_OUTPUT); gpio_set_value(GPIO_GYRO_DE, 0); s3c_gpio_setpull(GPIO_GYRO_DE, S3C_GPIO_PULL_DOWN); s5p_gpio_set_drvstr(GPIO_GYRO_DE, S5P_GPIO_DRVSTR_LV1); }
static void s5pv210_fb_cfg_gpios(unsigned int base, unsigned int nr) { s3c_gpio_cfgrange_nopull(base, nr, S3C_GPIO_SFN(2)); for (; nr > 0; nr--, base++) s5p_gpio_set_drvstr(base, S5P_GPIO_DRVSTR_LV4); }
int mx_config_gpio_table(const struct gpio_info_table *gpio_table, int array_size) { struct gpio_info_table gpio; unsigned int i; for (i = 0; i < array_size; i++) { gpio = gpio_table[i]; /* Off part */ if(gpio.pin <= EXYNOS4_GPIO_END) { if(gpio.type == S3C_GPIO_RESERVED) { s3c_gpio_setpull(gpio.pin, gpio.pull); } else if (gpio.type == S3C_GPIO_INPUT) { s3c_gpio_setpull(gpio.pin, gpio.pull); s3c_gpio_cfgpin(gpio.pin, gpio.type); } else if (gpio.type == S3C_GPIO_OUTPUT) { s3c_gpio_setpull(gpio.pin, gpio.pull); gpio_set_value(gpio.pin, !!gpio.data); s3c_gpio_cfgpin(gpio.pin, S3C_GPIO_OUTPUT); s5p_gpio_set_drvstr(gpio.pin, gpio.drv); } } } return 0; }
static int usb3503_hw_config(void) { int err; err = gpio_request(GPIO_USB_HUB_RST, "HUB_RST"); if (err) { mif_err("ERR: fail to request gpio %s\n", "HUB_RST"); } else { gpio_direction_output(GPIO_USB_HUB_RST, 0); s3c_gpio_setpull(GPIO_USB_HUB_RST, S3C_GPIO_PULL_NONE); } s5p_gpio_set_drvstr(GPIO_USB_HUB_RST, S5P_GPIO_DRVSTR_LV1); /* need to check drvstr 1 or 2 */ /* for USB3503 26Mhz Reference clock setting */ err = gpio_request(GPIO_USB_HUB_INT, "HUB_INT"); if (err) { mif_err("ERR: fail to request gpio %s\n", "HUB_INT"); } else { gpio_direction_output(GPIO_USB_HUB_INT, 1); s3c_gpio_setpull(GPIO_USB_HUB_INT, S3C_GPIO_PULL_NONE); } return 0; }
static void goni_camera_init(void) { s5pv210_fimc_setup_gpio(S5P_CAMPORT_A); /* Set max driver strength on CAM_A_CLKOUT pin. */ s5p_gpio_set_drvstr(S5PV210_GPE1(3), S5P_GPIO_DRVSTR_LV4); }
static void exynos_dwmci_restore_drv_st_with_compensation (void *data, u32 slot_id, int *compensation) { struct dw_mci *host = (struct dw_mci *)data; struct drv_strength * drv_st = &host->pdata->__drv_st; s5p_gpio_drvstr_t cur, org; /* LV1 LV3 LV2 LV4 (org) LV1 0 -1 0 -1 LV3 1 0 1 0 LV2 0 -1 0 -1 LV4 1 0 1 0 (cur) */ int compensation_tbl[4][4] = { {0, -1, 0, -1}, {1, 0, 1, 0}, {0, -1, 0, -1}, {1, 0, 1, 0} }; cur = s5p_gpio_get_drvstr(drv_st->pin); org = drv_st->val; s5p_gpio_set_drvstr(drv_st->pin, drv_st->val); *compensation = compensation_tbl[cur][org]; }
/* Intialize gpio set in midas board */ void midas_config_gpio_table(void) { u32 i, gpio; printk(KERN_DEBUG "%s\n", __func__); for (i = 0; i < ARRAY_SIZE(gt3_init_gpios); i++) { gpio = gt3_init_gpios[i].num; if (gpio <= EXYNOS4212_GPV4(1)) { s3c_gpio_cfgpin(gpio, gt3_init_gpios[i].cfg); s3c_gpio_setpull(gpio, gt3_init_gpios[i].pud); if (gt3_init_gpios[i].val != S3C_GPIO_SETPIN_NONE) gpio_set_value(gpio, gt3_init_gpios[i].val); s5p_gpio_set_drvstr(gpio, gt3_init_gpios[i].drv); } } #if defined(CONFIG_TARGET_TAB3_WIFI8) || defined(CONFIG_TARGET_TAB3_3G8) || \ defined(CONFIG_TARGET_TAB3_LTE8) if (system_rev > 1) { s3c_gpio_cfgpin(EXYNOS4_GPX3(0), S3C_GPIO_INPUT); s3c_gpio_setpull(EXYNOS4_GPX3(0), S3C_GPIO_PULL_DOWN); } #endif #if defined(CONFIG_TARGET_TAB3_WIFI8) || defined(CONFIG_TARGET_TAB3_3G8) || \ defined(CONFIG_TARGET_TAB3_LTE8) if (system_rev > 5) { s3c_gpio_cfgpin(EXYNOS4_GPX1(4), S3C_GPIO_INPUT); s3c_gpio_setpull(EXYNOS4_GPX1(4), S3C_GPIO_PULL_DOWN); } #endif }
static void exynos_dwmci_restore_drv_st(void *data, u32 slot_id) { struct dw_mci *host = (struct dw_mci *)data; struct drv_strength * drv_st = &host->pdata->__drv_st; s5p_gpio_set_drvstr(drv_st->pin, drv_st->val); }
static void __init nuri_camera_init(void) { s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata), &s5p_device_mipi_csis0); s3c_set_platdata(&fimc_md_platdata, sizeof(fimc_md_platdata), &s5p_device_fimc_md); if (gpio_request_array(nuri_camera_gpios, ARRAY_SIZE(nuri_camera_gpios))) { pr_err("%s: GPIO request failed\n", __func__); return; } m5mols_board_info.irq = s5p_register_gpio_interrupt(GPIO_CAM_8M_ISP_INT); if (!IS_ERR_VALUE(m5mols_board_info.irq)) s3c_gpio_cfgpin(GPIO_CAM_8M_ISP_INT, S3C_GPIO_SFN(0xF)); else pr_err("%s: Failed to configure 8M_ISP_INT GPIO\n", __func__); /* Free GPIOs controlled directly by the sensor drivers. */ gpio_free(GPIO_CAM_VT_NRST); gpio_free(GPIO_CAM_VT_NSTBY); gpio_free(GPIO_CAM_MEGA_RST); if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A)) { pr_err("%s: Camera port A setup failed\n", __func__); return; } /* Increase drive strength of the sensor clock output */ s5p_gpio_set_drvstr(EXYNOS4_GPJ1(3), S5P_GPIO_DRVSTR_LV4); }
static int exynos_pcm_cfg_gpio(struct platform_device *pdev) { /* configure GPIO for pcm port */ struct exynos_gpio_cfg exynos4_cfg[3] = { { EXYNOS4_GPZ(0), 5, S3C_GPIO_SFN(3) }, { EXYNOS4_GPC0(0), 5, S3C_GPIO_SFN(3) }, { EXYNOS4_GPC1(0), 5, S3C_GPIO_SFN(3) } }; struct exynos_gpio_cfg exynos5_cfg[3] = { { EXYNOS5_GPZ(0), 5, S3C_GPIO_SFN(3) }, { EXYNOS5_GPB0(0), 5, S3C_GPIO_SFN(3) }, { EXYNOS5_GPB1(0), 5, S3C_GPIO_SFN(3) } }; if (pdev->id < 0 || pdev->id > 2) { printk(KERN_ERR "Invalid Device %d\n", pdev->id); return -EINVAL; } if (soc_is_exynos4210() || soc_is_exynos4212() || soc_is_exynos4412()) s3c_gpio_cfgpin_range(exynos4_cfg[pdev->id].addr, exynos4_cfg[pdev->id].num, exynos4_cfg[pdev->id].bit); else if (soc_is_exynos5250()) s3c_gpio_cfgpin_range(exynos5_cfg[pdev->id].addr, exynos5_cfg[pdev->id].num, exynos5_cfg[pdev->id].bit); #ifdef CONFIG_SND_SOC_BCM4334 /* these are temporary settings, electrical characterics of pcm port should be checked. */ if (soc_is_exynos4412() && pdev->id == 1) { s3c_gpio_setpull(EXYNOS4_GPC0(0), S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(EXYNOS4_GPC0(0), S5P_GPIO_DRVSTR_LV1); s3c_gpio_cfgpin(EXYNOS4_GPC0(1), 0); s3c_gpio_setpull(EXYNOS4_GPC0(2), S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(EXYNOS4_GPC0(2), S5P_GPIO_DRVSTR_LV4); s3c_gpio_setpull(EXYNOS4_GPC0(3), S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(EXYNOS4_GPC0(3), S5P_GPIO_DRVSTR_LV1); s3c_gpio_setpull(EXYNOS4_GPC0(4), S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(EXYNOS4_GPC0(4), S5P_GPIO_DRVSTR_LV1); } #endif return 0; }
static void s3cfb_gpio_setup_24bpp(unsigned int start, unsigned int size, unsigned int cfg, s5p_gpio_drvstr_t drvstr) { s3c_gpio_cfgrange_nopull(start, size, cfg); for (; size > 0; size--, start++) s5p_gpio_set_drvstr(start, drvstr); }
static void exynos4_fimd0_cfg_gpios(unsigned int base, unsigned int nr, unsigned int cfg, s5p_gpio_drvstr_t drvstr) { s3c_gpio_cfgrange_nopull(base, nr, cfg); for (; nr > 0; nr--, base++) s5p_gpio_set_drvstr(base, drvstr); }
static void exynos_dwmci0_cfg_gpio(int width) { unsigned int gpio; for (gpio = EXYNOS5420_GPC0(0); gpio < EXYNOS5420_GPC0(2); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); } switch (width) { case 8: for (gpio = EXYNOS5420_GPC3(0); gpio <= EXYNOS5420_GPC3(3); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); } case 4: for (gpio = EXYNOS5420_GPC0(3); gpio <= EXYNOS5420_GPC0(6); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); } break; case 1: gpio = EXYNOS5420_GPC0(3); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV3); default: break; } gpio = EXYNOS5420_GPC0(7); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_DOWN); /* CDn PIN: Ouput / High */ gpio = EXYNOS5420_GPC0(2); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(1)); gpio_set_value(gpio, 1); }
static void exynos_dwmci1_cfg_gpio(int width) { unsigned int gpio; for (gpio = EXYNOS5420_GPC1(0); gpio < EXYNOS5420_GPC1(3); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); if (gpio == EXYNOS5420_GPC1(0)) s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); else s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } gpio = EXYNOS5420_GPD1(1); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); switch (width) { case 8: case 4: for (gpio = EXYNOS5420_GPC1(3); gpio <= EXYNOS5420_GPC1(6); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } for (gpio = EXYNOS5420_GPD1(4); gpio <= EXYNOS5420_GPD1(7); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } break; case 1: gpio = EXYNOS5420_GPC1(3); s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); default: break; } }
static void s5pv210_cfg_gpios(unsigned int start, unsigned int nr, unsigned int cfg) { for (; nr > 0; nr--, start++) { s3c_gpio_setpull(start, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(start, S3C_GPIO_DRVSTR_3X); s3c_gpio_cfgpin(start, cfg); } }
void exynos5_setup_sdhci2_cfg_gpio(struct platform_device *dev, int width) { struct s3c_sdhci_platdata *pdata = dev->dev.platform_data; unsigned int gpio; /* Set all the necessary GPK2[0:1] pins to special-function 2 */ for (gpio = EXYNOS5_GPC2(0); gpio < EXYNOS5_GPC2(2); gpio++) { s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } switch (width) { case 8: for (gpio = EXYNOS5_GPC3(3); gpio <= EXYNOS5_GPC3(6); gpio++) { /* Data pin GPK3[3:6] to special-function 3 */ s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } case 4: for (gpio = EXYNOS5_GPC2(3); gpio <= EXYNOS5_GPC2(6); gpio++) { /* Data pin GPK2[3:6] to special-function 2 */ s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); } default: break; } if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) { s3c_gpio_cfgpin(EXYNOS5_GPC2(2), S3C_GPIO_SFN(2)); s3c_gpio_setpull(EXYNOS5_GPC2(2), S3C_GPIO_PULL_UP); s5p_gpio_set_drvstr(gpio, S5P_GPIO_DRVSTR_LV4); /* In SMDK5210 Rev0.0 Board, SD_CDn Pin connection have been changed by Jumper Therfore, the following GPX2[0] configuration is requiered. */ /* s3c_gpio_cfgpin(EXYNOS5_GPX2(0), S3C_GPIO_SFN(0)); s3c_gpio_setpull(EXYNOS5_GPX2(0), S3C_GPIO_PULL_NONE); */ } }
static int gyro_gpio_init(void) { int ret = gpio_request(GPIO_GYRO_INT, "lsm330dlc_gyro_irq"); pr_info("%s\n", __func__); if (ret) { pr_err("%s, Failed to request gpio lsm330dlc_gyro_irq(%d)\n", __func__, ret); return ret; } ret = gpio_request(GPIO_GYRO_DE, "lsm330dlc_gyro_data_enable"); if (ret) { pr_err("%s, Failed to request gpio lsm330dlc_gyro_data_enable(%d)\n", __func__, ret); return ret; } /* Gyro sensor interrupt pin initialization */ #if 0 s5p_register_gpio_interrupt(GPIO_GYRO_INT); s3c_gpio_cfgpin(GPIO_GYRO_INT, S3C_GPIO_SFN(0xF)); #else s3c_gpio_cfgpin(GPIO_GYRO_INT, S3C_GPIO_INPUT); #endif gpio_set_value(GPIO_GYRO_INT, 2); s3c_gpio_setpull(GPIO_GYRO_INT, S3C_GPIO_PULL_DOWN); s5p_gpio_set_drvstr(GPIO_GYRO_INT, S5P_GPIO_DRVSTR_LV1); #if 0 i2c_devs1[1].irq = gpio_to_irq(GPIO_GYRO_INT); /* interrupt */ #else i2c_devs1[1].irq = -1; /* polling */ #endif /* Gyro sensor data enable pin initialization */ s3c_gpio_cfgpin(GPIO_GYRO_DE, S3C_GPIO_OUTPUT); gpio_set_value(GPIO_GYRO_DE, 0); s3c_gpio_setpull(GPIO_GYRO_DE, S3C_GPIO_PULL_DOWN); s5p_gpio_set_drvstr(GPIO_GYRO_DE, S5P_GPIO_DRVSTR_LV1); return ret; }