linux驱动-led子系统

        led子系统实际是linux编写好的一个led驱动框架.对于驱动开发者来说只需要按照规定填充结构体然后调用api注册驱动,就可以完成一个led驱动的编写,并且这样写的led驱动为上层提供了统一的接口或者称为标准linux接口.方便了应用开发人员也减少了驱动开发人员的工作量.

        

`        有些led是gpio控制的.有些led是pwm控制,可以控制led的亮度.所以在此基础上又引出了GPIO_LED子系统和GPIO_pwm子系统.当然也可以直接使用led子系统,忽略gpio_pwm子系统和gpio_子系统.

led子系统

        led子系统驱动的源码位于dirvers/leds目录下, 可以看到有很多的文件,但是很多是 在led子系统上编写的led驱动,不是led子系统的源码.

        ls led-  列出的以led-开头的文件菜式led子系统实现代码. 

 部分文件的功能如下:
  1. led-core.c: led抽象功能实现代码.led灯的亮灭, 闪烁,呼吸.
  2. led-class.c: 调用class_create函数在/sys/class/leds目录创建用户空间控制接口.
  3. led-triggers.c: led 抽象触发功能实现代码
  4. led-class-flash.c: 闪烁功能实现

先不看源码,先看下如何编写一个简单的led驱动,仅仅实现亮灭控制.

基于led子系统驱动实现

        选一个最简单的led驱动,上源码(kernel/drivers/leds/leds-rb532.c),如下:

/*
 * LEDs driver for the "User LED" on Routerboard532
 *
 * Copyright (C) 2009 Phil Sutter <n0-1@freewrt.org>
 *
 * Based on leds-cobalt-qube.c by Florian Fainelly and
 * rb-diag.c (my own standalone driver for both LED and
 * button of Routerboard532).
 */

#include <linux/leds.h>
#include <linux/module.h>
#include <linux/platform_device.h>

#include <asm/mach-rc32434/gpio.h>
#include <asm/mach-rc32434/rb.h>

static void rb532_led_set(struct led_classdev *cdev,
			  enum led_brightness brightness)
{
	if (brightness)
		set_latch_u5(LO_ULED, 0);

	else
		set_latch_u5(0, LO_ULED);
}

static enum 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值