⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 leddrv.c~

📁 嵌入式LINUX I/O口驱动,YC2410-SBC T2 平台
💻 C~
字号:
#include<linux/init.h>#include<linux/module.h>MODULE_LICENSE("Dual BSD/GPL");
#include<linux/config.h>
#include<linux/kernel.h>
#include<asm/arch-s3c2410/regs-gpio.h>
#include<asm/arch/hardware.h>#include<linux/fs.h>
#include<linux/delay.h>
#include<asm/uaccess.h>
#define Green S3C2410_GPF5#define Red   S3C2410_GPF4#define Green1Red0 0xf021#define Green0Red1 0xf022#define Green0Red0 0xf023#define Green1Red1 0xf024
# define DEVICE_NAME "LedDriver"
#define Led_MINOR 1
#define Led_Major   220
devfs_handle_t gpio_devfs_dir;extern void s3c2410_gpio_cfgpin(unsigned int pin,unsigned int function);extern void s3c2410_gpio_setpin(unsigned int pin,unsigned int to);extern unsigned int s3c2410_gpio_getpin(unsigned int pin);extern void s3c2410_gpio_pullup(unsigned int pin,unsigned int to);
int gpio_ctl_ioctl(struct inode *inode, 		  struct file *flip,		  unsigned int command, 		  unsigned long arg){	int err = 0;	switch (command)       {	case Green1Red0:		s3c2410_gpio_setpin(Green,1);                s3c2410_gpio_setpin(Red,0);		printk("Green=1,Red=0\n");		return 0;	case Green0Red1:		s3c2410_gpio_setpin(Green,0);                s3c2410_gpio_setpin(Red,1);		printk("Green=0,Red=1\n");		return 0;       case Green0Red0:		s3c2410_gpio_setpin(Green,0);                s3c2410_gpio_setpin(Red,0);		printk("Green=0,Red=0\n");		return 0;       case Green1Red1:		s3c2410_gpio_setpin(Green,1);                s3c2410_gpio_setpin(Red,1);		printk("Green=1,Red=1\n");		return 0;	default:		err = -EINVAL;	}	return err;}
static int Led_open(struct inode *inode,struct file *filp)
{
                s3c2410_gpio_cfgpin(S3C2410_GPF4, S3C2410_GPF4_OUTP);        s3c2410_gpio_cfgpin(S3C2410_GPF5, S3C2410_GPF5_OUTP);        //s3c2410_gpio_setpin(Green,0);        s3c2410_gpio_setpin(Red,1);
	printk("open\n");
	return 0;
}

static int Led_release(struct inode *inode,struct file *filp)
{
	
	printk("releaes\n");
	return 0;
}static int led_read(struct file * file, char * buffer, size_t count, loff_t *ppos)
{   
        unsigned int value;   
        value=s3c2410_gpio_getpin(S3C2410_GPG3);        //s3c2410_gpio_pullup(S3C2410_GPE8,0);        //s3c2410_gpio_cfgpin(S3C2410_GPE8,S3C2410_GPE8_SDDAT1);
        printk(KERN_INFO "read\n");
        if(value!=0) return 1;
        else return 0;
}static int led_write(struct file * file, const char * buffer, size_t count, loff_t *ppos)
{   
         
         s3c2410_gpio_setpin(Green,0);         
         printk(KERN_INFO "write\n");
         return 0;
}
static struct file_operations led_fops = {
        .owner     =       THIS_MODULE,        .open      =       Led_open,
        .ioctl      =       gpio_ctl_ioctl,        .read      =       led_read,        .write     =       led_write,        .release    =       Led_release,
};

#ifdef  CONFIG_DEVICES_FS
static devfs_handle_t devfs_Led_dir;static devfs_handle_t devfs_Led_raw;
#endif

static int __init Led_init(void)
{
   int ret;   gpio_devfs_dir= devfs_register(NULL,"LedDriver",DEVFS_FL_DEFAULT,Led_Major,                             0, S_IFCHR |S_IRUSR |S_IWUSR |S_IRGRP |S_IWGRP,                             &led_fops, NULL);
  // ret=register_chrdev(0,DEVICE_NAME,&led_fops);
   //if(ret<0)
  // {
//	   printk(DEVICE_NAME"can't get major number\n");
//	   return ret;
  // }
  // Led_Major=ret;
   
//#ifdef  CONFIG_DEVFS_FS
  //    devfs_Led_dir=devfs_mk_dir(NULL,"led",NULL);
   //   devfs_Led_raw=devfs_register(devfs_Led_dir,"0",DEVFS_FL_DEFAULT,Led_Major,
		                            //Led_MINOR,S_IFCHR|S_IRUSR|S_IWUSR,&led_fops,NULL);

//#endif
   //-------------------3--
    printk(DEVICE_NAME"---initialized\n");    // s3c2410_gpio_cfgpin(S3C2410_GPF4, S3C2410_GPF4_OUTP);      //  s3c2410_gpio_cfgpin(S3C2410_GPF5, S3C2410_GPF5_OUTP);       // s3c2410_gpio_setpin(Green,0);       // s3c2410_gpio_setpin(Red,1);
	printk("Success\n");        
	return 0;
}

static void __exit  Led_exit(void)
{
//#ifdef  CONFIG_DEVFS_FS
	       devfs_unregister(gpio_devfs_dir);
		//devfs_unregister(devfs_Led_dir);
//#endif
	//	s3c2410_gpio_setpin(Red,1);             //   unregister_chrdev(Led_Major,DEVICE_NAME);                printk("LedDriver Unstalled Ok\n");
}

module_init(Led_init);
module_exit(Led_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("threewater<threewater@up-tech.com>");
MODULE_DESCRIPTION("gpio(led) driver for s3c2410");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -