Linux基于pinctrl的LED控制—Apple的学习笔记

一,前言

上一篇blog中驱动开发环境都搭建好了,我需要先复习下设备树的一些属性。最简单的就是先控制一个LED灯。bb-black有4个用户灯,其中有一个是kernel的心跳灯gpio1-21,我先将其disable,然后作为我将使用的led资源。

我当前制作的Ubuntu18.04中驱动和应用代码路径:/home/applecai/mydriver/AppleLED/。代码就不贴了,关于驱动代码就是基本框架中使用of_xxx函数,也不需要添加中断或者锁相关的内容。因为一个资源之后只有一个app在使用,为什么这样说,因为app是我写的,哈哈!app控制就更加简单了,仅仅open,write,close而已。因为我的主要目的是复习下设备树,看了些资料回顾了下,又想起来了。那就开工咯~

二,修改设备树

基于原理图先查看了我需要使用的是gpio1_21引脚,设置为高电平则灯亮,设置为低电平则灯灭。然后通过UM中的数据来查看和修改设备树信息。
先要看懂原来的,才可以修改,通过搜索pinctrl查到原来的设置如下。能和UM信息对应上。
Pinctrl设置的电气属性


image.png

原来有一个节点用来显示kernel心跳的,它使用了gpio1 21如下。

        led2 {
            label = "beaglebone:green:heartbeat";
            gpios = <&gpio1 21 GPIO_ACTIVE_HIGH>;
            linux,default-trigger = "heartbeat";
            default-state = "off";
        };

所以我需要修改禁用此节点,修改如下

        led2 {
            label = "beaglebone:green:heartbeat";
            /*gpios = <&gpio1 21 GPIO_ACTIVE_HIGH>;*/
            linux,default-trigger = "heartbeat";
            default-state = "off";
            status = “disabled”
        };

主节点下增加applele节点(添加pinctrl-0引用及gpio引脚设置)

    appleled{
        /* #address-cells = <1>; */
        /* #size-cells = <1>; */
        compatible = "gpio-leds";
        pinctrl-names = "default";
        pinctrl-0 = <&usr_led_test>;
        gpios = <&gpio1 21 GPIO_ACTIVE_HIGH>;
        status = "okay";
    };

在&am33xx_pinmux中追加,pinctrl设置(电气属性及功能脚定义)

    usr_led_test:usr_led_test {
        pinctrl-single,pins = <
                    /* gpmc_a5.gpio1_21 */
            AM33XX_IOPAD(0x854, PIN_OUTPUT_PULLDOWN | MUX_MODE7)
        >;  
    };

三,制作驱动并检查

image.png

四,制作应用,控制成功(1为LEDON,0为LEDOFF)

image.png

你可能感兴趣的:(Linux基于pinctrl的LED控制—Apple的学习笔记)