Lines Matching refs:i2c_bus
136 static uint8_t i2c_imx_get_clk(struct mxc_i2c_bus *i2c_bus, unsigned int rate) in i2c_imx_get_clk() argument
169 static int bus_i2c_set_bus_speed(struct mxc_i2c_bus *i2c_bus, int speed) in bus_i2c_set_bus_speed() argument
171 ulong base = i2c_bus->base; in bus_i2c_set_bus_speed()
172 bool quirk = i2c_bus->driver_data & I2C_QUIRK_FLAG ? true : false; in bus_i2c_set_bus_speed()
173 u8 clk_idx = i2c_imx_get_clk(i2c_bus, speed); in bus_i2c_set_bus_speed()
193 static int wait_for_sr_state(struct mxc_i2c_bus *i2c_bus, unsigned state) in wait_for_sr_state() argument
197 bool quirk = i2c_bus->driver_data & I2C_QUIRK_FLAG ? true : false; in wait_for_sr_state()
199 ulong base = i2c_bus->base; in wait_for_sr_state()
227 static int tx_byte(struct mxc_i2c_bus *i2c_bus, u8 byte) in tx_byte() argument
230 int reg_shift = i2c_bus->driver_data & I2C_QUIRK_FLAG ? in tx_byte()
232 ulong base = i2c_bus->base; in tx_byte()
237 ret = wait_for_sr_state(i2c_bus, ST_IIF); in tx_byte()
257 static void i2c_imx_stop(struct mxc_i2c_bus *i2c_bus) in i2c_imx_stop() argument
260 int reg_shift = i2c_bus->driver_data & I2C_QUIRK_FLAG ? in i2c_imx_stop()
262 ulong base = i2c_bus->base; in i2c_imx_stop()
267 ret = wait_for_sr_state(i2c_bus, ST_BUS_IDLE); in i2c_imx_stop()
276 static int i2c_init_transfer_(struct mxc_i2c_bus *i2c_bus, u8 chip, in i2c_init_transfer_() argument
281 bool quirk = i2c_bus->driver_data & I2C_QUIRK_FLAG ? true : false; in i2c_init_transfer_()
282 ulong base = i2c_bus->base; in i2c_init_transfer_()
303 ret = wait_for_sr_state(i2c_bus, ST_BUS_IDLE); in i2c_init_transfer_()
312 ret = wait_for_sr_state(i2c_bus, ST_BUS_BUSY); in i2c_init_transfer_()
321 ret = tx_byte(i2c_bus, chip << 1); in i2c_init_transfer_()
326 ret = tx_byte(i2c_bus, (addr >> (alen * 8)) & 0xff); in i2c_init_transfer_()
336 int i2c_idle_bus(struct mxc_i2c_bus *i2c_bus) in i2c_idle_bus() argument
338 if (i2c_bus && i2c_bus->idle_bus_fn) in i2c_idle_bus()
339 return i2c_bus->idle_bus_fn(i2c_bus->idle_bus_data); in i2c_idle_bus()
354 int i2c_idle_bus(struct mxc_i2c_bus *i2c_bus) in i2c_idle_bus() argument
356 struct udevice *bus = i2c_bus->bus; in i2c_idle_bus()
357 struct gpio_desc *scl_gpio = &i2c_bus->scl_gpio; in i2c_idle_bus()
358 struct gpio_desc *sda_gpio = &i2c_bus->sda_gpio; in i2c_idle_bus()
414 static int i2c_init_transfer(struct mxc_i2c_bus *i2c_bus, u8 chip, in i2c_init_transfer() argument
419 int reg_shift = i2c_bus->driver_data & I2C_QUIRK_FLAG ? in i2c_init_transfer()
422 if (!i2c_bus->base) in i2c_init_transfer()
426 ret = i2c_init_transfer_(i2c_bus, chip, addr, alen); in i2c_init_transfer()
429 i2c_imx_stop(i2c_bus); in i2c_init_transfer()
437 writeb(I2CR_IDIS, i2c_bus->base + (I2CR << reg_shift)); in i2c_init_transfer()
439 if (i2c_idle_bus(i2c_bus) < 0) in i2c_init_transfer()
442 printf("%s: give up i2c_regs=0x%lx\n", __func__, i2c_bus->base); in i2c_init_transfer()
447 static int i2c_write_data(struct mxc_i2c_bus *i2c_bus, u8 chip, const u8 *buf, in i2c_write_data() argument
460 ret = tx_byte(i2c_bus, buf[i]); in i2c_write_data()
470 static int i2c_read_data(struct mxc_i2c_bus *i2c_bus, uchar chip, uchar *buf, in i2c_read_data() argument
476 int reg_shift = i2c_bus->driver_data & I2C_QUIRK_FLAG ? in i2c_read_data()
478 ulong base = i2c_bus->base; in i2c_read_data()
494 ret = wait_for_sr_state(i2c_bus, ST_IIF); in i2c_read_data()
497 i2c_imx_stop(i2c_bus); in i2c_read_data()
506 i2c_imx_stop(i2c_bus); in i2c_read_data()
521 i2c_imx_stop(i2c_bus); in i2c_read_data()
529 static int bus_i2c_read(struct mxc_i2c_bus *i2c_bus, u8 chip, u32 addr, in bus_i2c_read() argument
534 int reg_shift = i2c_bus->driver_data & I2C_QUIRK_FLAG ? in bus_i2c_read()
536 ulong base = i2c_bus->base; in bus_i2c_read()
538 ret = i2c_init_transfer(i2c_bus, chip, addr, alen); in bus_i2c_read()
548 ret = tx_byte(i2c_bus, (chip << 1) | 1); in bus_i2c_read()
550 i2c_imx_stop(i2c_bus); in bus_i2c_read()
554 ret = i2c_read_data(i2c_bus, chip, buf, len); in bus_i2c_read()
556 i2c_imx_stop(i2c_bus); in bus_i2c_read()
563 static int bus_i2c_write(struct mxc_i2c_bus *i2c_bus, u8 chip, u32 addr, in bus_i2c_write() argument
568 ret = i2c_init_transfer(i2c_bus, chip, addr, alen); in bus_i2c_write()
572 ret = i2c_write_data(i2c_bus, chip, buf, len); in bus_i2c_write()
574 i2c_imx_stop(i2c_bus); in bus_i2c_write()
800 struct mxc_i2c_bus *i2c_bus = dev_get_priv(bus);
802 return bus_i2c_set_bus_speed(i2c_bus, speed);
807 struct mxc_i2c_bus *i2c_bus = dev_get_priv(bus);
813 i2c_bus->driver_data = dev_get_driver_data(bus);
819 i2c_bus->base = addr;
820 i2c_bus->index = bus->seq;
821 i2c_bus->bus = bus;
834 debug("i2c bus %d at 0x%2lx, no gpio pinctrl state.\n", bus->seq, i2c_bus->base);
837 "scl-gpios", 0, &i2c_bus->scl_gpio,
840 "sda-gpios", 0, &i2c_bus->sda_gpio,
842 if (!dm_gpio_is_valid(&i2c_bus->sda_gpio) ||
843 !dm_gpio_is_valid(&i2c_bus->scl_gpio) ||
845 dev_err(dev, "i2c bus %d at %lu, fail to request scl/sda gpio\n", bus->seq, i2c_bus->base);
850 ret = i2c_idle_bus(i2c_bus);
863 bus->seq, i2c_bus->base,
864 i2c_bus->speed);
873 struct mxc_i2c_bus *i2c_bus = dev_get_priv(bus);
875 ret = i2c_init_transfer(i2c_bus, chip_addr, 0, 0);
881 i2c_imx_stop(i2c_bus);
888 struct mxc_i2c_bus *i2c_bus = dev_get_priv(bus);
890 ulong base = i2c_bus->base;
891 int reg_shift = i2c_bus->driver_data & I2C_QUIRK_FLAG ?
899 ret = i2c_init_transfer(i2c_bus, msg->addr, 0, 0);
909 ret = i2c_read_data(i2c_bus, msg->addr, msg->buf,
912 ret = i2c_write_data(i2c_bus, msg->addr, msg->buf,
922 ret = tx_byte(i2c_bus, (msg->addr << 1) | 1);
924 i2c_imx_stop(i2c_bus);
934 i2c_imx_stop(i2c_bus);