summaryrefslogtreecommitdiff
path: root/target/linux/brcm2708/patches-3.10/0036-set-i2c-speed-via-module-parameter-or-menuconfig.-Th.patch
diff options
context:
space:
mode:
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.patch70
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;
+