| /kernel/linux/linux-5.10/Documentation/devicetree/bindings/i2c/ |
| D | i2c-mux-gpmux.txt | 1 General Purpose I2C Bus Mux 3 This binding describes an I2C bus multiplexer that uses a mux controller 4 from the mux subsystem to route the I2C signals. 6 .-----. .-----. 8 .------------. '-----' '-----' 10 | | .--------+--------' 11 | .------. | .------+ child bus A, on MUX value set to 0 12 | | I2C |-|--| Mux | 13 | '------' | '--+---+ child bus B, on MUX value set to 1 14 | .------. | | '----------+--------+--------. [all …]
|
| D | i2c-mux-pca954x.txt | 1 * NXP PCA954x I2C bus switch 3 The driver supports NXP PCA954x and PCA984x I2C mux/switch devices. 7 - compatible: Must contain one of the following. 18 - reg: The I2C address of the device. 22 - Standard I2C mux properties. See i2c-mux.txt in this directory. 23 - I2C child bus nodes. See i2c-mux.txt in this directory. 27 - reset-gpios: Reference to the GPIO connected to the reset input. 28 - idle-state: if present, overrides i2c-mux-idle-disconnect, 29 Please refer to Documentation/devicetree/bindings/mux/mux-controller.txt 30 - i2c-mux-idle-disconnect: Boolean; if defined, forces mux to disconnect all [all …]
|
| D | i2c-mux-reg.txt | 1 Register-based I2C Bus Mux 3 This binding describes an I2C bus multiplexer that uses a single register 4 to route the I2C signals. 7 - compatible: i2c-mux-reg 8 - i2c-parent: The phandle of the I2C bus that this multiplexer's master-side 10 * Standard I2C mux properties. See i2c-mux.txt in this directory. 11 * I2C child bus nodes. See i2c-mux.txt in this directory. 14 - reg: this pair of <offset size> specifies the register to control the mux. 15 The <offset size> depends on its parent node. It can be any memory-mapped 18 - little-endian: The existence indicates the register is in little endian. [all …]
|
| /kernel/linux/linux-4.19/Documentation/devicetree/bindings/i2c/ |
| D | i2c-mux-gpmux.txt | 1 General Purpose I2C Bus Mux 3 This binding describes an I2C bus multiplexer that uses a mux controller 4 from the mux subsystem to route the I2C signals. 6 .-----. .-----. 8 .------------. '-----' '-----' 10 | | .--------+--------' 11 | .------. | .------+ child bus A, on MUX value set to 0 12 | | I2C |-|--| Mux | 13 | '------' | '--+---+ child bus B, on MUX value set to 1 14 | .------. | | '----------+--------+--------. [all …]
|
| D | i2c-mux-reg.txt | 1 Register-based I2C Bus Mux 3 This binding describes an I2C bus multiplexer that uses a single register 4 to route the I2C signals. 7 - compatible: i2c-mux-reg 8 - i2c-parent: The phandle of the I2C bus that this multiplexer's master-side 10 * Standard I2C mux properties. See i2c-mux.txt in this directory. 11 * I2C child bus nodes. See i2c-mux.txt in this directory. 14 - reg: this pair of <offset size> specifies the register to control the mux. 15 The <offset size> depends on its parent node. It can be any memory-mapped 18 - little-endian: The existence indicates the register is in little endian. [all …]
|
| /kernel/linux/linux-4.19/Documentation/i2c/ |
| D | i2c-topology | 1 I2C topology 4 There are a couple of reasons for building more complex i2c topologies 5 than a straight-forward i2c bus with one adapter and one or more devices. 7 1. A mux may be needed on the bus to prevent address collisions. 13 from the i2c bus, at least most of the time, and sits behind a gate 18 These constructs are represented as i2c adapter trees by Linux, where 21 i2c transfers, and all adapters with a parent are part of an "i2c-mux" 24 Depending of the particular mux driver, something happens when there is 25 an i2c transfer on one of its child adapters. The mux driver can 26 obviously operate a mux, but it can also do arbitration with an external [all …]
|
| /kernel/linux/linux-5.10/drivers/i2c/muxes/ |
| D | Kconfig | 1 # SPDX-License-Identifier: GPL-2.0-only 3 # Multiplexer I2C chip drivers configuration 6 menu "Multiplexer I2C Chip support" 10 tristate "GPIO-based I2C arbitration" 15 I2C multimaster arbitration scheme using GPIOs and a challenge & 20 will be called i2c-arb-gpio-challenge. 23 tristate "GPIO-based I2C multiplexer" 27 GPIO based I2C multiplexer. This driver provides access to 28 I2C busses connected through a MUX, which is controlled 32 will be called i2c-mux-gpio. [all …]
|
| D | i2c-mux-gpio.c | 1 // SPDX-License-Identifier: GPL-2.0-only 3 * I2C multiplexer using GPIO API 8 #include <linux/i2c.h> 9 #include <linux/i2c-mux.h> 10 #include <linux/platform_data/i2c-mux-gpio.h> 25 static void i2c_mux_gpio_set(const struct gpiomux *mux, unsigned val) in i2c_mux_gpio_set() argument 31 gpiod_set_array_value_cansleep(mux->ngpios, mux->gpios, NULL, values); in i2c_mux_gpio_set() 36 struct gpiomux *mux = i2c_mux_priv(muxc); in i2c_mux_gpio_select() local 38 i2c_mux_gpio_set(mux, chan); in i2c_mux_gpio_select() 45 struct gpiomux *mux = i2c_mux_priv(muxc); in i2c_mux_gpio_deselect() local [all …]
|
| D | i2c-mux-gpmux.c | 1 // SPDX-License-Identifier: GPL-2.0-only 3 * General Purpose I2C multiplexer 10 #include <linux/i2c.h> 11 #include <linux/i2c-mux.h> 13 #include <linux/mux/consumer.h> 17 struct mux { struct 25 struct mux *mux = i2c_mux_priv(muxc); in i2c_mux_select() argument 28 ret = mux_control_select(mux->control, chan); in i2c_mux_select() 29 mux->do_not_deselect = ret < 0; in i2c_mux_select() 36 struct mux *mux = i2c_mux_priv(muxc); in i2c_mux_deselect() local [all …]
|
| D | Makefile | 1 # SPDX-License-Identifier: GPL-2.0 3 # Makefile for multiplexer I2C chip drivers. 5 obj-$(CONFIG_I2C_ARB_GPIO_CHALLENGE) += i2c-arb-gpio-challenge.o 7 obj-$(CONFIG_I2C_DEMUX_PINCTRL) += i2c-demux-pinctrl.o 9 obj-$(CONFIG_I2C_MUX_GPIO) += i2c-mux-gpio.o 10 obj-$(CONFIG_I2C_MUX_GPMUX) += i2c-mux-gpmux.o 11 obj-$(CONFIG_I2C_MUX_LTC4306) += i2c-mux-ltc4306.o 12 obj-$(CONFIG_I2C_MUX_MLXCPLD) += i2c-mux-mlxcpld.o 13 obj-$(CONFIG_I2C_MUX_PCA9541) += i2c-mux-pca9541.o 14 obj-$(CONFIG_I2C_MUX_PCA954x) += i2c-mux-pca954x.o [all …]
|
| D | i2c-mux-reg.c | 1 // SPDX-License-Identifier: GPL-2.0-or-later 3 * I2C multiplexer using a single register 9 #include <linux/i2c.h> 10 #include <linux/i2c-mux.h> 15 #include <linux/platform_data/i2c-mux-reg.h> 23 static int i2c_mux_reg_set(const struct regmux *mux, unsigned int chan_id) in i2c_mux_reg_set() argument 25 if (!mux->data.reg) in i2c_mux_reg_set() 26 return -EINVAL; in i2c_mux_reg_set() 34 switch (mux->data.reg_size) { in i2c_mux_reg_set() 36 if (mux->data.little_endian) in i2c_mux_reg_set() [all …]
|
| D | i2c-mux-pinctrl.c | 1 // SPDX-License-Identifier: GPL-2.0-only 3 * I2C multiplexer using pinctrl API 8 #include <linux/i2c.h> 9 #include <linux/i2c-mux.h> 24 struct i2c_mux_pinctrl *mux = i2c_mux_priv(muxc); in i2c_mux_pinctrl_select() local 26 return pinctrl_select_state(mux->pinctrl, mux->states[chan]); in i2c_mux_pinctrl_select() 31 return i2c_mux_pinctrl_select(muxc, muxc->num_adapters); in i2c_mux_pinctrl_deselect() 41 list_for_each_entry(setting, &state->settings, node) { in i2c_mux_pinctrl_root_adapter() 42 pin_root = i2c_root_adapter(setting->pctldev->dev); in i2c_mux_pinctrl_root_adapter() 56 struct device_node *np = dev->of_node; in i2c_mux_pinctrl_parent_adapter() [all …]
|
| /kernel/linux/linux-4.19/drivers/i2c/muxes/ |
| D | Kconfig | 2 # Multiplexer I2C chip drivers configuration 5 menu "Multiplexer I2C Chip support" 9 tristate "GPIO-based I2C arbitration" 14 I2C multimaster arbitration scheme using GPIOs and a challenge & 19 will be called i2c-arb-gpio-challenge. 22 tristate "GPIO-based I2C multiplexer" 26 GPIO based I2C multiplexer. This driver provides access to 27 I2C busses connected through a MUX, which is controlled 31 will be called i2c-mux-gpio. 34 tristate "General Purpose I2C multiplexer" [all …]
|
| D | i2c-mux-gpio.c | 2 * I2C multiplexer using GPIO API 11 #include <linux/i2c.h> 12 #include <linux/i2c-mux.h> 13 #include <linux/platform_data/i2c-mux-gpio.h> 28 static void i2c_mux_gpio_set(const struct gpiomux *mux, unsigned val) in i2c_mux_gpio_set() argument 32 for (i = 0; i < mux->data.n_gpios; i++) in i2c_mux_gpio_set() 33 mux->values[i] = (val >> i) & 1; in i2c_mux_gpio_set() 35 gpiod_set_array_value_cansleep(mux->data.n_gpios, in i2c_mux_gpio_set() 36 mux->gpios, mux->values); in i2c_mux_gpio_set() 41 struct gpiomux *mux = i2c_mux_priv(muxc); in i2c_mux_gpio_select() local [all …]
|
| D | i2c-mux-gpmux.c | 2 * General Purpose I2C multiplexer 13 #include <linux/i2c.h> 14 #include <linux/i2c-mux.h> 16 #include <linux/mux/consumer.h> 20 struct mux { struct 28 struct mux *mux = i2c_mux_priv(muxc); in i2c_mux_select() local 31 ret = mux_control_select(mux->control, chan); in i2c_mux_select() 32 mux->do_not_deselect = ret < 0; in i2c_mux_select() 39 struct mux *mux = i2c_mux_priv(muxc); in i2c_mux_deselect() local 41 if (mux->do_not_deselect) in i2c_mux_deselect() [all …]
|
| D | Makefile | 1 # SPDX-License-Identifier: GPL-2.0 3 # Makefile for multiplexer I2C chip drivers. 5 obj-$(CONFIG_I2C_ARB_GPIO_CHALLENGE) += i2c-arb-gpio-challenge.o 7 obj-$(CONFIG_I2C_DEMUX_PINCTRL) += i2c-demux-pinctrl.o 9 obj-$(CONFIG_I2C_MUX_GPIO) += i2c-mux-gpio.o 10 obj-$(CONFIG_I2C_MUX_GPMUX) += i2c-mux-gpmux.o 11 obj-$(CONFIG_I2C_MUX_LTC4306) += i2c-mux-ltc4306.o 12 obj-$(CONFIG_I2C_MUX_MLXCPLD) += i2c-mux-mlxcpld.o 13 obj-$(CONFIG_I2C_MUX_PCA9541) += i2c-mux-pca9541.o 14 obj-$(CONFIG_I2C_MUX_PCA954x) += i2c-mux-pca954x.o [all …]
|
| D | i2c-mux-reg.c | 2 * I2C multiplexer using a single register 13 #include <linux/i2c.h> 14 #include <linux/i2c-mux.h> 19 #include <linux/platform_data/i2c-mux-reg.h> 27 static int i2c_mux_reg_set(const struct regmux *mux, unsigned int chan_id) in i2c_mux_reg_set() argument 29 if (!mux->data.reg) in i2c_mux_reg_set() 30 return -EINVAL; in i2c_mux_reg_set() 38 switch (mux->data.reg_size) { in i2c_mux_reg_set() 40 if (mux->data.little_endian) in i2c_mux_reg_set() 41 iowrite32(chan_id, mux->data.reg); in i2c_mux_reg_set() [all …]
|
| D | i2c-mux-pinctrl.c | 2 * I2C multiplexer using pinctrl API 19 #include <linux/i2c.h> 20 #include <linux/i2c-mux.h> 35 struct i2c_mux_pinctrl *mux = i2c_mux_priv(muxc); in i2c_mux_pinctrl_select() local 37 return pinctrl_select_state(mux->pinctrl, mux->states[chan]); in i2c_mux_pinctrl_select() 42 return i2c_mux_pinctrl_select(muxc, muxc->num_adapters); in i2c_mux_pinctrl_deselect() 52 list_for_each_entry(setting, &state->settings, node) { in i2c_mux_pinctrl_root_adapter() 53 pin_root = i2c_root_adapter(setting->pctldev->dev); in i2c_mux_pinctrl_root_adapter() 67 struct device_node *np = dev->of_node; in i2c_mux_pinctrl_parent_adapter() 71 parent_np = of_parse_phandle(np, "i2c-parent", 0); in i2c_mux_pinctrl_parent_adapter() [all …]
|
| /kernel/linux/linux-5.10/Documentation/i2c/ |
| D | i2c-topology.rst | 2 I2C muxes and complex topologies 5 There are a couple of reasons for building more complex I2C topologies 6 than a straight-forward I2C bus with one adapter and one or more devices. 8 1. A mux may be needed on the bus to prevent address collisions. 14 from the I2C bus, at least most of the time, and sits behind a gate 20 These constructs are represented as I2C adapter trees by Linux, where 23 I2C transfers, and all adapters with a parent are part of an "i2c-mux" 26 Depending of the particular mux driver, something happens when there is 27 an I2C transfer on one of its child adapters. The mux driver can 28 obviously operate a mux, but it can also do arbitration with an external [all …]
|
| /kernel/linux/linux-4.19/Documentation/i2c/muxes/ |
| D | i2c-mux-gpio | 1 Kernel driver i2c-mux-gpio 6 ----------- 8 i2c-mux-gpio is an i2c mux driver providing access to I2C bus segments 9 from a master I2C bus and a hardware MUX controlled through GPIO pins. 13 ---------- ---------- Bus segment 1 - - - - - 14 | | SCL/SDA | |-------------- | | 15 | |------------| | 17 | Linux | GPIO 1..N | MUX |--------------- Devices 18 | |------------| | | | 20 | | | |---------------| | [all …]
|
| /kernel/linux/linux-4.19/drivers/mux/ |
| D | adg792a.c | 1 // SPDX-License-Identifier: GPL-2.0 3 * Multiplexer driver for Analog Devices ADG792A/G Triple 4:1 mux 11 #include <linux/i2c.h> 13 #include <linux/mux/driver.h> 18 #define ADG792A_DISABLE(mux) (0x50 | (mux)) argument 20 #define ADG792A_MUX(mux, state) (0xc0 | (((mux) + 1) << 2) | (state)) argument 23 static int adg792a_write_cmd(struct i2c_client *i2c, u8 cmd, int reset) in adg792a_write_cmd() argument 31 return i2c_smbus_write_byte_data(i2c, cmd, data); in adg792a_write_cmd() 34 static int adg792a_set(struct mux_control *mux, int state) in adg792a_set() argument 36 struct i2c_client *i2c = to_i2c_client(mux->chip->dev.parent); in adg792a_set() local [all …]
|
| /kernel/linux/linux-5.10/drivers/mux/ |
| D | adg792a.c | 1 // SPDX-License-Identifier: GPL-2.0 3 * Multiplexer driver for Analog Devices ADG792A/G Triple 4:1 mux 11 #include <linux/i2c.h> 13 #include <linux/mux/driver.h> 18 #define ADG792A_DISABLE(mux) (0x50 | (mux)) argument 20 #define ADG792A_MUX(mux, state) (0xc0 | (((mux) + 1) << 2) | (state)) argument 23 static int adg792a_write_cmd(struct i2c_client *i2c, u8 cmd, int reset) in adg792a_write_cmd() argument 31 return i2c_smbus_write_byte_data(i2c, cmd, data); in adg792a_write_cmd() 34 static int adg792a_set(struct mux_control *mux, int state) in adg792a_set() argument 36 struct i2c_client *i2c = to_i2c_client(mux->chip->dev.parent); in adg792a_set() local [all …]
|
| /kernel/linux/linux-5.10/Documentation/i2c/muxes/ |
| D | i2c-mux-gpio.rst | 2 Kernel driver i2c-mux-gpio 8 ----------- 10 i2c-mux-gpio is an i2c mux driver providing access to I2C bus segments 11 from a master I2C bus and a hardware MUX controlled through GPIO pins. 15 ---------- ---------- Bus segment 1 - - - - - 16 | | SCL/SDA | |-------------- | | 17 | |------------| | 19 | Linux | GPIO 1..N | MUX |--------------- Devices 20 | |------------| | | | 22 | | | |---------------| | [all …]
|
| /kernel/linux/linux-5.10/arch/arm/boot/dts/ |
| D | at91-natte.dtsi | 1 // SPDX-License-Identifier: GPL-2.0+ 3 * at91-natte.dts - Device Tree include file for the Natte board 11 mux: mux-controller { label 12 compatible = "gpio-mux"; 13 #mux-control-cells = <0>; 15 mux-gpios = <&ioexp 0 GPIO_ACTIVE_HIGH>, 20 batntc-mux { 21 compatible = "io-channel-mux"; 22 io-channels = <&adc 5>; 23 io-channel-names = "parent"; [all …]
|
| /kernel/linux/linux-4.19/arch/arm/boot/dts/ |
| D | at91-natte.dtsi | 1 // SPDX-License-Identifier: GPL-2.0+ 3 * at91-natte.dts - Device Tree include file for the Natte board 11 mux: mux-controller { label 12 compatible = "gpio-mux"; 13 #mux-control-cells = <0>; 15 mux-gpios = <&ioexp 0 GPIO_ACTIVE_HIGH>, 20 batntc-mux { 21 compatible = "io-channel-mux"; 22 io-channels = <&adc 5>; 23 io-channel-names = "parent"; [all …]
|