LED设备驱动开发一之驱动模型和结构体

本文详细介绍了LED设备的驱动模型及其实现方式。包括LED设备的结构体定义、平台设备数据结构、驱动数据结构等关键信息,并阐述了如何通过这些结构体实现LED亮度设置、获取等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、LED设备驱动模型


     

2、LED驱动涉及计的结构体

  将LED设备以平台设备的形式注册进内核;

//LED设备的抽象

  struct led_classdev {

    const char        *name;

    int          brightness;

    int          max_brightness;

    int          flags;

    /* Lower 16 bitsreflect status */

#define LED_SUSPENDED     (1<< 0)

    /* Upper 16 bitsreflect control information */

#define LED_CORE_SUSPENDRESUME (1<< 16)

    /* Set LED brightnesslevel */

    /* Must not sleep, usea workqueue if needed */

    void (*brightness_set)(structled_classdev *led_cdev, enum led_brightness brightness);

    /* Get LED brightnesslevel */

    enum led_brightness(*brightness_get)(struct led_classdev *led_cdev);

    int (*blink_set)(structled_classdev *led_cdev,unsigned long *delay_on, unsigned long *delay_off);

    struct device         *dev;

    struct list_head  node;            /*LED Device list */

    const char        *default_trigger; /* Trigger to use */

 

    #ifdef CONFIG_LEDS_TRIGGERS

    /* Protects the triggerdata below */

    struct rw_semaphore   trigger_lock;

 

    struct led_trigger    *trigger;

    struct list_head  trig_list;

    void         *trigger_data;

#endif

};

//LED设备数据 (driver文件中定义,供操作使用使用)

 struct gpio_led_data {

    struct led_classdevcdev;

    unsigned gpio;

    struct work_structwork;

    u8 new_level;

    u8 can_sleep;

    u8 active_low;

    int(*platform_gpio_blink_set)(unsigned gpio,

             unsigned long*delay_on, unsigned long *delay_off);

};

 

//LED的驱动数据(dev文件中定义工driver文件使用)

struct gpio_led {

    const char *name;

    const char*default_trigger;

    unsigned     gpio;

    unsigned active_low : 1;

    unsigned retain_state_suspended : 1;

    unsigned default_state : 2;

    /* default_state shouldbe one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */

};

//LED的平台设备数据

struct gpio_led_platform_data {

    int      num_leds;

    struct gpio_led *leds;

    int (*gpio_blink_set)(unsigned gpio,unsigned long*delay_on,unsigned long *delay_off);

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值