led-class.c
/driver/led/led-class.c led_classdev接口
注册:
int led_classdev_register(struct device *parent, struct led_classdev *led_cdev){
}
注销:
void led_classdev_unregister(struct led_classdev *led_cdev);
挂起:
void led_classdev_suspend(struct led_classdev *led_cdev)
恢复:
void led_classdev_resume(struct led_classdev *led_cdev)
显示亮度:
led_brightness_show
设置亮度:
led_brightness_store
读取触发器名字:
led_trigger_show
指定触发器名字
led_trigger_store
led-core.c
两个接口
控制led的闪烁以及闪烁的时间
void led_blink_set(struct led_classdev *led_cdev,unsigned long *delay_on,unsigned long *delay_off)
设置led的亮灭
void led_brightness_set(struct led_classdev *led_cdev,enum led_brightness brightness)
声明了led的链表和锁
led_classdev_register注册的struct led_classdev加入leds_list链表,这个链表定义在driver/leds/led-core.c。
led-triggers.c
注册led_classdev时,设置trigger会用到led-triggers.c里面的led_trigger_set_default函数
注册触发器
int led_trigger_register(struct led_trigger *trigger);
注销触发器
void led_trigger_unregister(struct led_trigger *trigger);
设置触发器上所有的led为某个亮度
void led_trigger_event(struct led_trigger *trigger, enum led_brightness brightness);
ledtrig-default-on.c用于设置led为最大亮度
ledtrig-heartbeat.c通过定时来实现类似于心跳的led灯
led-gpio
gpio led 设备结构
struct gpio_led {
}
驱动加载后probe
gpio_led_probe() //驱动和设备匹配
申请gpio, 初始化设备
create_gpio_led() //获取dts的gpio
建立sys接口
led_classdev_register(parent, &led_dat->cdev);
平台总线实现:
platform_set_drvdata(pdev, priv);
驱动
static struct platform_driver gpio_led_driver = {
}
调试
echo 0 > /sys/bus/platform/devices/leds/leds/brightness
echo 255 > /sys/bus/platform/devices/leds/leds/brightness
cat /sys/bus/platform/devices/leds/leds/trigger