提交 98e4249f 编写于 作者: M Mario Six

i2c: ihs: Get rid of fpgamap

Since the IHS I2C driver want upstream, the surrounding infrastructure
has changed quite a bit (notably, the fpgamap driver was replaced with a
regmap driver).

Update the driver to work with these changes.
Signed-off-by: NMario Six <mario.six@gdsys.cc>
Reviewed-by: NHeiko Schocher <hs@denx.de>
上级 32dbe8c5
...@@ -8,8 +8,7 @@ ...@@ -8,8 +8,7 @@
#include <i2c.h> #include <i2c.h>
#ifdef CONFIG_DM_I2C #ifdef CONFIG_DM_I2C
#include <dm.h> #include <dm.h>
#include <fpgamap.h> #include <regmap.h>
#include "../misc/gdsys_soc.h"
#else #else
#include <gdsys_fpga.h> #include <gdsys_fpga.h>
#endif #endif
...@@ -18,18 +17,24 @@ ...@@ -18,18 +17,24 @@
#ifdef CONFIG_DM_I2C #ifdef CONFIG_DM_I2C
struct ihs_i2c_priv { struct ihs_i2c_priv {
uint speed; uint speed;
phys_addr_t addr; struct regmap *map;
}; };
enum { struct ihs_i2c_regs {
REG_INTERRUPT_STATUS = 0x00, u16 interrupt_status;
REG_INTERRUPT_ENABLE_CONTROL = 0x02, u16 interrupt_enable_control;
REG_WRITE_MAILBOX_EXT = 0x04, u16 write_mailbox_ext;
REG_WRITE_MAILBOX = 0x06, u16 write_mailbox;
REG_READ_MAILBOX_EXT = 0x08, u16 read_mailbox_ext;
REG_READ_MAILBOX = 0x0A, u16 read_mailbox;
}; };
#define ihs_i2c_set(map, member, val) \
regmap_set(map, struct ihs_i2c_regs, member, val)
#define ihs_i2c_get(map, member, valp) \
regmap_get(map, struct ihs_i2c_regs, member, valp)
#else /* !CONFIG_DM_I2C */ #else /* !CONFIG_DM_I2C */
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
...@@ -92,14 +97,10 @@ static int wait_for_int(bool read) ...@@ -92,14 +97,10 @@ static int wait_for_int(bool read)
uint ctr = 0; uint ctr = 0;
#ifdef CONFIG_DM_I2C #ifdef CONFIG_DM_I2C
struct ihs_i2c_priv *priv = dev_get_priv(dev); struct ihs_i2c_priv *priv = dev_get_priv(dev);
struct udevice *fpga;
gdsys_soc_get_fpga(dev, &fpga);
#endif #endif
#ifdef CONFIG_DM_I2C #ifdef CONFIG_DM_I2C
fpgamap_read(fpga, priv->addr + REG_INTERRUPT_STATUS, &val, ihs_i2c_get(priv->map, interrupt_status, &val);
FPGAMAP_SIZE_16);
#else #else
I2C_GET_REG(interrupt_status, &val); I2C_GET_REG(interrupt_status, &val);
#endif #endif
...@@ -110,8 +111,7 @@ static int wait_for_int(bool read) ...@@ -110,8 +111,7 @@ static int wait_for_int(bool read)
if (ctr++ > 5000) if (ctr++ > 5000)
return 1; return 1;
#ifdef CONFIG_DM_I2C #ifdef CONFIG_DM_I2C
fpgamap_read(fpga, priv->addr + REG_INTERRUPT_STATUS, &val, ihs_i2c_get(priv->map, interrupt_status, &val);
FPGAMAP_SIZE_16);
#else #else
I2C_GET_REG(interrupt_status, &val); I2C_GET_REG(interrupt_status, &val);
#endif #endif
...@@ -132,18 +132,13 @@ static int ihs_i2c_transfer(uchar chip, uchar *buffer, int len, bool read, ...@@ -132,18 +132,13 @@ static int ihs_i2c_transfer(uchar chip, uchar *buffer, int len, bool read,
u16 data; u16 data;
#ifdef CONFIG_DM_I2C #ifdef CONFIG_DM_I2C
struct ihs_i2c_priv *priv = dev_get_priv(dev); struct ihs_i2c_priv *priv = dev_get_priv(dev);
struct udevice *fpga;
gdsys_soc_get_fpga(dev, &fpga);
#endif #endif
/* Clear interrupt status */ /* Clear interrupt status */
data = I2CINT_ERROR_EV | I2CINT_RECEIVE_EV | I2CINT_TRANSMIT_EV; data = I2CINT_ERROR_EV | I2CINT_RECEIVE_EV | I2CINT_TRANSMIT_EV;
#ifdef CONFIG_DM_I2C #ifdef CONFIG_DM_I2C
fpgamap_write(fpga, priv->addr + REG_INTERRUPT_STATUS, &data, ihs_i2c_set(priv->map, interrupt_status, data);
FPGAMAP_SIZE_16); ihs_i2c_get(priv->map, interrupt_status, &val);
fpgamap_read(fpga, priv->addr + REG_INTERRUPT_STATUS, &val,
FPGAMAP_SIZE_16);
#else #else
I2C_SET_REG(interrupt_status, data); I2C_SET_REG(interrupt_status, data);
I2C_GET_REG(interrupt_status, &val); I2C_GET_REG(interrupt_status, &val);
...@@ -156,8 +151,7 @@ static int ihs_i2c_transfer(uchar chip, uchar *buffer, int len, bool read, ...@@ -156,8 +151,7 @@ static int ihs_i2c_transfer(uchar chip, uchar *buffer, int len, bool read,
if (len > 1) if (len > 1)
val |= buffer[1] << 8; val |= buffer[1] << 8;
#ifdef CONFIG_DM_I2C #ifdef CONFIG_DM_I2C
fpgamap_write(fpga, priv->addr + REG_WRITE_MAILBOX_EXT, &val, ihs_i2c_set(priv->map, write_mailbox_ext, val);
FPGAMAP_SIZE_16);
#else #else
I2C_SET_REG(write_mailbox_ext, val); I2C_SET_REG(write_mailbox_ext, val);
#endif #endif
...@@ -170,8 +164,7 @@ static int ihs_i2c_transfer(uchar chip, uchar *buffer, int len, bool read, ...@@ -170,8 +164,7 @@ static int ihs_i2c_transfer(uchar chip, uchar *buffer, int len, bool read,
| (is_last ? 0 : I2CMB_HOLD_BUS); | (is_last ? 0 : I2CMB_HOLD_BUS);
#ifdef CONFIG_DM_I2C #ifdef CONFIG_DM_I2C
fpgamap_write(fpga, priv->addr + REG_WRITE_MAILBOX, &data, ihs_i2c_set(priv->map, write_mailbox, data);
FPGAMAP_SIZE_16);
#else #else
I2C_SET_REG(write_mailbox, data); I2C_SET_REG(write_mailbox, data);
#endif #endif
...@@ -186,8 +179,7 @@ static int ihs_i2c_transfer(uchar chip, uchar *buffer, int len, bool read, ...@@ -186,8 +179,7 @@ static int ihs_i2c_transfer(uchar chip, uchar *buffer, int len, bool read,
/* If we want to read, get the bytes from the mailbox */ /* If we want to read, get the bytes from the mailbox */
if (read) { if (read) {
#ifdef CONFIG_DM_I2C #ifdef CONFIG_DM_I2C
fpgamap_read(fpga, priv->addr + REG_READ_MAILBOX_EXT, &val, ihs_i2c_get(priv->map, read_mailbox_ext, &val);
FPGAMAP_SIZE_16);
#else #else
I2C_GET_REG(read_mailbox_ext, &val); I2C_GET_REG(read_mailbox_ext, &val);
#endif #endif
...@@ -270,11 +262,8 @@ static int ihs_i2c_access(struct i2c_adapter *adap, uchar chip, u8 *addr, ...@@ -270,11 +262,8 @@ static int ihs_i2c_access(struct i2c_adapter *adap, uchar chip, u8 *addr,
int ihs_i2c_probe(struct udevice *bus) int ihs_i2c_probe(struct udevice *bus)
{ {
struct ihs_i2c_priv *priv = dev_get_priv(bus); struct ihs_i2c_priv *priv = dev_get_priv(bus);
int addr;
addr = dev_read_u32_default(bus, "reg", -1);
priv->addr = addr; regmap_init_mem(dev_ofnode(bus), &priv->map);
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册