From 1ac1909eeb52a166055d01b662b9045b9adfbcbd Mon Sep 17 00:00:00 2001 From: Alexander Stein Date: Mon, 28 Jan 2013 10:44:12 +0100 Subject: [PATCH] --- yaml --- r: 358799 b: refs/heads/master c: b08369a174a183e88baa98ab5e3566a617a3a7f8 h: refs/heads/master i: 358797: 5cd6f191a05383fad553857d98a76631d9908845 358795: f3c32c6478b4ca1508d2a04ff22eda2b9e8ddf84 358791: e98b6ddc0ee28283fa9b3779d0c71420bcfcba4a 358783: 1f60830daa845b611128f27e2fa501d0ac884970 v: v3 --- [refs] | 2 +- trunk/drivers/i2c/busses/i2c-isch.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index c492da7f2bf0..88d9774df5c6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4182b434bf760355a1516b1d3d9f73aa419eeeec +refs/heads/master: b08369a174a183e88baa98ab5e3566a617a3a7f8 diff --git a/trunk/drivers/i2c/busses/i2c-isch.c b/trunk/drivers/i2c/busses/i2c-isch.c index 4099f79c2280..8c38aaa7417c 100644 --- a/trunk/drivers/i2c/busses/i2c-isch.c +++ b/trunk/drivers/i2c/busses/i2c-isch.c @@ -40,6 +40,7 @@ /* SCH SMBus address offsets */ #define SMBHSTCNT (0 + sch_smba) #define SMBHSTSTS (1 + sch_smba) +#define SMBHSTCLK (2 + sch_smba) #define SMBHSTADD (4 + sch_smba) /* TSA */ #define SMBHSTCMD (5 + sch_smba) #define SMBHSTDAT0 (6 + sch_smba) @@ -58,6 +59,9 @@ static unsigned short sch_smba; static struct i2c_adapter sch_adapter; +static int backbone_speed = 33000; /* backbone speed in kHz */ +module_param(backbone_speed, int, S_IRUSR | S_IWUSR); +MODULE_PARM_DESC(backbone_speed, "Backbone speed in kHz, (default = 33000)"); /* * Start the i2c transaction -- the i2c_access will prepare the transaction @@ -156,6 +160,19 @@ static s32 sch_access(struct i2c_adapter *adap, u16 addr, dev_dbg(&sch_adapter.dev, "SMBus busy (%02x)\n", temp); return -EAGAIN; } + temp = inw(SMBHSTCLK); + if (!temp) { + /* + * We can't determine if we have 33 or 25 MHz clock for + * SMBus, so expect 33 MHz and calculate a bus clock of + * 100 kHz. If we actually run at 25 MHz the bus will be + * run ~75 kHz instead which should do no harm. + */ + dev_notice(&sch_adapter.dev, + "Clock divider unitialized. Setting defaults\n"); + outw(backbone_speed / (4 * 100), SMBHSTCLK); + } + dev_dbg(&sch_adapter.dev, "access size: %d %s\n", size, (read_write)?"READ":"WRITE"); switch (size) {