Lines Matching refs:bid
151 static uint8_t i2c_io_read8(uint8_t bid, uint32_t address) in i2c_io_read8() argument
153 return io_read8(i2c_bus[bid].va + address); in i2c_io_read8()
156 static void i2c_io_write8(uint8_t bid, uint32_t address, uint8_t data) in i2c_io_write8() argument
158 return io_write8(i2c_bus[bid].va + address, data); in i2c_io_write8()
195 static void i2c_set_prescaler(uint8_t bid, uint32_t bps) in i2c_set_prescaler() argument
212 i2c_io_write8(bid, IFDR, p->prescaler); in i2c_set_prescaler()
215 static void i2c_set_bus_speed(uint8_t bid, int bps) in i2c_set_bus_speed() argument
222 addr += CCM_CCGRx_SET(i2c_clk.i2c[bid]); in i2c_set_bus_speed()
225 addr += i2c_clk.i2c[bid]; in i2c_set_bus_speed()
226 val = i2c_clk.cgrbm[bid] | io_read32(addr); in i2c_set_bus_speed()
231 i2c_set_prescaler(bid, bps); in i2c_set_bus_speed()
234 static TEE_Result i2c_sync_bus(uint8_t bid, bool (*match)(uint32_t), in i2c_sync_bus() argument
241 sr = i2c_io_read8(bid, I2SR); in i2c_sync_bus()
244 i2c_io_write8(bid, I2SR, sr & ~I2SR_IAL); in i2c_sync_bus()
257 static TEE_Result i2c_idle_bus(uint8_t bid) in i2c_idle_bus() argument
259 uint8_t tmp = i2c_io_read8(bid, I2CR) & ~I2CR_MSTA; in i2c_idle_bus()
262 i2c_io_write8(bid, I2CR, tmp); in i2c_idle_bus()
263 ret = i2c_sync_bus(bid, &bus_is_idle, NULL); in i2c_idle_bus()
264 i2c_io_write8(bid, I2SR, 0); in i2c_idle_bus()
269 static TEE_Result i2c_write_byte(uint8_t bid, uint8_t byte) in i2c_write_byte() argument
274 i2c_io_write8(bid, I2DR, byte); in i2c_write_byte()
275 ret = i2c_sync_bus(bid, &isr_active, &status); in i2c_write_byte()
276 i2c_io_write8(bid, I2SR, 0); in i2c_write_byte()
284 static TEE_Result i2c_read_byte(uint8_t bid, uint8_t *p) in i2c_read_byte() argument
288 *p = i2c_io_read8(bid, I2DR); in i2c_read_byte()
289 ret = i2c_sync_bus(bid, &isr_active, NULL); in i2c_read_byte()
290 i2c_io_write8(bid, I2SR, 0); in i2c_read_byte()
295 static TEE_Result i2c_write_data(uint8_t bid, const uint8_t *buf, int len) in i2c_write_data() argument
303 tmp = i2c_io_read8(bid, I2CR) | I2CR_MTX | I2CR_TX_NO_AK; in i2c_write_data()
304 i2c_io_write8(bid, I2CR, tmp); in i2c_write_data()
307 ret = i2c_write_byte(bid, *buf++); in i2c_write_data()
315 static TEE_Result i2c_read_data(uint8_t bid, uint8_t *buf, int len) in i2c_read_data() argument
324 tmp = i2c_io_read8(bid, I2CR) & ~I2CR_MTX; in i2c_read_data()
326 i2c_io_write8(bid, I2CR, tmp); in i2c_read_data()
327 i2c_io_read8(bid, I2DR); in i2c_read_data()
329 ret = i2c_read_byte(bid, &dummy); in i2c_read_data()
341 tmp = i2c_io_read8(bid, I2CR) | I2CR_TX_NO_AK; in i2c_read_data()
342 i2c_io_write8(bid, I2CR, tmp); in i2c_read_data()
345 ret = i2c_read_byte(bid, buf++); in i2c_read_data()
353 static TEE_Result i2c_init_transfer(uint8_t bid, uint8_t chip) in i2c_init_transfer() argument
358 ret = i2c_idle_bus(bid); in i2c_init_transfer()
363 tmp = !(i2c_io_read8(bid, I2CR) & I2CR_IEN); in i2c_init_transfer()
365 i2c_io_write8(bid, I2CR, I2CR_IEN); in i2c_init_transfer()
368 i2c_io_write8(bid, I2SR, 0); in i2c_init_transfer()
370 tmp = i2c_io_read8(bid, I2CR) | I2CR_MSTA; in i2c_init_transfer()
371 i2c_io_write8(bid, I2CR, tmp); in i2c_init_transfer()
374 ret = i2c_sync_bus(bid, &bus_is_busy, NULL); in i2c_init_transfer()
379 return i2c_write_data(bid, &chip, 1); in i2c_init_transfer()
382 TEE_Result imx_i2c_read(uint8_t bid, uint8_t chip, uint8_t *buf, int len) in imx_i2c_read() argument
386 if (bid >= ARRAY_SIZE(i2c_bus)) in imx_i2c_read()
392 if (!i2c_bus[bid].va) in imx_i2c_read()
395 ret = i2c_init_transfer(bid, chip << 1 | BIT(0)); in imx_i2c_read()
397 ret = i2c_read_data(bid, buf, len); in imx_i2c_read()
399 if (i2c_idle_bus(bid)) in imx_i2c_read()
405 TEE_Result imx_i2c_write(uint8_t bid, uint8_t chip, const uint8_t *buf, int len) in imx_i2c_write() argument
409 if (bid >= ARRAY_SIZE(i2c_bus)) in imx_i2c_write()
415 if (!i2c_bus[bid].va) in imx_i2c_write()
418 ret = i2c_init_transfer(bid, chip << 1); in imx_i2c_write()
420 ret = i2c_write_data(bid, buf, len); in imx_i2c_write()
422 if (i2c_idle_bus(bid)) in imx_i2c_write()
428 TEE_Result imx_i2c_probe(uint8_t bid, uint8_t chip) in imx_i2c_probe() argument
430 if (bid >= ARRAY_SIZE(i2c_bus)) in imx_i2c_probe()
433 if (!i2c_bus[bid].va) in imx_i2c_probe()
439 return imx_i2c_write(bid, chip, NULL, 0); in imx_i2c_probe()
447 TEE_Result imx_i2c_init(uint8_t bid, int bps) in imx_i2c_init() argument
451 if (bid >= ARRAY_SIZE(i2c_bus)) in imx_i2c_init()
457 if (!i2c_bus[bid].va) in imx_i2c_init()
460 io_write32(mux->base.va + mux->i2c[bid].scl_mux, I2C_MUX_VAL(bid)); in imx_i2c_init()
461 io_write32(mux->base.va + mux->i2c[bid].scl_cfg, I2C_CFG_VAL(bid)); in imx_i2c_init()
462 if (mux->i2c[bid].scl_inp) in imx_i2c_init()
463 io_write32(mux->base.va + mux->i2c[bid].scl_inp, in imx_i2c_init()
464 I2C_INP_VAL(bid + 1)); in imx_i2c_init()
466 io_write32(mux->base.va + mux->i2c[bid].sda_mux, I2C_MUX_VAL(bid)); in imx_i2c_init()
467 io_write32(mux->base.va + mux->i2c[bid].sda_cfg, I2C_CFG_VAL(bid)); in imx_i2c_init()
468 if (mux->i2c[bid].sda_inp) in imx_i2c_init()
469 io_write32(mux->base.va + mux->i2c[bid].sda_inp, in imx_i2c_init()
470 I2C_INP_VAL(bid + 2)); in imx_i2c_init()
473 i2c_set_bus_speed(bid, bps); in imx_i2c_init()