diff options
Diffstat (limited to 'drivers/i2c')
-rw-r--r-- | drivers/i2c/Makefile | 1 | ||||
-rw-r--r-- | drivers/i2c/i2c_core.c | 44 | ||||
-rw-r--r-- | drivers/i2c/pca9564_i2c.c | 179 | ||||
-rw-r--r-- | drivers/i2c/rk_i2c.c | 2 |
4 files changed, 2 insertions, 224 deletions
diff --git a/drivers/i2c/Makefile b/drivers/i2c/Makefile index 446af225bc1..4872c1d7022 100644 --- a/drivers/i2c/Makefile +++ b/drivers/i2c/Makefile @@ -12,7 +12,6 @@ obj-$(CONFIG_$(SPL_)I2C_CROS_EC_LDO) += cros_ec_ldo.o obj-$(CONFIG_SYS_I2C_ADI) += adi_i2c.o obj-$(CONFIG_I2C_MV) += mv_i2c.o -obj-$(CONFIG_PCA9564_I2C) += pca9564_i2c.o obj-$(CONFIG_TSI108_I2C) += tsi108_i2c.o obj-$(CONFIG_SH_SH7734_I2C) += sh_sh7734_i2c.o obj-$(CONFIG_SYS_I2C) += i2c_core.o diff --git a/drivers/i2c/i2c_core.c b/drivers/i2c/i2c_core.c index 16b1aba32aa..19769dab67f 100644 --- a/drivers/i2c/i2c_core.c +++ b/drivers/i2c/i2c_core.c @@ -39,50 +39,6 @@ struct i2c_bus_hose i2c_bus[CONFIG_SYS_NUM_I2C_BUSES] = DECLARE_GLOBAL_DATA_PTR; -void i2c_reloc_fixup(void) -{ -#if defined(CONFIG_NEEDS_MANUAL_RELOC) - struct i2c_adapter *i2c_adap_p = ll_entry_start(struct i2c_adapter, - i2c); - struct i2c_adapter *tmp = i2c_adap_p; - int max = ll_entry_count(struct i2c_adapter, i2c); - int i; - unsigned long addr; - - if (gd->reloc_off == 0) - return; - - for (i = 0; i < max; i++) { - /* i2c_init() */ - addr = (unsigned long)i2c_adap_p->init; - addr += gd->reloc_off; - i2c_adap_p->init = (void *)addr; - /* i2c_probe() */ - addr = (unsigned long)i2c_adap_p->probe; - addr += gd->reloc_off; - i2c_adap_p->probe = (void *)addr; - /* i2c_read() */ - addr = (unsigned long)i2c_adap_p->read; - addr += gd->reloc_off; - i2c_adap_p->read = (void *)addr; - /* i2c_write() */ - addr = (unsigned long)i2c_adap_p->write; - addr += gd->reloc_off; - i2c_adap_p->write = (void *)addr; - /* i2c_set_bus_speed() */ - addr = (unsigned long)i2c_adap_p->set_bus_speed; - addr += gd->reloc_off; - i2c_adap_p->set_bus_speed = (void *)addr; - /* name */ - addr = (unsigned long)i2c_adap_p->name; - addr += gd->reloc_off; - i2c_adap_p->name = (char *)addr; - tmp++; - i2c_adap_p = tmp; - } -#endif -} - #ifndef CONFIG_SYS_I2C_DIRECT_BUS /* * i2c_mux_set() diff --git a/drivers/i2c/pca9564_i2c.c b/drivers/i2c/pca9564_i2c.c deleted file mode 100644 index 4ed0923e62e..00000000000 --- a/drivers/i2c/pca9564_i2c.c +++ /dev/null @@ -1,179 +0,0 @@ -/* - * File: drivers/i2c/pca9564.c - * Based on: drivers/i2c/s3c44b0_i2c.c - * Author: - * - * Created: 2009-06-23 - * Description: PCA9564 i2c bridge driver - * - * Modified: - * Copyright 2009 CJSC "NII STT", http://www.niistt.ru/ - * - * Bugs: - * - * SPDX-License-Identifier: GPL-2.0+ - * - * NOTE: This driver should be converted to driver model before June 2017. - * Please see doc/driver-model/i2c-howto.txt for instructions. - */ - -#include <common.h> -#include <i2c.h> -#include <pca9564.h> -#include <asm/io.h> - -#define PCA_STA (CONFIG_PCA9564_BASE + 0) -#define PCA_TO (CONFIG_PCA9564_BASE + 0) -#define PCA_DAT (CONFIG_PCA9564_BASE + (1 << 2)) -#define PCA_ADR (CONFIG_PCA9564_BASE + (2 << 2)) -#define PCA_CON (CONFIG_PCA9564_BASE + (3 << 2)) - -static unsigned char pca_read_reg(unsigned int reg) -{ - return readb((void *)reg); -} - -static void pca_write_reg(unsigned int reg, unsigned char value) -{ - writeb(value, (void *)reg); -} - -static int pca_wait_busy(void) -{ - unsigned int timeout = 10000; - - while (!(pca_read_reg(PCA_CON) & PCA_CON_SI) && --timeout) - udelay(1); - - if (timeout == 0) - debug("I2C timeout!\n"); - - debug("CON = 0x%02x, STA = 0x%02x\n", pca_read_reg(PCA_CON), - pca_read_reg(PCA_STA)); - - return timeout ? 0 : 1; -} - -/*=====================================================================*/ -/* Public Functions */ -/*=====================================================================*/ - -/*----------------------------------------------------------------------- - * Initialization - */ -void i2c_init(int speed, int slaveaddr) -{ - pca_write_reg(PCA_CON, PCA_CON_ENSIO | speed); -} - -/* - * Probe the given I2C chip address. Returns 0 if a chip responded, - * not 0 on failure. - */ - -int i2c_probe(uchar chip) -{ - unsigned char res; - - pca_write_reg(PCA_CON, PCA_CON_STA | PCA_CON_ENSIO); - pca_wait_busy(); - - pca_write_reg(PCA_CON, PCA_CON_STA | PCA_CON_ENSIO); - - pca_write_reg(PCA_DAT, (chip << 1) | 1); - res = pca_wait_busy(); - - if ((res == 0) && (pca_read_reg(PCA_STA) == 0x48)) - res = 1; - - pca_write_reg(PCA_CON, PCA_CON_STO | PCA_CON_ENSIO); - - return res; -} - -/* - * Read/Write interface: - * chip: I2C chip address, range 0..127 - * addr: Memory (register) address within the chip - * alen: Number of bytes to use for addr (typically 1, 2 for larger - * memories, 0 for register type devices with only one - * register) - * buffer: Where to read/write the data - * len: How many bytes to read/write - * - * Returns: 0 on success, not 0 on failure - */ -int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len) -{ - int i; - - pca_write_reg(PCA_CON, PCA_CON_ENSIO | PCA_CON_STA); - pca_wait_busy(); - - pca_write_reg(PCA_CON, PCA_CON_ENSIO); - - pca_write_reg(PCA_DAT, (chip << 1)); - pca_wait_busy(); - pca_write_reg(PCA_CON, PCA_CON_ENSIO); - - if (alen > 0) { - pca_write_reg(PCA_DAT, addr); - pca_wait_busy(); - pca_write_reg(PCA_CON, PCA_CON_ENSIO); - } - - pca_write_reg(PCA_CON, PCA_CON_ENSIO | PCA_CON_STO); - - udelay(500); - - pca_write_reg(PCA_CON, PCA_CON_ENSIO | PCA_CON_STA); - pca_wait_busy(); - pca_write_reg(PCA_CON, PCA_CON_ENSIO); - - pca_write_reg(PCA_DAT, (chip << 1) | 1); - pca_wait_busy(); - - for (i = 0; i < len; ++i) { - if (i == len - 1) - pca_write_reg(PCA_CON, PCA_CON_ENSIO); - else - pca_write_reg(PCA_CON, PCA_CON_ENSIO | PCA_CON_AA); - - pca_wait_busy(); - buffer[i] = pca_read_reg(PCA_DAT); - - } - - pca_write_reg(PCA_CON, PCA_CON_ENSIO | PCA_CON_STO); - - return 0; -} - -int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len) -{ - int i; - - pca_write_reg(PCA_CON, PCA_CON_ENSIO | PCA_CON_STA); - pca_wait_busy(); - pca_write_reg(PCA_CON, PCA_CON_ENSIO); - - pca_write_reg(PCA_DAT, chip << 1); - pca_wait_busy(); - pca_write_reg(PCA_CON, PCA_CON_ENSIO); - - if (alen > 0) { - pca_write_reg(PCA_DAT, addr); - pca_wait_busy(); - pca_write_reg(PCA_CON, PCA_CON_ENSIO); - } - - for (i = 0; i < len; ++i) { - pca_write_reg(PCA_DAT, buffer[i]); - pca_wait_busy(); - pca_write_reg(PCA_CON, PCA_CON_ENSIO); - } - - pca_write_reg(PCA_CON, PCA_CON_STO | PCA_CON_ENSIO); - - return 0; -} diff --git a/drivers/i2c/rk_i2c.c b/drivers/i2c/rk_i2c.c index 7c701cbed0a..af925cecdbb 100644 --- a/drivers/i2c/rk_i2c.c +++ b/drivers/i2c/rk_i2c.c @@ -380,6 +380,8 @@ static const struct dm_i2c_ops rockchip_i2c_ops = { }; static const struct udevice_id rockchip_i2c_ids[] = { + { .compatible = "rockchip,rk3066-i2c" }, + { .compatible = "rockchip,rk3188-i2c" }, { .compatible = "rockchip,rk3288-i2c" }, { } }; |