Permalink
Browse files

set i2c speed via module-parameter or menuconfig. Thanks FrankBoesing

  • Loading branch information...
1 parent b76c3a8 commit e5c5956ed7aa509187515a1acfe4ec2ca6d63433 @popcornmix popcornmix committed Oct 3, 2012
Showing with 19 additions and 4 deletions.
  1. +11 −0 drivers/i2c/busses/Kconfig
  2. +8 −4 drivers/i2c/busses/i2c-bcm2708.c
View
@@ -352,6 +352,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
@@ -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;

0 comments on commit e5c5956

Please sign in to comment.