#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/poll.h>
#include <linux/slab.h>
#include <linux/ioport.h>
#include <asm/uaccess.h>
#include <asm/io.h>
//#include <asm/arch/S3C2410.h>
#include <asm/arch-s3c2410/regs-gpio.h>
#include <linux/fcntl.h>
#define GPF4_ON 0x4800
#define GPF4_OFF 0x4801
#define GPFDAT *(volatile unsigned int *)S3C2410_GPFDAT
#define GPFCON *(volatile unsigned int *)S3C2410_GPFCON
//static int GPIO_TEST_ioctl(struct inode *s_node,struct file *s_file,unsigned int cmd,unsigned int arg);
static int major=252;
char GPIO_TEST_name[]="GPIO_TEST";
static int GPIO_TEST_ioctl(struct inode *s_node,struct file *s_file,unsigned int cmd,unsigned long arg)
{
int retv;
unsigned int data;
switch(cmd)
{
case GPF4_ON:
GPFDAT=GPFDAT&(~(1<<4));
// s3c2410_gpio_setpin(S3C2410_GPF4,0);
break;
case GPF4_OFF:
GPFDAT=GPFDAT|(1<<4);
// s3c2410_gpio_setpin(S3C2410_GPF4,1);
break;
default:
break;
}
return 0;
}
static struct file_operations GPIO_TEST_fops=
{
ioctl : GPIO_TEST_ioctl
};
static int __init GPIO_TESTdrv_init_module(void)
{
int retv;
retv=register_chrdev(major,GPIO_TEST_name,&GPIO_TEST_fops);
if(retv<0)
{
printk("<1>register fail!\n");
return retv;
}
if(major==0)
major=retv;
printk("major=%d\n",major);
printk("<1>hello GPIO_TESTdrv!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
GPFDAT=(GPFDAT&(~(3<<8)))+(1<<8);
GPFDAT=GPFDAT|(1<<4);
//s3c2410_gpio_pullup(S3C2410_GPF4,1);
//s3c2410_gpio_cfgpin(S3C2410_GPF4, S3C2410_GPF4_OUTP);
//s3c2410_gpio_setpin(S3C2410_GPF4,1);
return 0;
}
static void __exit GPIO_TESTdrv_cleanup(void)
{
int retv;
retv=unregister_chrdev(major,GPIO_TEST_name);
if(retv<0)
{
printk("<1>unreginster fail!\n");
return;
}
printk("<1>GPIO_TESTdrv:good_bye!\n");
}
module_init(GPIO_TESTdrv_init_module);
module_exit(GPIO_TESTdrv_cleanup);
//lhtMODULE_LICENSE("GPL");