172b81d39SMinkyu Kang /* 272b81d39SMinkyu Kang * Copyright (C) 2008-2009 Samsung Electronics 372b81d39SMinkyu Kang * Minkyu Kang <mk7.kang@samsung.com> 472b81d39SMinkyu Kang * Kyungmin Park <kyungmin.park@samsung.com> 572b81d39SMinkyu Kang * 61a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 772b81d39SMinkyu Kang */ 872b81d39SMinkyu Kang 972b81d39SMinkyu Kang #include <common.h> 1087f314e9SMinkyu Kang #include <asm/arch/gpio.h> 1187f314e9SMinkyu Kang #include <asm/arch/mmc.h> 12c7336815SŁukasz Majewski #include <power/pmic.h> 13a954da29SLukasz Majewski #include <usb/s3c_udc.h> 14a954da29SLukasz Majewski #include <asm/arch/cpu.h> 15c7336815SŁukasz Majewski #include <power/max8998_pmic.h> 1672b81d39SMinkyu Kang DECLARE_GLOBAL_DATA_PTR; 1772b81d39SMinkyu Kang 1887f314e9SMinkyu Kang static struct s5pc110_gpio *s5pc110_gpio; 1987f314e9SMinkyu Kang 2072b81d39SMinkyu Kang int board_init(void) 2172b81d39SMinkyu Kang { 2287f314e9SMinkyu Kang /* Set Initial global variables */ 2387f314e9SMinkyu Kang s5pc110_gpio = (struct s5pc110_gpio *)S5PC110_GPIO_BASE; 2487f314e9SMinkyu Kang 2572b81d39SMinkyu Kang gd->bd->bi_arch_number = MACH_TYPE_GONI; 2672b81d39SMinkyu Kang gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; 2772b81d39SMinkyu Kang 280ecdab68SŁukasz Majewski return 0; 290ecdab68SŁukasz Majewski } 300ecdab68SŁukasz Majewski 310ecdab68SŁukasz Majewski int power_init_board(void) 320ecdab68SŁukasz Majewski { 330ecdab68SŁukasz Majewski int ret; 340ecdab68SŁukasz Majewski 35*2936df1fSŁukasz Majewski /* 36*2936df1fSŁukasz Majewski * For PMIC the I2C bus is named as I2C5, but it is connected 37*2936df1fSŁukasz Majewski * to logical I2C adapter 0 38*2936df1fSŁukasz Majewski */ 39*2936df1fSŁukasz Majewski ret = pmic_init(I2C_0); 400ecdab68SŁukasz Majewski if (ret) 410ecdab68SŁukasz Majewski return ret; 42c7336815SŁukasz Majewski 4372b81d39SMinkyu Kang return 0; 4472b81d39SMinkyu Kang } 4572b81d39SMinkyu Kang 4672b81d39SMinkyu Kang int dram_init(void) 4772b81d39SMinkyu Kang { 48177feff3SMinkyu Kang gd->ram_size = PHYS_SDRAM_1_SIZE + PHYS_SDRAM_2_SIZE + 49177feff3SMinkyu Kang PHYS_SDRAM_3_SIZE; 50177feff3SMinkyu Kang 51177feff3SMinkyu Kang return 0; 52177feff3SMinkyu Kang } 53177feff3SMinkyu Kang 54177feff3SMinkyu Kang void dram_init_banksize(void) 55177feff3SMinkyu Kang { 5672b81d39SMinkyu Kang gd->bd->bi_dram[0].start = PHYS_SDRAM_1; 5772b81d39SMinkyu Kang gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; 5872b81d39SMinkyu Kang gd->bd->bi_dram[1].start = PHYS_SDRAM_2; 5972b81d39SMinkyu Kang gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE; 6072b81d39SMinkyu Kang gd->bd->bi_dram[2].start = PHYS_SDRAM_3; 6172b81d39SMinkyu Kang gd->bd->bi_dram[2].size = PHYS_SDRAM_3_SIZE; 6272b81d39SMinkyu Kang } 6372b81d39SMinkyu Kang 6472b81d39SMinkyu Kang #ifdef CONFIG_DISPLAY_BOARDINFO 6572b81d39SMinkyu Kang int checkboard(void) 6672b81d39SMinkyu Kang { 6772b81d39SMinkyu Kang puts("Board:\tGoni\n"); 6872b81d39SMinkyu Kang return 0; 6972b81d39SMinkyu Kang } 7072b81d39SMinkyu Kang #endif 7187f314e9SMinkyu Kang 7287f314e9SMinkyu Kang #ifdef CONFIG_GENERIC_MMC 7387f314e9SMinkyu Kang int board_mmc_init(bd_t *bis) 7487f314e9SMinkyu Kang { 7587f314e9SMinkyu Kang int i; 7687f314e9SMinkyu Kang 7787f314e9SMinkyu Kang /* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ 78ef5d9eb9SŁukasz Majewski s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1); 7987f314e9SMinkyu Kang 8087f314e9SMinkyu Kang /* 8187f314e9SMinkyu Kang * MMC0 GPIO 8287f314e9SMinkyu Kang * GPG0[0] SD_0_CLK 8387f314e9SMinkyu Kang * GPG0[1] SD_0_CMD 8487f314e9SMinkyu Kang * GPG0[2] SD_0_CDn -> Not used 8587f314e9SMinkyu Kang * GPG0[3:6] SD_0_DATA[0:3] 8687f314e9SMinkyu Kang */ 8787f314e9SMinkyu Kang for (i = 0; i < 7; i++) { 8887f314e9SMinkyu Kang if (i == 2) 8987f314e9SMinkyu Kang continue; 9087f314e9SMinkyu Kang /* GPG0[0:6] special function 2 */ 91ef5d9eb9SŁukasz Majewski s5p_gpio_cfg_pin(&s5pc110_gpio->g0, i, 0x2); 9287f314e9SMinkyu Kang /* GPG0[0:6] pull disable */ 93ef5d9eb9SŁukasz Majewski s5p_gpio_set_pull(&s5pc110_gpio->g0, i, GPIO_PULL_NONE); 9487f314e9SMinkyu Kang /* GPG0[0:6] drv 4x */ 95ef5d9eb9SŁukasz Majewski s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); 9687f314e9SMinkyu Kang } 9787f314e9SMinkyu Kang 981727e216SJaehoon Chung return s5p_mmc_init(0, 4); 9987f314e9SMinkyu Kang } 10087f314e9SMinkyu Kang #endif 101a954da29SLukasz Majewski 102a954da29SLukasz Majewski #ifdef CONFIG_USB_GADGET 103a954da29SLukasz Majewski static int s5pc1xx_phy_control(int on) 104a954da29SLukasz Majewski { 105a954da29SLukasz Majewski int ret; 106a954da29SLukasz Majewski static int status; 107c7336815SŁukasz Majewski struct pmic *p = pmic_get("MAX8998_PMIC"); 108c7336815SŁukasz Majewski if (!p) 109c7336815SŁukasz Majewski return -ENODEV; 110a954da29SLukasz Majewski 111a954da29SLukasz Majewski if (pmic_probe(p)) 112a954da29SLukasz Majewski return -1; 113a954da29SLukasz Majewski 114a954da29SLukasz Majewski if (on && !status) { 115a954da29SLukasz Majewski ret = pmic_set_output(p, MAX8998_REG_ONOFF1, 116a954da29SLukasz Majewski MAX8998_LDO3, LDO_ON); 117a954da29SLukasz Majewski ret = pmic_set_output(p, MAX8998_REG_ONOFF2, 118a954da29SLukasz Majewski MAX8998_LDO8, LDO_ON); 119a954da29SLukasz Majewski if (ret) { 120a954da29SLukasz Majewski puts("MAX8998 LDO setting error!\n"); 121a954da29SLukasz Majewski return -1; 122a954da29SLukasz Majewski } 123a954da29SLukasz Majewski status = 1; 124a954da29SLukasz Majewski } else if (!on && status) { 125a954da29SLukasz Majewski ret = pmic_set_output(p, MAX8998_REG_ONOFF1, 126a954da29SLukasz Majewski MAX8998_LDO3, LDO_OFF); 127a954da29SLukasz Majewski ret = pmic_set_output(p, MAX8998_REG_ONOFF2, 128a954da29SLukasz Majewski MAX8998_LDO8, LDO_OFF); 129a954da29SLukasz Majewski if (ret) { 130a954da29SLukasz Majewski puts("MAX8998 LDO setting error!\n"); 131a954da29SLukasz Majewski return -1; 132a954da29SLukasz Majewski } 133a954da29SLukasz Majewski status = 0; 134a954da29SLukasz Majewski } 135a954da29SLukasz Majewski udelay(10000); 136a954da29SLukasz Majewski 137a954da29SLukasz Majewski return 0; 138a954da29SLukasz Majewski } 139a954da29SLukasz Majewski 140a954da29SLukasz Majewski struct s3c_plat_otg_data s5pc110_otg_data = { 141a954da29SLukasz Majewski .phy_control = s5pc1xx_phy_control, 142a954da29SLukasz Majewski .regs_phy = S5PC110_PHY_BASE, 143a954da29SLukasz Majewski .regs_otg = S5PC110_OTG_BASE, 144a954da29SLukasz Majewski .usb_phy_ctrl = S5PC110_USB_PHY_CONTROL, 145a954da29SLukasz Majewski }; 146a954da29SLukasz Majewski #endif 147