根据LED驱动框架写的3颗LED的驱动代码完整版

代码:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/leds.h>
#include <linux/io.h>
#include <mach/regs-gpio.h>
#include <mach/gpio-bank.h>

#define GPJ0CON S5PV210_GPJ0CON
#define GPJ0DAT S5PV210_GPJ0DAT

static struct led_classdev led_cdev1;
static struct led_classdev led_cdev2;
static struct led_classdev led_cdev3;

static void s5pv210_led_set1(struct led_classdev *led_cdev,
enum led_brightness brightness)
{
int temp = 0;
printk(KERN_INFO “s5pv210_led_set1\n”);
if (LED_OFF == brightness)
{
printk(KERN_INFO “off\n”);
iowrite32(((1<<12) | (1<<16) | (1<<20)), GPJ0CON);

	temp = ioread32(GPJ0DAT);
	temp |= (1<<3);
	iowrite32(temp, GPJ0DAT);	
}
else
{
	printk(KERN_INFO "on\n");
	iowrite32(((1<<12) | (1<<16) | (1<<20)), GPJ0CON);
	
	temp = ioread32(GPJ0DAT);
	temp &= ~(1<<3);
	iowrite32(temp , GPJ0DAT);
}

}

static void s5pv210_led_set2(struct led_classdev *led_cdev,
enum led_brightness brightness)
{
int temp = 0;
printk(KERN_INFO “s5pv210_led_set2\n”);
if (LED_OFF == brightness)
{
printk(KERN_INFO “off\n”);
iowrite32(((1<<12) | (1<<16) | (1<<20)), GPJ0CON);

	temp = ioread32(GPJ0DAT);
	temp |= (1<<4);
	iowrite32(temp, GPJ0DAT);		
}
else
{
	printk(KERN_INFO "on\n");
	iowrite32(((1<<12) | (1<<16) | (1<<20)), GPJ0CON);
	
	temp = ioread32(GPJ0DAT);
	temp &= ~(1<<4);
	iowrite32(temp , GPJ0DAT);
}

}

static void s5pv210_led_set3(struct led_classdev *led_cdev,
enum led_brightness brightness)
{
int temp = 0;
printk(KERN_INFO “s5pv210_led_set3\n”);
if (LED_OFF == brightness)
{
printk(KERN_INFO “off\n”);
iowrite32(((1<<12) | (1<<16) | (1<<20)), GPJ0CON);

	temp = ioread32(GPJ0DAT);
	temp |= (1<<5);
	iowrite32(temp, GPJ0DAT);	
}
else
{
	printk(KERN_INFO "on\n");
	iowrite32(((1<<12) | (1<<16) | (1<<20)), GPJ0CON);

	temp = ioread32(GPJ0DAT);
	temp &= ~(1<<5);
	iowrite32(temp , GPJ0DAT);
}

}

static int __init s5pv210_led_init(void)
{
int ret = -1;
led_cdev1.name = “led1”;
led_cdev1.brightness = 0;
led_cdev1.max_brightness = 1;
led_cdev1.brightness_set = s5pv210_led_set1;
ret = led_classdev_register(NULL, &led_cdev1);
if (ret)
{
printk(KERN_INFO “led_classdev_register fail\n”);
}
printk(KERN_INFO “led_classdev_register ok\n”);

//led2
led_cdev2.name = "led2";
led_cdev2.brightness = 0;
led_cdev2.max_brightness = 1;
led_cdev2.brightness_set = s5pv210_led_set2;
ret = led_classdev_register(NULL, &led_cdev2);
if (ret)
{
	printk(KERN_INFO "led_classdev_register fail\n");
}
printk(KERN_INFO "led_classdev_register ok\n");

//led3
led_cdev3.name = "led3";
led_cdev3.brightness = 0;
led_cdev3.max_brightness = 1;
led_cdev3.brightness_set = s5pv210_led_set3;
ret = led_classdev_register(NULL, &led_cdev3);
if (ret)
{
	printk(KERN_INFO "led_classdev_register fail\n");
}
printk(KERN_INFO "led_classdev_register ok\n");
return 0;

}

static void __exit s5pv210_led_exit(void)
{
led_classdev_unregister(&led_cdev1);
led_classdev_unregister(&led_cdev2);
led_classdev_unregister(&led_cdev3);
}

module_init(s5pv210_led_init);
module_exit(s5pv210_led_exit);

// MODULE_xxx这种宏作用是用来添加模块描述信息
MODULE_LICENSE(“GPL”); // 描述模块的许可证
MODULE_AUTHOR(“Mark 867439374@qq.com”); // 描述模块的作者
MODULE_DESCRIPTION(“s5pv210 led driver”); // 描述模块的介绍信息
MODULE_ALIAS(“s5pv210_led”); // 描述模块的别名信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值