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#