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);
};