@@ -39,9 +39,6 @@
#define CTL_MTR 0x00000200
#define CTL_CLK_M 0x000000ff
-#define CLK_100K_DIV 84
-#define CLK_400K_DIV 21
-
static inline void reg_write(struct pasemi_smbus *smbus, int reg, int val)
{
dev_dbg(smbus->dev, "smbus write reg %lx val %08x\n",
@@ -63,8 +60,9 @@ static inline int reg_read(struct pasemi_smbus *smbus, int reg)
static void pasemi_reset(struct pasemi_smbus *smbus)
{
- reg_write(smbus, REG_CTL, (CTL_MTR | CTL_MRR |
- (CLK_100K_DIV & CTL_CLK_M)));
+ u32 val = (CTL_MTR | CTL_MRR | (smbus->clk_div & CTL_CLK_M));
+
+ reg_write(smbus, REG_CTL, val);
}
static void pasemi_smb_clear(struct pasemi_smbus *smbus)
@@ -14,6 +14,7 @@ struct pasemi_smbus {
void __iomem *ioaddr;
unsigned long base;
int size;
+ unsigned int clk_div;
};
int pasemi_i2c_common_probe(struct pasemi_smbus *smbus);
@@ -17,6 +17,9 @@
#include "i2c-pasemi-core.h"
+#define CLK_100K_DIV 84
+#define CLK_400K_DIV 21
+
static struct pci_driver pasemi_smb_pci_driver;
static int pasemi_smb_pci_probe(struct pci_dev *dev,
@@ -35,6 +38,7 @@ static int pasemi_smb_pci_probe(struct pci_dev *dev,
smbus->dev = &dev->dev;
smbus->base = pci_resource_start(dev, 0);
smbus->size = pci_resource_len(dev, 0);
+ smbus->clk_div = CLK_100K_DIV;
if (!request_region(smbus->base, smbus->size,
pasemi_smb_pci_driver.name)) {