Lines Matching refs:msgs

403 static int octeon_i2c_hlc_read(struct octeon_i2c *i2c, struct i2c_msg *msgs)
413 cmd |= (u64)(msgs[0].len - 1) << SW_TWSI_SIZE_SHIFT;
415 cmd |= (u64)(msgs[0].addr & 0x7full) << SW_TWSI_ADDR_SHIFT;
417 if (msgs[0].flags & I2C_M_TEN)
431 for (i = 0, j = msgs[0].len - 1; i < msgs[0].len && i < 4; i++, j--)
432 msgs[0].buf[j] = (cmd >> (8 * i)) & 0xff;
434 if (msgs[0].len > 4) {
436 for (i = 0; i < msgs[0].len - 4 && i < 4; i++, j--)
437 msgs[0].buf[j] = (cmd >> (8 * i)) & 0xff;
445 static int octeon_i2c_hlc_write(struct octeon_i2c *i2c, struct i2c_msg *msgs)
455 cmd |= (u64)(msgs[0].len - 1) << SW_TWSI_SIZE_SHIFT;
457 cmd |= (u64)(msgs[0].addr & 0x7full) << SW_TWSI_ADDR_SHIFT;
459 if (msgs[0].flags & I2C_M_TEN)
464 for (i = 0, j = msgs[0].len - 1; i < msgs[0].len && i < 4; i++, j--)
465 cmd |= (u64)msgs[0].buf[j] << (8 * i);
467 if (msgs[0].len > 4) {
470 for (i = 0; i < msgs[0].len - 4 && i < 4; i++, j--)
471 ext |= (u64)msgs[0].buf[j] << (8 * i);
489 static int octeon_i2c_hlc_comp_read(struct octeon_i2c *i2c, struct i2c_msg *msgs)
498 cmd |= (u64)(msgs[1].len - 1) << SW_TWSI_SIZE_SHIFT;
500 cmd |= (u64)(msgs[0].addr & 0x7full) << SW_TWSI_ADDR_SHIFT;
502 if (msgs[0].flags & I2C_M_TEN)
507 if (msgs[0].len == 2) {
511 ext = (u64)msgs[0].buf[0] << SW_TWSI_IA_SHIFT;
512 cmd |= (u64)msgs[0].buf[1] << SW_TWSI_IA_SHIFT;
515 cmd |= (u64)msgs[0].buf[0] << SW_TWSI_IA_SHIFT;
529 for (i = 0, j = msgs[1].len - 1; i < msgs[1].len && i < 4; i++, j--)
530 msgs[1].buf[j] = (cmd >> (8 * i)) & 0xff;
532 if (msgs[1].len > 4) {
534 for (i = 0; i < msgs[1].len - 4 && i < 4; i++, j--)
535 msgs[1].buf[j] = (cmd >> (8 * i)) & 0xff;
543 static int octeon_i2c_hlc_comp_write(struct octeon_i2c *i2c, struct i2c_msg *msgs)
553 cmd |= (u64)(msgs[1].len - 1) << SW_TWSI_SIZE_SHIFT;
555 cmd |= (u64)(msgs[0].addr & 0x7full) << SW_TWSI_ADDR_SHIFT;
557 if (msgs[0].flags & I2C_M_TEN)
562 if (msgs[0].len == 2) {
564 ext |= (u64)msgs[0].buf[0] << SW_TWSI_IA_SHIFT;
566 cmd |= (u64)msgs[0].buf[1] << SW_TWSI_IA_SHIFT;
568 cmd |= (u64)msgs[0].buf[0] << SW_TWSI_IA_SHIFT;
571 for (i = 0, j = msgs[1].len - 1; i < msgs[1].len && i < 4; i++, j--)
572 cmd |= (u64)msgs[1].buf[j] << (8 * i);
574 if (msgs[1].len > 4) {
575 for (i = 0; i < msgs[1].len - 4 && i < 4; i++, j--)
576 ext |= (u64)msgs[1].buf[j] << (8 * i);
600 * @msgs: Pointer to the messages to be processed
605 int octeon_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
611 if (msgs[0].len > 0 && msgs[0].len <= 8) {
612 if (msgs[0].flags & I2C_M_RD)
613 ret = octeon_i2c_hlc_read(i2c, msgs);
615 ret = octeon_i2c_hlc_write(i2c, msgs);
619 if ((msgs[0].flags & I2C_M_RD) == 0 &&
620 (msgs[1].flags & I2C_M_RECV_LEN) == 0 &&
621 msgs[0].len > 0 && msgs[0].len <= 2 &&
622 msgs[1].len > 0 && msgs[1].len <= 8 &&
623 msgs[0].addr == msgs[1].addr) {
624 if (msgs[1].flags & I2C_M_RD)
625 ret = octeon_i2c_hlc_comp_read(i2c, msgs);
627 ret = octeon_i2c_hlc_comp_write(i2c, msgs);
633 struct i2c_msg *pmsg = &msgs[i];