summaryrefslogtreecommitdiff
path: root/target/linux/brcm2708/patches-3.10/0066-Only-init-gpio-pins-of-selected-i2c-bus.patch
blob: 10eaf2e27e129869739929dd554cfd108ab4596b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
From 7776b6ebf1063d2f9fac33313c8d049b424fce46 Mon Sep 17 00:00:00 2001
From: popcornmix <popcornmix@gmail.com>
Date: Sat, 8 Jun 2013 22:14:13 +0100
Subject: [PATCH 066/174] Only init gpio pins of selected i2c bus

---
 drivers/i2c/busses/i2c-bcm2708.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

--- a/drivers/i2c/busses/i2c-bcm2708.c
+++ b/drivers/i2c/busses/i2c-bcm2708.c
@@ -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,10 @@ static void bcm2708_i2c_init_pinmode(voi
 	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++) {
+printk("bcm2708_i2c_init_pinmode(%d,%d)\n", id, pin);
 		INP_GPIO(pin);		/* set mode to GPIO input first */
 		SET_GPIO_ALT(pin, 0);	/* set mode to ALT 0 */
 	}
@@ -279,7 +281,7 @@ static int bcm2708_i2c_probe(struct plat
 		return PTR_ERR(clk);
 	}
 
-	bcm2708_i2c_init_pinmode();
+	bcm2708_i2c_init_pinmode(pdev->id);
 
 	bi = kzalloc(sizeof(*bi), GFP_KERNEL);
 	if (!bi)