S3c6410 linux内核移植(10)---添加充电控制脚驱动(LED驱动)

1、原理分析

无线数码相框的GPQ3脚用于充电控制,当GPQ3为高电平是为充电状态,当为低电平时不充电。led的控制原理和充电脚的控制原理是一模一样的都是对某个io口置1或清零,所以在这里可以用led驱动实现对充电控制脚的控制。

Linux内核下drivers/leds/ledsgpio.c实现了一个和体系结构无关的led驱动,使用此led驱动我们只需要在BSP的板文件(arch/arm/mach-s3c6410/mach-smdk6410.c)中定义相关platform设备和数据

2ut-s3c6410开发板的led控制驱动实现

ut-s3c6410开发板上,用GPM0GPM3外界4lcd,因此对于的platform设备信息如下:

static struct gpio_led smdk6410_leds[] = {

[0] = {

.name = "LED1",

.gpio = S3C64XX_GPM(0),

},

[1] = {

.name = "LED2",

.gpio = S3C64XX_GPM(1),

.active_low = 1,

},

[2] = {

.name = "LED3",

.gpio = S3C64XX_GPM(2),

.active_low = 0,

},

[3] = {

.name = "LED4",

.gpio = S3C64XX_GPM(3),

.default_trigger = "heartbeat",

},

};

static struct gpio_led_platform_data smdk6410_gpio_led_pdata = {

.num_leds = ARRAY_SIZE(smdk6410_leds),

.leds = smdk6410_leds,

};

static struct platform_device smdk6410_device_led = {

.name = "leds-gpio",

.id = 1,

.dev = {

.platform_data = &smdk6410_gpio_led_pdata,

},

};

并将“&smdk6410_device_led,”语句填入 struct platform_device *ldd6410_devices[]数组,作为该数组的一个成员。

启动内核时会打印:

Registered led device: LED1

Registered led device: LED2

Registered led device: LED3

Registered led device: LED4

LED1—LED4对应开发板的四个led灯通过如下命令可分别点亮四个led灯:

#echo 1 > /sys/class/leds/LED1/brightness

#echo 1 > /sys/class/leds/LED1/brightness

#echo 1 > /sys/class/leds/LED1/brightness

#echo 1 > /sys/class/leds/LED1/brightness

通过如下命令可分别熄灭四个led等:

#echo 0 > /sys/class/leds/LED1/brightness

#echo 0 > /sys/class/leds/LED1/brightness

#echo 0 > /sys/class/leds/LED1/brightness

#echo 0 > /sys/class/leds/LED1/brightness

3、无线数码相框充电控制驱动实现

控制原理和以上分析的LED灯的控制是一模一样的,只需将smdk6410_leds结构体改为:

static struct gpio_led smdk6410_leds[] = {

[0] = {

.name = "charge",

.gpio = S3C64XX_GPQ(3),

},

};

通过如下命令开始电池充电:

#echo 1 > /sys/class/leds/ charge /brightness

通过如下命令停止电池充电:

#echo 0 > /sys/class/leds/ charge /brightness

其它的参见上面一节“ut-s3c6410开发板的led控制驱动实现”进行设置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章