📄 shut_key.c
字号:
#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/miscdevice.h>
#include <linux/delay.h>
#include <asm/irq.h>
#include <asm/arch/regs-gpio.h>
#include <asm/hardware.h>
#include "shut_key.h"
#define DEVICE_NAME "shut_key"
#define SHUT_KEY_MAJOR 230
MODULE_LICENSE("GPL");
static int shut_key_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned int arg)
{
if(_IOC_TYPE(cmd) != GPIO_IOF_MAGIC)
{
return -ENOTTY;
}
if(_IOC_NR(cmd) >= GPIO_MAXNR)
{
return -ENOTTY;
}
switch(cmd)
{
case GPIO_SET_PINF3:
s3c2410_gpio_setpin(S3C2410_GPF3,arg);
break;
case GPIO_SET_PINF4:
s3c2410_gpio_setpin(S3C2410_GPF4,arg);
break;
case GPIO_SET_PINF5:
s3c2410_gpio_setpin(S3C2410_GPF5,arg);
break;
case GPIO_SET_PINF6:
s3c2410_gpio_setpin(S3C2410_GPF6,arg);
break;
case GPIO_SET_PINB7:
s3c2410_gpio_setpin(S3C2410_GPB7,arg);
break;
case GPIO_SET_PINB8:
s3c2410_gpio_setpin(S3C2410_GPB8,arg);
break;
case GPIO_SET_PINB9:
s3c2410_gpio_setpin(S3C2410_GPB9,arg);
break;
case GPIO_SET_PINB10:
s3c2410_gpio_setpin(S3C2410_GPB10,arg);
break;
default:
break;
/*case GPIO_CLR_FPIN:
s3c2410_gpio_setpin(S3C2410_GPF5,arg);
break;
case GPIO_CLR_SPIN:
s3c2410_gpio_setpin(S3C2410_GPF6,arg);
break;*/
}
return 0;
}
static struct file_operations shut_key_fops={//文件操作
.owner=THIS_MODULE,
.ioctl=shut_key_ioctl,
};
static int __init shut_key_init(void)
{
int ret;
s3c2410_gpio_cfgpin(S3C2410_GPF3,S3C2410_GPF3_OUTP);
s3c2410_gpio_cfgpin(S3C2410_GPF4,S3C2410_GPF4_OUTP);
s3c2410_gpio_cfgpin(S3C2410_GPF5,S3C2410_GPF5_OUTP);
s3c2410_gpio_cfgpin(S3C2410_GPF6,S3C2410_GPF6_OUTP); s3c2410_gpio_setpin(S3C2410_GPF3,0);
s3c2410_gpio_setpin(S3C2410_GPF4,0);
s3c2410_gpio_setpin(S3C2410_GPF5,0);
s3c2410_gpio_setpin(S3C2410_GPF6,0);
s3c2410_gpio_cfgpin(S3C2410_GPB7,S3C2410_GPB7_OUTP);
s3c2410_gpio_cfgpin(S3C2410_GPB8,S3C2410_GPB8_OUTP);
s3c2410_gpio_cfgpin(S3C2410_GPB9,S3C2410_GPB9_OUTP);
s3c2410_gpio_cfgpin(S3C2410_GPB10,S3C2410_GPB10_OUTP);
s3c2410_gpio_setpin(S3C2410_GPB7,0);
s3c2410_gpio_setpin(S3C2410_GPB8,0);
s3c2410_gpio_setpin(S3C2410_GPB9,0);
s3c2410_gpio_setpin(S3C2410_GPB10,0);
ret=register_chrdev(SHUT_KEY_MAJOR,DEVICE_NAME,&shut_key_fops);
if(ret < 0)
{
printk(DEVICE_NAME "can't register major number\n");
return ret;
}
devfs_mk_cdev(MKDEV(SHUT_KEY_MAJOR,0),S_IFCHR|S_IRUSR|S_IWUSR|S_IRGRP,DEVICE_NAME);
printk(DEVICE_NAME "initialized\n");
return 0;
}
static void __exit shut_key_exit(void)
{
devfs_remove(DEVICE_NAME);
unregister_chrdev(SHUT_KEY_MAJOR,DEVICE_NAME);
}
module_init(shut_key_init);
module_exit(shut_key_exit);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -