Linux GPIO口配置冲突导致问题

问题背景

在设备进行休眠时,休眠成功后被唤醒,查看休眠GPIO口被拉高,排除单片机拉高的可能,打印如下:

suspend: set mcu wakeup(pin2) to high level 休眠下去
Detect USB Vbus is:0(off) 关vbus
msm_hsusb msm_hsusb: CI13XXX_CONTROLLER_DISCONNECT_EVENT received
android_work: android_work: did not send uevent (0 0   (null))
mmc1: card 0001 removed
blk_update_request: I/O error, dev mmcblk0, sector 0
sdhci_msm 7864900.sdhci: card claims to support voltages below defined range
mmc1: error -110 whilst initialising SDIO card
sdhci_msm 7864900.sdhci: card claims to support voltages below defined range
blk_update_request: I/O error, dev mmcblk0, sector 0
mmc1: mmc_init_card: mmc_send_op_cond() fails -110
mmc1: error -110 whilst initialising MMC card

	这里电平被拉进行异常唤醒

Detect USB Vbus is:1(On)
msm_hsusb msm_hsusb: CI13XXX_CONTROLLER_RESET_EVENT received
msm_hsusb msm_hsusb: CI13XXX_CONTROLLER_CONNECT_EVENT received

suspend: set mcu wakeup(pin2) to low level 唤醒上来
mmc1: Out-of-interrupt timeout is 100[ms]
mmc1: BKOPS_EN equals 0x2
mmc1: eMMC FW version: 0x37
mmc1: CMDQ supported: depth: 32
mmc1: cache barrier support 1 flush policy 1
mmc1: new HS200 MMC card at address 0001
mmc1: -524: cmdq: unable to set-up
mmcblk0: mmc1:0001 DG4008 7.28 GiB 
 mmcblk0: p1
mdm9607-asoc-snd soc:sound: ASoC: CODEC DAI quec-stub-rx Name: quec-stub-codec.2-0001, not registered
QCMAP:bringup v6
EXT4-fs (mmcblk0p1): recovery complete
EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: nodelalloc,barrier=1,journal_checksum,noauto_da_alloc

问题分析

1、怀疑是wifi在polling时进行异常唤醒,验证:

echo 0 > /sys/devices/7864900.sdhci/polling 无改善

2、怀疑是加了gbtest影响休眠,验证:

cat /sys/module/usb_storage/parameters/gbtest N 默认关闭无影响

3、回退git版本验证:

+# CONFIG_LEDS_ANDROMEDA is not set 有影响,查看代码编译进andromeda_leds,继续代码与dtsi中查看GPIO冲突管脚:

查看andromeda-leds.c源码
	.name			= "CODEC_PWR",
	.gpio			= 11, 【冲突】
查看dtsi
	sleep_ind_active: sleep_ind_active {
		mux {
			pins = "gpio11";
			function = "gpio";
		};			
明显冲突,需要加宏控制不编译

问题原因

andromeda-leds中的CODEC_PWR GPIO口与sleep口11冲突,导致codec有信号时会影响休眠成功后被马上唤醒。

总结

熟悉休眠唤醒流程,找到问题原因,杜绝不规范配置GPIO口导致的冲突难排查问题。

猜你喜欢

转载自blog.csdn.net/TSZ0000/article/details/89597681