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控制驅動實現”進行設置。

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