add 2918 verifyID
authoryangyun <yangyun@rock-chips.com>
Sun, 11 Mar 2012 12:35:52 +0000 (20:35 +0800)
committeryangyun <yangyun@rock-chips.com>
Sun, 11 Mar 2012 12:35:52 +0000 (20:35 +0800)
arch/arm/mach-rk29/Makefile
arch/arm/mach-rk29/verifyID.c [new file with mode: 0644]
arch/arm/mach-rk29/verifyID.h [new file with mode: 0644]

index 31be4046ccdba0db80e3da075b76b2c17015303c..fdb46163a67b9e2e8cc3ccef12ed53baee9414e0 100755 (executable)
@@ -1,4 +1,4 @@
-obj-y += timer.o io.o devices.o iomux.o clock.o rk29-pl330.o dma.o ddr.o sram.o memcpy_dma.o reset.o
+obj-y += timer.o io.o devices.o verifyID.o iomux.o clock.o rk29-pl330.o dma.o ddr.o sram.o memcpy_dma.o reset.o
 obj-y += tests.o memtester.o
 obj-y += early_printk.o
 ifndef CONFIG_DEBUG_LL
diff --git a/arch/arm/mach-rk29/verifyID.c b/arch/arm/mach-rk29/verifyID.c
new file mode 100644 (file)
index 0000000..db1a4ec
--- /dev/null
@@ -0,0 +1,106 @@
+#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
diff --git a/arch/arm/mach-rk29/verifyID.h b/arch/arm/mach-rk29/verifyID.h
new file mode 100644 (file)
index 0000000..253da5a
--- /dev/null
@@ -0,0 +1,14 @@
+/*\r
+ */\r
+\r
+#ifndef _LINUX_VERIFYID_H\r
+#define _LINUX_VERIFYID_H\r
+#include <mach/rk29_iomap.h>\r
+\r
+\r
+#define VERIFYID_GETID 0x29\r
+#define     write_XDATA32(address, value)   (*((unsigned long volatile*)(address)) = value)\r
+#define     read_XDATA32(address)           (*((unsigned long  volatile*)(address)))\r
+\r
+#endif /* _LINUX_VERIFYID_H */\r
+\r