mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 18:47:06 +00:00
42 lines
1.4 KiB
Diff
42 lines
1.4 KiB
Diff
|
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)
|