ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

灯光系统

2019-03-09 21:53:23  阅读:410  来源: 互联网

标签:led 灯光 brightness 系统 dev tiny4412 gpio include


#include <linux/kernel.h>
#include <linux/module.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/backlight.h>
#include <linux/leds.h>


static struct led_desc {
             char *name;
             int gpio;
};

static struct led_desc tiny4412_led[] = {
            {"led0", EXYNOS4212_GPM4(0)},
            {"led1", EXYNOS4212_GPM4(1)},
            {"led2", EXYNOS4212_GPM4(2)},
            {"led3", EXYNOS4212_GPM4(3)},
};

struct led_classdev_cdev {
            struct led_classdev led_dev;
            int gpio;
};

struct led_classdev_cdev *led_dev[4];

static int PIN_NUM = sizeof(tiny4412_led)/sizeof(tiny4412_led[0]);

void tiny4412_brightness_set(struct led_classdev *led_cdev,
                      enum led_brightness brightness)
{
    struct led_classdev_cdev *cdev = (struct led_classdev_cdev *)led_cdev;
    if (brightness == LED_OFF)
         gpio_set_value(cdev->gpio, 1);
    else
         gpio_set_value(cdev->gpio, 0);
    led_cdev->brightness = brightness;
}

int led_tiny4412_init(void)
{
   int i;
   
   for (i = 0; i < PIN_NUM; i++) {
        s3c_gpio_cfgpin(tiny4412_led[i].gpio, S3C_GPIO_OUTPUT);
        gpio_set_value(tiny4412_led[i].gpio, 1);
        led_dev[i] = kzalloc(sizeof(struct led_classdev_cdev), GFP_KERNEL);
        led_dev[i]->led_dev.brightness_set = tiny4412_brightness_set;
        led_dev[i]->led_dev.max_brightness = LED_FULL;    
        led_dev[i]->led_dev.brightness = LED_OFF;
        led_dev[i]->led_dev.flags = LED_CORE_SUSPENDRESUME;
        led_dev[i]->led_dev.name = tiny4412_led[i].name;
        led_dev[i]->gpio = tiny4412_led[i].gpio;

        led_classdev_register(NULL, &(led_dev[i]->led_dev));
   }
   return 0;
}

void led_tiny4412_exit(void)
{
   int i;
    for (i = 0; i < PIN_NUM; i++) {
       led_classdev_unregister(&(led_dev[i]->led_dev));
       kfree(led_dev[i]);
    }
}

module_init(led_tiny4412_init);
module_exit(led_tiny4412_exit);

MODULE_LICENSE("GPL");

将程序加入drivers/leds目录下:

make menuconfig 配置内核:将LED CLASS / LED trigger 加入编译进内核

make zImage

烧写内核

ls /sys/class/led*

led0
led1
led2
led3

echo 255 > /sys/class/leds/led0/brightness 点亮第一个LED灯

 

标签:led,灯光,brightness,系统,dev,tiny4412,gpio,include
来源: https://www.cnblogs.com/zhu-g5may/p/10503188.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有