]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
s5p: gpio: change gpio coding method for s5p gpio.
authorPrzemyslaw Marczak <p.marczak@samsung.com>
Wed, 22 Jan 2014 10:24:10 +0000 (11:24 +0100)
committerMinkyu Kang <mk7.kang@samsung.com>
Mon, 3 Feb 2014 06:36:14 +0000 (15:36 +0900)
Old s5p gpio coding method was not clean and was not working properly
for all parts and banks. New method is clean and easy to extend.

Gpio coding mask:
0x000000ff - pin number
0x00ffff00 - bank offset
0xff000000 - part number

Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
arch/arm/include/asm/arch-exynos/gpio.h
arch/arm/include/asm/arch-s5pc1xx/gpio.h
board/samsung/trats2/trats2.c
drivers/gpio/s5p_gpio.c
include/configs/s5p_goni.h
include/configs/s5pc210_universal.h
include/configs/trats.h

index 2a19852153b2dff0533ead53b979e7bced2dcd72..d6868fa25dd31a6a6d41140f7ab3d84f3ef1e2dc 100644 (file)
@@ -247,180 +247,81 @@ void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode);
 
 /* GPIO pins per bank  */
 #define GPIO_PER_BANK 8
-
-#define exynos4_gpio_part1_get_nr(bank, pin) \
-       ((((((unsigned int) &(((struct exynos4_gpio_part1 *) \
-                              EXYNOS4_GPIO_PART1_BASE)->bank)) \
-           - EXYNOS4_GPIO_PART1_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin)
-
-#define EXYNOS4_GPIO_PART1_MAX ((sizeof(struct exynos4_gpio_part1) \
-                           / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
-
-#define exynos4_gpio_part2_get_nr(bank, pin) \
-       (((((((unsigned int) &(((struct exynos4_gpio_part2 *) \
-                               EXYNOS4_GPIO_PART2_BASE)->bank)) \
-           - EXYNOS4_GPIO_PART2_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin) + EXYNOS4_GPIO_PART1_MAX)
-
-#define exynos4x12_gpio_part1_get_nr(bank, pin) \
-       ((((((unsigned int) &(((struct exynos4x12_gpio_part1 *) \
-                              EXYNOS4X12_GPIO_PART1_BASE)->bank)) \
-           - EXYNOS4X12_GPIO_PART1_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin)
-
-#define EXYNOS4X12_GPIO_PART1_MAX ((sizeof(struct exynos4x12_gpio_part1) \
-                           / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
-
-#define exynos4x12_gpio_part2_get_nr(bank, pin) \
-       (((((((unsigned int) &(((struct exynos4x12_gpio_part2 *) \
-                               EXYNOS4X12_GPIO_PART2_BASE)->bank)) \
-           - EXYNOS4X12_GPIO_PART2_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin) + EXYNOS4X12_GPIO_PART1_MAX)
-
-#define EXYNOS4X12_GPIO_PART2_MAX ((sizeof(struct exynos4x12_gpio_part2) \
-                           / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
-
-#define exynos4x12_gpio_part3_get_nr(bank, pin) \
-       (((((((unsigned int) &(((struct exynos4x12_gpio_part3 *) \
-                               EXYNOS4X12_GPIO_PART3_BASE)->bank)) \
-           - EXYNOS4X12_GPIO_PART3_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin) + EXYNOS4X12_GPIO_PART2_MAX)
-
-#define exynos5_gpio_part1_get_nr(bank, pin) \
-       ((((((unsigned int) &(((struct exynos5_gpio_part1 *) \
-                              EXYNOS5_GPIO_PART1_BASE)->bank)) \
-           - EXYNOS5_GPIO_PART1_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin)
-
-#define EXYNOS5_GPIO_PART1_MAX ((sizeof(struct exynos5_gpio_part1) \
-                           / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
-
-#define exynos5_gpio_part2_get_nr(bank, pin) \
-       (((((((unsigned int) &(((struct exynos5_gpio_part2 *) \
-                               EXYNOS5_GPIO_PART2_BASE)->bank)) \
-           - EXYNOS5_GPIO_PART2_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin) + EXYNOS5_GPIO_PART1_MAX)
-
-#define EXYNOS5_GPIO_PART2_MAX ((sizeof(struct exynos5_gpio_part2) \
-                           / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
-
-#define exynos5_gpio_part3_get_nr(bank, pin) \
-       (((((((unsigned int) &(((struct exynos5_gpio_part3 *) \
-                               EXYNOS5_GPIO_PART3_BASE)->bank)) \
-           - EXYNOS5_GPIO_PART3_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin) + EXYNOS5_GPIO_PART2_MAX)
-
-
-/* EXYNOS5420 */
-#define exynos5420_gpio_part1_get_nr(bank, pin) \
-       ((((((unsigned int) &(((struct exynos5420_gpio_part1 *)\
-                              EXYNOS5420_GPIO_PART1_BASE)->bank)) \
-           - EXYNOS5420_GPIO_PART1_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin)
-
-#define EXYNOS5420_GPIO_PART1_MAX ((sizeof(struct exynos5420_gpio_part1) \
-                           / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
-
-#define exynos5420_gpio_part2_get_nr(bank, pin) \
-       (((((((unsigned int) &(((struct exynos5420_gpio_part2 *)\
-                               EXYNOS5420_GPIO_PART2_BASE)->bank)) \
-           - EXYNOS5420_GPIO_PART2_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin) + EXYNOS5420_GPIO_PART1_MAX)
-
-#define EXYNOS5420_GPIO_PART2_MAX ((sizeof(struct exynos5420_gpio_part2) \
-                           / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
-
-#define exynos5420_gpio_part3_get_nr(bank, pin) \
-       (((((((unsigned int) &(((struct exynos5420_gpio_part3 *)\
-                               EXYNOS5420_GPIO_PART3_BASE)->bank)) \
-           - EXYNOS5420_GPIO_PART3_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin) + EXYNOS5420_GPIO_PART2_MAX)
-
-#define EXYNOS5420_GPIO_PART3_MAX ((sizeof(struct exynos5420_gpio_part3) \
-                           / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
-
-#define exynos5420_gpio_part4_get_nr(bank, pin) \
-       (((((((unsigned int) &(((struct exynos5420_gpio_part4 *)\
-                               EXYNOS5420_GPIO_PART4_BASE)->bank)) \
-           - EXYNOS5420_GPIO_PART4_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin) + EXYNOS5420_GPIO_PART3_MAX)
-
-#define EXYNOS5420_GPIO_PART4_MAX ((sizeof(struct exynos5420_gpio_part4) \
-                           / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
-
-#define EXYNOS5420_GPIO_PART5_MAX ((sizeof(struct exynos5420_gpio_part5) \
-                           / sizeof(struct s5p_gpio_bank)) * GPIO_PER_BANK)
-
-static inline unsigned int s5p_gpio_base(int nr)
+#define S5P_GPIO_PART_SHIFT    (24)
+#define S5P_GPIO_PART_MASK     (0xff)
+#define S5P_GPIO_BANK_SHIFT    (8)
+#define S5P_GPIO_BANK_MASK     (0xffff)
+#define S5P_GPIO_PIN_MASK      (0xff)
+
+#define S5P_GPIO_SET_PART(x) \
+                       (((x) & S5P_GPIO_PART_MASK) << S5P_GPIO_PART_SHIFT)
+
+#define S5P_GPIO_GET_PART(x) \
+                       (((x) >> S5P_GPIO_PART_SHIFT) & S5P_GPIO_PART_MASK)
+
+#define S5P_GPIO_SET_PIN(x) \
+                       ((x) & S5P_GPIO_PIN_MASK)
+
+#define EXYNOS4_GPIO_SET_BANK(part, bank) \
+                       ((((unsigned)&(((struct exynos4_gpio_part##part *) \
+                       EXYNOS4_GPIO_PART##part##_BASE)->bank) \
+                       - EXYNOS4_GPIO_PART##part##_BASE) \
+                       & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
+
+#define EXYNOS4X12_GPIO_SET_BANK(part, bank) \
+                       ((((unsigned)&(((struct exynos4x12_gpio_part##part *) \
+                       EXYNOS4X12_GPIO_PART##part##_BASE)->bank) \
+                       - EXYNOS4X12_GPIO_PART##part##_BASE) \
+                       & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
+
+#define EXYNOS5_GPIO_SET_BANK(part, bank) \
+                       ((((unsigned)&(((struct exynos5420_gpio_part##part *) \
+                       EXYNOS5420_GPIO_PART##part##_BASE)->bank) \
+                       - EXYNOS5_GPIO_PART##part##_BASE) \
+                       & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
+
+#define EXYNOS5420_GPIO_SET_BANK(part, bank) \
+                       ((((unsigned)&(((struct exynos5420_gpio_part##part *) \
+                       EXYNOS5420_GPIO_PART##part##_BASE)->bank) \
+                       - EXYNOS5420_GPIO_PART##part##_BASE) \
+                       & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
+
+#define exynos4_gpio_get(part, bank, pin) \
+                       (S5P_GPIO_SET_PART(part) | \
+                       EXYNOS4_GPIO_SET_BANK(part, bank) | \
+                       S5P_GPIO_SET_PIN(pin))
+
+#define exynos4x12_gpio_get(part, bank, pin) \
+                       (S5P_GPIO_SET_PART(part) | \
+                       EXYNOS4X12_GPIO_SET_BANK(part, bank) | \
+                       S5P_GPIO_SET_PIN(pin))
+
+#define exynos5420_gpio_get(part, bank, pin) \
+                       (S5P_GPIO_SET_PART(part) | \
+                       EXYNOS5420_GPIO_SET_BANK(part, bank) | \
+                       S5P_GPIO_SET_PIN(pin))
+
+#define exynos5_gpio_get(part, bank, pin) \
+                       (S5P_GPIO_SET_PART(part) | \
+                       EXYNOS5_GPIO_SET_BANK(part, bank) | \
+                       S5P_GPIO_SET_PIN(pin))
+
+static inline unsigned int s5p_gpio_base(int gpio)
 {
-       if (cpu_is_exynos5()) {
-               if (proid_is_exynos5420()) {
-                       if (nr < EXYNOS5420_GPIO_PART1_MAX)
-                               return EXYNOS5420_GPIO_PART1_BASE;
-                       else if (nr < EXYNOS5420_GPIO_PART2_MAX)
-                               return EXYNOS5420_GPIO_PART2_BASE;
-                       else if (nr < EXYNOS5420_GPIO_PART3_MAX)
-                               return EXYNOS5420_GPIO_PART3_BASE;
-                       else
-                               return EXYNOS5420_GPIO_PART4_BASE;
-               } else {
-                       if (nr < EXYNOS5_GPIO_PART1_MAX)
-                               return EXYNOS5_GPIO_PART1_BASE;
-                       else if (nr < EXYNOS5_GPIO_PART2_MAX)
-                               return EXYNOS5_GPIO_PART2_BASE;
-                       else
-                               return EXYNOS5_GPIO_PART3_BASE;
-               }
-       } else if (cpu_is_exynos4()) {
-               if (nr < EXYNOS4_GPIO_PART1_MAX)
-                       return EXYNOS4_GPIO_PART1_BASE;
-               else
-                       return EXYNOS4_GPIO_PART2_BASE;
+       unsigned gpio_part = S5P_GPIO_GET_PART(gpio);
+
+       switch (gpio_part) {
+       case 1:
+               return samsung_get_base_gpio_part1();
+       case 2:
+               return samsung_get_base_gpio_part2();
+       case 3:
+               return samsung_get_base_gpio_part3();
+       case 4:
+               return samsung_get_base_gpio_part4();
+       default:
+               return 0;
        }
-
-       return 0;
-}
-
-static inline unsigned int s5p_gpio_part_max(int nr)
-{
-       if (cpu_is_exynos5()) {
-               if (proid_is_exynos5420()) {
-                       if (nr < EXYNOS5420_GPIO_PART1_MAX)
-                               return 0;
-                       else if (nr < EXYNOS5420_GPIO_PART2_MAX)
-                               return EXYNOS5420_GPIO_PART1_MAX;
-                       else if (nr < EXYNOS5420_GPIO_PART3_MAX)
-                               return EXYNOS5420_GPIO_PART2_MAX;
-                       else if (nr < EXYNOS5420_GPIO_PART4_MAX)
-                               return EXYNOS5420_GPIO_PART3_MAX;
-                       else
-                               return EXYNOS5420_GPIO_PART4_MAX;
-               } else {
-                       if (nr < EXYNOS5_GPIO_PART1_MAX)
-                               return 0;
-                       else if (nr < EXYNOS5_GPIO_PART2_MAX)
-                               return EXYNOS5_GPIO_PART1_MAX;
-                       else
-                               return EXYNOS5_GPIO_PART2_MAX;
-               }
-       } else if (cpu_is_exynos4()) {
-               if (proid_is_exynos4412()) {
-                       if (nr < EXYNOS4X12_GPIO_PART1_MAX)
-                               return 0;
-                       else if (nr < EXYNOS4X12_GPIO_PART2_MAX)
-                               return EXYNOS4X12_GPIO_PART1_MAX;
-                       else
-                               return EXYNOS4X12_GPIO_PART2_MAX;
-               } else {
-                       if (nr < EXYNOS4_GPIO_PART1_MAX)
-                               return 0;
-                       else
-                               return EXYNOS4_GPIO_PART1_MAX;
-               }
-       }
-
-       return 0;
 }
 #endif
 
index ac60fe6386324496557691fbbf3feb08efa59c3c..da8df74a10a8f0041950758baac927df8f1c5cbe 100644 (file)
@@ -125,20 +125,45 @@ void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode);
 /* GPIO pins per bank  */
 #define GPIO_PER_BANK 8
 
-static inline unsigned int s5p_gpio_base(int nr)
-{
-       return S5PC110_GPIO_BASE;
-}
+#define S5P_GPIO_PART_SHIFT    (24)
+#define S5P_GPIO_PART_MASK     (0xff)
+#define S5P_GPIO_BANK_SHIFT    (8)
+#define S5P_GPIO_BANK_MASK     (0xffff)
+#define S5P_GPIO_PIN_MASK      (0xff)
+
+#define S5P_GPIO_SET_PART(x) \
+                       (((x) & S5P_GPIO_PART_MASK) << S5P_GPIO_PART_SHIFT)
+
+#define S5P_GPIO_GET_PART(x) \
+                       (((x) >> S5P_GPIO_PART_SHIFT) & S5P_GPIO_PART_MASK)
+
+#define S5P_GPIO_SET_PIN(x) \
+                       ((x) & S5P_GPIO_PIN_MASK)
 
-static inline unsigned int s5p_gpio_part_max(int nr)
+#define S5PC100_SET_BANK(bank) \
+                       (((unsigned)&(((struct s5pc100_gpio *) \
+                       S5PC100_GPIO_BASE)->bank) - S5PC100_GPIO_BASE) \
+                       & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
+
+#define S5PC110_SET_BANK(bank) \
+                       ((((unsigned)&(((struct s5pc110_gpio *) \
+                       S5PC110_GPIO_BASE)->bank) - S5PC110_GPIO_BASE) \
+                       & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
+
+#define s5pc100_gpio_get(bank, pin) \
+                       (S5P_GPIO_SET_PART(0) | \
+                       S5PC100_SET_BANK(bank) | \
+                       S5P_GPIO_SET_PIN(pin))
+
+#define s5pc110_gpio_get(bank, pin) \
+                       (S5P_GPIO_SET_PART(0) | \
+                       S5PC110_SET_BANK(bank) | \
+                       S5P_GPIO_SET_PIN(pin))
+
+static inline unsigned int s5p_gpio_base(int nr)
 {
-       return 0;
+       return samsung_get_base_gpio();
 }
-
-#define s5pc110_gpio_get_nr(bank, pin)   \
-       ((((((unsigned int)&(((struct s5pc110_gpio *)S5PC110_GPIO_BASE)->bank))\
-           - S5PC110_GPIO_BASE) / sizeof(struct s5p_gpio_bank)) \
-         * GPIO_PER_BANK) + pin)
 #endif
 
 /* Pin configurations */
index be15357e69fb0627eaa06eaf13d5e3e88ebe62f0..1e96fdc6af981f68c4c648d0ea9508dd33a49e7b 100644 (file)
@@ -144,17 +144,17 @@ static void board_init_i2c(void)
 int get_soft_i2c_scl_pin(void)
 {
        if (I2C_ADAP_HWNR)
-               return exynos4x12_gpio_part2_get_nr(m2, 1); /* I2C9 */
+               return exynos4x12_gpio_get(2, m2, 1); /* I2C9 */
        else
-               return exynos4x12_gpio_part1_get_nr(f1, 4); /* I2C8 */
+               return exynos4x12_gpio_get(1, f1, 4); /* I2C8 */
 }
 
 int get_soft_i2c_sda_pin(void)
 {
        if (I2C_ADAP_HWNR)
-               return exynos4x12_gpio_part2_get_nr(m2, 0); /* I2C9 */
+               return exynos4x12_gpio_get(2, m2, 0); /* I2C9 */
        else
-               return exynos4x12_gpio_part1_get_nr(f1, 5); /* I2C8 */
+               return exynos4x12_gpio_get(1, f1, 5); /* I2C8 */
 }
 #endif
 
index 7eeb96d19ff0daad96bfd4ff546bd090048ff73a..11a0472c695eeb4c9aeae1e663a7a62e186ff411 100644 (file)
@@ -9,6 +9,11 @@
 #include <asm/io.h>
 #include <asm/gpio.h>
 
+#define S5P_GPIO_GET_BANK(x)   ((x >> S5P_GPIO_BANK_SHIFT) \
+                               & S5P_GPIO_BANK_MASK)
+
+#define S5P_GPIO_GET_PIN(x)    (x & S5P_GPIO_PIN_MASK)
+
 #define CON_MASK(x)            (0xf << ((x) << 2))
 #define CON_SFR(x, v)          ((v) << ((x) << 2))
 
@@ -124,17 +129,15 @@ void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode)
 
 struct s5p_gpio_bank *s5p_gpio_get_bank(unsigned gpio)
 {
-       int bank;
-       unsigned g = gpio - s5p_gpio_part_max(gpio);
+       unsigned bank = S5P_GPIO_GET_BANK(gpio);
+       unsigned base = s5p_gpio_base(gpio);
 
-       bank = g / GPIO_PER_BANK;
-       bank *= sizeof(struct s5p_gpio_bank);
-       return (struct s5p_gpio_bank *) (s5p_gpio_base(gpio) + bank);
+       return (struct s5p_gpio_bank *)(base + bank);
 }
 
 int s5p_gpio_get_pin(unsigned gpio)
 {
-       return gpio % GPIO_PER_BANK;
+       return S5P_GPIO_GET_PIN(gpio);
 }
 
 /* Common GPIO API */
index 0590d201ceaa5f14e940d1d892f4f9e19784501a..4cdf937a60c8eab41ce0c02978b18cfbaf1b6bd9 100644 (file)
 /*
  * I2C Settings
  */
-#define CONFIG_SOFT_I2C_GPIO_SCL s5pc110_gpio_get_nr(j4, 3)
-#define CONFIG_SOFT_I2C_GPIO_SDA s5pc110_gpio_get_nr(j4, 0)
+#define CONFIG_SOFT_I2C_GPIO_SCL s5pc110_gpio_get(j4, 3)
+#define CONFIG_SOFT_I2C_GPIO_SDA s5pc110_gpio_get(j4, 0)
 
 #define CONFIG_SYS_I2C
 #define CONFIG_SYS_I2C_SOFT            /* I2C bit-banged */
index d9e4c5683f8cf5ef799ea8c4d2dc144747fed778..02a1c99a831455ca960bd66c9f7bef9a6549ec2e 100644 (file)
 /*
  * I2C Settings
  */
-#define CONFIG_SOFT_I2C_GPIO_SCL exynos4_gpio_part1_get_nr(b, 7)
-#define CONFIG_SOFT_I2C_GPIO_SDA exynos4_gpio_part1_get_nr(b, 6)
+#define CONFIG_SOFT_I2C_GPIO_SCL exynos4_gpio_get(1, b, 7)
+#define CONFIG_SOFT_I2C_GPIO_SDA exynos4_gpio_get(1, b, 6)
 
 #define CONFIG_SYS_I2C
 #define CONFIG_SYS_I2C_SOFT            /* I2C bit-banged */
  */
 #define CONFIG_SOFT_SPI
 #define CONFIG_SOFT_SPI_MODE SPI_MODE_3
-#define CONFIG_SOFT_SPI_GPIO_SCLK exynos4_gpio_part2_get_nr(y3, 1)
-#define CONFIG_SOFT_SPI_GPIO_MOSI exynos4_gpio_part2_get_nr(y3, 3)
-#define CONFIG_SOFT_SPI_GPIO_MISO exynos4_gpio_part2_get_nr(y3, 0)
-#define CONFIG_SOFT_SPI_GPIO_CS exynos4_gpio_part2_get_nr(y4, 3)
+#define CONFIG_SOFT_SPI_GPIO_SCLK exynos4_gpio_get(2, y3, 1)
+#define CONFIG_SOFT_SPI_GPIO_MOSI exynos4_gpio_get(2, y3, 3)
+#define CONFIG_SOFT_SPI_GPIO_MISO exynos4_gpio_get(2, y3, 0)
+#define CONFIG_SOFT_SPI_GPIO_CS exynos4_gpio_get(2, y4, 3)
 
 #define SPI_DELAY udelay(1)
 #undef SPI_INIT
index fdd8b460b0d69bff6ba2a07dbb865392b86eaf0b..9a927837963e71d20805ee1ed1775391f9e876a4 100644 (file)
 #include <asm/arch/gpio.h>
 
 /* I2C FG */
-#define CONFIG_SOFT_I2C_GPIO_SCL exynos4_gpio_part2_get_nr(y4, 1)
-#define CONFIG_SOFT_I2C_GPIO_SDA exynos4_gpio_part2_get_nr(y4, 0)
+#define CONFIG_SOFT_I2C_GPIO_SCL exynos4_gpio_get(2, y4, 1)
+#define CONFIG_SOFT_I2C_GPIO_SDA exynos4_gpio_get(2, y4, 0)
 
 #define CONFIG_POWER
 #define CONFIG_POWER_I2C