]> git.hungrycats.org Git - linux/commitdiff
Only init gpio pins of selected i2c bus
authorpopcornmix <popcornmix@gmail.com>
Sat, 8 Jun 2013 21:14:13 +0000 (22:14 +0100)
committerpopcornmix <popcornmix@gmail.com>
Thu, 13 Jun 2013 15:50:35 +0000 (16:50 +0100)
drivers/i2c/busses/i2c-bcm2708.c

index 63414a32daebd68f0ab211037b41d0181039bd7b..13849894ded8d1b50666cd6b39639a070f360954 100644 (file)
@@ -97,7 +97,7 @@ struct bcm2708_i2c {
  *
  * FIXME: This is a hack. Use pinmux / pinctrl.
  */
-static void bcm2708_i2c_init_pinmode(void)
+static void bcm2708_i2c_init_pinmode(int id)
 {
 #define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3))
 #define SET_GPIO_ALT(g,a) *(gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3))
@@ -105,8 +105,9 @@ static void bcm2708_i2c_init_pinmode(void)
        int pin;
        u32 *gpio = ioremap(0x20200000, SZ_16K);
 
+        BUG_ON(id != 0 && id != 1);
        /* BSC0 is on GPIO 0 & 1, BSC1 is on GPIO 2 & 3 */
-       for (pin = 0; pin <= 3; pin++) {
+       for (pin = id*2+0; pin <= id*2+1; pin++) {
                INP_GPIO(pin);          /* set mode to GPIO input first */
                SET_GPIO_ALT(pin, 0);   /* set mode to ALT 0 */
        }
@@ -279,7 +280,7 @@ static int __devinit bcm2708_i2c_probe(struct platform_device *pdev)
                return PTR_ERR(clk);
        }
 
-       bcm2708_i2c_init_pinmode();
+       bcm2708_i2c_init_pinmode(pdev->id);
 
        bi = kzalloc(sizeof(*bi), GFP_KERNEL);
        if (!bi)