20251112给荣品RD-RK3588开发板跑Rockchip的原厂Android13系统时适配AP6275P模块的BT蓝牙部分【使用原厂的DTS】
cd /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl
cat pinmux-pins
cd /sys/kernel/debug/
cat gpio
# 检查GPIO状态
adb shell cat /sys/kernel/debug/gpio
# 检查中断统计
adb shell cat /proc/interrupts | grep gt9
20251112给荣品RD-RK3588开发板跑Rockchip的原厂Android13系统时适配AP6275P模块的BT蓝牙部分【使用原厂的DTS】
2025/11/12 11:57
缘起:给荣品RD-RK3588开发板跑Rockchip的原厂Android13系统,在适配AP6275P模块的BT蓝牙部分的时候。
使用荣品的DTS已经通了,使用EVB7的V11版本的DTS,WIFI也通了,但是BT还是不通!
怎么办呢?这种情况很容易知道是DTS中的GPIO的功能配置异常了!
直接打印GPIO口的状态,和好的GPIO一比对,很容易就知道问题在哪里了!
【和SDMMC/SDIO冲突了,但是不要关闭TF卡!^_】
当你把荣品RD-RK3588开发板重新适配一把,就相当于从头做了一个项目:【荣品RD-RK3588开发板】。
当然,开发板的功能都是好的,你免除了调试的过程,也就没有解决相关硬件出错的经验/机会了!
结论:荣品的FAE工程师是真的很忙。
代码写的非常写意/潇洒!
【整个DTS,TAB和空格按键都是混用的!^_有些时候看着很难受的!^_】
DTS中的代码排版真的让人看得很难受!
1、比对GPIO口的状态:
rk3588_t:/sys/kernel/debug # cat gpio
gpiochip0: GPIOs 0-31, parent: platform/fd8a0000.gpio, gpio0:
gpio-0 ( |bt_default_reset ) out lo
gpio-3 ( |vsel ) out lo
gpio-17 ( |vsel ) out lo
gpio-22 ( |GTP RST PORT ) in hi
gpio-30 ( |vsel ) out lo
gpiochip1: GPIOs 32-63, parent: platform/fec20000.gpio, gpio1:
gpio-34 ( |vbus5v0-typec ) out lo
gpio-44 ( |reset ) out hi
gpio-52 ( |headset_gpio ) in lo
gpio-61 ( |hdmirx-det ) in lo ACTIVE LOW
gpiochip2: GPIOs 64-95, parent: platform/fec30000.gpio, gpio2:
gpio-72 ( |bt_default_wake_host) in lo
gpio-75 ( |bt_default_wake ) in hi
gpiochip3: GPIOs 96-127, parent: platform/fec40000.gpio, gpio3:
gpio-111 ( |snps,reset ) out hi ACTIVE LOW
gpio-120 ( |GTP INT IRQ ) in hi
gpio-124 ( |sbu1-dc ) out lo
gpio-125 ( |sbu2-dc ) out hi
gpiochip4: GPIOs 128-159, parent: platform/fec50000.gpio, gpio4:
gpio-130 ( |reset ) out hi
gpio-132 ( |vdd-5G ) out hi
gpio-133 ( |vcc3v3-pcie30 ) out hi
gpio-146 ( |vcc3v3-lcd0-n ) out hi
gpio-148 ( |bt_default_rts ) in hi
gpio-150 ( |reset ) out hi ACTIVE LOW
gpiochip5: GPIOs 509-511, parent: platform/rk806-pinctrl.1.auto, rk806-gpio, can sleep:
rk3588_t:/sys/kernel/debug #
rk3588_t:/sys/kernel/debug #
rk3588_t:/sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl # cat pinmux-pins
pin 72 (gpio2-8): wireless-bluetooth gpio2:72 function wireless-bluetooth group bt-gpio
pin 73 (gpio2-9): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 74 (gpio2-10): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 75 (gpio2-11): wireless-bluetooth gpio2:75 function wireless-bluetooth group bt-gpio
修改为:
pin 69 (gpio2-5): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 70 (gpio2-6): fe2d0000.mmc (GPIO UNCLAIMED) function sdio group sdiom0-pins
pin 71 (gpio2-7): fe2d0000.mmc (GPIO UNCLAIMED) function sdio group sdiom0-pins
pin 72 (gpio2-8): fe2d0000.mmc (GPIO UNCLAIMED) function sdio group sdiom0-pins
pin 73 (gpio2-9): fe2d0000.mmc (GPIO UNCLAIMED) function sdio group sdiom0-pins
pin 74 (gpio2-10): fe2d0000.mmc (GPIO UNCLAIMED) function sdio group sdiom0-pins
pin 75 (gpio2-11): fe2d0000.mmc (GPIO UNCLAIMED) function sdio group sdiom0-pins
pin 76 (gpio2-12): feac0000.i2c (GPIO UNCLAIMED) function i2c4 group i2c4m1-xfer
pin 77 (gpio2-13): feac0000.i2c (GPIO UNCLAIMED) function i2c4 group i2c4m1-xfer
pin 78 (gpio2-14): (MUX UNCLAIMED) (GPIO UNCLAIMED)
很容易/根据经验可以知道:GPIO72/GPIO75被复用为SDMMC/SDIO之后,导致全部的BT蓝牙的配置都被无效了!



2、查找SDMMC/SDIO:
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/wyb/RD-RK3588/EVB7_RD-RK3588t/kernel-5.10/arch/arm64/boot/dts/rockchip$ grep sdmmc . -R
./rk3588s.dtsi: pm_qos = <&qos_sdmmc>;
./rk3588s.dtsi: qos_sdmmc: qos@fdf3d800 {
./rk3588s.dtsi: sdmmc: mmc@fe2c0000 {
./rk3588s.dtsi: pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_det &sdmmc_bus4>;
./rk3588-evb7-v11 - 副本 (6).dtsi: sdmmc {
./rk3588-evb7-v11 - 副本 (6).dtsi:&sdmmc {
./rk3588-evb7-v11.dtsi: sdmmc {
./rk3588-evb7-v11.dtsi:&sdmmc {
./.rk3588-evb7-v11.dtb.dts.tmp: pm_qos = <&qos_sdmmc>;
./.rk3588-evb7-v11.dtb.dts.tmp: qos_sdmmc: qos@fdf3d800 {
./.rk3588-evb7-v11.dtb.dts.tmp: sdmmc: mmc@fe2c0000 {
./.rk3588-evb7-v11.dtb.dts.tmp: pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_det &sdmmc_bus4>;
./.rk3588-evb7-v11.dtb.dts.tmp: sdmmc {
./.rk3588-evb7-v11.dtb.dts.tmp: sdmmc_bus4: sdmmc-bus4 {
./.rk3588-evb7-v11.dtb.dts.tmp: sdmmc_clk: sdmmc-clk {
./.rk3588-evb7-v11.dtb.dts.tmp: sdmmc_cmd: sdmmc-cmd {
./.rk3588-evb7-v11.dtb.dts.tmp: sdmmc_det: sdmmc-det {
./.rk3588-evb7-v11.dtb.dts.tmp: sdmmc_pwren: sdmmc-pwren {
./.rk3588-evb7-v11.dtb.dts.tmp:&sdmmc {
./.rk3588-evb7-v11.dtb.dts.tmp: sdmmc {
./.rk3588-evb7-v11.dtb.dts.tmp:&sdmmc {
grep: ./rk3588-evb7-v11.dtb: 匹配到二进制文件
./rk3588-evb7-v11 - 副本 (7).dtsi: sdmmc {
./rk3588-evb7-v11 - 副本 (7).dtsi:&sdmmc {
./rk3588-evb7-v11 - 副本.dtsi: sdmmc {
./rk3588-evb7-v11 - 副本.dtsi:&sdmmc {
./rk3588-evb7-v11 - 副本 (5).dtsi: sdmmc {
./rk3588-evb7-v11 - 副本 (5).dtsi:&sdmmc {
./rk3588-evb7-v11 - 副本 (3).dtsi: sdmmc {
./rk3588-evb7-v11 - 副本 (3).dtsi:&sdmmc {
./rk3588-evb - 副本.dtsi:&sdmmc {
./rk3588-evb.dtsi:&sdmmc {
./rk3588-evb7-v11 - 副本 (4).dtsi: sdmmc {
./rk3588-evb7-v11 - 副本 (4).dtsi:&sdmmc {
./rk3588-evb7-v11 - 副本 (2).dtsi: sdmmc {
./rk3588-evb7-v11 - 副本 (2).dtsi:&sdmmc {
./rk3588s-pinctrl.dtsi: sdmmc {
./rk3588s-pinctrl.dtsi: sdmmc_bus4: sdmmc-bus4 {
./rk3588s-pinctrl.dtsi: /* sdmmc_d0 */
./rk3588s-pinctrl.dtsi: /* sdmmc_d1 */
./rk3588s-pinctrl.dtsi: /* sdmmc_d2 */
./rk3588s-pinctrl.dtsi: /* sdmmc_d3 */
./rk3588s-pinctrl.dtsi: sdmmc_clk: sdmmc-clk {
./rk3588s-pinctrl.dtsi: /* sdmmc_clk */
./rk3588s-pinctrl.dtsi: sdmmc_cmd: sdmmc-cmd {
./rk3588s-pinctrl.dtsi: /* sdmmc_cmd */
./rk3588s-pinctrl.dtsi: sdmmc_det: sdmmc-det {
./rk3588s-pinctrl.dtsi: /* sdmmc_det */
./rk3588s-pinctrl.dtsi: sdmmc_pwren: sdmmc-pwren {
./rk3588s-pinctrl.dtsi: /* sdmmc_pwren */
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/wyb/RD-RK3588/EVB7_RD-RK3588t/kernel-5.10/arch/arm64/boot/dts/rockchip$

Y:\new_disk_4t\wyb\RD-RK3588\EVB7_RD-RK3588t\kernel-5.10\arch\arm64\boot\dts\rockchip\rk3588-evb7-v11.dtsi
//&sdio {
// max-frequency = <150000000>;
// no-sd;
// no-mmc;
// bus-width = <4>;
// disable-wp;
// cap-sd-highspeed;
// cap-sdio-irq;
// keep-power-in-suspend;
// mmc-pwrseq = <&sdio_pwrseq>;
// non-removable;
// pinctrl-names = "default";
// pinctrl-0 = <&sdiom0_pins>;
// sd-uhs-sdr104;
// status = "okay";
//};
//
//&sdmmc {
// status = "okay";
// vmmc-supply = <&vcc_3v3_sd_s0>;
//};

/home/jinhualong/new_disk_4t/wyb/RD-RK3588/EVB7_RD-RK3588t
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/wyb/RD-RK3588/EVB7_RD-RK3588t$
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/wyb/RD-RK3588/EVB7_RD-RK3588t$ cd kernel-5.10/
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/wyb/RD-RK3588/EVB7_RD-RK3588t/kernel-5.10$
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/wyb/RD-RK3588/EVB7_RD-RK3588t/kernel-5.10$ make distclean
CLEAN certs
CLEAN drivers/scsi
fatal: 不是 git 仓库(或者直至挂载点 /home/jinhualong 的任何父目录)
停止在文件系统边界(未设置 GIT_DISCOVERY_ACROSS_FILESYSTEM)。
CLEAN fs/unicode
CLEAN kernel
CLEAN lib
CLEAN net/wireless
CLEAN security/selinux
CLEAN usr
CLEAN vmlinux.symvers modules-only.symvers modules.builtin modules.builtin.modinfo
CLEAN scripts/basic
CLEAN scripts/dtc
CLEAN scripts/genksyms
CLEAN scripts/kconfig
CLEAN scripts/mod
CLEAN scripts/selinux/genheaders
CLEAN scripts/selinux/mdp
CLEAN scripts
CLEAN include/config include/generated .config .config.old .version Module.symvers
#### build completed successfully (4 seconds) ####
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/wyb/RD-RK3588/EVB7_RD-RK3588t/kernel-5.10$ rm *.img
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/wyb/RD-RK3588/EVB7_RD-RK3588t/kernel-5.10$
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/wyb/RD-RK3588/EVB7_RD-RK3588t/kernel-5.10$ cd ..
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/wyb/RD-RK3588/EVB7_RD-RK3588t$
jinhualong@jinhualong-LEGION-REN7000K-26IRX:~/new_disk_4t/wyb/RD-RK3588/EVB7_RD-RK3588t$ ./build.sh -CKu
3、刷机之后,发现BT蓝牙可以打开了。
但是TF卡也不能识别了!







Y:\new_disk_4t\wyb\RD-RK3588\EVB7_RD-RK3588t\kernel-5.10\arch\arm64\boot\dts\rockchip\rk3588-evb7-v11.dtsi
// 2025/11/12 14:21 wenyuanbo BT
//&sdio {
// max-frequency = <150000000>;
// no-sd;
// no-mmc;
// bus-width = <4>;
// disable-wp;
// cap-sd-highspeed;
// cap-sdio-irq;
// keep-power-in-suspend;
// mmc-pwrseq = <&sdio_pwrseq>;
// non-removable;
// pinctrl-names = "default";
// pinctrl-0 = <&sdiom0_pins>;
// sd-uhs-sdr104;
// status = "okay";
//};
// 2025/11/12 14:21 TF Card !!!!
&sdmmc {
status = "okay";
vmmc-supply = <&vcc_3v3_sd_s0>;
};
&uart9 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart9m0_xfer &uart9m0_ctsn>;
};



4、BT的其他部分:
Y:\new_disk_4t\wyb\RD-RK3588\EVB7_RD-RK3588t\kernel-5.10\arch\arm64\boot\dts\rockchip\rk3588-evb7-v11.dtsi
vcc_3v3_sd_s0: vcc-3v3-sd-s0-regulator {
compatible = "regulator-fixed";
gpio = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&sd_s0_pwr>;
regulator-name = "vcc_3v3_sd_s0";
enable-active-high;
};
wireless_bluetooth: wireless-bluetooth {
compatible = "bluetooth-platdata";
clocks = <&hym8563>;
clock-names = "ext_clock";
uart_rts_gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_LOW>;
pinctrl-names = "default", "rts_gpio";
pinctrl-0 = <&uart9m0_rtsn>, <&bt_gpio>;
pinctrl-1 = <&uart9_gpios>;
BT,reset_gpio = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
BT,wake_gpio = <&gpio2 RK_PB3 GPIO_ACTIVE_HIGH>;
BT,wake_host_irq = <&gpio2 RK_PB0 GPIO_ACTIVE_HIGH>;
status = "okay";
};
wireless_wlan: wireless-wlan {
compatible = "wlan-platdata";
wifi_chip_type = "ap6275p";
pinctrl-names = "default";
pinctrl-0 = <&wifi_host_wake_irq>, <&wifi_poweren_gpio>;
WIFI,host_wake_irq = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>;
WIFI,poweren_gpio = <&gpio0 RK_PB2 GPIO_ACTIVE_HIGH>;
status = "okay";
};
};

来源:
Y:\new_disk_4t\wyb\RD-RK3588\EVB7_RD-RK3588t\kernel-5.10\arch\arm64\boot\dts\rockchip84荣品\rp-wifi-bt-ap6275p-rk3588.dtsi
/ {
wireless_bluetooth: wireless-bluetooth {
compatible = "bluetooth-platdata";
clocks = <&hym8563>;
clock-names = "ext_clock";
uart_rts_gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_LOW>;
pinctrl-names = "default", "rts_gpio";
pinctrl-0 = <&uart9m0_rtsn>, <&bt_gpio>;
pinctrl-1 = <&uart9_gpios>;
BT,reset_gpio = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
BT,wake_gpio = <&gpio2 RK_PB3 GPIO_ACTIVE_HIGH>;
BT,wake_host_irq = <&gpio2 RK_PB0 GPIO_ACTIVE_HIGH>;
status = "okay";
};
wireless_wlan: wireless-wlan {
compatible = "wlan-platdata";
wifi_chip_type = "ap6275p";
pinctrl-names = "default";
pinctrl-0 = <&wifi_host_wake_irq>, <&wifi_poweren_gpio>;
WIFI,host_wake_irq = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>;
WIFI,poweren_gpio = <&gpio0 RK_PB2 GPIO_ACTIVE_HIGH>; //If deep sleep is required, write the pin to rp_power
status = "okay";
};
};
不要动:
Y:\new_disk_4t\wyb\RD-RK3588\EVB7_RD-RK3588t\kernel-5.10\arch\arm64\boot\dts\rockchip\rk3588-evb7-v11.dtsi
&pinctrl {
pcie30x4 {
pcie30x4_clkreqn_m1: pcie30x4-clkreqn-m1 {
rockchip,pins = <4 RK_PB4 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
sdio-pwrseq {
wifi_enable_h: wifi-enable-h {
rockchip,pins = <0 RK_PC4 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
sdmmc {
sd_s0_pwr: sd-s0-pwr {
rockchip,pins = <0 RK_PB7 RK_FUNC_GPIO &pcfg_pull_up>;
};
};

usb-typec {
usbc0_int: usbc0-int {
rockchip,pins = <3 RK_PB6 RK_FUNC_GPIO &pcfg_pull_up>;
};
typec5v_pwren: typec5v-pwren {
rockchip,pins = <3 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
wireless-bluetooth {
uart9_gpios: uart9-gpios {
rockchip,pins = <4 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>;
};
bt_gpio: bt-gpio {
rockchip,pins =
<0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>,
<2 RK_PB3 RK_FUNC_GPIO &pcfg_pull_up>,
<2 RK_PB0 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
wireless-wlan {
wifi_host_wake_irq: wifi-host-wake-irq {
rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
wifi_poweren_gpio: wifi-poweren-gpio {
rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>;
};
};

来源:
&uart9 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart9m0_xfer &uart9m0_ctsn>;
};
&pinctrl {
wireless-bluetooth {
uart9_gpios: uart9-gpios {
rockchip,pins = <4 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>;
};
bt_gpio: bt-gpio {
rockchip,pins =
<0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>,
<2 RK_PB3 RK_FUNC_GPIO &pcfg_pull_up>,
<2 RK_PB0 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
wireless-wlan {
wifi_host_wake_irq: wifi-host-wake-irq {
rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_down>;
};
wifi_poweren_gpio: wifi-poweren-gpio {
rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
};

5、
Y:\new_disk_4t\wyb\RD-RK3588\EVB7_RD-RK3588t\device\rockchip\rk3588\rk3588_t\bt_vendor.conf
Y:\new_disk_4t\wyb\RD-RK3588\orig_RD-rk3588_Android13\device\rockchip\rk3588\rk3588_t\bt_vendor.conf
# UART device port where Bluetooth controller is attached
UartPort = /dev/ttyS8
# Firmware patch file location
FwPatchFilePath = /vendor/etc/firmware/
修改为:
# UART device port where Bluetooth controller is attached
UartPort = /dev/ttyS9
# Firmware patch file location
FwPatchFilePath = /vendor/etc/firmware/
