| /kernel/linux/linux-6.6/Documentation/i2c/ |
| D | i2c-sysfs.rst | 4 Linux I2C Sysfs 10 I2C topology can be complex because of the existence of I2C MUX 11 (I2C Multiplexer). The Linux 12 kernel abstracts the MUX channels into logical I2C bus numbers. However, there 13 is a gap of knowledge to map from the I2C bus physical number and MUX topology 14 to logical I2C bus number. This doc is aimed to fill in this gap, so the 16 the concept of logical I2C buses in the kernel, by knowing the physical I2C 17 topology and navigating through the I2C sysfs in Linux shell. This knowledge is 18 useful and essential to use ``i2c-tools`` for the purpose of development and 24 People who need to use Linux shell to interact with I2C subsystem on a system [all …]
|
| /kernel/linux/linux-6.6/drivers/i2c/busses/ |
| D | Makefile | 3 # Makefile for the i2c bus drivers. 7 obj-$(CONFIG_I2C_SCMI) += i2c-scmi.o 9 # Auxiliary I2C/SMBus modules 10 obj-$(CONFIG_I2C_CCGX_UCSI) += i2c-ccgx-ucsi.o 13 obj-$(CONFIG_I2C_ALI1535) += i2c-ali1535.o 14 obj-$(CONFIG_I2C_ALI1563) += i2c-ali1563.o 15 obj-$(CONFIG_I2C_ALI15X3) += i2c-ali15x3.o 16 obj-$(CONFIG_I2C_AMD756) += i2c-amd756.o 17 obj-$(CONFIG_I2C_AMD756_S4882) += i2c-amd756-s4882.o 18 obj-$(CONFIG_I2C_AMD8111) += i2c-amd8111.o [all …]
|
| D | i2c-pxa.c | 5 * I2C adapter for the PXA I2C bus access. 24 #include <linux/i2c.h> 34 #include <linux/platform_data/i2c-pxa.h> 37 /* I2C register field definitions */ 111 * 8 ITEIE 1 (Enables the I2C unit to interrupt when transmit buffer empty) 112 * 7 GCD 1 (Disables i2c unit response to general call messages as a slave) 114 * 5 SCLE 1 (Enables the i2c clock output for master mode (drives SCL) 123 /* I2C status register init values 154 /* I2C register layout definitions */ 206 { .compatible = "mrvl,pxa-i2c", .data = (void *)REGS_PXA2XX }, [all …]
|
| D | i2c-digicolor.c | 3 * I2C bus driver for Conexant Digicolor SoCs 13 #include <linux/i2c.h> 71 static void dc_i2c_cmd(struct dc_i2c *i2c, u8 cmd) in dc_i2c_cmd() argument 73 writeb_relaxed(cmd | II_COMMAND_GO, i2c->regs + II_COMMAND); in dc_i2c_cmd() 86 static void dc_i2c_data(struct dc_i2c *i2c, u8 data) in dc_i2c_data() argument 88 writeb_relaxed(data, i2c->regs + II_DATA); in dc_i2c_data() 91 static void dc_i2c_write_byte(struct dc_i2c *i2c, u8 byte) in dc_i2c_write_byte() argument 93 dc_i2c_data(i2c, byte); in dc_i2c_write_byte() 94 dc_i2c_cmd(i2c, II_CMD_SEND_ACK); in dc_i2c_write_byte() 97 static void dc_i2c_write_buf(struct dc_i2c *i2c) in dc_i2c_write_buf() argument [all …]
|
| D | i2c-ocores.c | 3 * i2c-ocores.c: I2C bus driver for OpenCores I2C controller 4 * (https://opencores.org/project/i2c/overview) 19 #include <linux/i2c.h> 22 #include <linux/platform_data/i2c-ocores.h> 49 void (*setreg)(struct ocores_i2c *i2c, int reg, u8 value); 50 u8 (*getreg)(struct ocores_i2c *i2c, int reg); 89 static void oc_setreg_8(struct ocores_i2c *i2c, int reg, u8 value) in oc_setreg_8() argument 91 iowrite8(value, i2c->base + (reg << i2c->reg_shift)); in oc_setreg_8() 94 static void oc_setreg_16(struct ocores_i2c *i2c, int reg, u8 value) in oc_setreg_16() argument 96 iowrite16(value, i2c->base + (reg << i2c->reg_shift)); in oc_setreg_16() [all …]
|
| D | i2c-jz4780.c | 3 * Ingenic JZ4780 I2C bus driver 15 #include <linux/i2c.h> 171 static inline unsigned short jz4780_i2c_readw(struct jz4780_i2c *i2c, in jz4780_i2c_readw() argument 174 return readw(i2c->iomem + offset); in jz4780_i2c_readw() 177 static inline void jz4780_i2c_writew(struct jz4780_i2c *i2c, in jz4780_i2c_writew() argument 180 writew(val, i2c->iomem + offset); in jz4780_i2c_writew() 183 static int jz4780_i2c_disable(struct jz4780_i2c *i2c) in jz4780_i2c_disable() argument 188 jz4780_i2c_writew(i2c, JZ4780_I2C_ENB, 0); in jz4780_i2c_disable() 191 regval = jz4780_i2c_readw(i2c, JZ4780_I2C_ENSTA); in jz4780_i2c_disable() 198 dev_err(&i2c->adap.dev, "disable failed: ENSTA=0x%04x\n", regval); in jz4780_i2c_disable() [all …]
|
| D | i2c-xiic.c | 3 * i2c-xiic.c 24 #include <linux/i2c.h> 27 #include <linux/platform_data/i2c-xiic.h> 34 #define DRIVER_NAME "xiic-i2c" 56 * struct xiic_i2c - Internal representation of the XIIC I2C bus 75 * @input_clk: Input clock to I2C controller 76 * @i2c_clk: I2C SCL frequency 106 * struct timing_regs - AXI I2C timing registers that depend on I2C spec 121 /* Reg values in ns derived from I2C spec and AXI I2C PG for different frequencies */ 148 * setting i2c clock frequency for the line. [all …]
|
| D | i2c-img-scb.c | 3 * I2C adapter for the IMG Serial Control Bus (SCB) IP block. 7 * There are three ways that this I2C controller can be driven: 15 * - Atomic commands. A low level I2C symbol (such as generate 20 * This mode of operation is used by MODE_ATOMIC, which uses an I2C 21 * state machine in the interrupt handler to compose/react to I2C 26 * in suboptimal use of the bus, with gaps between the I2C symbols while 30 * specified, and the hardware takes care of the I2C state machine, 31 * using a FIFO to send/receive bytes of data to an I2C slave. The 36 * with control of repeated start bits between I2C messages. 40 * no wasted time between I2C symbols or I2C messages. [all …]
|
| D | i2c-s3c2410.c | 2 /* linux/drivers/i2c/busses/i2c-s3c2410.c 7 * S3C2410 I2C Controller 13 #include <linux/i2c.h> 34 #include <linux/platform_data/i2c-s3c2410.h> 86 /* i2c controller state */ 124 .name = "s3c2410-i2c", 127 .name = "s3c2440-i2c", 130 .name = "s3c2440-hdmiphy-i2c", 136 static int i2c_s3c_irq_nextbyte(struct s3c24xx_i2c *i2c, unsigned long iicstat); 140 { .compatible = "samsung,s3c2410-i2c", .data = (void *)0 }, [all …]
|
| D | i2c-synquacer.c | 12 #include <linux/i2c.h> 25 /* I2C register address definitions */ 35 /* I2C register bit definitions */ 113 /* min I2C clock frequency 14M */ 115 /* max I2C clock frequency 200M */ 117 /* I2C clock frequency 18M */ 148 static inline int is_lastmsg(struct synquacer_i2c *i2c) in is_lastmsg() argument 150 return i2c->msg_idx >= (i2c->msg_num - 1); in is_lastmsg() 153 static inline int is_msglast(struct synquacer_i2c *i2c) in is_msglast() argument 155 return i2c->msg_ptr == (i2c->msg->len - 1); in is_msglast() [all …]
|
| D | i2c-meson.c | 3 * I2C bus driver for Amlogic Meson SoCs 11 #include <linux/i2c.h> 21 /* Meson I2C register map */ 68 * struct meson_i2c - Meson I2C device private data 70 * @adap: I2C adapter instance 74 * @msg: Pointer to the current I2C message 108 void (*set_clk_div)(struct meson_i2c *i2c, unsigned int freq); 111 static void meson_i2c_set_mask(struct meson_i2c *i2c, int reg, u32 mask, in meson_i2c_set_mask() argument 116 data = readl(i2c->regs + reg); in meson_i2c_set_mask() 119 writel(data, i2c->regs + reg); in meson_i2c_set_mask() [all …]
|
| D | i2c-lpc2k.c | 5 * Code portions referenced from the i2x-pxa and i2c-pnx drivers 17 #include <linux/i2c.h> 46 /* I2C SCL clock has different duty cycle depending on mode */ 52 * 26 possible I2C status codes, but codes applicable only 83 static void i2c_lpc2k_reset(struct lpc2k_i2c *i2c) in i2c_lpc2k_reset() argument 86 writel(LPC24XX_CLEAR_ALL, i2c->base + LPC24XX_I2CONCLR); in i2c_lpc2k_reset() 87 writel(0, i2c->base + LPC24XX_I2ADDR); in i2c_lpc2k_reset() 88 writel(LPC24XX_I2EN, i2c->base + LPC24XX_I2CONSET); in i2c_lpc2k_reset() 91 static int i2c_lpc2k_clear_arb(struct lpc2k_i2c *i2c) in i2c_lpc2k_clear_arb() argument 99 writel(LPC24XX_STO, i2c->base + LPC24XX_I2CONSET); in i2c_lpc2k_clear_arb() [all …]
|
| /kernel/linux/linux-5.10/drivers/i2c/busses/ |
| D | Makefile | 3 # Makefile for the i2c bus drivers. 7 obj-$(CONFIG_I2C_SCMI) += i2c-scmi.o 10 obj-$(CONFIG_I2C_ALI1535) += i2c-ali1535.o 11 obj-$(CONFIG_I2C_ALI1563) += i2c-ali1563.o 12 obj-$(CONFIG_I2C_ALI15X3) += i2c-ali15x3.o 13 obj-$(CONFIG_I2C_AMD756) += i2c-amd756.o 14 obj-$(CONFIG_I2C_AMD756_S4882) += i2c-amd756-s4882.o 15 obj-$(CONFIG_I2C_AMD8111) += i2c-amd8111.o 16 obj-$(CONFIG_I2C_CHT_WC) += i2c-cht-wc.o 17 obj-$(CONFIG_I2C_I801) += i2c-i801.o [all …]
|
| D | i2c-pxa.c | 5 * I2C adapter for the PXA I2C bus access. 24 #include <linux/i2c.h> 34 #include <linux/platform_data/i2c-pxa.h> 37 /* I2C register field definitions */ 111 * 8 ITEIE 1 (Enables the I2C unit to interrupt when transmit buffer empty) 112 * 7 GCD 1 (Disables i2c unit response to general call messages as a slave) 114 * 5 SCLE 1 (Enables the i2c clock output for master mode (drives SCL) 123 /* I2C status register init values 154 /* I2C register layout definitions */ 206 { .compatible = "mrvl,pxa-i2c", .data = (void *)REGS_PXA2XX }, [all …]
|
| D | i2c-digicolor.c | 3 * I2C bus driver for Conexant Digicolor SoCs 13 #include <linux/i2c.h> 71 static void dc_i2c_cmd(struct dc_i2c *i2c, u8 cmd) in dc_i2c_cmd() argument 73 writeb_relaxed(cmd | II_COMMAND_GO, i2c->regs + II_COMMAND); in dc_i2c_cmd() 86 static void dc_i2c_data(struct dc_i2c *i2c, u8 data) in dc_i2c_data() argument 88 writeb_relaxed(data, i2c->regs + II_DATA); in dc_i2c_data() 91 static void dc_i2c_write_byte(struct dc_i2c *i2c, u8 byte) in dc_i2c_write_byte() argument 93 dc_i2c_data(i2c, byte); in dc_i2c_write_byte() 94 dc_i2c_cmd(i2c, II_CMD_SEND_ACK); in dc_i2c_write_byte() 97 static void dc_i2c_write_buf(struct dc_i2c *i2c) in dc_i2c_write_buf() argument [all …]
|
| D | i2c-ocores.c | 3 * i2c-ocores.c: I2C bus driver for OpenCores I2C controller 4 * (https://opencores.org/project/i2c/overview) 19 #include <linux/i2c.h> 22 #include <linux/platform_data/i2c-ocores.h> 49 void (*setreg)(struct ocores_i2c *i2c, int reg, u8 value); 50 u8 (*getreg)(struct ocores_i2c *i2c, int reg); 90 static void oc_setreg_8(struct ocores_i2c *i2c, int reg, u8 value) in oc_setreg_8() argument 92 iowrite8(value, i2c->base + (reg << i2c->reg_shift)); in oc_setreg_8() 95 static void oc_setreg_16(struct ocores_i2c *i2c, int reg, u8 value) in oc_setreg_16() argument 97 iowrite16(value, i2c->base + (reg << i2c->reg_shift)); in oc_setreg_16() [all …]
|
| D | i2c-zx2967.c | 10 #include <linux/i2c.h> 53 #define DEV(i2c) ((i2c)->adap.dev.parent) argument 69 static void zx2967_i2c_writel(struct zx2967_i2c *i2c, in zx2967_i2c_writel() argument 72 writel_relaxed(val, i2c->reg_base + reg); in zx2967_i2c_writel() 75 static u32 zx2967_i2c_readl(struct zx2967_i2c *i2c, unsigned long reg) in zx2967_i2c_readl() argument 77 return readl_relaxed(i2c->reg_base + reg); in zx2967_i2c_readl() 80 static void zx2967_i2c_writesb(struct zx2967_i2c *i2c, in zx2967_i2c_writesb() argument 83 writesb(i2c->reg_base + reg, data, len); in zx2967_i2c_writesb() 86 static void zx2967_i2c_readsb(struct zx2967_i2c *i2c, in zx2967_i2c_readsb() argument 89 readsb(i2c->reg_base + reg, data, len); in zx2967_i2c_readsb() [all …]
|
| D | i2c-jz4780.c | 3 * Ingenic JZ4780 I2C bus driver 15 #include <linux/i2c.h> 171 static inline unsigned short jz4780_i2c_readw(struct jz4780_i2c *i2c, in jz4780_i2c_readw() argument 174 return readw(i2c->iomem + offset); in jz4780_i2c_readw() 177 static inline void jz4780_i2c_writew(struct jz4780_i2c *i2c, in jz4780_i2c_writew() argument 180 writew(val, i2c->iomem + offset); in jz4780_i2c_writew() 183 static int jz4780_i2c_disable(struct jz4780_i2c *i2c) in jz4780_i2c_disable() argument 188 jz4780_i2c_writew(i2c, JZ4780_I2C_ENB, 0); in jz4780_i2c_disable() 191 regval = jz4780_i2c_readw(i2c, JZ4780_I2C_ENSTA); in jz4780_i2c_disable() 198 dev_err(&i2c->adap.dev, "disable failed: ENSTA=0x%04x\n", regval); in jz4780_i2c_disable() [all …]
|
| D | i2c-s3c2410.c | 2 /* linux/drivers/i2c/busses/i2c-s3c2410.c 7 * S3C2410 I2C Controller 13 #include <linux/i2c.h> 34 #include <linux/platform_data/i2c-s3c2410.h> 86 /* i2c controller state */ 127 .name = "s3c2410-i2c", 130 .name = "s3c2440-i2c", 133 .name = "s3c2440-hdmiphy-i2c", 139 static int i2c_s3c_irq_nextbyte(struct s3c24xx_i2c *i2c, unsigned long iicstat); 143 { .compatible = "samsung,s3c2410-i2c", .data = (void *)0 }, [all …]
|
| D | i2c-meson.c | 3 * I2C bus driver for Amlogic Meson SoCs 11 #include <linux/i2c.h> 22 /* Meson I2C register map */ 70 * struct meson_i2c - Meson I2C device private data 72 * @adap: I2C adapter instance 76 * @msg: Pointer to the current I2C message 109 static void meson_i2c_set_mask(struct meson_i2c *i2c, int reg, u32 mask, in meson_i2c_set_mask() argument 114 data = readl(i2c->regs + reg); in meson_i2c_set_mask() 117 writel(data, i2c->regs + reg); in meson_i2c_set_mask() 120 static void meson_i2c_reset_tokens(struct meson_i2c *i2c) in meson_i2c_reset_tokens() argument [all …]
|
| D | i2c-lpc2k.c | 5 * Code portions referenced from the i2x-pxa and i2c-pnx drivers 17 #include <linux/i2c.h> 47 /* I2C SCL clock has different duty cycle depending on mode */ 53 * 26 possible I2C status codes, but codes applicable only 84 static void i2c_lpc2k_reset(struct lpc2k_i2c *i2c) in i2c_lpc2k_reset() argument 87 writel(LPC24XX_CLEAR_ALL, i2c->base + LPC24XX_I2CONCLR); in i2c_lpc2k_reset() 88 writel(0, i2c->base + LPC24XX_I2ADDR); in i2c_lpc2k_reset() 89 writel(LPC24XX_I2EN, i2c->base + LPC24XX_I2CONSET); in i2c_lpc2k_reset() 92 static int i2c_lpc2k_clear_arb(struct lpc2k_i2c *i2c) in i2c_lpc2k_clear_arb() argument 100 writel(LPC24XX_STO, i2c->base + LPC24XX_I2CONSET); in i2c_lpc2k_clear_arb() [all …]
|
| D | i2c-img-scb.c | 3 * I2C adapter for the IMG Serial Control Bus (SCB) IP block. 7 * There are three ways that this I2C controller can be driven: 15 * - Atomic commands. A low level I2C symbol (such as generate 20 * This mode of operation is used by MODE_ATOMIC, which uses an I2C 21 * state machine in the interrupt handler to compose/react to I2C 26 * in suboptimal use of the bus, with gaps between the I2C symbols while 30 * specified, and the hardware takes care of the I2C state machine, 31 * using a FIFO to send/receive bytes of data to an I2C slave. The 36 * with control of repeated start bits between I2C messages. 40 * no wasted time between I2C symbols or I2C messages. [all …]
|
| D | i2c-synquacer.c | 12 #include <linux/i2c.h> 25 /* I2C register address definitions */ 35 /* I2C register bit definitions */ 113 /* min I2C clock frequency 14M */ 115 /* max I2C clock frequency 200M */ 117 /* I2C clock frequency 18M */ 149 static inline int is_lastmsg(struct synquacer_i2c *i2c) in is_lastmsg() argument 151 return i2c->msg_idx >= (i2c->msg_num - 1); in is_lastmsg() 154 static inline int is_msglast(struct synquacer_i2c *i2c) in is_msglast() argument 156 return i2c->msg_ptr == (i2c->msg->len - 1); in is_msglast() [all …]
|
| D | i2c-xiic.c | 3 * i2c-xiic.c 24 #include <linux/i2c.h> 27 #include <linux/platform_data/i2c-xiic.h> 34 #define DRIVER_NAME "xiic-i2c" 48 * struct xiic_i2c - Internal representation of the XIIC I2C bus 170 #define xiic_tx_space(i2c) ((i2c)->tx_msg->len - (i2c)->tx_pos) argument 171 #define xiic_rx_space(i2c) ((i2c)->rx_msg->len - (i2c)->rx_pos) argument 173 static int xiic_start_xfer(struct xiic_i2c *i2c); 174 static void __xiic_start_xfer(struct xiic_i2c *i2c); 184 static inline void xiic_setreg8(struct xiic_i2c *i2c, int reg, u8 value) in xiic_setreg8() argument [all …]
|
| /kernel/linux/linux-6.6/drivers/media/pci/netup_unidvb/ |
| D | netup_unidvb_i2c.c | 5 * Internal I2C bus driver for NetUP Universal Dual DVB-CI 65 irqreturn_t netup_i2c_interrupt(struct netup_i2c *i2c) in netup_i2c_interrupt() argument 71 spin_lock_irqsave(&i2c->lock, flags); in netup_i2c_interrupt() 72 reg = readw(&i2c->regs->twi_ctrl0_stat); in netup_i2c_interrupt() 73 writew(reg & ~TWI_IRQEN, &i2c->regs->twi_ctrl0_stat); in netup_i2c_interrupt() 74 dev_dbg(i2c->adap.dev.parent, in netup_i2c_interrupt() 77 dev_dbg(i2c->adap.dev.parent, in netup_i2c_interrupt() 79 i2c->state = STATE_DONE; in netup_i2c_interrupt() 83 dev_dbg(i2c->adap.dev.parent, in netup_i2c_interrupt() 85 i2c->state = STATE_ERROR; in netup_i2c_interrupt() [all …]
|