From 29a3c1c4b42969b487d1212128a2bdf4135fedb9 Mon Sep 17 00:00:00 2001 From: Dave Stevenson <6by9@users.noreply.github.com> Date: Thu, 17 Mar 2016 18:16:16 +0000 Subject: [PATCH] Add configs and overlay for PCA9548 I2C mux Adds kernel configs for I2C muxes and a dt overlay for PCA9548 that adds the 8 muxed I2C buses and mux device. --- arch/arm/boot/dts/overlays/Makefile | 1 + arch/arm/boot/dts/overlays/README | 6 ++ .../boot/dts/overlays/i2c-mux-pca9548a-overlay.dts | 67 ++++++++++++++++++++++ arch/arm/configs/bcm2709_defconfig | 2 + arch/arm/configs/bcmrpi_defconfig | 2 + 5 files changed, 78 insertions(+) create mode 100644 arch/arm/boot/dts/overlays/i2c-mux-pca9548a-overlay.dts --- a/arch/arm/boot/dts/overlays/Makefile +++ b/arch/arm/boot/dts/overlays/Makefile @@ -29,6 +29,7 @@ dtbo-$(RPI_DT_OVERLAYS) += hy28a.dtbo dtbo-$(RPI_DT_OVERLAYS) += hy28b.dtbo dtbo-$(RPI_DT_OVERLAYS) += i2c-rtc.dtbo dtbo-$(RPI_DT_OVERLAYS) += i2c-gpio.dtbo +dtbo-$(RPI_DT_OVERLAYS) += i2c-mux-pca9548a.dtbo dtbo-$(RPI_DT_OVERLAYS) += i2c0-bcm2708.dtbo dtbo-$(RPI_DT_OVERLAYS) += i2c1-bcm2708.dtbo dtbo-$(RPI_DT_OVERLAYS) += i2s-mmap.dtbo --- a/arch/arm/boot/dts/overlays/README +++ b/arch/arm/boot/dts/overlays/README @@ -360,6 +360,12 @@ Params: i2c_gpio_sda GPIO use (default "2" = ~100kHz) +Name: i2c-mux-pca9548a +Info: Adds support for an NXP PCA9548A I2C multiplexer on i2c_arm +Load: dtoverlay=i2c-mux-pca9548a,= +Params: addr I2C address of PCA9548A (default 0x70) + + Name: i2c-rtc Info: Adds support for a number of I2C Real Time Clock devices Load: dtoverlay=i2c-rtc,= --- /dev/null +++ b/arch/arm/boot/dts/overlays/i2c-mux-pca9548a-overlay.dts @@ -0,0 +1,67 @@ +// Definitions for NXP PCA9548A I2C mux on ARM I2C bus. +/dts-v1/; +/plugin/; + +/{ + compatible = "brcm,bcm2708"; + + fragment@0 { + target = <&i2c_arm>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + + i2cmux: mux@70 { + compatible = "nxp,pca9548"; + reg = <0x70>; + #address-cells = <1>; + #size-cells = <0>; + + i2c@0 { + #address-cells = <1>; + #size-cells = <0>; + reg = <0>; + }; + i2c@1 { + #address-cells = <1>; + #size-cells = <0>; + reg = <1>; + }; + i2c@2 { + #address-cells = <1>; + #size-cells = <0>; + reg = <2>; + }; + i2c@3 { + #address-cells = <1>; + #size-cells = <0>; + reg = <3>; + }; + i2c@4 { + #address-cells = <1>; + #size-cells = <0>; + reg = <4>; + }; + i2c@5 { + #address-cells = <1>; + #size-cells = <0>; + reg = <5>; + }; + i2c@6 { + #address-cells = <1>; + #size-cells = <0>; + reg = <6>; + }; + i2c@7 { + #address-cells = <1>; + #size-cells = <0>; + reg = <7>; + }; + }; + }; + }; + __overrides__ { + addr = <&i2cmux>,"reg:0"; + }; +}; --- a/arch/arm/configs/bcm2709_defconfig +++ b/arch/arm/configs/bcm2709_defconfig @@ -600,6 +600,8 @@ CONFIG_I2C=y CONFIG_I2C_CHARDEV=m CONFIG_I2C_BCM2708=m CONFIG_I2C_GPIO=m +CONFIG_I2C_MUX=m +CONFIG_I2C_MUX_PCA954x=m CONFIG_SPI=y CONFIG_SPI_BCM2835=m CONFIG_SPI_BCM2835AUX=m --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig @@ -593,6 +593,8 @@ CONFIG_I2C=y CONFIG_I2C_CHARDEV=m CONFIG_I2C_BCM2708=m CONFIG_I2C_GPIO=m +CONFIG_I2C_MUX=m +CONFIG_I2C_MUX_PCA954x=m CONFIG_SPI=y CONFIG_SPI_BCM2835=m CONFIG_SPI_BCM2835AUX=m