gpio子系统 和中断实现led亮灭

驱动代码

#include <linux/init.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/gpio.h>
#include "head.h"
#include <linux/of_irq.h>
#include <linux/interrupt.h>

struct device_node *dev;
struct device_node *dev_irq;
struct gpio_desc* gpiono_led1;
struct gpio_desc* gpiono_led2;
struct gpio_desc* gpiono_led3;
unsigned int major;
struct class *cls;
struct device *dev1;

unsigned int irqno_led1;
unsigned int irqno_led2;
unsigned int irqno_led3;

irqreturn_t led1_handler(int irq,void* dev)
{
	gpiod_set_value(gpiono_led1,!gpiod_get_value(gpiono_led1));
	return IRQ_HANDLED;
}

irqreturn_t led2_handler(int irq,void* dev)
{
	gpiod_set_value(gpiono_led2,!gpiod_get_value(gpiono_led2));
	return IRQ_HANDLED;
}

irqreturn_t led3_handler(int irq,void* dev)
{
	gpiod_set_value(gpiono_led3,!gpiod_get_value(gpiono_led3));
	return IRQ_HANDLED;
}

long mycdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	switch(arg)
	{
	case 0:
		switch(cmd)
		{
		case LED1_ON:
            gpiod_set_value(gpiono_led1,1);
			break;
		case LED1_OFF:
			gpiod_set_value(gpiono_led1,0);
			break;
		}
		break;
	case 1:
		switch(cmd)
		{
            case LED2_ON:
                gpiod_set_value(gpiono_led2,1);//LED2开灯
                break;
            case LED2_OFF:
                gpiod_set_value(gpiono_led2,0);;
                break;
        }
		break;
	case 2:
		switch(cmd)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值