The ConnectCore 6UL SBC Pro has an I/O Expander IC connected to the ConnectCore 6UL SOM through the I2C1 port. This IC provides GPIO and ADC functionalities through a multi-function device driver (MFD).

To program a blank I/O Expander for the first time, see Program I/O Expander firmware with JTAG debugger.

Kernel configuration

You can manage the I/O Expander driver support through the following kernel configuration option:

  • Digi IO Expander (CONFIG_MFD_MCA_IOEXP)

Kernel driver

The Digi I/O Expander core driver is located at:

File Description

drivers/mfd/mca-ioexp-core.c

I/O Expander core driver

drivers/mfd/mca-ioexp-i2c.c

I/O Expander I2C communication driver

drivers/mfd/mca-ioexp-irq.c

I/O Expander MCA interrupt driver

Device tree bindings and customization

The I/O Expander device tree binding is documented at Documentation/devicetree/bindings/mfd/digi,mca-ioexp.txt.

The I/O Expander is connected through I2C1 port of the ConnectCore 6UL SOM. Note that its device tree node has one sub-node for the GPIO driver and one for the ADC.

ConnectCore 6UL SBC Pro device tree
&i2c1 {
	mca_ioexp: mca_io@6e {
		compatible = "digi,mca_ioexp";
		reg = <0x6e>;
		interrupt-parent = <&mca_gpio>;
		interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
		status = "okay";

		interrupt-controller;
		#interrupt-cells = <2>;
		pinctrl-names = "default";

		restore-config-on-resume;

		mca_ioexp_gpio: gpio {
			compatible = "digi,mca-ioexp-gpio";
			gpio-controller;
			#gpio-cells = <2>;

			interrupt-parent = <&mca_ioexp>;
			interrupt-controller;
			#interrupt-cells = <2>;
		};

		mca_ioexp_adc: adc {
			compatible = "digi,mca-ioexp-adc";
			digi,adc-vref = <3300000>;
		};
	};
};

Functionality

See the following topics to learn more about the functionality offered by the MCA: