diff options
Diffstat (limited to 'target/linux/brcm2708/patches-3.10/0036-set-i2c-speed-via-module-parameter-or-menuconfig.-Th.patch')
-rw-r--r-- | target/linux/brcm2708/patches-3.10/0036-set-i2c-speed-via-module-parameter-or-menuconfig.-Th.patch | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-3.10/0036-set-i2c-speed-via-module-parameter-or-menuconfig.-Th.patch b/target/linux/brcm2708/patches-3.10/0036-set-i2c-speed-via-module-parameter-or-menuconfig.-Th.patch new file mode 100644 index 0000000..05045f1 --- /dev/null +++ b/target/linux/brcm2708/patches-3.10/0036-set-i2c-speed-via-module-parameter-or-menuconfig.-Th.patch @@ -0,0 +1,70 @@ +From 17bb1be5d09fe58cd14084c5eac0052f03d6d71f Mon Sep 17 00:00:00 2001 +From: popcornmix <popcornmix@gmail.com> +Date: Wed, 3 Oct 2012 20:08:19 +0100 +Subject: [PATCH 036/174] set i2c speed via module-parameter or menuconfig. + Thanks FrankBoesing + +--- + drivers/i2c/busses/Kconfig | 11 +++++++++++ + drivers/i2c/busses/i2c-bcm2708.c | 12 ++++++++---- + 2 files changed, 19 insertions(+), 4 deletions(-) + +--- a/drivers/i2c/busses/Kconfig ++++ b/drivers/i2c/busses/Kconfig +@@ -353,6 +353,17 @@ config I2C_BCM2708 + support for the BCM2708. BSC is a Broadcom proprietary bus compatible + with I2C/TWI/SMBus. + ++config I2C_BCM2708_BAUDRATE ++ prompt "BCM2708 I2C baudrate" ++ depends on I2C_BCM2708 ++ int ++ default 100000 ++ help ++ Set the I2C baudrate. This will alter the default value. A ++ different baudrate can be set by using a module parameter as well. If ++ no parameter is provided when loading, this is the value that will be ++ used. ++ + config I2C_BLACKFIN_TWI + tristate "Blackfin TWI I2C support" + depends on BLACKFIN +--- a/drivers/i2c/busses/i2c-bcm2708.c ++++ b/drivers/i2c/busses/i2c-bcm2708.c +@@ -66,11 +66,15 @@ + #define BSC_S_DONE 0x00000002 + #define BSC_S_TA 0x00000001 + +-#define I2C_CLOCK_HZ 100000 /* FIXME: get from DT */ + #define I2C_TIMEOUT_MS 150 + + #define DRV_NAME "bcm2708_i2c" + ++static unsigned int baudrate = CONFIG_I2C_BCM2708_BAUDRATE; ++module_param(baudrate, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); ++MODULE_PARM_DESC(baudrate, "The I2C baudrate"); ++ ++ + struct bcm2708_i2c { + struct i2c_adapter adapter; + +@@ -148,7 +152,7 @@ static inline void bcm2708_bsc_setup(str + u32 c = BSC_C_I2CEN | BSC_C_INTD | BSC_C_ST | BSC_C_CLEAR_1; + + bus_hz = clk_get_rate(bi->clk); +- cdiv = bus_hz / I2C_CLOCK_HZ; ++ cdiv = bus_hz / baudrate; + + if (bi->msg->flags & I2C_M_RD) + c |= BSC_C_INTR | BSC_C_READ; +@@ -331,8 +335,8 @@ static int bcm2708_i2c_probe(struct plat + goto out_free_irq; + } + +- dev_info(&pdev->dev, "BSC%d Controller at 0x%08lx (irq %d)\n", +- pdev->id, (unsigned long)regs->start, irq); ++ dev_info(&pdev->dev, "BSC%d Controller at 0x%08lx (irq %d) (baudrate %dk)\n", ++ pdev->id, (unsigned long)regs->start, irq, baudrate/1000); + + return 0; + |