static void rk3288_fb_init(struct fb_rk3288_pdata_t * pdat) { gpio_set_cfg(RK3288_GPIO1_D0, 0x1); gpio_set_cfg(RK3288_GPIO1_D1, 0x1); gpio_set_cfg(RK3288_GPIO1_D2, 0x1); gpio_set_cfg(RK3288_GPIO1_D3, 0x1); gpio_set_rate(RK3288_GPIO1_D0, GPIO_RATE_FAST); gpio_set_rate(RK3288_GPIO1_D1, GPIO_RATE_FAST); gpio_set_rate(RK3288_GPIO1_D2, GPIO_RATE_FAST); gpio_set_rate(RK3288_GPIO1_D3, GPIO_RATE_FAST); gpio_set_drv(RK3288_GPIO1_D0, GPIO_DRV_STRONG); gpio_set_drv(RK3288_GPIO1_D1, GPIO_DRV_STRONG); gpio_set_drv(RK3288_GPIO1_D2, GPIO_DRV_STRONG); gpio_set_drv(RK3288_GPIO1_D3, GPIO_DRV_STRONG); rk3288_vop_set_interface(pdat); rk3288_vop_set_mode(pdat); rk3288_vop_set_timing(pdat); rk3288_vop_set_polarity(pdat); rk3288_vop_update_config(pdat); rk3288_vop_set_win0(pdat); rk3288_vop_set_win0_address(pdat, pdat->vram[0]); rk3288_vop_update_config(pdat); rk3288_lvds_enable(pdat, 0); }
int board_mmc_init(bd_t *bis) { int i, ret, ret_sd = 0; /* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ gpio_request(S5PC110_GPIO_J27, "massmemory_en"); gpio_direction_output(S5PC110_GPIO_J27, 1); /* * MMC0 GPIO * GPG0[0] SD_0_CLK * GPG0[1] SD_0_CMD * GPG0[2] SD_0_CDn -> Not used * GPG0[3:6] SD_0_DATA[0:3] */ for (i = S5PC110_GPIO_G00; i < S5PC110_GPIO_G07; i++) { if (i == S5PC110_GPIO_G02) continue; /* GPG0[0:6] special function 2 */ gpio_cfg_pin(i, 0x2); /* GPG0[0:6] pull disable */ gpio_set_pull(i, S5P_GPIO_PULL_NONE); /* GPG0[0:6] drv 4x */ gpio_set_drv(i, S5P_GPIO_DRV_4X); } ret = s5p_mmc_init(0, 4); if (ret) pr_err("MMC: Failed to init MMC:0.\n"); /* * SD card (T_FLASH) detect and init * T_FLASH_DETECT: EINT28: GPH3[4] input mode */ gpio_request(S5PC110_GPIO_H34, "t_flash_detect"); gpio_cfg_pin(S5PC110_GPIO_H34, S5P_GPIO_INPUT); gpio_set_pull(S5PC110_GPIO_H34, S5P_GPIO_PULL_UP); if (!gpio_get_value(S5PC110_GPIO_H34)) { for (i = S5PC110_GPIO_G20; i < S5PC110_GPIO_G27; i++) { if (i == S5PC110_GPIO_G22) continue; /* GPG2[0:6] special function 2 */ gpio_cfg_pin(i, 0x2); /* GPG2[0:6] pull disable */ gpio_set_pull(i, S5P_GPIO_PULL_NONE); /* GPG2[0:6] drv 4x */ gpio_set_drv(i, S5P_GPIO_DRV_4X); } ret_sd = s5p_mmc_init(2, 4); if (ret_sd) pr_err("MMC: Failed to init SD card (MMC:2).\n"); } return ret & ret_sd; }
static int exynos5_mmc_config(int peripheral, int flags) { int i, start, start_ext, gpio_func = 0; switch (peripheral) { case PERIPH_ID_SDMMC0: start = EXYNOS5_GPIO_C00; start_ext = EXYNOS5_GPIO_C10; gpio_func = S5P_GPIO_FUNC(0x2); break; case PERIPH_ID_SDMMC1: start = EXYNOS5_GPIO_C20; start_ext = 0; break; case PERIPH_ID_SDMMC2: start = EXYNOS5_GPIO_C30; start_ext = EXYNOS5_GPIO_C43; gpio_func = S5P_GPIO_FUNC(0x3); break; case PERIPH_ID_SDMMC3: start = EXYNOS5_GPIO_C40; start_ext = 0; break; default: debug("%s: invalid peripheral %d", __func__, peripheral); return -1; } if ((flags & PINMUX_FLAG_8BIT_MODE) && !start_ext) { debug("SDMMC device %d does not support 8bit mode", peripheral); return -1; } if (flags & PINMUX_FLAG_8BIT_MODE) { for (i = start_ext; i <= (start_ext + 3); i++) { gpio_cfg_pin(i, gpio_func); gpio_set_pull(i, S5P_GPIO_PULL_UP); gpio_set_drv(i, S5P_GPIO_DRV_4X); } } for (i = start; i < (start + 2); i++) { gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2)); gpio_set_pull(i, S5P_GPIO_PULL_NONE); gpio_set_drv(i, S5P_GPIO_DRV_4X); } for (i = (start + 3); i <= (start + 6); i++) { gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2)); gpio_set_pull(i, S5P_GPIO_PULL_UP); gpio_set_drv(i, S5P_GPIO_DRV_4X); } return 0; }
int board_mmc_init(bd_t *bis) { int i, err; /* * MMC2 SD card GPIO: * * GPK2[0] SD_2_CLK(2) * GPK2[1] SD_2_CMD(2) * GPK2[2] SD_2_CDn * GPK2[3:6] SD_2_DATA[0:3](2) */ for (i = EXYNOS4_GPIO_K20; i < EXYNOS4_GPIO_K27; i++) { /* GPK2[0:6] special function 2 */ gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2)); /* GPK2[0:6] drv 4x */ gpio_set_drv(i, S5P_GPIO_DRV_4X); /* GPK2[0:1] pull disable */ if (i == EXYNOS4_GPIO_K20 || i == EXYNOS4_GPIO_K21) { gpio_set_pull(i, S5P_GPIO_PULL_NONE); continue; } /* GPK2[2:6] pull up */ gpio_set_pull(i, S5P_GPIO_PULL_UP); } err = s5p_mmc_init(2, 4); return err; }
int board_mmc_init(bd_t *bis) { int i; /* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ gpio_direction_output(&s5pc110_gpio->j2, 7, 1); /* * MMC0 GPIO * GPG0[0] SD_0_CLK * GPG0[1] SD_0_CMD * GPG0[2] SD_0_CDn -> Not used * GPG0[3:6] SD_0_DATA[0:3] */ for (i = 0; i < 7; i++) { if (i == 2) continue; /* GPG0[0:6] special function 2 */ gpio_cfg_pin(&s5pc110_gpio->g0, i, 0x2); /* GPG0[0:6] pull disable */ gpio_set_pull(&s5pc110_gpio->g0, i, GPIO_PULL_NONE); /* GPG0[0:6] drv 4x */ gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); } return s5p_mmc_init(0, 4); }
static void board_gpio_init(void) { /* eMMC Reset Pin */ gpio_request(EXYNOS4X12_GPIO_K12, "eMMC Reset"); gpio_cfg_pin(EXYNOS4X12_GPIO_K12, S5P_GPIO_FUNC(0x1)); gpio_set_pull(EXYNOS4X12_GPIO_K12, S5P_GPIO_PULL_NONE); gpio_set_drv(EXYNOS4X12_GPIO_K12, S5P_GPIO_DRV_4X); /* Enable FAN (Odroid U3) */ gpio_request(EXYNOS4X12_GPIO_D00, "FAN Control"); gpio_set_pull(EXYNOS4X12_GPIO_D00, S5P_GPIO_PULL_UP); gpio_set_drv(EXYNOS4X12_GPIO_D00, S5P_GPIO_DRV_4X); gpio_direction_output(EXYNOS4X12_GPIO_D00, 1); /* OTG Vbus output (Odroid U3+) */ gpio_request(EXYNOS4X12_GPIO_L20, "OTG Vbus"); gpio_set_pull(EXYNOS4X12_GPIO_L20, S5P_GPIO_PULL_NONE); gpio_set_drv(EXYNOS4X12_GPIO_L20, S5P_GPIO_DRV_4X); gpio_direction_output(EXYNOS4X12_GPIO_L20, 0); /* OTG INT (Odroid U3+) */ gpio_request(EXYNOS4X12_GPIO_X31, "OTG INT"); gpio_set_pull(EXYNOS4X12_GPIO_X31, S5P_GPIO_PULL_UP); gpio_set_drv(EXYNOS4X12_GPIO_X31, S5P_GPIO_DRV_4X); gpio_direction_input(EXYNOS4X12_GPIO_X31); /* Blue LED (Odroid X2/U2/U3) */ gpio_request(EXYNOS4X12_GPIO_C10, "Blue LED"); gpio_direction_output(EXYNOS4X12_GPIO_C10, 0); #ifdef CONFIG_CMD_USB /* USB3503A Reference frequency */ gpio_request(EXYNOS4X12_GPIO_X30, "USB3503A RefFreq"); /* USB3503A Connect */ gpio_request(EXYNOS4X12_GPIO_X34, "USB3503A Connect"); /* USB3503A Reset */ gpio_request(EXYNOS4X12_GPIO_X35, "USB3503A Reset"); #endif }
static int exynos4_mmc_config(int peripheral, int flags) { int i, start = 0, start_ext = 0; unsigned int func, ext_func; switch (peripheral) { case PERIPH_ID_SDMMC0: start = EXYNOS4_GPIO_K00; start_ext = EXYNOS4_GPIO_K13; func = S5P_GPIO_FUNC(0x2); ext_func = S5P_GPIO_FUNC(0x3); break; case PERIPH_ID_SDMMC2: start = EXYNOS4_GPIO_K20; start_ext = EXYNOS4_GPIO_K33; func = S5P_GPIO_FUNC(0x2); ext_func = S5P_GPIO_FUNC(0x3); break; case PERIPH_ID_SDMMC4: start = EXYNOS4_GPIO_K00; start_ext = EXYNOS4_GPIO_K13; func = S5P_GPIO_FUNC(0x3); ext_func = S5P_GPIO_FUNC(0x4); break; default: return -1; } for (i = start; i < (start + 7); i++) { if (i == (start + 2)) continue; gpio_cfg_pin(i, func); gpio_set_pull(i, S5P_GPIO_PULL_NONE); gpio_set_drv(i, S5P_GPIO_DRV_4X); } /* SDMMC2 do not use 8bit mode at exynos4 */ if (flags & PINMUX_FLAG_8BIT_MODE) { for (i = start_ext; i < (start_ext + 4); i++) { gpio_cfg_pin(i, ext_func); gpio_set_pull(i, S5P_GPIO_PULL_NONE); gpio_set_drv(i, S5P_GPIO_DRV_4X); } } return 0; }
static inline void fb_f1c500s_cfg_gpios(int base, int n, int cfg, enum gpio_pull_t pull, enum gpio_drv_t drv) { for(; n > 0; n--, base++) { gpio_set_cfg(base, cfg); gpio_set_pull(base, pull); gpio_set_drv(base, drv); } }
static inline void s5p4418_fb_cfg_gpios(int base, int nr, int cfg, enum gpio_pull_t pull, enum gpio_drv_t drv) { for(; nr > 0; nr--, base++) { gpio_set_cfg(base, cfg); gpio_set_pull(base, pull); gpio_set_drv(base, drv); } }
static void exynos_pinmux_sdmmc(struct gpio *gpios, int num_gpios) { int i; for (i = 0; i < num_gpios; i++) { gpio_set_drv(gpios[i].pin, gpios[i].drv); gpio_set_pull(gpios[i].pin, gpios[i].pull); gpio_cfg_pin(gpios[i].pin, GPIO_FUNC(gpios[i].func)); } }
static void exynos_pinmux_spi(int start, int cfg) { int i; for (i = 0; i < 4; i++) { gpio_cfg_pin(start + i, GPIO_FUNC(cfg)); gpio_set_pull(start + i, GPIO_PULL_NONE); gpio_set_drv(start + i, GPIO_DRV_3X); } }
static void exynos_pinmux_spi(int start, int cfg) { int i; for (i = start; i < start + 4; i++) { gpio_cfg_pin(i, cfg); gpio_set_pull(i, GPIO_PULL_NONE); gpio_set_drv(i, GPIO_DRV_3X); } }
static void exynos_pinmux_sdmmc(int start, int start_ext) { int i; if (start_ext) { for (i = 0; i <= 3; i++) { gpio_cfg_pin(start_ext + i, GPIO_FUNC(0x2)); gpio_set_pull(start_ext + i, GPIO_PULL_UP); gpio_set_drv(start_ext + i, GPIO_DRV_4X); } } for (i = 0; i < 2; i++) { gpio_cfg_pin(start + i, GPIO_FUNC(0x2)); gpio_set_pull(start + i, GPIO_PULL_NONE); gpio_set_drv(start + i, GPIO_DRV_4X); } for (i = 2; i <= 6; i++) { gpio_cfg_pin(start + i, GPIO_FUNC(0x2)); gpio_set_pull(start + i, GPIO_PULL_UP); gpio_set_drv(start + i, GPIO_DRV_4X); } }
void exynos_cfg_lcd_gpio(void) { unsigned int i, f3_end = 4; for (i = 0; i < 8; i++) { /* set GPF0,1,2[0:7] for RGB Interface and Data lines (32bit) */ gpio_cfg_pin(EXYNOS4_GPIO_F00 + i, S5P_GPIO_FUNC(2)); gpio_cfg_pin(EXYNOS4_GPIO_F10 + i, S5P_GPIO_FUNC(2)); gpio_cfg_pin(EXYNOS4_GPIO_F20 + i, S5P_GPIO_FUNC(2)); /* pull-up/down disable */ gpio_set_pull(EXYNOS4_GPIO_F00 + i, S5P_GPIO_PULL_NONE); gpio_set_pull(EXYNOS4_GPIO_F10 + i, S5P_GPIO_PULL_NONE); gpio_set_pull(EXYNOS4_GPIO_F20 + i, S5P_GPIO_PULL_NONE); /* drive strength to max (24bit) */ gpio_set_drv(EXYNOS4_GPIO_F00 + i, S5P_GPIO_DRV_4X); gpio_set_rate(EXYNOS4_GPIO_F00 + i, S5P_GPIO_DRV_SLOW); gpio_set_drv(EXYNOS4_GPIO_F10 + i, S5P_GPIO_DRV_4X); gpio_set_rate(EXYNOS4_GPIO_F10 + i, S5P_GPIO_DRV_SLOW); gpio_set_drv(EXYNOS4_GPIO_F20 + i, S5P_GPIO_DRV_4X); gpio_set_rate(EXYNOS4_GPIO_F00 + i, S5P_GPIO_DRV_SLOW); } for (i = EXYNOS4_GPIO_F30; i < (EXYNOS4_GPIO_F30 + f3_end); i++) { /* set GPF3[0:3] for RGB Interface and Data lines (32bit) */ gpio_cfg_pin(i, S5P_GPIO_FUNC(2)); /* pull-up/down disable */ gpio_set_pull(i, S5P_GPIO_PULL_NONE); /* drive strength to max (24bit) */ gpio_set_drv(i, S5P_GPIO_DRV_4X); gpio_set_rate(i, S5P_GPIO_DRV_SLOW); } /* gpio pad configuration for LCD reset. */ gpio_request(EXYNOS4_GPIO_Y45, "lcd_reset"); gpio_cfg_pin(EXYNOS4_GPIO_Y45, S5P_GPIO_OUTPUT); }
static void initialize_s5p_mshc(void) { /* MMC0: Fixed, 8 bit mode, connected with GPIO. */ if (clock_set_mshci(PERIPH_ID_SDMMC0)) printk(BIOS_CRIT, "Failed to set clock for SDMMC0.\n"); if (gpio_direction_output(MMC0_GPIO_PIN, 1)) { printk(BIOS_CRIT, "Unable to power on SDMMC0.\n"); } gpio_set_pull(MMC0_GPIO_PIN, EXYNOS_GPIO_PULL_NONE); gpio_set_drv(MMC0_GPIO_PIN, EXYNOS_GPIO_DRV_4X); exynos_pinmux_config(PERIPH_ID_SDMMC0, PINMUX_FLAG_8BIT_MODE); /* MMC2: Removable, 4 bit mode, no GPIO. */ clock_set_mshci(PERIPH_ID_SDMMC2); exynos_pinmux_config(PERIPH_ID_SDMMC2, 0); }
static void setup_storage(void) { /* MMC0: Fixed, 8 bit mode, connected with GPIO. */ if (clock_set_mshci(PERIPH_ID_SDMMC0)) printk(BIOS_CRIT, "%s: Failed to set MMC0 clock.\n", __func__); if (gpio_direction_output(MMC0_GPIO_PIN, 1)) { printk(BIOS_CRIT, "%s: Unable to power on MMC0.\n", __func__); } gpio_set_pull(MMC0_GPIO_PIN, GPIO_PULL_NONE); gpio_set_drv(MMC0_GPIO_PIN, GPIO_DRV_4X); exynos_pinmux_sdmmc0(); /* MMC2: Removable, 4 bit mode, no GPIO. */ clock_set_mshci(PERIPH_ID_SDMMC2); exynos_pinmux_sdmmc2(); }
static int exynos5420_mmc_config(int peripheral, int flags) { int i, start = 0, start_ext = 0; switch (peripheral) { case PERIPH_ID_SDMMC0: start = EXYNOS5420_GPIO_C00; start_ext = EXYNOS5420_GPIO_C30; break; case PERIPH_ID_SDMMC1: start = EXYNOS5420_GPIO_C10; start_ext = EXYNOS5420_GPIO_D14; break; case PERIPH_ID_SDMMC2: start = EXYNOS5420_GPIO_C20; start_ext = 0; break; default: start = 0; debug("%s: invalid peripheral %d", __func__, peripheral); return -1; } if ((flags & PINMUX_FLAG_8BIT_MODE) && !start_ext) { debug("SDMMC device %d does not support 8bit mode", peripheral); return -1; } if (flags & PINMUX_FLAG_8BIT_MODE) { for (i = start_ext; i <= (start_ext + 3); i++) { gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2)); gpio_set_pull(i, S5P_GPIO_PULL_UP); gpio_set_drv(i, S5P_GPIO_DRV_4X); } } for (i = start; i < (start + 3); i++) { /* * MMC0 is intended to be used for eMMC. The * card detect pin is used as a VDDEN signal to * power on the eMMC. The 5420 iROM makes * this same assumption. */ if ((peripheral == PERIPH_ID_SDMMC0) && (i == (start + 2))) { #ifndef CONFIG_SPL_BUILD gpio_request(i, "sdmmc0_vdden"); #endif gpio_set_value(i, 1); gpio_cfg_pin(i, S5P_GPIO_OUTPUT); } else { gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2)); } gpio_set_pull(i, S5P_GPIO_PULL_NONE); gpio_set_drv(i, S5P_GPIO_DRV_4X); } for (i = (start + 3); i <= (start + 6); i++) { gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2)); gpio_set_pull(i, S5P_GPIO_PULL_UP); gpio_set_drv(i, S5P_GPIO_DRV_4X); } return 0; }