Commit fd664ab2 authored by Sven Peter's avatar Sven Peter Committed by Wolfram Sang
Browse files

i2c: pasemi: Allow to configure bus frequency



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: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarSven Peter <sven@svenpeter.dev>
Acked-by: default avatarOlof Johansson <olof@lixom.net>
Tested-by: default avatarChristian Zigotzky <chzigotzky@xenosoft.de>
Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
parent 1a62668c
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -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)
+1 −0
Original line number Diff line number Diff line
@@ -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);
+4 −0
Original line number Diff line number Diff line
@@ -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)) {