static int ddr3_read_spd(ddr3_spd_eeprom_t *spd_params)
{
int ret;
-#if !CONFIG_IS_ENABLED(DM_I2C)
- int old_bus;
-
- i2c_init(CONFIG_SYS_DAVINCI_I2C_SPEED, CONFIG_SYS_DAVINCI_I2C_SLAVE);
-
- old_bus = i2c_get_bus_num();
- i2c_set_bus_num(1);
-
- ret = i2c_read(0x53, 0, 1, (unsigned char *)spd_params, 256);
-
- i2c_set_bus_num(old_bus);
-#else
struct udevice *dev;
ret = i2c_get_chip_for_busnum(1, 0x53, 1, &dev);
if (!ret)
ret = dm_i2c_read(dev, 0, (unsigned char *)spd_params, 256);
-#endif
if (ret) {
printf("Cannot read DIMM params\n");
return 1;
#include <linux/delay.h>
#include "davinci_i2c.h"
-#if CONFIG_IS_ENABLED(DM_I2C)
/* Information about i2c controller */
struct i2c_bus {
int id;
uint speed;
struct i2c_regs *regs;
};
-#endif
#define CHECK_NACK() \
do {\
return rc;
}
-#if !CONFIG_IS_ENABLED(DM_I2C)
-static struct i2c_regs *davinci_get_base(struct i2c_adapter *adap)
-{
- switch (adap->hwadapnr) {
-#if CONFIG_SYS_I2C_BUS_MAX >= 3
- case 2:
- return (struct i2c_regs *)I2C2_BASE;
-#endif
-#if CONFIG_SYS_I2C_BUS_MAX >= 2
- case 1:
- return (struct i2c_regs *)I2C1_BASE;
-#endif
- case 0:
- return (struct i2c_regs *)I2C_BASE;
-
- default:
- printf("wrong hwadapnr: %d\n", adap->hwadapnr);
- }
-
- return NULL;
-}
-
-static uint davinci_i2c_setspeed(struct i2c_adapter *adap, uint speed)
-{
- struct i2c_regs *i2c_base = davinci_get_base(adap);
- uint ret;
-
- adap->speed = speed;
- ret = _davinci_i2c_setspeed(i2c_base, speed);
-
- return ret;
-}
-
-static void davinci_i2c_init(struct i2c_adapter *adap, int speed,
- int slaveadd)
-{
- struct i2c_regs *i2c_base = davinci_get_base(adap);
-
- adap->speed = speed;
- _davinci_i2c_init(i2c_base, speed, slaveadd);
-
- return;
-}
-
-static int davinci_i2c_read(struct i2c_adapter *adap, uint8_t chip,
- uint32_t addr, int alen, uint8_t *buf, int len)
-{
- struct i2c_regs *i2c_base = davinci_get_base(adap);
- return _davinci_i2c_read(i2c_base, chip, addr, alen, buf, len);
-}
-
-static int davinci_i2c_write(struct i2c_adapter *adap, uint8_t chip,
- uint32_t addr, int alen, uint8_t *buf, int len)
-{
- struct i2c_regs *i2c_base = davinci_get_base(adap);
-
- return _davinci_i2c_write(i2c_base, chip, addr, alen, buf, len);
-}
-
-static int davinci_i2c_probe_chip(struct i2c_adapter *adap, uint8_t chip)
-{
- struct i2c_regs *i2c_base = davinci_get_base(adap);
-
- return _davinci_i2c_probe_chip(i2c_base, chip);
-}
-
-U_BOOT_I2C_ADAP_COMPLETE(davinci_0, davinci_i2c_init, davinci_i2c_probe_chip,
- davinci_i2c_read, davinci_i2c_write,
- davinci_i2c_setspeed,
- CONFIG_SYS_DAVINCI_I2C_SPEED,
- CONFIG_SYS_DAVINCI_I2C_SLAVE,
- 0)
-
-#if CONFIG_SYS_I2C_BUS_MAX >= 2
-U_BOOT_I2C_ADAP_COMPLETE(davinci_1, davinci_i2c_init, davinci_i2c_probe_chip,
- davinci_i2c_read, davinci_i2c_write,
- davinci_i2c_setspeed,
- CONFIG_SYS_DAVINCI_I2C_SPEED1,
- CONFIG_SYS_DAVINCI_I2C_SLAVE1,
- 1)
-#endif
-
-#if CONFIG_SYS_I2C_BUS_MAX >= 3
-U_BOOT_I2C_ADAP_COMPLETE(davinci_2, davinci_i2c_init, davinci_i2c_probe_chip,
- davinci_i2c_read, davinci_i2c_write,
- davinci_i2c_setspeed,
- CONFIG_SYS_DAVINCI_I2C_SPEED2,
- CONFIG_SYS_DAVINCI_I2C_SLAVE2,
- 2)
-#endif
-
-#else /* CONFIG_DM_I2C */
-
static int davinci_i2c_xfer(struct udevice *bus, struct i2c_msg *msg,
int nmsgs)
{
.priv_auto = sizeof(struct i2c_bus),
.ops = &davinci_i2c_ops,
};
-
-#endif /* CONFIG_DM_I2C */