i2c: pasemi: Allow to configure bus frequency
authorSven Peter <sven@svenpeter.dev>
Fri, 8 Oct 2021 16:35:29 +0000 (18:35 +0200)
committerWolfram Sang <wsa@kernel.org>
Mon, 11 Oct 2021 09:45:28 +0000 (11:45 +0200)
Right now the bus frequency has always been hardcoded as
100 KHz with the specific reference clock used in the PASemi
PCI controllers. Make this configurable to prepare for the
platform driver.

Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Sven Peter <sven@svenpeter.dev>
Acked-by: Olof Johansson <olof@lixom.net>
Tested-by: Christian Zigotzky <chzigotzky@xenosoft.de>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
drivers/i2c/busses/i2c-pasemi-core.c
drivers/i2c/busses/i2c-pasemi-core.h
drivers/i2c/busses/i2c-pasemi-pci.c

index 232587c..9fb8fac 100644 (file)
@@ -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)
index 7acc33d..30a7990 100644 (file)
@@ -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);
index 644656e..96585bb 100644 (file)
@@ -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)) {