From: vishwa <[email protected]>

With current implementation, when I2C is used as a module,
for slave devices which operate at different frequencies,
the bus frequency needs to be modified in the board
configuration file and kernel needs to be re-built.

This patch addresses this issue by adding bus frequency as
module parameter.

Signed-off-by: vishwa <[email protected]>
---
 drivers/i2c/busses/i2c-davinci.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c
index 2222c87..ba0817c 100644
--- a/drivers/i2c/busses/i2c-davinci.c
+++ b/drivers/i2c/busses/i2c-davinci.c
@@ -98,6 +98,13 @@
 #define DAVINCI_I2C_IMR_NACK   BIT(1)
 #define DAVINCI_I2C_IMR_AL     BIT(0)
 
+/*
+ * Following are the default values for the module parameters
+ * If user didn't specify the bus frequency, driver will
+ * take the bus freq from board configuration.
+ */
+static int i2c_davinci_busfreq;
+
 struct davinci_i2c_dev {
        struct device           *dev;
        void __iomem            *base;
@@ -217,6 +224,9 @@ static void i2c_davinci_calc_clk_dividers(struct 
davinci_i2c_dev *dev)
                psc++;  /* better to run under spec than over */
        d = (psc >= 2) ? 5 : 7 - psc;
 
+       if (i2c_davinci_busfreq != 0)
+               pdata->bus_freq = i2c_davinci_busfreq;
+
        clk = ((input_clock / (psc + 1)) / (pdata->bus_freq * 1000)) - (d << 1);
        clkh = clk >> 1;
        clkl = clk - clkh;
@@ -818,6 +828,7 @@ static void __exit davinci_i2c_exit_driver(void)
        platform_driver_unregister(&davinci_i2c_driver);
 }
 module_exit(davinci_i2c_exit_driver);
+module_param(i2c_davinci_busfreq, int, 0);
 
 MODULE_AUTHOR("Texas Instruments India");
 MODULE_DESCRIPTION("TI DaVinci I2C bus adapter");
-- 
1.5.6

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to