]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - board/samsung/universal_c210/universal.c
exynos: universal_c210: Move to driver model soft_spi
[karo-tx-uboot.git] / board / samsung / universal_c210 / universal.c
index 8e49195fe1c05d005d24f51baebebe17c5c065c8..22b08497cb57c1091b1eb82aeed7b58b73c18857 100644 (file)
@@ -12,7 +12,6 @@
 #include <asm/io.h>
 #include <asm/gpio.h>
 #include <asm/arch/adc.h>
-#include <asm/arch/gpio.h>
 #include <asm/arch/pinmux.h>
 #include <asm/arch/watchdog.h>
 #include <ld9040.h>
@@ -27,8 +26,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-struct exynos4_gpio_part1 *gpio1;
-struct exynos4_gpio_part2 *gpio2;
 unsigned int board_rev;
 
 u32 get_board_rev(void)
@@ -204,53 +201,6 @@ int exynos_early_init_f(void)
        return 0;
 }
 
-#ifdef CONFIG_SOFT_SPI
-static void soft_spi_init(void)
-{
-       gpio_direction_output(CONFIG_SOFT_SPI_GPIO_SCLK,
-               CONFIG_SOFT_SPI_MODE & SPI_CPOL);
-       gpio_direction_output(CONFIG_SOFT_SPI_GPIO_MOSI, 1);
-       gpio_direction_input(CONFIG_SOFT_SPI_GPIO_MISO);
-       gpio_direction_output(CONFIG_SOFT_SPI_GPIO_CS,
-               !(CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH));
-}
-
-void spi_cs_activate(struct spi_slave *slave)
-{
-       gpio_set_value(CONFIG_SOFT_SPI_GPIO_CS,
-               !(CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH));
-       SPI_SCL(1);
-       gpio_set_value(CONFIG_SOFT_SPI_GPIO_CS,
-               CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH);
-}
-
-void spi_cs_deactivate(struct spi_slave *slave)
-{
-       gpio_set_value(CONFIG_SOFT_SPI_GPIO_CS,
-               !(CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH));
-}
-
-int  spi_cs_is_valid(unsigned int bus, unsigned int cs)
-{
-       return bus == 0 && cs == 0;
-}
-
-void universal_spi_scl(int bit)
-{
-       gpio_set_value(CONFIG_SOFT_SPI_GPIO_SCLK, bit);
-}
-
-void universal_spi_sda(int bit)
-{
-       gpio_set_value(CONFIG_SOFT_SPI_GPIO_MOSI, bit);
-}
-
-int universal_spi_read(void)
-{
-       return gpio_get_value(CONFIG_SOFT_SPI_GPIO_MISO);
-}
-#endif
-
 static void init_pmic_lcd(void)
 {
        unsigned char val;
@@ -305,37 +255,36 @@ void exynos_cfg_lcd_gpio(void)
 
        for (i = 0; i < 8; i++) {
                /* set GPF0,1,2[0:7] for RGB Interface and Data lines (32bit) */
-               s5p_gpio_cfg_pin(&gpio1->f0, i, GPIO_FUNC(2));
-               s5p_gpio_cfg_pin(&gpio1->f1, i, GPIO_FUNC(2));
-               s5p_gpio_cfg_pin(&gpio1->f2, i, GPIO_FUNC(2));
+               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 */
-               s5p_gpio_set_pull(&gpio1->f0, i, GPIO_PULL_NONE);
-               s5p_gpio_set_pull(&gpio1->f1, i, GPIO_PULL_NONE);
-               s5p_gpio_set_pull(&gpio1->f2, i, GPIO_PULL_NONE);
+               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) */
-               s5p_gpio_set_drv(&gpio1->f0, i, GPIO_DRV_4X);
-               s5p_gpio_set_rate(&gpio1->f0, i, GPIO_DRV_SLOW);
-               s5p_gpio_set_drv(&gpio1->f1, i, GPIO_DRV_4X);
-               s5p_gpio_set_rate(&gpio1->f1, i, GPIO_DRV_SLOW);
-               s5p_gpio_set_drv(&gpio1->f2, i, GPIO_DRV_4X);
-               s5p_gpio_set_rate(&gpio1->f0, i, GPIO_DRV_SLOW);
+               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 = 0; i < f3_end; i++) {
+       for (i = EXYNOS4_GPIO_F30; i < (EXYNOS4_GPIO_F30 + f3_end); i++) {
                /* set GPF3[0:3] for RGB Interface and Data lines (32bit) */
-               s5p_gpio_cfg_pin(&gpio1->f3, i, GPIO_FUNC(2));
+               gpio_cfg_pin(i, S5P_GPIO_FUNC(2));
                /* pull-up/down disable */
-               s5p_gpio_set_pull(&gpio1->f3, i, GPIO_PULL_NONE);
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
                /* drive strength to max (24bit) */
-               s5p_gpio_set_drv(&gpio1->f3, i, GPIO_DRV_4X);
-               s5p_gpio_set_rate(&gpio1->f3, i, GPIO_DRV_SLOW);
+               gpio_set_drv(i, S5P_GPIO_DRV_4X);
+               gpio_set_rate(i, S5P_GPIO_DRV_SLOW);
        }
 
        /* gpio pad configuration for LCD reset. */
-       s5p_gpio_cfg_pin(&gpio2->y4, 5, GPIO_OUTPUT);
-
-       spi_init();
+       gpio_request(EXYNOS4_GPIO_Y45, "lcd_reset");
+       gpio_cfg_pin(EXYNOS4_GPIO_Y45, S5P_GPIO_OUTPUT);
 }
 
 int mipi_power(void)
@@ -345,11 +294,11 @@ int mipi_power(void)
 
 void exynos_reset_lcd(void)
 {
-       s5p_gpio_set_value(&gpio2->y4, 5, 1);
+       gpio_set_value(EXYNOS4_GPIO_Y45, 1);
        udelay(10000);
-       s5p_gpio_set_value(&gpio2->y4, 5, 0);
+       gpio_set_value(EXYNOS4_GPIO_Y45, 0);
        udelay(10000);
-       s5p_gpio_set_value(&gpio2->y4, 5, 1);
+       gpio_set_value(EXYNOS4_GPIO_Y45, 1);
        udelay(100);
 }
 
@@ -379,9 +328,6 @@ void exynos_enable_ldo(unsigned int onoff)
 
 int exynos_init(void)
 {
-       gpio1 = (struct exynos4_gpio_part1 *) EXYNOS4_GPIO_PART1_BASE;
-       gpio2 = (struct exynos4_gpio_part2 *) EXYNOS4_GPIO_PART2_BASE;
-
        gd->bd->bi_arch_number = MACH_TYPE_UNIVERSAL_C210;
 
        switch (get_hwrev()) {
@@ -392,7 +338,8 @@ int exynos_init(void)
                 * you should set it HIGH since it removes the inverter
                 */
                /* MASSMEMORY_EN: XMDMDATA_6: GPE3[6] */
-               s5p_gpio_direction_output(&gpio1->e3, 6, 0);
+               gpio_request(EXYNOS4_GPIO_E36, "ldo_en");
+               gpio_direction_output(EXYNOS4_GPIO_E36, 0);
                break;
        default:
                /*
@@ -400,13 +347,11 @@ int exynos_init(void)
                 * But set it as HIGH to ensure
                 */
                /* MASSMEMORY_EN: XMDMADDR_3: GPE1[3] */
-               s5p_gpio_direction_output(&gpio1->e1, 3, 1);
+               gpio_request(EXYNOS4_GPIO_E13, "massmemory_en");
+               gpio_direction_output(EXYNOS4_GPIO_E13, 1);
                break;
        }
 
-#ifdef CONFIG_SOFT_SPI
-       soft_spi_init();
-#endif
        check_hw_revision();
        printf("HW Revision:\t0x%x\n", board_rev);