欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux 设备驱动中的LED架构

程序员文章站 2022-07-13 21:48:30
...

内核驱动框架中LED的部分主要涉及两个文件

  • led-class.c
  • led-core.c

按照内核驱动框架编写的驱动会出现在drivers/leds目录下,这两个文件是内核开发者为驱动开发者提供的接口。led类设备的操作对象主要有三个:brightness、max_brightness、trigger。分别代表”led的亮灭状态“、”led最高亮度值“、”led闪烁状态“。其中max_brightness仅仅表示最大亮度值,只可读不可写。其他两个参数都有读写权限。应用层可以通过这几个参数获取到当前led的工作状态,也可以操作这些文件来间接设置硬件led。
使用led驱动框架步骤:

  1. 填充led_classdev结构体,该结构体定义如下:
struct led_classdev {
    const char      *name;
    enum led_brightness  brightness;
    enum led_brightness  max_brightness;
    int          flags;
    void        (*brightness_set)(struct led_classdev *led_cdev,
                      enum led_brightness brightness);
    int (*brightness_set_blocking)(struct led_classdev *led_cdev,
                       enum led_brightness brightness);
    enum led_brightness (*brightness_get)(struct led_classdev *led_cdev);
    ...//很多不一一列举了
    }

比较重要的常用的设置项是下面几个:
led->cdev.name = pdata->name;
led->cdev.brightness = 0;
led->cdev.brightness_set = s5pv210_led_set;
led->pdata = pdata;
然后调用下面函数向内核注册led设备
int devm_led_classdev_register(struct device *parent,struct led_classdev *led_cdev)
使用下面函数注销led设备
void led_classdev_unregister(struct led_classdev *led_cdev)