Difference between revisions of "Application note - GPIO on fitlet2 with FC-SCG running Linux"
Line 11: | Line 11: | ||
CONFIG_I2C_CHARDEV=y | CONFIG_I2C_CHARDEV=y | ||
− | 2. Make sure that the appropriate I2C bus is enabled in BIOS settings: | + | 2. Make sure that the appropriate I2C bus is enabled in BIOS settings: <br> |
− | Chipset -> South Cluster Configuration -> LPSS Configuration | + | 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:''' It’s strongly recommended that All buses are enabled in the range 1-7 | |
− | Set LPSS I2C #[1-8] Speed | + | |
− | + | 3.Find the GPIO extender on an I2C bus: | |
+ | readonly dev_func='17.2' | ||
+ | busnum=$(ls -l /sys/bus/i2c/devices/ | sed -ne | ||
+ | "/${dev_func}\/i2c_designware/ s/^.*i2c-\([[:digit:]]\{1,2\}\)$/\1/p") | ||
+ | busaddr=$(i2cdetect -y -r $busnum | sed -ne | ||
+ | 's/^.*\(\(27\|4e\)\).*$/0x\1/Ip') | ||
+ | busaddr=$((busaddr)) | ||
− | + | printf "Device found @ 0x%x on bus %i\n" $busaddr $busnum | |
− | + | '''Note:''' PCA9335 chip should be found at address 0x27, whereas XRA1201 chip at 0x4e | |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | 4. Bind the above found device to driver (superuser privileges are necessary) | ||
+ | echo pca9535 $busaddr >/sys/bus/i2c/devices/i2c-${busnum}/new_device | ||
and check the kernel debug messages for a line like that: | and check the kernel debug messages for a line like that: | ||
− | + | i2c i2c-7: new_device: Instantiated device pca9535 at 0x27 | |
− | i2c i2c-7: new_device: Instantiated device pca9535 at 0x27 | + | |
− | + | ||
5. To find the appropriate GPIO issue the command: | 5. To find the appropriate GPIO issue the command: | ||
− | |||
ls /sys/bus/i2c/drivers/pca953x/ | ls /sys/bus/i2c/drivers/pca953x/ | ||
− | |||
and look the output for a line like this: | and look the output for a line like this: | ||
− | + | 7-0027 | |
− | + | ||
− | + | ||
and then issue the command: | and then issue the command: | ||
− | |||
ls /sys/class/gpio/gpiochip*/device -l | ls /sys/class/gpio/gpiochip*/device -l | ||
− | |||
and look the output for a line like this: | 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). | |
− | + | ||
− | 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 | 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 in the following way: | ||
+ | issue the commands: | ||
export n=251 # desired GPIO number | export n=251 # desired GPIO number | ||
echo $n >/sys/class/gpio/export | echo $n >/sys/class/gpio/export | ||
Line 72: | Line 55: | ||
cat /sys/class/gpio/gpio$n/value # read the input value | cat /sys/class/gpio/gpio$n/value # read the input value | ||
echo 1 > /sys/class/gpio/gpio$n/value # write a value for output | echo 1 > /sys/class/gpio/gpio$n/value # write a value for output | ||
+ | |||
Revision as of 10:35, 5 March 2019
- This application note applies to fitlet2 with FC-SCG FACET-Card running Linux.
- It provides an example of how to use the supported I2C GPIO extender feature of FC-SCG under Linux.
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: It’s strongly recommended that All buses are enabled in the range 1-7
3.Find the GPIO extender on an I2C bus:
readonly dev_func='17.2' busnum=$(ls -l /sys/bus/i2c/devices/ | sed -ne "/${dev_func}\/i2c_designware/ s/^.*i2c-\(digit:\{1,2\}\)$/\1/p")
busaddr=$(i2cdetect -y -r $busnum | sed -ne 's/^.*\(\(27\|4e\)\).*$/0x\1/Ip') busaddr=$((busaddr))
printf "Device found @ 0x%x on bus %i\n" $busaddr $busnum
Note: PCA9335 chip should be found at address 0x27, whereas XRA1201 chip at 0x4e
4. Bind the above found device to driver (superuser privileges are necessary)
echo pca9535 $busaddr >/sys/bus/i2c/devices/i2c-${busnum}/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 in the following 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