20240629在飞凌开发板OK3588-C上使用Rockchip原厂的SDK跑通I2C扩展GPIO芯片TCA6424ARGJRR
2024/6/29 18:02
1、替换DTS了:
Z:\repo_RK3588_Buildroot20240508\kernel\arch\arm64\boot\dts\rockchip
viewpro@viewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508/kernel/arch/arm64/boot/dts/rockchip$ ll
total 1244
drwx------ 2 viewpro viewpro 4096 6月 29 18:12 ./
drwxrwxr-x 34 viewpro viewpro 4096 6月 29 17:15 ../
-rw-rw-r-- 1 viewpro viewpro 3917 12月 21 2023 FET3588-C.dtsi
-rw-rw-r-- 1 viewpro viewpro 7758 12月 21 2023 Makefile
-rw-rw-r-- 1 viewpro viewpro 14850 12月 21 2023 OK3588-C-Camera.dtsi
-rw-rw-r-- 1 viewpro viewpro 32947 12月 21 2023 OK3588-C-common.dtsi
-rw-rw-r-- 1 viewpro viewpro 2363 12月 21 2023 OK3588-C-Linux.dts
-rw-rw-r-- 1 viewpro viewpro 246717 5月 24 17:56 OK3588-C-Linux.dump.dts
-rw-rw-r-- 1 viewpro viewpro 27858 12月 21 2023 rk3588.dtsi
-rw-rw-r-- 1 viewpro viewpro 280681 6月 29 18:12 rk3588-evb7-v11-linux.dtb
-rw-rw-r-- 1 viewpro viewpro 3061 6月 29 18:12 .rk3588-evb7-v11-linux.dtb.cmd
-rw-rw-r-- 1 viewpro viewpro 120 6月 29 18:12 .rk3588-evb7-v11-linux.dtb.d.dtc.tmp
-rw-rw-r-- 1 viewpro viewpro 1693 6月 29 18:12 .rk3588-evb7-v11-linux.dtb.d.pre.tmp
-rw-rw-r-- 1 viewpro viewpro 326518 6月 29 18:12 .rk3588-evb7-v11-linux.dtb.dts.tmp
-rwx------ 1 viewpro viewpro 2363 6月 21 11:40 rk3588-evb7-v11-linux.dts*
-rw-rw-r-- 1 viewpro viewpro 9573 12月 21 2023 rk3588-rk806-single.dtsi
-rw-rw-r-- 1 viewpro viewpro 185703 12月 21 2023 rk3588s.dtsi
-rw-rw-r-- 1 viewpro viewpro 67505 12月 21 2023 rk3588s-pinctrl.dtsi
-rw-rw-r-- 1 viewpro viewpro 9865 12月 21 2023 rk3588-vccio3-pinctrl.dtsi
-rw-rw-r-- 1 viewpro viewpro 7448 12月 21 2023 rockchip-pinconf.dtsi
viewpro@viewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508/kernel/arch/arm64/boot/dts/rockchip$
确认驱动没有加载好:没有找到gpiochip485!
root@rk3588-buildroot:/#
root@rk3588-buildroot:/#
root@rk3588-buildroot:/#
Display all 910 possibilities? (y or n)^C
root@rk3588-buildroot:/#
root@rk3588-buildroot:/# cd /sys/class/gpio/
root@rk3588-buildroot:/sys/class/gpio#
root@rk3588-buildroot:/sys/class/gpio# ls -l
total 0
--w------- 1 root root 4096 Jan 1 00:00 export
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip0 -> ../../devices/platform/pinctrl/fd8a0000.gpio/gpio/gpiochip0
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip128 -> ../../devices/platform/pinctrl/fec50000.gpio/gpio/gpiochip128
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip32 -> ../../devices/platform/pinctrl/fec20000.gpio/gpio/gpiochip32
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip509 -> ../../devices/platform/feb20000.spi/spi_master/spi2/spi2.0/rk806-pinctrl.0.auto/gpio/gpiochip509
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip64 -> ../../devices/platform/pinctrl/fec30000.gpio/gpio/gpiochip64
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip96 -> ../../devices/platform/pinctrl/fec40000.gpio/gpio/gpiochip96
--w------- 1 root root 4096 Jan 1 00:00 unexport
root@rk3588-buildroot:/sys/class/gpio#
root@rk3588-buildroot:/sys/class/gpio#
root@rk3588-buildroot:/sys/class/gpio# echo 508 > export
[ 297.960946] export_store: invalid GPIO 508
sh: echo: write error: Invalid argument
root@rk3588-buildroot:/sys/class/gpio#
root@rk3588-buildroot:/sys/class/gpio#
Z:\repo_RK3588_Buildroot20240508\kernel\include\dt-bindings\pinctrl\rockchip.h
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Header providing constants for Rockchip pinctrl bindings.
*
* Copyright (c) 2013 MundoReader S.L.
* Author: Heiko Stuebner <heiko@sntech.de>
*/
#ifndef __DT_BINDINGS_ROCKCHIP_PINCTRL_H__
#define __DT_BINDINGS_ROCKCHIP_PINCTRL_H__
#define RK_PA0 0
#define RK_PA1 1
#define RK_PA2 2
#define RK_PA3 3
#define RK_PA4 4
#define RK_PA5 5
#define RK_PA6 6
#define RK_PA7 7
#define RK_PB0 8
#define RK_PB1 9
#define RK_PB2 10
#define RK_PB3 11
#define RK_PB4 12
#define RK_PB5 13
#define RK_PB6 14
#define RK_PB7 15
#define RK_PC0 16
#define RK_PC1 17
#define RK_PC2 18
#define RK_PC3 19
#define RK_PC4 20
#define RK_PC5 21
#define RK_PC6 22
#define RK_PC7 23
#define RK_PD0 24
#define RK_PD1 25
#define RK_PD2 26
#define RK_PD3 27
#define RK_PD4 28
#define RK_PD5 29
#define RK_PD6 30
#define RK_PD7 31
#define RK_FUNC_GPIO 0
#define EXTIO_GPIO_P00 0
#define EXTIO_GPIO_P01 1
#define EXTIO_GPIO_P02 2
#define EXTIO_GPIO_P03 3
#define EXTIO_GPIO_P04 4
#define EXTIO_GPIO_P05 5
#define EXTIO_GPIO_P06 6
#define EXTIO_GPIO_P07 7
#define EXTIO_GPIO_P10 8
#define EXTIO_GPIO_P11 9
#define EXTIO_GPIO_P12 10
#define EXTIO_GPIO_P13 11
#define EXTIO_GPIO_P14 12
#define EXTIO_GPIO_P15 13
#define EXTIO_GPIO_P16 14
#define EXTIO_GPIO_P17 15
#define EXTIO_GPIO_P20 16
#define EXTIO_GPIO_P21 17
#define EXTIO_GPIO_P22 18
#define EXTIO_GPIO_P23 19
#define EXTIO_GPIO_P24 20
#define EXTIO_GPIO_P25 21
#define EXTIO_GPIO_P26 22
#define EXTIO_GPIO_P27 23
#endif
2、更新驱动的部分:
Z:\repo_RK3588_Buildroot20240508\kernel\.config
#
# I2C GPIO expanders
#
# CONFIG_GPIO_ADP5588 is not set
# CONFIG_GPIO_ADNP is not set
# CONFIG_GPIO_AW9110 is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX732X is not set
# CONFIG_GPIO_NCA9539 is not set
CONFIG_GPIO_PCA953X=y
# CONFIG_GPIO_PCA953X_IRQ is not set
# CONFIG_GPIO_PCA9570 is not set
# CONFIG_GPIO_PCF857X is not set
# CONFIG_GPIO_TPIC2810 is not set
# end of I2C GPIO expanders
CONFIG_GPIO_ROCKCHIP=y
# CONFIG_GPIO_SAMA5D2_PIOBU is not set
# CONFIG_GPIO_SIFIVE is not set
CONFIG_GPIO_SYSCON=y
# CONFIG_GPIO_XGENE is not set
# CONFIG_GPIO_XILINX is not set
# CONFIG_GPIO_AMD_FCH is not set
# end of Memory mapped GPIO drivers
#
# I2C GPIO expanders
#
# CONFIG_GPIO_ADP5588 is not set
# CONFIG_GPIO_ADNP is not set
# CONFIG_GPIO_AW9110 is not set
# CONFIG_GPIO_GW_PLD is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX732X is not set
# CONFIG_GPIO_NCA9539 is not set
# CONFIG_GPIO_PCA953X is not set
# CONFIG_GPIO_PCA9570 is not set
# CONFIG_GPIO_PCF857X is not set
# CONFIG_GPIO_TPIC2810 is not set
# end of I2C GPIO expanders
#
# MFD GPIO expanders
#
# CONFIG_GPIO_TPS6586X is not set
# end of MFD GPIO expanders
【相关的驱动部分:】
viewpro@viewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508/kernel/arch/arm64/configs$ grep CONFIG_GPIO_SYSCON . -R
./rockchip_defconfig:CONFIG_GPIO_SYSCON=y
./rockchip_linux_defconfig:CONFIG_GPIO_SYSCON=y
viewpro@viewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508/kernel/arch/arm64/configs$
Z:\repo_RK3588_Buildroot20240508\kernel\arch\arm64\configs\rk3588_linux.config
# CONFIG_BCMDHD_SDIO=y is not set
CONFIG_BCMDHD_PCIE=y
CONFIG_MALI_CSF_SUPPORT=y
CONFIG_GPIO_PCA953X=y
Z:\repo_RK3588_Buildroot20240508\kernel\drivers\gpio\gpio-pca953x.c
【这里不要动了,强制修改的!】
Z:\repo_RK3588_Buildroot20240508\kernel\drivers\gpio\Makefile
obj-$(CONFIG_GPIO_MXC) += gpio-mxc.o
obj-$(CONFIG_GPIO_MXS) += gpio-mxs.o
obj-$(CONFIG_GPIO_NCA9539) += gpio-nca9539.o
obj-$(CONFIG_GPIO_OCTEON) += gpio-octeon.o
obj-$(CONFIG_GPIO_OMAP) += gpio-omap.o
obj-$(CONFIG_GPIO_PALMAS) += gpio-palmas.o
#obj-$(CONFIG_GPIO_PCA953X) += gpio-pca953x.o
obj-y += gpio-pca953x.o
obj-$(CONFIG_GPIO_PCA9570) += gpio-pca9570.o
obj-$(CONFIG_GPIO_PCF857X) += gpio-pcf857x.o
obj-$(CONFIG_GPIO_PCH) += gpio-pch.o
确认的LOG:
高:3.299V
低:0.001V
root@rk3588-buildroot:/#
root@rk3588-buildroot:/#
root@rk3588-buildroot:/#
root@rk3588-buildroot:/# cd /sys/class/gpio/
root@rk3588-buildroot:/sys/class/gpio# ls -l
total 0
--w------- 1 root root 4096 Jan 1 00:00 export
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip0 -> ../../devices/platform/pinctrl/fd8a0000.gpio/gpio/gpiochip0
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip128 -> ../../devices/platform/pinctrl/fec50000.gpio/gpio/gpiochip128
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip32 -> ../../devices/platform/pinctrl/fec20000.gpio/gpio/gpiochip32
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip485 -> ../../devices/platform/feaa0000.i2c/i2c-2/2-0023/gpio/gpiochip485
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip509 -> ../../devices/platform/feb20000.spi/spi_master/spi2/spi2.0/rk806-pinctrl.0.auto/gpio/gpiochip509
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip64 -> ../../devices/platform/pinctrl/fec30000.gpio/gpio/gpiochip64
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip96 -> ../../devices/platform/pinctrl/fec40000.gpio/gpio/gpiochip96
--w------- 1 root root 4096 Jan 1 00:00 unexport
root@rk3588-buildroot:/sys/class/gpio#
root@rk3588-buildroot:/sys/class/gpio# echo 508 > export
root@rk3588-buildroot:/sys/class/gpio#
root@rk3588-buildroot:/sys/class/gpio# ls -l
total 0
--w------- 1 root root 4096 Jan 1 00:01 export
lrwxrwxrwx 1 root root 0 Jan 1 00:01 gpio508 -> ../../devices/platform/feaa0000.i2c/i2c-2/2-0023/gpiochip6/gpio/gpio508
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip0 -> ../../devices/platform/pinctrl/fd8a0000.gpio/gpio/gpiochip0
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip128 -> ../../devices/platform/pinctrl/fec50000.gpio/gpio/gpiochip128
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip32 -> ../../devices/platform/pinctrl/fec20000.gpio/gpio/gpiochip32
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip485 -> ../../devices/platform/feaa0000.i2c/i2c-2/2-0023/gpio/gpiochip485
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip509 -> ../../devices/platform/feb20000.spi/spi_master/spi2/spi2.0/rk806-pinctrl.0.auto/gpio/gpiochip509
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip64 -> ../../devices/platform/pinctrl/fec30000.gpio/gpio/gpiochip64
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip96 -> ../../devices/platform/pinctrl/fec40000.gpio/gpio/gpiochip96
--w------- 1 root root 4096 Jan 1 00:00 unexport
root@rk3588-buildroot:/sys/class/gpio#
root@rk3588-buildroot:/sys/class/gpio# cd gpio508
root@rk3588-buildroot:/sys/class/gpio/gpio508#
root@rk3588-buildroot:/sys/class/gpio/gpio508# ls -l
total 0
-rw-r--r-- 1 root root 4096 Jan 1 00:01 active_low
lrwxrwxrwx 1 root root 0 Jan 1 00:01 device -> ../../../gpiochip6
-rw-r--r-- 1 root root 4096 Jan 1 00:01 direction
drwxr-xr-x 2 root root 0 Jan 1 00:01 power
lrwxrwxrwx 1 root root 0 Jan 1 00:01 subsystem -> ../../../../../../../../class/gpio
-rw-r--r-- 1 root root 4096 Jan 1 00:01 uevent
-rw-r--r-- 1 root root 4096 Jan 1 00:01 value
root@rk3588-buildroot:/sys/class/gpio/gpio508#
root@rk3588-buildroot:/sys/class/gpio/gpio508# cat direction
in
root@rk3588-buildroot:/sys/class/gpio/gpio508# cat value
0
root@rk3588-buildroot:/sys/class/gpio/gpio508#
root@rk3588-buildroot:/sys/class/gpio/gpio508# echo out > direction
root@rk3588-buildroot:/sys/class/gpio/gpio508# echo 1 > value
root@rk3588-buildroot:/sys/class/gpio/gpio508#
root@rk3588-buildroot:/sys/class/gpio/gpio508# cat direction
out
root@rk3588-buildroot:/sys/class/gpio/gpio508# cat value
1
root@rk3588-buildroot:/sys/class/gpio/gpio508# ^C
root@rk3588-buildroot:/sys/class/gpio/gpio508#
root@rk3588-buildroot:/sys/class/gpio/gpio508#
root@rk3588-buildroot:/sys/class/gpio/gpio508# cd ..
root@rk3588-buildroot:/sys/class/gpio#
root@rk3588-buildroot:/sys/class/gpio#
root@rk3588-buildroot:/sys/class/gpio# ls -l
total 0
--w------- 1 root root 4096 Jan 1 00:01 export
lrwxrwxrwx 1 root root 0 Jan 1 00:01 gpio508 -> ../../devices/platform/feaa0000.i2c/i2c-2/2-0023/gpiochip6/gpio/gpio508
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip0 -> ../../devices/platform/pinctrl/fd8a0000.gpio/gpio/gpiochip0
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip128 -> ../../devices/platform/pinctrl/fec50000.gpio/gpio/gpiochip128
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip32 -> ../../devices/platform/pinctrl/fec20000.gpio/gpio/gpiochip32
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip485 -> ../../devices/platform/feaa0000.i2c/i2c-2/2-0023/gpio/gpiochip485
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip509 -> ../../devices/platform/feb20000.spi/spi_master/spi2/spi2.0/rk806-pinctrl.0.auto/gpio/gpiochip509
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip64 -> ../../devices/platform/pinctrl/fec30000.gpio/gpio/gpiochip64
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip96 -> ../../devices/platform/pinctrl/fec40000.gpio/gpio/gpiochip96
--w------- 1 root root 4096 Jan 1 00:00 unexport
root@rk3588-buildroot:/sys/class/gpio#
root@rk3588-buildroot:/sys/class/gpio#
root@rk3588-buildroot:/sys/class/gpio# echo 507 > export
root@rk3588-buildroot:/sys/class/gpio# ls -l
total 0
--w------- 1 root root 4096 Jan 1 00:09 export
lrwxrwxrwx 1 root root 0 Jan 1 00:09 gpio507 -> ../../devices/platform/feaa0000.i2c/i2c-2/2-0023/gpiochip6/gpio/gpio507
lrwxrwxrwx 1 root root 0 Jan 1 00:01 gpio508 -> ../../devices/platform/feaa0000.i2c/i2c-2/2-0023/gpiochip6/gpio/gpio508
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip0 -> ../../devices/platform/pinctrl/fd8a0000.gpio/gpio/gpiochip0
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip128 -> ../../devices/platform/pinctrl/fec50000.gpio/gpio/gpiochip128
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip32 -> ../../devices/platform/pinctrl/fec20000.gpio/gpio/gpiochip32
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip485 -> ../../devices/platform/feaa0000.i2c/i2c-2/2-0023/gpio/gpiochip485
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip509 -> ../../devices/platform/feb20000.spi/spi_master/spi2/spi2.0/rk806-pinctrl.0.auto/gpio/gpiochip509
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip64 -> ../../devices/platform/pinctrl/fec30000.gpio/gpio/gpiochip64
lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip96 -> ../../devices/platform/pinctrl/fec40000.gpio/gpio/gpiochip96
--w------- 1 root root 4096 Jan 1 00:00 unexport
root@rk3588-buildroot:/sys/class/gpio# cd gpio507/
root@rk3588-buildroot:/sys/class/gpio/gpio507# ll
sh: ll: command not found
root@rk3588-buildroot:/sys/class/gpio/gpio507# ls -l
total 0
-rw-r--r-- 1 root root 4096 Jan 1 00:09 active_low
lrwxrwxrwx 1 root root 0 Jan 1 00:09 device -> ../../../gpiochip6
-rw-r--r-- 1 root root 4096 Jan 1 00:09 direction
drwxr-xr-x 2 root root 0 Jan 1 00:09 power
lrwxrwxrwx 1 root root 0 Jan 1 00:09 subsystem -> ../../../../../../../../class/gpio
-rw-r--r-- 1 root root 4096 Jan 1 00:09 uevent
-rw-r--r-- 1 root root 4096 Jan 1 00:09 value
root@rk3588-buildroot:/sys/class/gpio/gpio507#
root@rk3588-buildroot:/sys/class/gpio/gpio507#
root@rk3588-buildroot:/sys/class/gpio/gpio507# echo out > direction
root@rk3588-buildroot:/sys/class/gpio/gpio507# echo 1 > value
root@rk3588-buildroot:/sys/class/gpio/gpio507# cat direction
out
root@rk3588-buildroot:/sys/class/gpio/gpio507# cat value
1
root@rk3588-buildroot:/sys/class/gpio/gpio507#
root@rk3588-buildroot:/sys/class/gpio/gpio507# echo 0 > value
root@rk3588-buildroot:/sys/class/gpio/gpio507#