#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define RTC_MAGIC 'y'
#define INIT
_IOW(RTC_MAGIC,1,int)
#define ADD
_IOW(RTC_MAGIC,2,int)
#define DEL
_IOW(RTC_MAGIC,3,int)
MODULE_LICENSE("Dual BSD/GPL");
#define MAJOR_NUM 222
unsigned char val_temp;
static ssize_t chardev_read(struct file *, char *, size_t,
loff_t*);
static ssize_t chardev_write(struct file *, const char *, size_t,
loff_t*);
static int chardev_ioctl(struct inode
*inode,struct file *file, unsigned int cmd,int * arg);
static int major = 0;
static int chardev_var = 0x555555;
static void one_func_task(void *p);
static struct rtc_device *rtc;
int data=0;
void add(int);
//struct rtc_wkalrm alam;
static
void one_func_task(void *p)
{
static int
count = 0 ;
printk("ok,finish!%d\n",count);
count++;
add(data);
}
static struct rtc_task func_task={
.func=one_func_task
};
void add(int);
void del(void);
void init(void);
void init(void)
{
// copy_from_user(&data,arg, sizeof(int));
// printk("1
start %d !\n",data);
rtc = rtc_class_open("rtc0"); // rtc_irq_unregister(rtc,&func_task);
rtc_irq_register(rtc,&func_task);
// rtc_irq_set_state(rtc,&func_task,1);
// rtc_irq_set_freq(rtc,&func_task,data);
printk("1 start %d !\n",data);
}
void del(void)
{
// copy_from_user(&data,(unsigned long *)arg,
sizeof(unsigned long));
// rtc =
rtc_class_open("rtc0"); // rtc_irq_set_freq(rtc,&func_task,0);
// rtc_irq_set_state(rtc,&func_task,0);
CMOS_WRITE(val_temp,RTC_CONTROL);
rtc_irq_unregister(rtc,&func_task);
rtc_class_close(rtc);
printk("3 start\n");
}
void add(int data_temp)
{ unsigned char val;
struct rtc_time before;
memset(&before,0,sizeof(struct
rtc_time)); before.tm_sec= CMOS_READ (RTC_SECONDS);
before.tm_min= CMOS_READ (RTC_MINUTES);
before.tm_hour= CMOS_READ (RTC_HOURS);
before.tm_sec=bcd2bin(before.tm_sec);
before.tm_min=bcd2bin(before.tm_min);
before.tm_hour=bcd2bin(before.tm_hour);
// printk("%d",before.tm_sec);
before.tm_sec+=data_temp;
// printk("%d",before.tm_sec);
/
return sizeof(int);
}
module_init(chardev_init);
module_exit(chardev_exit);