Application note - GPIO on fitlet2 with FC-SCG running Linux

From fit-PC wiki
Revision as of 08:36, 27 September 2018 by Tamir (Talk | contribs)

Jump to: navigation, search

fitlet2 supports I2C GPIO extender if configured with the FC-SCG FACET

I2c gpio extender binding and usage

1. Make sure that the kernel you use supports the necessary driver.
Check the following entries in the kernel config:

CONFIG_GPIO_PCA953X=[y]
CONFIG_I2C=y
CONFIG_I2C_CHARDEV=y

2. Make sure that the appropriate I2C bus is enabled in BIOS settings: Chipset -> South Cluster Configuration -> LPSS Configuration LPSS I2C #[1-8] Support is set to ACPI mode or PCI mode Set LPSS I2C #[1-8] Speed is set to Standard Mode of Fast Mode

NOTE: All buses must be enabled in the range 1-7, not only I2C-7


3. Determine the type of the GPIO extender chip. Possible options are:

  • PCA9335
  • XRA1201 For this purpose i2cdetect utility may be used:
i2cdetect -y -r 7

PCA9335 chip should be found at address 0x27, whereas XRA1201 chip at 0x4e


4. Issue the following command (superuser privileges are necessary)

echo pca9535 0x27> /sys/bus/i2c/devices/i2c-7/new_device

in case pca9535 chip found

or

echo pca9535 0x4e> /sys/bus/i2c/devices/i2c-7/new_device

and check the kernel debug messages for a line like that:

i2c i2c-7: new_device: Instantiated device pca9535 at 0x27


5. To find the appropriate GPIO issue the command:

ls /sys/bus/i2c/drivers/pca953x/

and look the output for a line like this:

7-0027

and then issue the command:

ls /sys/class/gpio/gpiochip*/device -l

and look the output for a line like this:

/sys/class/gpio/gpiochip251/device -> ../../../7-0027

The bus number and address have to be the same in the both cases (7 and 27 in the example). Hence, the gpiochip251 is the sought; the individual GPIO line number are from 251 to 251+15


6. The found GPIO may be operated over sysfs interface this way: issue the commands:

export n=251 # desired GPIO number
echo $n >/sys/class/gpio/export
echo out >/sys/class/gpio/gpio$n/direction # desired direction in/out
cat /sys/class/gpio/gpio$n/value # read the input value
echo 1 > /sys/class/gpio/gpio$n/value # write a value for output