Lines Matching refs:i2c_bus
137 static uint8_t i2c_imx_get_clk(struct mxc_i2c_bus *i2c_bus, unsigned int rate) in i2c_imx_get_clk() argument
170 static int bus_i2c_set_bus_speed(struct mxc_i2c_bus *i2c_bus, int speed) in bus_i2c_set_bus_speed() argument
172 ulong base = i2c_bus->base; in bus_i2c_set_bus_speed()
173 bool quirk = i2c_bus->driver_data & I2C_QUIRK_FLAG ? true : false; in bus_i2c_set_bus_speed()
174 u8 clk_idx = i2c_imx_get_clk(i2c_bus, speed); in bus_i2c_set_bus_speed()
194 static int wait_for_sr_state(struct mxc_i2c_bus *i2c_bus, unsigned state) in wait_for_sr_state() argument
198 bool quirk = i2c_bus->driver_data & I2C_QUIRK_FLAG ? true : false; in wait_for_sr_state()
200 ulong base = i2c_bus->base; in wait_for_sr_state()
228 static int tx_byte(struct mxc_i2c_bus *i2c_bus, u8 byte) in tx_byte() argument
231 int reg_shift = i2c_bus->driver_data & I2C_QUIRK_FLAG ? in tx_byte()
233 ulong base = i2c_bus->base; in tx_byte()
238 ret = wait_for_sr_state(i2c_bus, ST_IIF); in tx_byte()
258 static void i2c_imx_stop(struct mxc_i2c_bus *i2c_bus) in i2c_imx_stop() argument
261 int reg_shift = i2c_bus->driver_data & I2C_QUIRK_FLAG ? in i2c_imx_stop()
263 ulong base = i2c_bus->base; in i2c_imx_stop()
268 ret = wait_for_sr_state(i2c_bus, ST_BUS_IDLE); in i2c_imx_stop()
277 static int i2c_init_transfer_(struct mxc_i2c_bus *i2c_bus, u8 chip, in i2c_init_transfer_() argument
282 bool quirk = i2c_bus->driver_data & I2C_QUIRK_FLAG ? true : false; in i2c_init_transfer_()
283 ulong base = i2c_bus->base; in i2c_init_transfer_()
304 ret = wait_for_sr_state(i2c_bus, ST_BUS_IDLE); in i2c_init_transfer_()
313 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_()
334 int i2c_idle_bus(struct mxc_i2c_bus *i2c_bus) in i2c_idle_bus() argument
336 if (i2c_bus && i2c_bus->idle_bus_fn) in i2c_idle_bus()
337 return i2c_bus->idle_bus_fn(i2c_bus->idle_bus_data); in i2c_idle_bus()
352 int i2c_idle_bus(struct mxc_i2c_bus *i2c_bus) in i2c_idle_bus() argument
354 struct udevice *bus = i2c_bus->bus; in i2c_idle_bus()
355 struct gpio_desc *scl_gpio = &i2c_bus->scl_gpio; in i2c_idle_bus()
356 struct gpio_desc *sda_gpio = &i2c_bus->sda_gpio; in i2c_idle_bus()
412 static int i2c_init_transfer(struct mxc_i2c_bus *i2c_bus, u8 chip, in i2c_init_transfer() argument
417 int reg_shift = i2c_bus->driver_data & I2C_QUIRK_FLAG ? in i2c_init_transfer()
420 if (!i2c_bus->base) in i2c_init_transfer()
424 ret = i2c_init_transfer_(i2c_bus, chip, addr, alen); in i2c_init_transfer()
427 i2c_imx_stop(i2c_bus); in i2c_init_transfer()
435 writeb(I2CR_IDIS, i2c_bus->base + (I2CR << reg_shift)); in i2c_init_transfer()
437 if (i2c_idle_bus(i2c_bus) < 0) in i2c_init_transfer()
440 printf("%s: give up i2c_regs=0x%lx\n", __func__, i2c_bus->base); in i2c_init_transfer()
445 static int i2c_write_data(struct mxc_i2c_bus *i2c_bus, u8 chip, const u8 *buf, in i2c_write_data() argument
458 ret = tx_byte(i2c_bus, buf[i]); in i2c_write_data()
468 static int i2c_read_data(struct mxc_i2c_bus *i2c_bus, uchar chip, uchar *buf, in i2c_read_data() argument
474 int reg_shift = i2c_bus->driver_data & I2C_QUIRK_FLAG ? in i2c_read_data()
476 ulong base = i2c_bus->base; in i2c_read_data()
492 ret = wait_for_sr_state(i2c_bus, ST_IIF); in i2c_read_data()
495 i2c_imx_stop(i2c_bus); in i2c_read_data()
504 i2c_imx_stop(i2c_bus); in i2c_read_data()
519 i2c_imx_stop(i2c_bus); in i2c_read_data()
527 static int bus_i2c_read(struct mxc_i2c_bus *i2c_bus, u8 chip, u32 addr, in bus_i2c_read() argument
532 int reg_shift = i2c_bus->driver_data & I2C_QUIRK_FLAG ? in bus_i2c_read()
534 ulong base = i2c_bus->base; in bus_i2c_read()
536 ret = i2c_init_transfer(i2c_bus, chip, addr, alen); in bus_i2c_read()
544 ret = tx_byte(i2c_bus, (chip << 1) | 1); in bus_i2c_read()
546 i2c_imx_stop(i2c_bus); in bus_i2c_read()
550 ret = i2c_read_data(i2c_bus, chip, buf, len); in bus_i2c_read()
552 i2c_imx_stop(i2c_bus); in bus_i2c_read()
559 static int bus_i2c_write(struct mxc_i2c_bus *i2c_bus, u8 chip, u32 addr, in bus_i2c_write() argument
564 ret = i2c_init_transfer(i2c_bus, chip, addr, alen); in bus_i2c_write()
568 ret = i2c_write_data(i2c_bus, chip, buf, len); in bus_i2c_write()
570 i2c_imx_stop(i2c_bus); in bus_i2c_write()
740 struct mxc_i2c_bus *i2c_bus = dev_get_priv(bus);
742 return bus_i2c_set_bus_speed(i2c_bus, speed);
747 struct mxc_i2c_bus *i2c_bus = dev_get_priv(bus);
753 i2c_bus->driver_data = dev_get_driver_data(bus);
759 i2c_bus->base = addr;
760 i2c_bus->index = bus->seq;
761 i2c_bus->bus = bus;
774 debug("i2c bus %d at 0x%2lx, no gpio pinctrl state.\n", bus->seq, i2c_bus->base);
777 "scl-gpios", 0, &i2c_bus->scl_gpio,
780 "sda-gpios", 0, &i2c_bus->sda_gpio,
782 if (!dm_gpio_is_valid(&i2c_bus->sda_gpio) |
783 !dm_gpio_is_valid(&i2c_bus->scl_gpio) |
785 dev_err(dev, "i2c bus %d at %lu, fail to request scl/sda gpio\n", bus->seq, i2c_bus->base);
790 ret = i2c_idle_bus(i2c_bus);
803 bus->seq, i2c_bus->base,
804 i2c_bus->speed);
813 struct mxc_i2c_bus *i2c_bus = dev_get_priv(bus);
815 ret = i2c_init_transfer(i2c_bus, chip_addr, 0, 0);
821 i2c_imx_stop(i2c_bus);
828 struct mxc_i2c_bus *i2c_bus = dev_get_priv(bus);
830 ulong base = i2c_bus->base;
831 int reg_shift = i2c_bus->driver_data & I2C_QUIRK_FLAG ?
839 ret = i2c_init_transfer(i2c_bus, msg->addr, 0, 0);
849 ret = i2c_read_data(i2c_bus, msg->addr, msg->buf,
852 ret = i2c_write_data(i2c_bus, msg->addr, msg->buf,
862 ret = tx_byte(i2c_bus, (msg->addr << 1) | 1);
864 i2c_imx_stop(i2c_bus);
874 i2c_imx_stop(i2c_bus);