--- /dev/null
+#include <linux/module.h>\r
+#include <linux/file.h>\r
+#include <linux/fs.h>\r
+#include <linux/miscdevice.h>\r
+#include <linux/uaccess.h>\r
+#include "verifyID.h"\r
+\r
+\r
+\r
+static int verifyid_open(struct inode *inode, struct file *file)\r
+{\r
+ int ret;\r
+ ret = generic_file_open(inode, file);\r
+ if (unlikely(ret))\r
+ return ret;\r
+ return 0;\r
+}\r
+\r
+static int verifyid_release(struct inode *ignored, struct file *file)\r
+{\r
+\r
+ return 0;\r
+}\r
+\r
+static int GetChipTag(void)\r
+{\r
+ unsigned long i;\r
+ unsigned long value; \r
+ value = read_XDATA32(RK29_GPIO6_BASE+0x4);\r
+ printk("read gpio6+4 = 0x%x\n",value);\r
+ write_XDATA32((RK29_GPIO6_BASE+0x4), (read_XDATA32(RK29_GPIO6_BASE+0x4)&(~(0x7ul<<28)))); // portD 4:6 input\r
+ value = read_XDATA32(RK29_GPIO6_BASE+0x50); \r
+ printk("read gpio6+0x50 = 0x%x\n",value);\r
+ value = (value>>28)&0x07; \r
+ \r
+ return value;\r
+}\r
+static long verifyid_ioctl(struct file *file, unsigned int cmd, unsigned long arg)\r
+{\r
+ long ret = -ENOTTY;\r
+\r
+ switch (cmd) {\r
+ case VERIFYID_GETID:\r
+ ret=GetChipTag();\r
+ *((unsigned long *)arg) = 1;\r
+ break;\r
+ }\r
+\r
+ return ret;\r
+}\r
+\r
+static ssize_t verifyid_read(struct file *file, char __user *buf,\r
+ size_t len, loff_t *pos)\r
+{\r
+ long ret = GetChipTag();\r
+ char *kb = {0x11,0x22,0x33,0x44};\r
+ if(ret>0)\r
+ //*buf = 0xf8;\r
+ copy_to_user(buf,kb,1);\r
+ return ret;\r
+}\r
+\r
+static struct file_operations verifyid_fops = {\r
+ .owner = THIS_MODULE,\r
+ .open = verifyid_open,\r
+ .read = verifyid_read,\r
+ .release = verifyid_release,\r
+ .unlocked_ioctl = verifyid_ioctl,\r
+ .compat_ioctl = verifyid_ioctl,\r
+};\r
+\r
+static struct miscdevice verifyid_misc = {\r
+ .minor = MISC_DYNAMIC_MINOR,\r
+ .name = "verifyid",\r
+ .fops = &verifyid_fops,\r
+};\r
+\r
+static int __init verifyid_init(void)\r
+{\r
+ int ret;\r
+ ret = misc_register(&verifyid_misc);\r
+ if (unlikely(ret)) {\r
+ printk(KERN_ERR "verifyid: failed to register misc device!\n");\r
+ return ret;\r
+ }\r
+ printk(KERN_INFO "verifyid: initialized\n");\r
+\r
+ return 0;\r
+}\r
+\r
+static void __exit verifyid_exit(void)\r
+{\r
+ int ret;\r
+\r
+ ret = misc_deregister(&verifyid_misc);\r
+ if (unlikely(ret))\r
+ printk(KERN_ERR "verifyid: failed to unregister misc device!\n");\r
+\r
+ printk(KERN_INFO "verifyid: unloaded\n");\r
+}\r
+\r
+module_init(verifyid_init);\r
+module_exit(verifyid_exit);\r
+\r
+MODULE_LICENSE("GPL");\r
+\r