From e866e4361aade48b984bf154f5a57eacde07b009 Mon Sep 17 00:00:00 2001 From: yangyun Date: Sun, 11 Mar 2012 20:35:52 +0800 Subject: [PATCH] add 2918 verifyID --- arch/arm/mach-rk29/Makefile | 2 +- arch/arm/mach-rk29/verifyID.c | 106 ++++++++++++++++++++++++++++++++++ arch/arm/mach-rk29/verifyID.h | 14 +++++ 3 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 arch/arm/mach-rk29/verifyID.c create mode 100644 arch/arm/mach-rk29/verifyID.h diff --git a/arch/arm/mach-rk29/Makefile b/arch/arm/mach-rk29/Makefile index 31be4046ccdb..fdb46163a67b 100755 --- a/arch/arm/mach-rk29/Makefile +++ b/arch/arm/mach-rk29/Makefile @@ -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 index 000000000000..db1a4ecb5338 --- /dev/null +++ b/arch/arm/mach-rk29/verifyID.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include +#include "verifyID.h" + + + +static int verifyid_open(struct inode *inode, struct file *file) +{ + int ret; + ret = generic_file_open(inode, file); + if (unlikely(ret)) + return ret; + return 0; +} + +static int verifyid_release(struct inode *ignored, struct file *file) +{ + + return 0; +} + +static int GetChipTag(void) +{ + unsigned long i; + unsigned long value; + value = read_XDATA32(RK29_GPIO6_BASE+0x4); + printk("read gpio6+4 = 0x%x\n",value); + write_XDATA32((RK29_GPIO6_BASE+0x4), (read_XDATA32(RK29_GPIO6_BASE+0x4)&(~(0x7ul<<28)))); // portD 4:6 input + value = read_XDATA32(RK29_GPIO6_BASE+0x50); + printk("read gpio6+0x50 = 0x%x\n",value); + value = (value>>28)&0x07; + + return value; +} +static long verifyid_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + long ret = -ENOTTY; + + switch (cmd) { + case VERIFYID_GETID: + ret=GetChipTag(); + *((unsigned long *)arg) = 1; + break; + } + + return ret; +} + +static ssize_t verifyid_read(struct file *file, char __user *buf, + size_t len, loff_t *pos) +{ + long ret = GetChipTag(); + char *kb = {0x11,0x22,0x33,0x44}; + if(ret>0) + //*buf = 0xf8; + copy_to_user(buf,kb,1); + return ret; +} + +static struct file_operations verifyid_fops = { + .owner = THIS_MODULE, + .open = verifyid_open, + .read = verifyid_read, + .release = verifyid_release, + .unlocked_ioctl = verifyid_ioctl, + .compat_ioctl = verifyid_ioctl, +}; + +static struct miscdevice verifyid_misc = { + .minor = MISC_DYNAMIC_MINOR, + .name = "verifyid", + .fops = &verifyid_fops, +}; + +static int __init verifyid_init(void) +{ + int ret; + ret = misc_register(&verifyid_misc); + if (unlikely(ret)) { + printk(KERN_ERR "verifyid: failed to register misc device!\n"); + return ret; + } + printk(KERN_INFO "verifyid: initialized\n"); + + return 0; +} + +static void __exit verifyid_exit(void) +{ + int ret; + + ret = misc_deregister(&verifyid_misc); + if (unlikely(ret)) + printk(KERN_ERR "verifyid: failed to unregister misc device!\n"); + + printk(KERN_INFO "verifyid: unloaded\n"); +} + +module_init(verifyid_init); +module_exit(verifyid_exit); + +MODULE_LICENSE("GPL"); + diff --git a/arch/arm/mach-rk29/verifyID.h b/arch/arm/mach-rk29/verifyID.h new file mode 100644 index 000000000000..253da5a906b5 --- /dev/null +++ b/arch/arm/mach-rk29/verifyID.h @@ -0,0 +1,14 @@ +/* + */ + +#ifndef _LINUX_VERIFYID_H +#define _LINUX_VERIFYID_H +#include + + +#define VERIFYID_GETID 0x29 +#define write_XDATA32(address, value) (*((unsigned long volatile*)(address)) = value) +#define read_XDATA32(address) (*((unsigned long volatile*)(address))) + +#endif /* _LINUX_VERIFYID_H */ + -- 2.34.1