Android system : Led class 節點添加

來源:互聯網
上載者:User

標籤:efi   dev   for   system   end   delay   mem   log   gpm   

一、代碼:

leds_4412.c

#include <linux/kernel.h>#include <linux/module.h>#include <linux/miscdevice.h>#include <linux/device.h>#include <linux/fs.h>#include <linux/types.h>#include <linux/moduleparam.h>#include <linux/slab.h>#include <linux/ioctl.h>#include <linux/cdev.h>#include <linux/delay.h> #include <linux/gpio.h>#include <mach/gpio.h>#include <plat/gpio-cfg.h>#include <linux/leds.h>struct led_desc {    int gpio;    char *name;};static struct led_desc led_gpios[] = {    {EXYNOS4212_GPM4(0), "led1"},    {EXYNOS4212_GPM4(1), "led2"},    {EXYNOS4212_GPM4(2), "led3"},    {EXYNOS4212_GPM4(3), "led4"},};struct led_classdev_4412 {    struct led_classdev cdev;    int gpio;};static struct led_classdev_4412 *led_devs;static void     brightness_set_4412(struct led_classdev *led_cdev,              enum led_brightness brightness){    struct led_classdev_4412 *dev = (struct led_classdev_4412 *)led_cdev;    led_cdev->brightness = brightness;    if (brightness != LED_OFF)        gpio_set_value(dev->gpio, 0);    else        gpio_set_value(dev->gpio, 1);}static int leds_init(void){    int i;    int ret;        /* 1. alloc led_classdev */    led_devs = kzalloc(sizeof(struct led_classdev_4412) * sizeof(led_gpios)/sizeof(led_gpios[0]), GFP_KERNEL);    if (led_devs == NULL) {        printk("No memory for device\n");        return -ENOMEM;    }        for (i = 0; i < sizeof(led_gpios)/sizeof(led_gpios[0]); i++)    {        s3c_gpio_cfgpin(led_gpios[i].gpio, S3C_GPIO_OUTPUT);        gpio_set_value(led_gpios[i].gpio, 1);        /* 2. set */        led_devs[i].cdev.max_brightness = LED_FULL;        led_devs[i].cdev.brightness_set = brightness_set_4412;        led_devs[i].cdev.flags = LED_CORE_SUSPENDRESUME;        led_devs[i].cdev.brightness = LED_OFF;        led_devs[i].cdev.name = led_gpios[i].name;        //led_devs[i].cdev.default_trigger = "timer";        led_devs[i].gpio = led_gpios[i].gpio;        /* 3. led_classdev_register */        ret = led_classdev_register(NULL, &led_devs[i].cdev);        if (ret) {            i--;            while (i >= 0) {                led_classdev_unregister(&led_devs[i].cdev);                i--;            }            kfree(led_devs);            return -EIO;        }    }        return 0;}static void leds_exit(void){    int i;    for (i = 0; i < sizeof(led_gpios)/sizeof(led_gpios[0]); i++)    {        led_classdev_unregister(&led_devs[i].cdev);    }    kfree(led_devs);}module_init(leds_init);module_exit(leds_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("sheldon");

 

二、編譯測試:

把 leds_4412.c 放到drivers/leds
修改 drivers/leds/Makefile:
obj-y += leds_4412.o

重新設定核心
make menuconfig

CONFIG_LEDS_CLASS
CONFIG_LEDS_TRIGGERS
CONFIG_LEDS_TRIGGER_TIMER

-> Device Drivers
-> LED Support
[*] LED Class Support
[*] LED Trigger support
<*> LED Timer Trigger

重新編譯核心: make zImage

Android system : Led class 節點添加

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.