You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.4 KiB
77 lines
2.4 KiB
From ec78c7da4fe9f7289cdc3e948b70a43c900f2be4 Mon Sep 17 00:00:00 2001
|
|
From: popcornmix <popcornmix@gmail.com>
|
|
Date: Wed, 3 Oct 2012 20:08:19 +0100
|
|
Subject: [PATCH 036/196] 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(-)
|
|
|
|
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
|
|
index 290aee4..abaff1a 100644
|
|
--- a/drivers/i2c/busses/Kconfig
|
|
+++ b/drivers/i2c/busses/Kconfig
|
|
@@ -355,6 +355,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
|
|
diff --git a/drivers/i2c/busses/i2c-bcm2708.c b/drivers/i2c/busses/i2c-bcm2708.c
|
|
index 7cae615..3391889 100644
|
|
--- 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(struct bcm2708_i2c *bi)
|
|
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 platform_device *pdev)
|
|
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;
|
|
|
|
--
|
|
1.9.1
|
|
|
|
|