【Linux驱动】100ask_imx6ull中ADC光敏电阻实验踩坑

【1】不出问题的前提条件:完全使用模组代码中的设备树文件与配套APP
【2】本人问题:使用自己的设备树dts生成的dtb时,发现dev目录下根本没有iio:device0,从而直接使用配套APP时出现无法打开文件的情况。
经过对两个设备树启动时内核打印的对比发现,在使用自己的设备树时,会有以下打印:
[ 4.239934] imx6ul-pinctrl 20e0000.iomuxc: pin MX6UL_PAD_GPIO1_IO03 already requested by 2040000.tsc; cannot claim for 2198000.adc
[ 4.252029] imx6ul-pinctrl 20e0000.iomuxc: pin-26 (2198000.adc) status -22
[ 4.259265] imx6ul-pinctrl 20e0000.iomuxc: could not request pin 26 (MX6UL_PAD_GPIO1_IO03) from group adc1grp on device 20e0000.iomuxc
[ 4.271801] vf610-adc 2198000.adc: Error applying setting, reverse things back
[ 4.279399] vf610-adc: probe of 2198000.adc failed with error -22
这表明,在内核配置时其实启用了vf610,但是在申请引脚的时候出现了MX6UL_PAD_GPIO1_IO03被tsc占用的情况。
在设备树中,tsc的引脚是:
TSC引脚
而ADC1的引脚是:
ADC1引脚
很明显,这两个外设共同使用了GPIO1_IO3以及GPIO1_IO4这两个引脚,因此不能同时使用。
但是我在对比自己的设备树和模组代码里的设备树时发现,两者的tsc节点都是启用的,并不存在谁注释了引脚或者status是‘disable’的情况,这就让我有点头疼了,到底是什么导致它的设备树可以运行,而我的设备树不能运行,既然就是因为tsc占用IO导致的,那理应都有问题啊!
最后我再认真比对使用模组代码中的设备树时发现以下打印:
[ 2.817382] imx6ul-pinctrl 20e0000.iomuxc: pin MX6UL_PAD_GPIO1_IO01 already requested by 2010000.ecspi; cannot claim for 2040000.tsc
[ 2.829622] imx6ul-pinctrl 20e0000.iomuxc: pin-24 (2040000.tsc) status -22
[ 2.836636] imx6ul-pinctrl 20e0000.iomuxc: could not request pin 24 (MX6UL_PAD_GPIO1_IO01) from group tscgrp on device 20e0000.iomuxc
[ 2.848825] imx6ul-tsc 2040000.tsc: Error applying setting, reverse things back
[ 2.856266] imx6ul-tsc: probe of 2040000.tsc failed with error -22
天呐!这也太坑爹了!官方的设备树能用是因为:
spi占用了tsc的引脚→tsc没起来→tsc引脚没占用→adc可以申请到引脚了→生成设备文件
【3】目前的解决办法:
在设备树中将 tsc结点的status直接设置为disable就完事了,反正模组代码里也是因为其他设备占用tsc导致它起不来。

猜你喜欢

转载自blog.csdn.net/qq_32006213/article/details/131087426