使用gpiolib完成led驱动

流程分析
1、第一步:使用gpio_request申请要使用的一个GPIO、

#define X210_LED_OFF 1 // X210中LED是正极接电源,负极节GPIO
#define X210_LED_ON 0 // 所以1是灭,0是亮
#define GPIO_LED1 S5P6442_GPJ0(1)
if(gpio_request(GPIO_LED1,“led1_gpj0_3”))
{
printk(KERN_ERR “gpio_request failed\n”); ///request失败
}
else
{
//设置输出模式 输出1为灭
gpio_direction_output(GPIO_LED1,1); //返回0 request 成功
}
2、第二步:gpio_direction_input/gpio_direction_output设置输入/输出模式
3、第三步:设置输出值,使用__gpio_set_value,获取IO值gpio_get_value
static void s5pv210_led1_set(struct led_classdev *led_cdev, enum led_brightness value)
{
printk(KERN_INFO “s5pv210_led1_set\n”);
// 在这里根据用户设置的值来操作硬件
// 用户设置的值就是value
if (value == LED_OFF)
{
// 用户给了个0,希望LED灭
//writel(0x11111111, GPJ0CON);
// 读改写三部曲
//writel((readl(GPJ0DAT) | (1<<3)), GPJ0DAT);
gpio_set_value(GPIO_LED1, X210_LED_OFF);
}
else
{
// 用户给的是非0,希望LED亮
//writel(0x11111111, GPJ0CON);
//writel((readl(GPJ0DAT) & ~(1<<3)), GPJ0DAT);
gpio_set_value(GPIO_LED1, X210_LED_ON);
}
}

static int __init s5pv210_led_init(void)
{
// 用户insmod安装驱动模块时会调用该函数
// 该函数的主要任务就是去使用led驱动框架提供的设备注册函数来注册一个设备
int ret = -1;

// 在这里去申请驱动用到的各种资源,当前驱动中就是GPIO资源
if (gpio_request(GPIO_LED1, "led1_gpj0.3")) 
{
	printk(KERN_ERR "gpio_request failed\n");
} 
else 
{
	// 设置为输出模式,并且默认输出1让LED灯灭
	gpio_direction_output(GPIO_LED1, 1);
}



// led1
mydev1.name = "led1";
mydev1.brightness = 0;	
mydev1.brightness_set = s5pv210_led1_set;

ret = led_classdev_register(NULL, &mydev1);
if (ret < 0) {
	printk(KERN_ERR "led_classdev_register failed\n");
	return ret;
}



return 0;

}

static void __exit s5pv210_led_exit(void)
{
led_classdev_unregister(&mydev1);
gpio_free(GPIO_LED1);
}

module_init(s5pv210_led_init);
module_exit(s5pv210_led_exit);

最后,通过mount -t debugfs /tmp挂载调试设备,然后cat /tmp/gpio即可得到gpio的所有信息,使用完后umount /tmp 卸载掉debugfs

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值