Lines Matching full:bus

30  * of the bus.
126 #define NPCM_I2CT_OUT 0x14 /* Bus T.O. */
155 #define NPCM_I2CST_BER BIT(5) /* Bus error */
161 #define NPCM_I2CCST_BB BIT(1) /* Bus busy */
597 bool ber_state; /* Indicate the bus error state */
600 static inline void npcm_i2c_select_bank(struct npcm_i2c *bus, in npcm_i2c_select_bank() argument
603 u8 i2cctl3 = ioread8(bus->reg + NPCM_I2CCTL3); in npcm_i2c_select_bank()
609 iowrite8(i2cctl3, bus->reg + NPCM_I2CCTL3); in npcm_i2c_select_bank()
612 static void npcm_i2c_init_params(struct npcm_i2c *bus) in npcm_i2c_init_params() argument
614 bus->stop_ind = I2C_NO_STATUS_IND; in npcm_i2c_init_params()
615 bus->rd_size = 0; in npcm_i2c_init_params()
616 bus->wr_size = 0; in npcm_i2c_init_params()
617 bus->rd_ind = 0; in npcm_i2c_init_params()
618 bus->wr_ind = 0; in npcm_i2c_init_params()
619 bus->read_block_use = false; in npcm_i2c_init_params()
620 bus->int_time_stamp = 0; in npcm_i2c_init_params()
621 bus->PEC_use = false; in npcm_i2c_init_params()
622 bus->PEC_mask = 0; in npcm_i2c_init_params()
624 if (bus->slave) in npcm_i2c_init_params()
625 bus->master_or_slave = I2C_SLAVE; in npcm_i2c_init_params()
629 static inline void npcm_i2c_wr_byte(struct npcm_i2c *bus, u8 data) in npcm_i2c_wr_byte() argument
631 iowrite8(data, bus->reg + NPCM_I2CSDA); in npcm_i2c_wr_byte()
634 static inline u8 npcm_i2c_rd_byte(struct npcm_i2c *bus) in npcm_i2c_rd_byte() argument
636 return ioread8(bus->reg + NPCM_I2CSDA); in npcm_i2c_rd_byte()
641 struct npcm_i2c *bus = container_of(_adap, struct npcm_i2c, adap); in npcm_i2c_get_SCL() local
643 return !!(I2CCTL3_SCL_LVL & ioread8(bus->reg + NPCM_I2CCTL3)); in npcm_i2c_get_SCL()
648 struct npcm_i2c *bus = container_of(_adap, struct npcm_i2c, adap); in npcm_i2c_get_SDA() local
650 return !!(I2CCTL3_SDA_LVL & ioread8(bus->reg + NPCM_I2CCTL3)); in npcm_i2c_get_SDA()
653 static inline u16 npcm_i2c_get_index(struct npcm_i2c *bus) in npcm_i2c_get_index() argument
655 if (bus->operation == I2C_READ_OPER) in npcm_i2c_get_index()
656 return bus->rd_ind; in npcm_i2c_get_index()
657 if (bus->operation == I2C_WRITE_OPER) in npcm_i2c_get_index()
658 return bus->wr_ind; in npcm_i2c_get_index()
663 static inline bool npcm_i2c_is_quick(struct npcm_i2c *bus) in npcm_i2c_is_quick() argument
665 return bus->wr_size == 0 && bus->rd_size == 0; in npcm_i2c_is_quick()
668 static void npcm_i2c_disable(struct npcm_i2c *bus) in npcm_i2c_disable() argument
677 iowrite8(0, bus->reg + npcm_i2caddr[i]); in npcm_i2c_disable()
681 i2cctl2 = ioread8(bus->reg + NPCM_I2CCTL2); in npcm_i2c_disable()
683 iowrite8(i2cctl2, bus->reg + NPCM_I2CCTL2); in npcm_i2c_disable()
685 bus->state = I2C_DISABLE; in npcm_i2c_disable()
688 static void npcm_i2c_enable(struct npcm_i2c *bus) in npcm_i2c_enable() argument
690 u8 i2cctl2 = ioread8(bus->reg + NPCM_I2CCTL2); in npcm_i2c_enable()
693 iowrite8(i2cctl2, bus->reg + NPCM_I2CCTL2); in npcm_i2c_enable()
694 bus->state = I2C_IDLE; in npcm_i2c_enable()
698 static inline void npcm_i2c_eob_int(struct npcm_i2c *bus, bool enable) in npcm_i2c_eob_int() argument
703 val = ioread8(bus->reg + NPCM_I2CCST3); in npcm_i2c_eob_int()
705 iowrite8(val, bus->reg + NPCM_I2CCST3); in npcm_i2c_eob_int()
707 val = ioread8(bus->reg + NPCM_I2CCTL1); in npcm_i2c_eob_int()
713 iowrite8(val, bus->reg + NPCM_I2CCTL1); in npcm_i2c_eob_int()
716 static inline bool npcm_i2c_tx_fifo_empty(struct npcm_i2c *bus) in npcm_i2c_tx_fifo_empty() argument
720 tx_fifo_sts = ioread8(bus->reg + NPCM_I2CTXF_STS); in npcm_i2c_tx_fifo_empty()
722 if ((tx_fifo_sts & bus->data->txf_sts_tx_bytes) == 0) in npcm_i2c_tx_fifo_empty()
729 static inline bool npcm_i2c_rx_fifo_full(struct npcm_i2c *bus) in npcm_i2c_rx_fifo_full() argument
733 rx_fifo_sts = ioread8(bus->reg + NPCM_I2CRXF_STS); in npcm_i2c_rx_fifo_full()
735 if ((rx_fifo_sts & bus->data->rxf_sts_rx_bytes) == 0) in npcm_i2c_rx_fifo_full()
742 static inline void npcm_i2c_clear_fifo_int(struct npcm_i2c *bus) in npcm_i2c_clear_fifo_int() argument
746 val = ioread8(bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_clear_fifo_int()
748 iowrite8(val, bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_clear_fifo_int()
751 static inline void npcm_i2c_clear_tx_fifo(struct npcm_i2c *bus) in npcm_i2c_clear_tx_fifo() argument
755 val = ioread8(bus->reg + NPCM_I2CTXF_STS); in npcm_i2c_clear_tx_fifo()
757 iowrite8(val, bus->reg + NPCM_I2CTXF_STS); in npcm_i2c_clear_tx_fifo()
760 static inline void npcm_i2c_clear_rx_fifo(struct npcm_i2c *bus) in npcm_i2c_clear_rx_fifo() argument
764 val = ioread8(bus->reg + NPCM_I2CRXF_STS); in npcm_i2c_clear_rx_fifo()
766 iowrite8(val, bus->reg + NPCM_I2CRXF_STS); in npcm_i2c_clear_rx_fifo()
769 static void npcm_i2c_int_enable(struct npcm_i2c *bus, bool enable) in npcm_i2c_int_enable() argument
773 val = ioread8(bus->reg + NPCM_I2CCTL1); in npcm_i2c_int_enable()
779 iowrite8(val, bus->reg + NPCM_I2CCTL1); in npcm_i2c_int_enable()
782 static inline void npcm_i2c_master_start(struct npcm_i2c *bus) in npcm_i2c_master_start() argument
786 val = ioread8(bus->reg + NPCM_I2CCTL1); in npcm_i2c_master_start()
789 iowrite8(val, bus->reg + NPCM_I2CCTL1); in npcm_i2c_master_start()
792 static inline void npcm_i2c_master_stop(struct npcm_i2c *bus) in npcm_i2c_master_stop() argument
802 val = ioread8(bus->reg + NPCM_I2CCTL1); in npcm_i2c_master_stop()
805 iowrite8(val, bus->reg + NPCM_I2CCTL1); in npcm_i2c_master_stop()
807 if (!bus->fifo_use) in npcm_i2c_master_stop()
810 npcm_i2c_select_bank(bus, I2C_BANK_1); in npcm_i2c_master_stop()
812 if (bus->operation == I2C_READ_OPER) in npcm_i2c_master_stop()
813 npcm_i2c_clear_rx_fifo(bus); in npcm_i2c_master_stop()
815 npcm_i2c_clear_tx_fifo(bus); in npcm_i2c_master_stop()
816 npcm_i2c_clear_fifo_int(bus); in npcm_i2c_master_stop()
817 iowrite8(0, bus->reg + NPCM_I2CTXF_CTL); in npcm_i2c_master_stop()
820 static inline void npcm_i2c_stall_after_start(struct npcm_i2c *bus, bool stall) in npcm_i2c_stall_after_start() argument
824 val = ioread8(bus->reg + NPCM_I2CCTL1); in npcm_i2c_stall_after_start()
830 iowrite8(val, bus->reg + NPCM_I2CCTL1); in npcm_i2c_stall_after_start()
833 static inline void npcm_i2c_nack(struct npcm_i2c *bus) in npcm_i2c_nack() argument
837 val = ioread8(bus->reg + NPCM_I2CCTL1); in npcm_i2c_nack()
840 iowrite8(val, bus->reg + NPCM_I2CCTL1); in npcm_i2c_nack()
843 static inline void npcm_i2c_clear_master_status(struct npcm_i2c *bus) in npcm_i2c_clear_master_status() argument
849 iowrite8(val, bus->reg + NPCM_I2CST); in npcm_i2c_clear_master_status()
853 static void npcm_i2c_slave_int_enable(struct npcm_i2c *bus, bool enable) in npcm_i2c_slave_int_enable() argument
858 i2cctl1 = ioread8(bus->reg + NPCM_I2CCTL1); in npcm_i2c_slave_int_enable()
864 iowrite8(i2cctl1, bus->reg + NPCM_I2CCTL1); in npcm_i2c_slave_int_enable()
867 static int npcm_i2c_slave_enable(struct npcm_i2c *bus, enum i2c_addr addr_type, in npcm_i2c_slave_enable() argument
876 i2cctl1 = ioread8(bus->reg + NPCM_I2CCTL1); in npcm_i2c_slave_enable()
881 iowrite8(i2cctl1, bus->reg + NPCM_I2CCTL1); in npcm_i2c_slave_enable()
884 i2cctl3 = ioread8(bus->reg + NPCM_I2CCTL3); in npcm_i2c_slave_enable()
889 iowrite8(i2cctl3, bus->reg + NPCM_I2CCTL3); in npcm_i2c_slave_enable()
893 dev_err(bus->dev, "try to enable more than 2 SA not supported\n"); in npcm_i2c_slave_enable()
899 iowrite8(sa_reg, bus->reg + npcm_i2caddr[addr_type]); in npcm_i2c_slave_enable()
900 npcm_i2c_slave_int_enable(bus, enable); in npcm_i2c_slave_enable()
906 static void npcm_i2c_reset(struct npcm_i2c *bus) in npcm_i2c_reset() argument
917 i2cctl1 = ioread8(bus->reg + NPCM_I2CCTL1); in npcm_i2c_reset()
919 npcm_i2c_disable(bus); in npcm_i2c_reset()
920 npcm_i2c_enable(bus); in npcm_i2c_reset()
924 iowrite8(i2cctl1, bus->reg + NPCM_I2CCTL1); in npcm_i2c_reset()
926 /* Clear BB (BUS BUSY) bit */ in npcm_i2c_reset()
927 iowrite8(NPCM_I2CCST_BB, bus->reg + NPCM_I2CCST); in npcm_i2c_reset()
928 iowrite8(0xFF, bus->reg + NPCM_I2CST); in npcm_i2c_reset()
931 npcm_i2c_eob_int(bus, false); in npcm_i2c_reset()
934 iowrite8(NPCM_I2CFIF_CTS_CLR_FIFO, bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_reset()
937 if (bus->slave) { in npcm_i2c_reset()
938 addr = bus->slave->addr; in npcm_i2c_reset()
939 npcm_i2c_slave_enable(bus, I2C_SLAVE_ADDR1, addr, true); in npcm_i2c_reset()
944 npcm_i2c_clear_master_status(bus); in npcm_i2c_reset()
946 bus->state = I2C_IDLE; in npcm_i2c_reset()
949 static inline bool npcm_i2c_is_master(struct npcm_i2c *bus) in npcm_i2c_is_master() argument
951 return !!FIELD_GET(NPCM_I2CST_MASTER, ioread8(bus->reg + NPCM_I2CST)); in npcm_i2c_is_master()
954 static void npcm_i2c_callback(struct npcm_i2c *bus, in npcm_i2c_callback() argument
961 msgs = bus->msgs; in npcm_i2c_callback()
962 msgs_num = bus->msgs_num; in npcm_i2c_callback()
970 if (completion_done(&bus->cmd_complete)) in npcm_i2c_callback()
975 bus->cmd_err = bus->msgs_num; in npcm_i2c_callback()
976 if (bus->tx_complete_cnt < ULLONG_MAX) in npcm_i2c_callback()
977 bus->tx_complete_cnt++; in npcm_i2c_callback()
981 if (bus->msgs) { in npcm_i2c_callback()
992 bus->cmd_err = -ENXIO; in npcm_i2c_callback()
996 /* Bus error */ in npcm_i2c_callback()
997 bus->cmd_err = -EAGAIN; in npcm_i2c_callback()
1007 bus->operation = I2C_NO_OPER; in npcm_i2c_callback()
1009 if (bus->slave) in npcm_i2c_callback()
1010 bus->master_or_slave = I2C_SLAVE; in npcm_i2c_callback()
1013 complete(&bus->cmd_complete); in npcm_i2c_callback()
1016 static u8 npcm_i2c_fifo_usage(struct npcm_i2c *bus) in npcm_i2c_fifo_usage() argument
1018 if (bus->operation == I2C_WRITE_OPER) in npcm_i2c_fifo_usage()
1019 return (bus->data->txf_sts_tx_bytes & in npcm_i2c_fifo_usage()
1020 ioread8(bus->reg + NPCM_I2CTXF_STS)); in npcm_i2c_fifo_usage()
1021 if (bus->operation == I2C_READ_OPER) in npcm_i2c_fifo_usage()
1022 return (bus->data->rxf_sts_rx_bytes & in npcm_i2c_fifo_usage()
1023 ioread8(bus->reg + NPCM_I2CRXF_STS)); in npcm_i2c_fifo_usage()
1027 static void npcm_i2c_write_to_fifo_master(struct npcm_i2c *bus, u16 max_bytes) in npcm_i2c_write_to_fifo_master() argument
1035 size_free_fifo = bus->data->fifo_size - npcm_i2c_fifo_usage(bus); in npcm_i2c_write_to_fifo_master()
1037 if (bus->wr_ind < bus->wr_size) in npcm_i2c_write_to_fifo_master()
1038 npcm_i2c_wr_byte(bus, bus->wr_buf[bus->wr_ind++]); in npcm_i2c_write_to_fifo_master()
1040 npcm_i2c_wr_byte(bus, 0xFF); in npcm_i2c_write_to_fifo_master()
1041 size_free_fifo = bus->data->fifo_size - npcm_i2c_fifo_usage(bus); in npcm_i2c_write_to_fifo_master()
1050 static void npcm_i2c_set_fifo(struct npcm_i2c *bus, int nread, int nwrite) in npcm_i2c_set_fifo() argument
1054 if (!bus->fifo_use) in npcm_i2c_set_fifo()
1056 npcm_i2c_select_bank(bus, I2C_BANK_1); in npcm_i2c_set_fifo()
1057 npcm_i2c_clear_tx_fifo(bus); in npcm_i2c_set_fifo()
1058 npcm_i2c_clear_rx_fifo(bus); in npcm_i2c_set_fifo()
1062 rxf_ctl = min_t(int, nread, bus->data->fifo_size); in npcm_i2c_set_fifo()
1065 if (nread <= bus->data->fifo_size) in npcm_i2c_set_fifo()
1066 rxf_ctl |= bus->data->rxf_ctl_last_pec; in npcm_i2c_set_fifo()
1073 if (bus->rd_ind == 0 && bus->read_block_use) { in npcm_i2c_set_fifo()
1079 iowrite8(rxf_ctl, bus->reg + NPCM_I2CRXF_CTL); in npcm_i2c_set_fifo()
1084 if (nwrite > bus->data->fifo_size) in npcm_i2c_set_fifo()
1086 iowrite8(bus->data->fifo_size, bus->reg + NPCM_I2CTXF_CTL); in npcm_i2c_set_fifo()
1088 iowrite8(nwrite, bus->reg + NPCM_I2CTXF_CTL); in npcm_i2c_set_fifo()
1090 npcm_i2c_clear_tx_fifo(bus); in npcm_i2c_set_fifo()
1094 static void npcm_i2c_read_fifo(struct npcm_i2c *bus, u8 bytes_in_fifo) in npcm_i2c_read_fifo() argument
1099 data = npcm_i2c_rd_byte(bus); in npcm_i2c_read_fifo()
1100 if (bus->rd_ind < bus->rd_size) in npcm_i2c_read_fifo()
1101 bus->rd_buf[bus->rd_ind++] = data; in npcm_i2c_read_fifo()
1105 static void npcm_i2c_master_abort(struct npcm_i2c *bus) in npcm_i2c_master_abort() argument
1108 if (!npcm_i2c_is_master(bus)) in npcm_i2c_master_abort()
1111 npcm_i2c_eob_int(bus, true); in npcm_i2c_master_abort()
1112 npcm_i2c_master_stop(bus); in npcm_i2c_master_abort()
1113 npcm_i2c_clear_master_status(bus); in npcm_i2c_master_abort()
1117 static u8 npcm_i2c_get_slave_addr(struct npcm_i2c *bus, enum i2c_addr addr_type) in npcm_i2c_get_slave_addr() argument
1122 dev_err(bus->dev, "get slave: try to use more than 2 SA not supported\n"); in npcm_i2c_get_slave_addr()
1124 slave_add = ioread8(bus->reg + npcm_i2caddr[(int)addr_type]); in npcm_i2c_get_slave_addr()
1129 static int npcm_i2c_remove_slave_addr(struct npcm_i2c *bus, u8 slave_add) in npcm_i2c_remove_slave_addr() argument
1137 if (ioread8(bus->reg + npcm_i2caddr[i]) == slave_add) in npcm_i2c_remove_slave_addr()
1138 iowrite8(0, bus->reg + npcm_i2caddr[i]); in npcm_i2c_remove_slave_addr()
1144 static void npcm_i2c_write_fifo_slave(struct npcm_i2c *bus, u16 max_bytes) in npcm_i2c_write_fifo_slave() argument
1150 npcm_i2c_clear_fifo_int(bus); in npcm_i2c_write_fifo_slave()
1151 npcm_i2c_clear_tx_fifo(bus); in npcm_i2c_write_fifo_slave()
1152 iowrite8(0, bus->reg + NPCM_I2CTXF_CTL); in npcm_i2c_write_fifo_slave()
1153 while (max_bytes-- && bus->data->fifo_size != npcm_i2c_fifo_usage(bus)) { in npcm_i2c_write_fifo_slave()
1154 if (bus->slv_wr_size <= 0) in npcm_i2c_write_fifo_slave()
1156 bus->slv_wr_ind = bus->slv_wr_ind & (bus->data->fifo_size - 1); in npcm_i2c_write_fifo_slave()
1157 npcm_i2c_wr_byte(bus, bus->slv_wr_buf[bus->slv_wr_ind]); in npcm_i2c_write_fifo_slave()
1158 bus->slv_wr_ind++; in npcm_i2c_write_fifo_slave()
1159 bus->slv_wr_ind = bus->slv_wr_ind & (bus->data->fifo_size - 1); in npcm_i2c_write_fifo_slave()
1160 bus->slv_wr_size--; in npcm_i2c_write_fifo_slave()
1164 static void npcm_i2c_read_fifo_slave(struct npcm_i2c *bus, u8 bytes_in_fifo) in npcm_i2c_read_fifo_slave() argument
1168 if (!bus->slave) in npcm_i2c_read_fifo_slave()
1172 data = npcm_i2c_rd_byte(bus); in npcm_i2c_read_fifo_slave()
1174 bus->slv_rd_ind = bus->slv_rd_ind & (bus->data->fifo_size - 1); in npcm_i2c_read_fifo_slave()
1175 bus->slv_rd_buf[bus->slv_rd_ind] = data; in npcm_i2c_read_fifo_slave()
1176 bus->slv_rd_ind++; in npcm_i2c_read_fifo_slave()
1179 if (bus->slv_rd_ind == 1 && bus->read_block_use) in npcm_i2c_read_fifo_slave()
1180 bus->slv_rd_size = data + bus->PEC_use + 1; in npcm_i2c_read_fifo_slave()
1184 static int npcm_i2c_slave_get_wr_buf(struct npcm_i2c *bus) in npcm_i2c_slave_get_wr_buf() argument
1189 int ret = bus->slv_wr_ind; in npcm_i2c_slave_get_wr_buf()
1192 for (i = 0; i < bus->data->fifo_size; i++) { in npcm_i2c_slave_get_wr_buf()
1193 if (bus->slv_wr_size >= bus->data->fifo_size) in npcm_i2c_slave_get_wr_buf()
1195 if (bus->state == I2C_SLAVE_MATCH) { in npcm_i2c_slave_get_wr_buf()
1196 i2c_slave_event(bus->slave, I2C_SLAVE_READ_REQUESTED, &value); in npcm_i2c_slave_get_wr_buf()
1197 bus->state = I2C_OPER_STARTED; in npcm_i2c_slave_get_wr_buf()
1199 i2c_slave_event(bus->slave, I2C_SLAVE_READ_PROCESSED, &value); in npcm_i2c_slave_get_wr_buf()
1201 ind = (bus->slv_wr_ind + bus->slv_wr_size) & (bus->data->fifo_size - 1); in npcm_i2c_slave_get_wr_buf()
1202 bus->slv_wr_buf[ind] = value; in npcm_i2c_slave_get_wr_buf()
1203 bus->slv_wr_size++; in npcm_i2c_slave_get_wr_buf()
1205 return bus->data->fifo_size - ret; in npcm_i2c_slave_get_wr_buf()
1208 static void npcm_i2c_slave_send_rd_buf(struct npcm_i2c *bus) in npcm_i2c_slave_send_rd_buf() argument
1212 for (i = 0; i < bus->slv_rd_ind; i++) in npcm_i2c_slave_send_rd_buf()
1213 i2c_slave_event(bus->slave, I2C_SLAVE_WRITE_RECEIVED, in npcm_i2c_slave_send_rd_buf()
1214 &bus->slv_rd_buf[i]); in npcm_i2c_slave_send_rd_buf()
1219 if (bus->slv_rd_ind) { in npcm_i2c_slave_send_rd_buf()
1220 bus->slv_wr_size = 0; in npcm_i2c_slave_send_rd_buf()
1221 bus->slv_wr_ind = 0; in npcm_i2c_slave_send_rd_buf()
1224 bus->slv_rd_ind = 0; in npcm_i2c_slave_send_rd_buf()
1225 bus->slv_rd_size = bus->adap.quirks->max_read_len; in npcm_i2c_slave_send_rd_buf()
1227 npcm_i2c_clear_fifo_int(bus); in npcm_i2c_slave_send_rd_buf()
1228 npcm_i2c_clear_rx_fifo(bus); in npcm_i2c_slave_send_rd_buf()
1231 static void npcm_i2c_slave_receive(struct npcm_i2c *bus, u16 nread, in npcm_i2c_slave_receive() argument
1234 bus->state = I2C_OPER_STARTED; in npcm_i2c_slave_receive()
1235 bus->operation = I2C_READ_OPER; in npcm_i2c_slave_receive()
1236 bus->slv_rd_size = nread; in npcm_i2c_slave_receive()
1237 bus->slv_rd_ind = 0; in npcm_i2c_slave_receive()
1239 iowrite8(0, bus->reg + NPCM_I2CTXF_CTL); in npcm_i2c_slave_receive()
1240 iowrite8(bus->data->fifo_size, bus->reg + NPCM_I2CRXF_CTL); in npcm_i2c_slave_receive()
1241 npcm_i2c_clear_tx_fifo(bus); in npcm_i2c_slave_receive()
1242 npcm_i2c_clear_rx_fifo(bus); in npcm_i2c_slave_receive()
1245 static void npcm_i2c_slave_xmit(struct npcm_i2c *bus, u16 nwrite, in npcm_i2c_slave_xmit() argument
1251 bus->operation = I2C_WRITE_OPER; in npcm_i2c_slave_xmit()
1254 npcm_i2c_slave_get_wr_buf(bus); in npcm_i2c_slave_xmit()
1255 npcm_i2c_write_fifo_slave(bus, nwrite); in npcm_i2c_slave_xmit()
1263 * to the FIFO and onward to the bus.
1264 * NACK on read will be once reached to bus->adap->quirks->max_read_len.
1269 static void npcm_i2c_slave_wr_buf_sync(struct npcm_i2c *bus) in npcm_i2c_slave_wr_buf_sync() argument
1273 left_in_fifo = bus->data->txf_sts_tx_bytes & in npcm_i2c_slave_wr_buf_sync()
1274 ioread8(bus->reg + NPCM_I2CTXF_STS); in npcm_i2c_slave_wr_buf_sync()
1277 if (left_in_fifo >= bus->data->fifo_size || in npcm_i2c_slave_wr_buf_sync()
1278 bus->slv_wr_size >= bus->data->fifo_size) in npcm_i2c_slave_wr_buf_sync()
1282 bus->slv_wr_ind = bus->slv_wr_ind - left_in_fifo; in npcm_i2c_slave_wr_buf_sync()
1283 bus->slv_wr_size = bus->slv_wr_size + left_in_fifo; in npcm_i2c_slave_wr_buf_sync()
1285 if (bus->slv_wr_ind < 0) in npcm_i2c_slave_wr_buf_sync()
1286 bus->slv_wr_ind += bus->data->fifo_size; in npcm_i2c_slave_wr_buf_sync()
1289 static void npcm_i2c_slave_rd_wr(struct npcm_i2c *bus) in npcm_i2c_slave_rd_wr() argument
1291 if (NPCM_I2CST_XMIT & ioread8(bus->reg + NPCM_I2CST)) { in npcm_i2c_slave_rd_wr()
1296 bus->operation = I2C_WRITE_OPER; in npcm_i2c_slave_rd_wr()
1297 npcm_i2c_slave_xmit(bus, bus->adap.quirks->max_write_len, in npcm_i2c_slave_rd_wr()
1298 bus->slv_wr_buf); in npcm_i2c_slave_rd_wr()
1306 bus->operation = I2C_READ_OPER; in npcm_i2c_slave_rd_wr()
1307 npcm_i2c_read_fifo_slave(bus, npcm_i2c_fifo_usage(bus)); in npcm_i2c_slave_rd_wr()
1308 bus->stop_ind = I2C_SLAVE_RCV_IND; in npcm_i2c_slave_rd_wr()
1309 npcm_i2c_slave_send_rd_buf(bus); in npcm_i2c_slave_rd_wr()
1310 npcm_i2c_slave_receive(bus, bus->adap.quirks->max_read_len, in npcm_i2c_slave_rd_wr()
1311 bus->slv_rd_buf); in npcm_i2c_slave_rd_wr()
1315 static irqreturn_t npcm_i2c_int_slave_handler(struct npcm_i2c *bus) in npcm_i2c_int_slave_handler() argument
1319 u8 i2cst = ioread8(bus->reg + NPCM_I2CST); in npcm_i2c_int_slave_handler()
1323 bus->stop_ind = I2C_NACK_IND; in npcm_i2c_int_slave_handler()
1324 npcm_i2c_slave_wr_buf_sync(bus); in npcm_i2c_int_slave_handler()
1325 if (bus->fifo_use) in npcm_i2c_int_slave_handler()
1328 bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_int_slave_handler()
1331 bus->stop_ind = I2C_NO_STATUS_IND; in npcm_i2c_int_slave_handler()
1332 bus->operation = I2C_NO_OPER; in npcm_i2c_int_slave_handler()
1333 bus->own_slave_addr = 0xFF; in npcm_i2c_int_slave_handler()
1339 iowrite8(NPCM_I2CST_NEGACK, bus->reg + NPCM_I2CST); in npcm_i2c_int_slave_handler()
1344 /* Slave mode: a Bus Error (BER) has been identified */ in npcm_i2c_int_slave_handler()
1347 * Check whether bus arbitration or Start or Stop during data in npcm_i2c_int_slave_handler()
1348 * xfer bus arbitration problem should not result in recovery in npcm_i2c_int_slave_handler()
1350 bus->stop_ind = I2C_BUS_ERR_IND; in npcm_i2c_int_slave_handler()
1352 /* wait for bus busy before clear fifo */ in npcm_i2c_int_slave_handler()
1353 iowrite8(NPCM_I2CFIF_CTS_CLR_FIFO, bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_int_slave_handler()
1355 bus->state = I2C_IDLE; in npcm_i2c_int_slave_handler()
1361 if (completion_done(&bus->cmd_complete) == false) { in npcm_i2c_int_slave_handler()
1362 bus->cmd_err = -EIO; in npcm_i2c_int_slave_handler()
1363 complete(&bus->cmd_complete); in npcm_i2c_int_slave_handler()
1365 bus->own_slave_addr = 0xFF; in npcm_i2c_int_slave_handler()
1366 iowrite8(NPCM_I2CST_BER, bus->reg + NPCM_I2CST); in npcm_i2c_int_slave_handler()
1372 u8 bytes_in_fifo = npcm_i2c_fifo_usage(bus); in npcm_i2c_int_slave_handler()
1374 bus->stop_ind = I2C_SLAVE_DONE_IND; in npcm_i2c_int_slave_handler()
1376 if (bus->operation == I2C_READ_OPER) in npcm_i2c_int_slave_handler()
1377 npcm_i2c_read_fifo_slave(bus, bytes_in_fifo); in npcm_i2c_int_slave_handler()
1380 npcm_i2c_slave_send_rd_buf(bus); in npcm_i2c_int_slave_handler()
1383 bus->stop_ind = I2C_NO_STATUS_IND; in npcm_i2c_int_slave_handler()
1390 bus->operation = I2C_NO_OPER; in npcm_i2c_int_slave_handler()
1391 bus->own_slave_addr = 0xFF; in npcm_i2c_int_slave_handler()
1392 i2c_slave_event(bus->slave, I2C_SLAVE_STOP, 0); in npcm_i2c_int_slave_handler()
1393 iowrite8(NPCM_I2CST_SLVSTP, bus->reg + NPCM_I2CST); in npcm_i2c_int_slave_handler()
1394 if (bus->fifo_use) { in npcm_i2c_int_slave_handler()
1395 npcm_i2c_clear_fifo_int(bus); in npcm_i2c_int_slave_handler()
1396 npcm_i2c_clear_rx_fifo(bus); in npcm_i2c_int_slave_handler()
1397 npcm_i2c_clear_tx_fifo(bus); in npcm_i2c_int_slave_handler()
1400 bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_int_slave_handler()
1402 bus->state = I2C_IDLE; in npcm_i2c_int_slave_handler()
1407 if (bus->fifo_use && FIELD_GET(NPCM_I2CFIF_CTS_SLVRSTR, in npcm_i2c_int_slave_handler()
1408 ioread8(bus->reg + NPCM_I2CFIF_CTS))) { in npcm_i2c_int_slave_handler()
1409 bus->stop_ind = I2C_SLAVE_RESTART_IND; in npcm_i2c_int_slave_handler()
1410 bus->master_or_slave = I2C_SLAVE; in npcm_i2c_int_slave_handler()
1411 if (bus->operation == I2C_READ_OPER) in npcm_i2c_int_slave_handler()
1412 npcm_i2c_read_fifo_slave(bus, npcm_i2c_fifo_usage(bus)); in npcm_i2c_int_slave_handler()
1413 bus->operation = I2C_WRITE_OPER; in npcm_i2c_int_slave_handler()
1414 iowrite8(0, bus->reg + NPCM_I2CRXF_CTL); in npcm_i2c_int_slave_handler()
1417 iowrite8(val, bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_int_slave_handler()
1418 npcm_i2c_slave_rd_wr(bus); in npcm_i2c_int_slave_handler()
1427 bus->master_or_slave = I2C_SLAVE; in npcm_i2c_int_slave_handler()
1428 npcm_i2c_clear_fifo_int(bus); in npcm_i2c_int_slave_handler()
1429 npcm_i2c_clear_rx_fifo(bus); in npcm_i2c_int_slave_handler()
1430 npcm_i2c_clear_tx_fifo(bus); in npcm_i2c_int_slave_handler()
1431 iowrite8(0, bus->reg + NPCM_I2CTXF_CTL); in npcm_i2c_int_slave_handler()
1432 iowrite8(bus->data->fifo_size, bus->reg + NPCM_I2CRXF_CTL); in npcm_i2c_int_slave_handler()
1434 bus->operation = I2C_WRITE_OPER; in npcm_i2c_int_slave_handler()
1436 i2c_slave_event(bus->slave, I2C_SLAVE_WRITE_REQUESTED, in npcm_i2c_int_slave_handler()
1438 bus->operation = I2C_READ_OPER; in npcm_i2c_int_slave_handler()
1440 if (bus->own_slave_addr == 0xFF) { in npcm_i2c_int_slave_handler()
1442 val = ioread8(bus->reg + NPCM_I2CCST); in npcm_i2c_int_slave_handler()
1449 i2ccst3 = ioread8(bus->reg + NPCM_I2CCST3); in npcm_i2c_int_slave_handler()
1450 i2ccst2 = ioread8(bus->reg + NPCM_I2CCST2); in npcm_i2c_int_slave_handler()
1461 addr = npcm_i2c_get_slave_addr(bus, eaddr); in npcm_i2c_int_slave_handler()
1463 bus->own_slave_addr = addr; in npcm_i2c_int_slave_handler()
1464 if (bus->PEC_mask & BIT(info)) in npcm_i2c_int_slave_handler()
1465 bus->PEC_use = true; in npcm_i2c_int_slave_handler()
1467 bus->PEC_use = false; in npcm_i2c_int_slave_handler()
1470 bus->own_slave_addr = 0; in npcm_i2c_int_slave_handler()
1472 bus->own_slave_addr = 0x61; in npcm_i2c_int_slave_handler()
1483 if ((bus->state == I2C_OPER_STARTED && in npcm_i2c_int_slave_handler()
1484 bus->operation == I2C_READ_OPER && in npcm_i2c_int_slave_handler()
1485 bus->stop_ind == I2C_SLAVE_XMIT_IND) || in npcm_i2c_int_slave_handler()
1486 bus->stop_ind == I2C_SLAVE_RCV_IND) { in npcm_i2c_int_slave_handler()
1488 bus->stop_ind = I2C_SLAVE_RESTART_IND; in npcm_i2c_int_slave_handler()
1493 bus->stop_ind = I2C_SLAVE_XMIT_IND; in npcm_i2c_int_slave_handler()
1495 bus->stop_ind = I2C_SLAVE_RCV_IND; in npcm_i2c_int_slave_handler()
1496 bus->state = I2C_SLAVE_MATCH; in npcm_i2c_int_slave_handler()
1497 npcm_i2c_slave_rd_wr(bus); in npcm_i2c_int_slave_handler()
1498 iowrite8(NPCM_I2CST_NMATCH, bus->reg + NPCM_I2CST); in npcm_i2c_int_slave_handler()
1504 (bus->fifo_use && in npcm_i2c_int_slave_handler()
1505 (npcm_i2c_tx_fifo_empty(bus) || npcm_i2c_rx_fifo_full(bus)))) { in npcm_i2c_int_slave_handler()
1506 npcm_i2c_slave_rd_wr(bus); in npcm_i2c_int_slave_handler()
1507 iowrite8(NPCM_I2CST_SDAST, bus->reg + NPCM_I2CST); in npcm_i2c_int_slave_handler()
1516 npcm_i2c_eob_int(bus, false); in npcm_i2c_int_slave_handler()
1517 npcm_i2c_clear_master_status(bus); in npcm_i2c_int_slave_handler()
1526 struct npcm_i2c *bus = i2c_get_adapdata(client->adapter); in npcm_i2c_reg_slave() local
1528 bus->slave = client; in npcm_i2c_reg_slave()
1533 spin_lock_irqsave(&bus->lock, lock_flags); in npcm_i2c_reg_slave()
1535 npcm_i2c_init_params(bus); in npcm_i2c_reg_slave()
1536 bus->slv_rd_size = 0; in npcm_i2c_reg_slave()
1537 bus->slv_wr_size = 0; in npcm_i2c_reg_slave()
1538 bus->slv_rd_ind = 0; in npcm_i2c_reg_slave()
1539 bus->slv_wr_ind = 0; in npcm_i2c_reg_slave()
1541 bus->PEC_use = true; in npcm_i2c_reg_slave()
1543 dev_info(bus->dev, "i2c%d register slave SA=0x%x, PEC=%d\n", bus->num, in npcm_i2c_reg_slave()
1544 client->addr, bus->PEC_use); in npcm_i2c_reg_slave()
1546 npcm_i2c_slave_enable(bus, I2C_SLAVE_ADDR1, client->addr, true); in npcm_i2c_reg_slave()
1547 npcm_i2c_clear_fifo_int(bus); in npcm_i2c_reg_slave()
1548 npcm_i2c_clear_rx_fifo(bus); in npcm_i2c_reg_slave()
1549 npcm_i2c_clear_tx_fifo(bus); in npcm_i2c_reg_slave()
1550 npcm_i2c_slave_int_enable(bus, true); in npcm_i2c_reg_slave()
1552 spin_unlock_irqrestore(&bus->lock, lock_flags); in npcm_i2c_reg_slave()
1558 struct npcm_i2c *bus = client->adapter->algo_data; in npcm_i2c_unreg_slave() local
1561 spin_lock_irqsave(&bus->lock, lock_flags); in npcm_i2c_unreg_slave()
1562 if (!bus->slave) { in npcm_i2c_unreg_slave()
1563 spin_unlock_irqrestore(&bus->lock, lock_flags); in npcm_i2c_unreg_slave()
1566 npcm_i2c_slave_int_enable(bus, false); in npcm_i2c_unreg_slave()
1567 npcm_i2c_remove_slave_addr(bus, client->addr); in npcm_i2c_unreg_slave()
1568 bus->slave = NULL; in npcm_i2c_unreg_slave()
1569 spin_unlock_irqrestore(&bus->lock, lock_flags); in npcm_i2c_unreg_slave()
1574 static void npcm_i2c_master_fifo_read(struct npcm_i2c *bus) in npcm_i2c_master_fifo_read() argument
1580 fifo_bytes = npcm_i2c_fifo_usage(bus); in npcm_i2c_master_fifo_read()
1581 rcount = bus->rd_size - bus->rd_ind; in npcm_i2c_master_fifo_read()
1590 if (rcount < (2 * bus->data->fifo_size) && rcount > bus->data->fifo_size) in npcm_i2c_master_fifo_read()
1591 fifo_bytes = rcount - bus->data->fifo_size; in npcm_i2c_master_fifo_read()
1595 bus->state = I2C_STOP_PENDING; in npcm_i2c_master_fifo_read()
1596 bus->stop_ind = ind; in npcm_i2c_master_fifo_read()
1597 npcm_i2c_eob_int(bus, true); in npcm_i2c_master_fifo_read()
1599 npcm_i2c_master_stop(bus); in npcm_i2c_master_fifo_read()
1600 npcm_i2c_read_fifo(bus, fifo_bytes); in npcm_i2c_master_fifo_read()
1602 npcm_i2c_read_fifo(bus, fifo_bytes); in npcm_i2c_master_fifo_read()
1603 rcount = bus->rd_size - bus->rd_ind; in npcm_i2c_master_fifo_read()
1604 npcm_i2c_set_fifo(bus, rcount, -1); in npcm_i2c_master_fifo_read()
1608 static void npcm_i2c_irq_master_handler_write(struct npcm_i2c *bus) in npcm_i2c_irq_master_handler_write() argument
1612 if (bus->fifo_use) in npcm_i2c_irq_master_handler_write()
1613 npcm_i2c_clear_tx_fifo(bus); /* clear the TX fifo status bit */ in npcm_i2c_irq_master_handler_write()
1616 if (bus->wr_ind == bus->wr_size) { in npcm_i2c_irq_master_handler_write()
1617 if (bus->fifo_use && npcm_i2c_fifo_usage(bus) > 0) in npcm_i2c_irq_master_handler_write()
1627 if (bus->rd_size == 0) { in npcm_i2c_irq_master_handler_write()
1629 npcm_i2c_eob_int(bus, true); in npcm_i2c_irq_master_handler_write()
1630 bus->state = I2C_STOP_PENDING; in npcm_i2c_irq_master_handler_write()
1631 bus->stop_ind = I2C_MASTER_DONE_IND; in npcm_i2c_irq_master_handler_write()
1632 npcm_i2c_master_stop(bus); in npcm_i2c_irq_master_handler_write()
1634 npcm_i2c_wr_byte(bus, 0xFF); in npcm_i2c_irq_master_handler_write()
1638 npcm_i2c_set_fifo(bus, bus->rd_size, -1); in npcm_i2c_irq_master_handler_write()
1640 npcm_i2c_master_start(bus); in npcm_i2c_irq_master_handler_write()
1648 if (bus->rd_size == 1) in npcm_i2c_irq_master_handler_write()
1649 npcm_i2c_stall_after_start(bus, true); in npcm_i2c_irq_master_handler_write()
1652 bus->operation = I2C_READ_OPER; in npcm_i2c_irq_master_handler_write()
1654 npcm_i2c_wr_byte(bus, bus->dest_addr | 0x1); in npcm_i2c_irq_master_handler_write()
1658 if (!bus->fifo_use || bus->wr_size == 1) { in npcm_i2c_irq_master_handler_write()
1659 npcm_i2c_wr_byte(bus, bus->wr_buf[bus->wr_ind++]); in npcm_i2c_irq_master_handler_write()
1661 wcount = bus->wr_size - bus->wr_ind; in npcm_i2c_irq_master_handler_write()
1662 npcm_i2c_set_fifo(bus, -1, wcount); in npcm_i2c_irq_master_handler_write()
1664 npcm_i2c_write_to_fifo_master(bus, wcount); in npcm_i2c_irq_master_handler_write()
1669 static void npcm_i2c_irq_master_handler_read(struct npcm_i2c *bus) in npcm_i2c_irq_master_handler_read() argument
1675 block_extra_bytes_size = bus->read_block_use + bus->PEC_use; in npcm_i2c_irq_master_handler_read()
1681 if (bus->rd_ind == 0) { /* first byte handling: */ in npcm_i2c_irq_master_handler_read()
1682 if (bus->read_block_use) { in npcm_i2c_irq_master_handler_read()
1684 data = npcm_i2c_rd_byte(bus); in npcm_i2c_irq_master_handler_read()
1686 bus->rd_size = data + block_extra_bytes_size; in npcm_i2c_irq_master_handler_read()
1687 bus->rd_buf[bus->rd_ind++] = data; in npcm_i2c_irq_master_handler_read()
1690 if (bus->fifo_use) { in npcm_i2c_irq_master_handler_read()
1691 data = ioread8(bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_irq_master_handler_read()
1693 iowrite8(data, bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_irq_master_handler_read()
1696 npcm_i2c_set_fifo(bus, bus->rd_size - 1, -1); in npcm_i2c_irq_master_handler_read()
1697 npcm_i2c_stall_after_start(bus, false); in npcm_i2c_irq_master_handler_read()
1699 npcm_i2c_clear_tx_fifo(bus); in npcm_i2c_irq_master_handler_read()
1700 npcm_i2c_master_fifo_read(bus); in npcm_i2c_irq_master_handler_read()
1703 if (bus->rd_size == block_extra_bytes_size && in npcm_i2c_irq_master_handler_read()
1704 bus->read_block_use) { in npcm_i2c_irq_master_handler_read()
1705 bus->state = I2C_STOP_PENDING; in npcm_i2c_irq_master_handler_read()
1706 bus->stop_ind = I2C_BLOCK_BYTES_ERR_IND; in npcm_i2c_irq_master_handler_read()
1707 bus->cmd_err = -EIO; in npcm_i2c_irq_master_handler_read()
1708 npcm_i2c_eob_int(bus, true); in npcm_i2c_irq_master_handler_read()
1709 npcm_i2c_master_stop(bus); in npcm_i2c_irq_master_handler_read()
1710 npcm_i2c_read_fifo(bus, npcm_i2c_fifo_usage(bus)); in npcm_i2c_irq_master_handler_read()
1712 npcm_i2c_master_fifo_read(bus); in npcm_i2c_irq_master_handler_read()
1717 static void npcm_i2c_irq_handle_nmatch(struct npcm_i2c *bus) in npcm_i2c_irq_handle_nmatch() argument
1719 iowrite8(NPCM_I2CST_NMATCH, bus->reg + NPCM_I2CST); in npcm_i2c_irq_handle_nmatch()
1720 npcm_i2c_nack(bus); in npcm_i2c_irq_handle_nmatch()
1721 bus->stop_ind = I2C_BUS_ERR_IND; in npcm_i2c_irq_handle_nmatch()
1722 npcm_i2c_callback(bus, bus->stop_ind, npcm_i2c_get_index(bus)); in npcm_i2c_irq_handle_nmatch()
1726 static void npcm_i2c_irq_handle_nack(struct npcm_i2c *bus) in npcm_i2c_irq_handle_nack() argument
1730 if (bus->nack_cnt < ULLONG_MAX) in npcm_i2c_irq_handle_nack()
1731 bus->nack_cnt++; in npcm_i2c_irq_handle_nack()
1733 if (bus->fifo_use) { in npcm_i2c_irq_handle_nack()
1738 if (bus->operation == I2C_WRITE_OPER) in npcm_i2c_irq_handle_nack()
1739 bus->wr_ind -= npcm_i2c_fifo_usage(bus); in npcm_i2c_irq_handle_nack()
1742 iowrite8(NPCM_I2CFIF_CTS_CLR_FIFO, bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_irq_handle_nack()
1746 bus->stop_ind = I2C_NACK_IND; in npcm_i2c_irq_handle_nack()
1748 if (npcm_i2c_is_master(bus)) { in npcm_i2c_irq_handle_nack()
1750 npcm_i2c_eob_int(bus, false); in npcm_i2c_irq_handle_nack()
1751 npcm_i2c_master_stop(bus); in npcm_i2c_irq_handle_nack()
1754 npcm_i2c_rd_byte(bus); in npcm_i2c_irq_handle_nack()
1757 * The bus is released from stall only after the SW clears in npcm_i2c_irq_handle_nack()
1760 npcm_i2c_clear_master_status(bus); in npcm_i2c_irq_handle_nack()
1761 readx_poll_timeout_atomic(ioread8, bus->reg + NPCM_I2CCST, val, in npcm_i2c_irq_handle_nack()
1763 /* Verify no status bits are still set after bus is released */ in npcm_i2c_irq_handle_nack()
1764 npcm_i2c_clear_master_status(bus); in npcm_i2c_irq_handle_nack()
1766 bus->state = I2C_IDLE; in npcm_i2c_irq_handle_nack()
1770 * In such case, the bus is released from stall only after the in npcm_i2c_irq_handle_nack()
1773 npcm_i2c_callback(bus, bus->stop_ind, bus->wr_ind); in npcm_i2c_irq_handle_nack()
1776 /* Master mode: a Bus Error has been identified */
1777 static void npcm_i2c_irq_handle_ber(struct npcm_i2c *bus) in npcm_i2c_irq_handle_ber() argument
1779 if (bus->ber_cnt < ULLONG_MAX) in npcm_i2c_irq_handle_ber()
1780 bus->ber_cnt++; in npcm_i2c_irq_handle_ber()
1781 bus->stop_ind = I2C_BUS_ERR_IND; in npcm_i2c_irq_handle_ber()
1782 if (npcm_i2c_is_master(bus)) { in npcm_i2c_irq_handle_ber()
1783 npcm_i2c_master_abort(bus); in npcm_i2c_irq_handle_ber()
1785 bus->ber_state = true; in npcm_i2c_irq_handle_ber()
1786 npcm_i2c_clear_master_status(bus); in npcm_i2c_irq_handle_ber()
1788 /* Clear BB (BUS BUSY) bit */ in npcm_i2c_irq_handle_ber()
1789 iowrite8(NPCM_I2CCST_BB, bus->reg + NPCM_I2CCST); in npcm_i2c_irq_handle_ber()
1791 bus->cmd_err = -EAGAIN; in npcm_i2c_irq_handle_ber()
1792 npcm_i2c_callback(bus, bus->stop_ind, npcm_i2c_get_index(bus)); in npcm_i2c_irq_handle_ber()
1794 bus->state = I2C_IDLE; in npcm_i2c_irq_handle_ber()
1798 static void npcm_i2c_irq_handle_eob(struct npcm_i2c *bus) in npcm_i2c_irq_handle_eob() argument
1800 npcm_i2c_eob_int(bus, false); in npcm_i2c_irq_handle_eob()
1801 bus->state = I2C_IDLE; in npcm_i2c_irq_handle_eob()
1802 npcm_i2c_callback(bus, bus->stop_ind, bus->rd_ind); in npcm_i2c_irq_handle_eob()
1806 static void npcm_i2c_irq_handle_stall_after_start(struct npcm_i2c *bus) in npcm_i2c_irq_handle_stall_after_start() argument
1808 if (npcm_i2c_is_quick(bus)) { in npcm_i2c_irq_handle_stall_after_start()
1809 bus->state = I2C_STOP_PENDING; in npcm_i2c_irq_handle_stall_after_start()
1810 bus->stop_ind = I2C_MASTER_DONE_IND; in npcm_i2c_irq_handle_stall_after_start()
1811 npcm_i2c_eob_int(bus, true); in npcm_i2c_irq_handle_stall_after_start()
1812 npcm_i2c_master_stop(bus); in npcm_i2c_irq_handle_stall_after_start()
1813 } else if ((bus->rd_size == 1) && !bus->read_block_use) { in npcm_i2c_irq_handle_stall_after_start()
1818 npcm_i2c_nack(bus); in npcm_i2c_irq_handle_stall_after_start()
1822 npcm_i2c_stall_after_start(bus, false); in npcm_i2c_irq_handle_stall_after_start()
1825 iowrite8(NPCM_I2CST_STASTR, bus->reg + NPCM_I2CST); in npcm_i2c_irq_handle_stall_after_start()
1829 static void npcm_i2c_irq_handle_sda(struct npcm_i2c *bus, u8 i2cst) in npcm_i2c_irq_handle_sda() argument
1833 if (!npcm_i2c_is_master(bus)) in npcm_i2c_irq_handle_sda()
1836 if (bus->state == I2C_IDLE) { in npcm_i2c_irq_handle_sda()
1837 bus->stop_ind = I2C_WAKE_UP_IND; in npcm_i2c_irq_handle_sda()
1839 if (npcm_i2c_is_quick(bus) || bus->read_block_use) in npcm_i2c_irq_handle_sda()
1844 npcm_i2c_stall_after_start(bus, true); in npcm_i2c_irq_handle_sda()
1846 npcm_i2c_stall_after_start(bus, false); in npcm_i2c_irq_handle_sda()
1854 if (bus->wr_size == 0 && bus->rd_size == 1) in npcm_i2c_irq_handle_sda()
1855 npcm_i2c_stall_after_start(bus, true); in npcm_i2c_irq_handle_sda()
1860 npcm_i2c_select_bank(bus, I2C_BANK_1); in npcm_i2c_irq_handle_sda()
1862 fif_cts = ioread8(bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_irq_handle_sda()
1867 iowrite8(fif_cts, bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_irq_handle_sda()
1871 iowrite8(fif_cts, bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_irq_handle_sda()
1880 if (bus->wr_size) in npcm_i2c_irq_handle_sda()
1881 npcm_i2c_set_fifo(bus, -1, bus->wr_size); in npcm_i2c_irq_handle_sda()
1883 npcm_i2c_set_fifo(bus, bus->rd_size, -1); in npcm_i2c_irq_handle_sda()
1885 bus->state = I2C_OPER_STARTED; in npcm_i2c_irq_handle_sda()
1887 if (npcm_i2c_is_quick(bus) || bus->wr_size) in npcm_i2c_irq_handle_sda()
1888 npcm_i2c_wr_byte(bus, bus->dest_addr); in npcm_i2c_irq_handle_sda()
1890 npcm_i2c_wr_byte(bus, bus->dest_addr | BIT(0)); in npcm_i2c_irq_handle_sda()
1893 if (bus->operation == I2C_WRITE_OPER) in npcm_i2c_irq_handle_sda()
1894 npcm_i2c_irq_master_handler_write(bus); in npcm_i2c_irq_handle_sda()
1895 else if (bus->operation == I2C_READ_OPER) in npcm_i2c_irq_handle_sda()
1896 npcm_i2c_irq_master_handler_read(bus); in npcm_i2c_irq_handle_sda()
1900 static int npcm_i2c_int_master_handler(struct npcm_i2c *bus) in npcm_i2c_int_master_handler() argument
1905 i2cst = ioread8(bus->reg + NPCM_I2CST); in npcm_i2c_int_master_handler()
1908 npcm_i2c_irq_handle_nmatch(bus); in npcm_i2c_int_master_handler()
1913 npcm_i2c_irq_handle_nack(bus); in npcm_i2c_int_master_handler()
1917 /* Master mode: a Bus Error has been identified */ in npcm_i2c_int_master_handler()
1919 npcm_i2c_irq_handle_ber(bus); in npcm_i2c_int_master_handler()
1925 ioread8(bus->reg + NPCM_I2CCTL1)) == 1) && in npcm_i2c_int_master_handler()
1927 ioread8(bus->reg + NPCM_I2CCST3)))) { in npcm_i2c_int_master_handler()
1928 npcm_i2c_irq_handle_eob(bus); in npcm_i2c_int_master_handler()
1931 if (bus->slave) in npcm_i2c_int_master_handler()
1932 iowrite8(bus->slave->addr | NPCM_I2CADDR_SAEN, in npcm_i2c_int_master_handler()
1933 bus->reg + NPCM_I2CADDR1); in npcm_i2c_int_master_handler()
1940 npcm_i2c_irq_handle_stall_after_start(bus); in npcm_i2c_int_master_handler()
1946 (bus->fifo_use && in npcm_i2c_int_master_handler()
1947 (npcm_i2c_tx_fifo_empty(bus) || npcm_i2c_rx_fifo_full(bus)))) { in npcm_i2c_int_master_handler()
1948 npcm_i2c_irq_handle_sda(bus, i2cst); in npcm_i2c_int_master_handler()
1962 struct npcm_i2c *bus = container_of(_adap, struct npcm_i2c, adap); in npcm_i2c_recovery_tgclk() local
1967 dev_dbg(bus->dev, "bus%d-0x%x recovery skipped, bus not stuck", in npcm_i2c_recovery_tgclk()
1968 bus->num, bus->dest_addr); in npcm_i2c_recovery_tgclk()
1969 npcm_i2c_reset(bus); in npcm_i2c_recovery_tgclk()
1970 bus->ber_state = false; in npcm_i2c_recovery_tgclk()
1974 npcm_i2c_int_enable(bus, false); in npcm_i2c_recovery_tgclk()
1975 npcm_i2c_disable(bus); in npcm_i2c_recovery_tgclk()
1976 npcm_i2c_enable(bus); in npcm_i2c_recovery_tgclk()
1977 iowrite8(NPCM_I2CCST_BB, bus->reg + NPCM_I2CCST); in npcm_i2c_recovery_tgclk()
1978 npcm_i2c_clear_tx_fifo(bus); in npcm_i2c_recovery_tgclk()
1979 npcm_i2c_clear_rx_fifo(bus); in npcm_i2c_recovery_tgclk()
1980 iowrite8(0, bus->reg + NPCM_I2CRXF_CTL); in npcm_i2c_recovery_tgclk()
1981 iowrite8(0, bus->reg + NPCM_I2CTXF_CTL); in npcm_i2c_recovery_tgclk()
1982 npcm_i2c_stall_after_start(bus, false); in npcm_i2c_recovery_tgclk()
1985 npcm_i2c_select_bank(bus, I2C_BANK_1); in npcm_i2c_recovery_tgclk()
1988 fif_cts = ioread8(bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_recovery_tgclk()
1991 iowrite8(fif_cts, bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_recovery_tgclk()
1992 npcm_i2c_set_fifo(bus, -1, 0); in npcm_i2c_recovery_tgclk()
1997 iowrite8(NPCM_I2CCST_TGSCL, bus->reg + NPCM_I2CCST); in npcm_i2c_recovery_tgclk()
2009 npcm_i2c_wr_byte(bus, bus->dest_addr); in npcm_i2c_recovery_tgclk()
2010 npcm_i2c_master_start(bus); in npcm_i2c_recovery_tgclk()
2015 if (npcm_i2c_is_master(bus) > 0) { in npcm_i2c_recovery_tgclk()
2017 npcm_i2c_master_stop(bus); in npcm_i2c_recovery_tgclk()
2021 npcm_i2c_reset(bus); in npcm_i2c_recovery_tgclk()
2022 npcm_i2c_int_enable(bus, true); in npcm_i2c_recovery_tgclk()
2029 if (bus->rec_fail_cnt < ULLONG_MAX) in npcm_i2c_recovery_tgclk()
2030 bus->rec_fail_cnt++; in npcm_i2c_recovery_tgclk()
2032 if (bus->rec_succ_cnt < ULLONG_MAX) in npcm_i2c_recovery_tgclk()
2033 bus->rec_succ_cnt++; in npcm_i2c_recovery_tgclk()
2035 bus->ber_state = false; in npcm_i2c_recovery_tgclk()
2042 struct npcm_i2c *bus = container_of(_adap, struct npcm_i2c, adap); in npcm_i2c_recovery_init() local
2043 struct i2c_bus_recovery_info *rinfo = &bus->rinfo; in npcm_i2c_recovery_init()
2066 * and bus frequency.
2067 * 100kHz bus requires tSCL = 4 * SCLFRQ * tCLK. LT and HT are symmetric.
2068 * 400kHz bus requires asymmetric HT and LT. A different equation is recommended
2072 static int npcm_i2c_init_clk(struct npcm_i2c *bus, u32 bus_freq_hz) in npcm_i2c_init_clk() argument
2078 bus->bus_freq = bus_freq_hz; in npcm_i2c_init_clk()
2100 if (bus->apb_clk >= smb_timing[scl_table_cnt].core_clk) in npcm_i2c_init_clk()
2108 bus->reg + NPCM_I2CCTL2); in npcm_i2c_init_clk()
2113 bus->reg + NPCM_I2CCTL3); in npcm_i2c_init_clk()
2116 npcm_i2c_select_bank(bus, I2C_BANK_0); in npcm_i2c_init_clk()
2124 iowrite8(smb_timing[scl_table_cnt].scllt, bus->reg + NPCM_I2CSCLLT); in npcm_i2c_init_clk()
2125 iowrite8(smb_timing[scl_table_cnt].sclht, bus->reg + NPCM_I2CSCLHT); in npcm_i2c_init_clk()
2127 iowrite8(smb_timing[scl_table_cnt].dbcnt, bus->reg + NPCM_I2CCTL5); in npcm_i2c_init_clk()
2130 iowrite8(smb_timing[scl_table_cnt].hldt, bus->reg + NPCM_I2CCTL4); in npcm_i2c_init_clk()
2133 npcm_i2c_select_bank(bus, I2C_BANK_1); in npcm_i2c_init_clk()
2138 static int npcm_i2c_init_module(struct npcm_i2c *bus, enum i2c_mode mode, in npcm_i2c_init_module() argument
2145 if ((bus->state != I2C_DISABLE && bus->state != I2C_IDLE) || in npcm_i2c_init_module()
2149 npcm_i2c_int_enable(bus, false); in npcm_i2c_init_module()
2150 npcm_i2c_disable(bus); in npcm_i2c_init_module()
2153 if (FIELD_GET(I2C_VER_FIFO_EN, ioread8(bus->reg + I2C_VER))) { in npcm_i2c_init_module()
2154 bus->fifo_use = true; in npcm_i2c_init_module()
2155 npcm_i2c_select_bank(bus, I2C_BANK_0); in npcm_i2c_init_module()
2156 val = ioread8(bus->reg + NPCM_I2CFIF_CTL); in npcm_i2c_init_module()
2158 iowrite8(val, bus->reg + NPCM_I2CFIF_CTL); in npcm_i2c_init_module()
2159 npcm_i2c_select_bank(bus, I2C_BANK_1); in npcm_i2c_init_module()
2161 bus->fifo_use = false; in npcm_i2c_init_module()
2165 ret = npcm_i2c_init_clk(bus, bus_freq_hz); in npcm_i2c_init_module()
2167 dev_err(bus->dev, "npcm_i2c_init_clk failed\n"); in npcm_i2c_init_module()
2172 npcm_i2c_enable(bus); in npcm_i2c_init_module()
2173 bus->state = I2C_IDLE; in npcm_i2c_init_module()
2174 val = ioread8(bus->reg + NPCM_I2CCTL1); in npcm_i2c_init_module()
2176 iowrite8(val, bus->reg + NPCM_I2CCTL1); in npcm_i2c_init_module()
2178 npcm_i2c_reset(bus); in npcm_i2c_init_module()
2181 if ((npcm_i2c_get_SDA(&bus->adap) == 0) || (npcm_i2c_get_SCL(&bus->adap) == 0)) { in npcm_i2c_init_module()
2182 dev_err(bus->dev, "I2C%d init fail: lines are low\n", bus->num); in npcm_i2c_init_module()
2183 dev_err(bus->dev, "SDA=%d SCL=%d\n", npcm_i2c_get_SDA(&bus->adap), in npcm_i2c_init_module()
2184 npcm_i2c_get_SCL(&bus->adap)); in npcm_i2c_init_module()
2188 npcm_i2c_int_enable(bus, true); in npcm_i2c_init_module()
2192 static int __npcm_i2c_init(struct npcm_i2c *bus, struct platform_device *pdev) in __npcm_i2c_init() argument
2198 bus->state = I2C_DISABLE; in __npcm_i2c_init()
2199 bus->master_or_slave = I2C_SLAVE; in __npcm_i2c_init()
2200 bus->int_time_stamp = 0; in __npcm_i2c_init()
2202 bus->slave = NULL; in __npcm_i2c_init()
2212 ret = npcm_i2c_init_module(bus, I2C_MASTER, clk_freq_hz); in __npcm_i2c_init()
2223 struct npcm_i2c *bus = dev_id; in npcm_i2c_bus_irq() local
2225 if (npcm_i2c_is_master(bus)) in npcm_i2c_bus_irq()
2226 bus->master_or_slave = I2C_MASTER; in npcm_i2c_bus_irq()
2228 if (bus->master_or_slave == I2C_MASTER) { in npcm_i2c_bus_irq()
2229 bus->int_time_stamp = jiffies; in npcm_i2c_bus_irq()
2230 if (!npcm_i2c_int_master_handler(bus)) in npcm_i2c_bus_irq()
2234 if (bus->slave) { in npcm_i2c_bus_irq()
2235 bus->master_or_slave = I2C_SLAVE; in npcm_i2c_bus_irq()
2236 if (npcm_i2c_int_slave_handler(bus)) in npcm_i2c_bus_irq()
2241 npcm_i2c_clear_master_status(bus); in npcm_i2c_bus_irq()
2246 static bool npcm_i2c_master_start_xmit(struct npcm_i2c *bus, in npcm_i2c_master_start_xmit() argument
2251 if (bus->state != I2C_IDLE) { in npcm_i2c_master_start_xmit()
2252 bus->cmd_err = -EBUSY; in npcm_i2c_master_start_xmit()
2255 bus->wr_buf = write_data; in npcm_i2c_master_start_xmit()
2256 bus->wr_size = nwrite; in npcm_i2c_master_start_xmit()
2257 bus->wr_ind = 0; in npcm_i2c_master_start_xmit()
2258 bus->rd_buf = read_data; in npcm_i2c_master_start_xmit()
2259 bus->rd_size = nread; in npcm_i2c_master_start_xmit()
2260 bus->rd_ind = 0; in npcm_i2c_master_start_xmit()
2261 bus->PEC_use = 0; in npcm_i2c_master_start_xmit()
2265 bus->PEC_use = use_PEC; in npcm_i2c_master_start_xmit()
2267 bus->read_block_use = use_read_block; in npcm_i2c_master_start_xmit()
2269 bus->operation = I2C_READ_OPER; in npcm_i2c_master_start_xmit()
2271 bus->operation = I2C_WRITE_OPER; in npcm_i2c_master_start_xmit()
2272 if (bus->fifo_use) { in npcm_i2c_master_start_xmit()
2275 npcm_i2c_select_bank(bus, I2C_BANK_1); in npcm_i2c_master_start_xmit()
2277 i2cfif_cts = ioread8(bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_master_start_xmit()
2280 iowrite8(i2cfif_cts, bus->reg + NPCM_I2CFIF_CTS); in npcm_i2c_master_start_xmit()
2283 bus->state = I2C_IDLE; in npcm_i2c_master_start_xmit()
2284 npcm_i2c_stall_after_start(bus, true); in npcm_i2c_master_start_xmit()
2285 npcm_i2c_master_start(bus); in npcm_i2c_master_start_xmit()
2292 struct npcm_i2c *bus = container_of(adap, struct npcm_i2c, adap); in npcm_i2c_master_xfer() local
2303 if (bus->state == I2C_DISABLE) { in npcm_i2c_master_xfer()
2304 dev_err(bus->dev, "I2C%d module is disabled", bus->num); in npcm_i2c_master_xfer()
2342 dev_err(bus->dev, "i2c%d buffer too big\n", bus->num); in npcm_i2c_master_xfer()
2346 time_left = jiffies + bus->adap.timeout / bus->adap.retries + 1; in npcm_i2c_master_xfer()
2349 * we must clear slave address immediately when the bus is not in npcm_i2c_master_xfer()
2353 spin_lock_irqsave(&bus->lock, flags); in npcm_i2c_master_xfer()
2354 bus_busy = ioread8(bus->reg + NPCM_I2CCST) & NPCM_I2CCST_BB; in npcm_i2c_master_xfer()
2356 if (!bus_busy && bus->slave) in npcm_i2c_master_xfer()
2357 iowrite8((bus->slave->addr & 0x7F), in npcm_i2c_master_xfer()
2358 bus->reg + NPCM_I2CADDR1); in npcm_i2c_master_xfer()
2360 spin_unlock_irqrestore(&bus->lock, flags); in npcm_i2c_master_xfer()
2369 * from the bus->dest_addr for the i2c_recover_bus() call later. in npcm_i2c_master_xfer()
2372 * the i2c bus if some error condition occurs. in npcm_i2c_master_xfer()
2377 bus->dest_addr = i2c_8bit_addr_from_msg(msg0) & ~I2C_M_RD; in npcm_i2c_master_xfer()
2380 * Check the BER (bus error) state, when ber_state is true, it means that the module in npcm_i2c_master_xfer()
2381 * detects the bus error which is caused by some factor like that the electricity in npcm_i2c_master_xfer()
2382 * noise occurs on the bus. Under this condition, the module is reset and the bus in npcm_i2c_master_xfer()
2385 * While ber_state is false, the module reset and bus recovery also get done as the in npcm_i2c_master_xfer()
2386 * bus is busy. in npcm_i2c_master_xfer()
2388 if (bus_busy || bus->ber_state) { in npcm_i2c_master_xfer()
2389 iowrite8(NPCM_I2CCST_BB, bus->reg + NPCM_I2CCST); in npcm_i2c_master_xfer()
2390 npcm_i2c_reset(bus); in npcm_i2c_master_xfer()
2395 npcm_i2c_init_params(bus); in npcm_i2c_master_xfer()
2396 bus->msgs = msgs; in npcm_i2c_master_xfer()
2397 bus->msgs_num = num; in npcm_i2c_master_xfer()
2398 bus->cmd_err = 0; in npcm_i2c_master_xfer()
2399 bus->read_block_use = read_block; in npcm_i2c_master_xfer()
2401 reinit_completion(&bus->cmd_complete); in npcm_i2c_master_xfer()
2403 npcm_i2c_int_enable(bus, true); in npcm_i2c_master_xfer()
2405 if (npcm_i2c_master_start_xmit(bus, nwrite, nread, in npcm_i2c_master_xfer()
2413 timeout_usec = (2 * 9 * USEC_PER_SEC / bus->bus_freq) * (2 + nread + nwrite); in npcm_i2c_master_xfer()
2414 timeout = max_t(unsigned long, bus->adap.timeout / bus->adap.retries, in npcm_i2c_master_xfer()
2416 time_left = wait_for_completion_timeout(&bus->cmd_complete, in npcm_i2c_master_xfer()
2420 if (bus->timeout_cnt < ULLONG_MAX) in npcm_i2c_master_xfer()
2421 bus->timeout_cnt++; in npcm_i2c_master_xfer()
2422 if (bus->master_or_slave == I2C_MASTER) { in npcm_i2c_master_xfer()
2424 bus->cmd_err = -EIO; in npcm_i2c_master_xfer()
2425 bus->state = I2C_IDLE; in npcm_i2c_master_xfer()
2430 /* if there was BER, check if need to recover the bus: */ in npcm_i2c_master_xfer()
2431 if (bus->cmd_err == -EAGAIN) in npcm_i2c_master_xfer()
2432 bus->cmd_err = i2c_recover_bus(adap); in npcm_i2c_master_xfer()
2439 else if (bus->cmd_err && in npcm_i2c_master_xfer()
2440 (bus->data->rxf_ctl_last_pec & ioread8(bus->reg + NPCM_I2CRXF_CTL))) in npcm_i2c_master_xfer()
2441 npcm_i2c_reset(bus); in npcm_i2c_master_xfer()
2444 npcm_i2c_stall_after_start(bus, false); in npcm_i2c_master_xfer()
2445 npcm_i2c_eob_int(bus, false); in npcm_i2c_master_xfer()
2449 if (bus->slave) in npcm_i2c_master_xfer()
2450 iowrite8((bus->slave->addr & 0x7F) | NPCM_I2CADDR_SAEN, in npcm_i2c_master_xfer()
2451 bus->reg + NPCM_I2CADDR1); in npcm_i2c_master_xfer()
2453 npcm_i2c_int_enable(bus, false); in npcm_i2c_master_xfer()
2455 return bus->cmd_err; in npcm_i2c_master_xfer()
2486 struct npcm_i2c *bus) in npcm_i2c_init_debugfs() argument
2495 debugfs_create_u64("ber_cnt", 0444, d, &bus->ber_cnt); in npcm_i2c_init_debugfs()
2496 debugfs_create_u64("nack_cnt", 0444, d, &bus->nack_cnt); in npcm_i2c_init_debugfs()
2497 debugfs_create_u64("rec_succ_cnt", 0444, d, &bus->rec_succ_cnt); in npcm_i2c_init_debugfs()
2498 debugfs_create_u64("rec_fail_cnt", 0444, d, &bus->rec_fail_cnt); in npcm_i2c_init_debugfs()
2499 debugfs_create_u64("timeout_cnt", 0444, d, &bus->timeout_cnt); in npcm_i2c_init_debugfs()
2500 debugfs_create_u64("tx_complete_cnt", 0444, d, &bus->tx_complete_cnt); in npcm_i2c_init_debugfs()
2502 bus->debugfs = d; in npcm_i2c_init_debugfs()
2511 struct npcm_i2c *bus; in npcm_i2c_probe_bus() local
2516 bus = devm_kzalloc(&pdev->dev, sizeof(*bus), GFP_KERNEL); in npcm_i2c_probe_bus()
2517 if (!bus) in npcm_i2c_probe_bus()
2520 bus->dev = &pdev->dev; in npcm_i2c_probe_bus()
2522 bus->data = of_device_get_match_data(dev); in npcm_i2c_probe_bus()
2523 if (!bus->data) { in npcm_i2c_probe_bus()
2528 bus->num = of_alias_get_id(pdev->dev.of_node, "i2c"); in npcm_i2c_probe_bus()
2533 bus->apb_clk = clk_get_rate(i2c_clk); in npcm_i2c_probe_bus()
2541 regmap_write(gcr_regmap, NPCM_I2CSEGCTL, bus->data->segctl_init_val); in npcm_i2c_probe_bus()
2543 bus->reg = devm_platform_ioremap_resource(pdev, 0); in npcm_i2c_probe_bus()
2544 if (IS_ERR(bus->reg)) in npcm_i2c_probe_bus()
2545 return PTR_ERR(bus->reg); in npcm_i2c_probe_bus()
2547 spin_lock_init(&bus->lock); in npcm_i2c_probe_bus()
2548 init_completion(&bus->cmd_complete); in npcm_i2c_probe_bus()
2550 adap = &bus->adap; in npcm_i2c_probe_bus()
2554 * The users want to connect a lot of masters on the same bus. in npcm_i2c_probe_bus()
2555 * This timeout is used to determine the time it takes to take bus ownership. in npcm_i2c_probe_bus()
2561 adap->algo_data = bus; in npcm_i2c_probe_bus()
2575 npcm_i2c_int_enable(bus, false); in npcm_i2c_probe_bus()
2577 ret = devm_request_irq(bus->dev, irq, npcm_i2c_bus_irq, 0, in npcm_i2c_probe_bus()
2578 dev_name(bus->dev), bus); in npcm_i2c_probe_bus()
2582 ret = __npcm_i2c_init(bus, pdev); in npcm_i2c_probe_bus()
2588 i2c_set_adapdata(adap, bus); in npcm_i2c_probe_bus()
2590 snprintf(bus->adap.name, sizeof(bus->adap.name), "npcm_i2c_%d", in npcm_i2c_probe_bus()
2591 bus->num); in npcm_i2c_probe_bus()
2592 ret = i2c_add_numbered_adapter(&bus->adap); in npcm_i2c_probe_bus()
2596 platform_set_drvdata(pdev, bus); in npcm_i2c_probe_bus()
2597 npcm_i2c_init_debugfs(pdev, bus); in npcm_i2c_probe_bus()
2604 struct npcm_i2c *bus = platform_get_drvdata(pdev); in npcm_i2c_remove_bus() local
2606 debugfs_remove_recursive(bus->debugfs); in npcm_i2c_remove_bus()
2607 spin_lock_irqsave(&bus->lock, lock_flags); in npcm_i2c_remove_bus()
2608 npcm_i2c_disable(bus); in npcm_i2c_remove_bus()
2609 spin_unlock_irqrestore(&bus->lock, lock_flags); in npcm_i2c_remove_bus()
2610 i2c_del_adapter(&bus->adap); in npcm_i2c_remove_bus()
2655 MODULE_DESCRIPTION("Nuvoton I2C Bus Driver");