|
发表于 2018-12-28 18:29:50
15146 浏览 2 回复
imx6ul led小灯驱动无法控制-LCD_DATA08 的解决办法
迅为的imx6ul精英版V1.4->V1.5升级以及全能版,将led控制的网络GPIO_DVFS替换成LCD_TATA8~购买全能版的用户和V1.5反应按照ul精英版V1.4提供的gpio控制的文档实现的例程,无法操作GPIO了~
今天抽空测试了一下,发现的确有这种情况。
使用驱动的方式和使用echo控制gpio(如下)都没办法控制。
echo 77 > /sys/class/gpio/export
echo 77 > /sys/class/gpio/unexport
echo out > /sys/class/gpio/gpio77/direction
echo 0 > /sys/class/gpio/gpio77/value
echo 1 > /sys/class/gpio/gpio77/value
这些操作都无法控制led小灯。
这里先记录一下调试过程。
除开按照imx6系列gpio操作的文档,重新走了一遍,发现还是不行。
在内核源码中多次搜索“”LCD_DATA08”,发现真没有其它地方调用了。
首先我找到
内核drivers/pinctrl/freescale/pinctrl-imx6ul.c这个文件下,
发现在gpio在初始化的时候,MX6UL_PAD_LCD_DATA08 = 78,
在驱动程序中of_get_named_gpio获取的值是77
这里开始就有点晕了,于是我手动给gpio编号加1,测试之后发现结果一样。
这个时候,万用表没电了,更换的电池也用完了,我想再测试下高低电平,检测下是不是硬件有问题
没办法把同事正在用的示波器抢过来,测量高低电平~
它居然出现的是脉冲波!!!原来小灯默认点亮是因为脉冲波而亮,不是因为拉高了。
当然,在设备树中配置,我记得默认是低的(或者我手动修改了,默认是什么记不清楚了)
于是我又在内核中多次搜索是不是有别的驱动或者哪个地方调用了LCD_DATA08,内核中还真找不到了!
回过头去看datasheet,关于这个管脚的配置,他能支持LCDIF的这个功能,这说明它一定是被配置为这个功能了
否则不可能出现脉冲波!一定是在某个地方被配置了~
内核中我又找一遍,都快放弃~
最后想到,内核前还有uboot,uboot中也可以找一下~
还真找到了!
uboot中的:
board/freescale/mx6ul_topeet/mx6ul_topeet.c:748: MX6_PAD_LCD_DATA08__LCDIF_DATA08 | MUX_PAD_CTRL(LCD_PAD_CTRL),
它就配置了这个管脚为lcdif模式~
我把它屏蔽掉之后,再次测试,echo操作完全正常,insmod驱动之后也是正常的。
~over~
当然uboot里面还涉及到其它管脚,static iomux_v3_cfg_t const lcd_pads[]变量中,似乎把lcd所有的位都配置了,
如果其它管脚在文件系统层需要用作gpio,可以自己到uboot这个文件中屏蔽对应的管脚初始化,在文件系统层和驱动层就可以正常当做gpio使用了。
虽然问题解决了,解决问题优先
但是还是有一个疑问,在uboot中配置之后,为什么在内核中配置为gpio,这个管脚没有变成gpio模式呢?
这个问题先mark下,空闲下来之后再来研究下。
|
|
|
|
|
|
|
|
发表于 2021-9-2 22:12:03
必须顶!!!!!搞个三天这个问题,完全没注意到是uboot!
|
|
|
|
|
|
|
|
楼主|
发表于 2021-9-6 09:21:00
|
|
|
|
|
|
登录或注册
扫一扫关注迅为公众号
![群号652692981](template/rabbit_office/image/wchat.png)
![](static/image/common/security.png)
|