源代码
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/io.h>
#include <linux/device.h>
#include<linux/of.h>
#include<linux/of_gpio.h>
#include<linux/of_irq.h>
#include<linux/interrupt.h>
#include "myled.h"
#define CNAME "myled"
struct class *cls;
struct device *dev;
int major;
struct device_node *dnode;
struct device_node *node;
struct gpio_desc *gpiono1;
struct gpio_desc *gpiono2;
struct gpio_desc *gpiono3;
struct gpio_desc *fan;
int irqno;
//中断 处理函数
irqreturn_t irq1_handler(int irqno, void *arg)
{
printk("key1 interrupt\n");
gpiod_set_value(fan,!gpiod_get_value(fan));
return IRQ_HANDLED;
}
int myled_open(struct inode *inode, struct file *file)
{
printk("%s:%s:%d\n",__FILE__,__func__,__LINE__);
return 0;
}
long myled_ioctl(struct file *file, unsigned int cmd, unsigned long args)
{
int ret,whitch;
switch (cmd)
{
case LED_ON:
ret=copy_from_user(&whitch,(void*)args,sizeof(int));
if(ret)
{
printk("copy from user is error\n");
return -EIO;
}
switch (whitch)
{
case LED1:
gpiod_set_value(gpiono1,1);
b