read sn for newton
author蔡枫 <cf@rock-chips.com>
Fri, 1 Jul 2011 08:19:56 +0000 (16:19 +0800)
committer蔡枫 <cf@rock-chips.com>
Fri, 1 Jul 2011 08:19:56 +0000 (16:19 +0800)
drivers/misc/newton.c

index 1099dd5fdd390a4d10dd3c6591b1f89def3236f4..c8853bbcb64d10a4f0fa13c7acaa5b6e009040c7 100755 (executable)
 #endif\r
 \r
 \r
-\r
-\r
-\r
+#define NEWTON_GPIO_R     RK29_PIN4_PB0\r
+#define NEWTON_GPIO_G     RK29_PIN4_PB1\r
+#define NEWTON_GPIO_B     RK29_PIN4_PB2\r
+#define NEWTON_GET_UID    0x6001\r
+typedef struct{\r
+uint16_t SN_Size;              //0-1\r
+char SN[30];                   //2-31\r
+char Reserved[419];            //32-450\r
+char IMEI_Size;                        //451\r
+char IMEI_Data[15];            //452-466\r
+char UID_Size;                 //467\r
+char UID_Data[30];             //468-497\r
+char BT_Size;                  //498\r
+char BlueTooth[6];             //499-504\r
+char Mac_Size;                 //505\r
+char Mac_Data[6];              //506-511\r
+}IdbSector3;\r
+static int led_state = 0;\r
+char GetSNSectorInfo(char * pbuf);\r
+\r
+int newton_print_buf(char *buf,int size)\r
+{\r
+       int i,j,mo=size%16,line = size/16;\r
+       char *pbuf = buf;\r
+\r
+       if(line>0)\r
+       {\r
+               for(i=0;i<line;i++)\r
+               {\r
+                       for(j=0;j<16;j++)\r
+                       {\r
+                               printk("0x%02x ",*pbuf);\r
+                               pbuf++;\r
+                       }\r
+                       printk("\n");\r
+               }\r
+       }\r
+       \r
+       for(j=0;j<mo;j++)\r
+       {\r
+               printk("0x%02x ",*pbuf);\r
+               pbuf++;\r
+       }\r
+}\r
 \r
 int rk29_newton_open(struct inode *inode, struct file *filp)\r
 {\r
     DBG("%s\n",__FUNCTION__);\r
-\r
-       return 0;\r
+    return 0;\r
 }\r
 \r
 ssize_t rk29_newton_read(struct file *filp, char __user *ptr, size_t size, loff_t *pos)\r
@@ -42,12 +82,32 @@ ssize_t rk29_newton_read(struct file *filp, char __user *ptr, size_t size, loff_
        return sizeof(int);\r
 }\r
 \r
+ssize_t rk29_newton_write(struct file *filp, char __user *ptr, size_t size, loff_t *pos)\r
+{\r
+    return sizeof(int);\r
+}\r
+\r
 int rk29_newton_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)\r
 {\r
        int ret = 0;\r
-       struct rk29_newton_data *pdata ;//= pgps;\r
+    void __user *argp = (void __user *)arg;\r
     DBG("%s\n",__FUNCTION__);\r
-       return ret;\r
+       \r
+    switch(cmd)\r
+    {\r
+    case NEWTON_GET_UID:\r
+               {\r
+                       IdbSector3 sn;\r
+                       memset(&sn,0,sizeof(IdbSector3));\r
+                       GetSNSectorInfo(&sn);\r
+                       //newton_print_buf(&sn.UID_Data, sizeof(sn.UID_Data));\r
+            if(copy_to_user(argp, &sn.UID_Data, sizeof(sn.UID_Data)))  return -EFAULT;\r
+       }\r
+               break;\r
+       default:\r
+               break;\r
+       }\r
+       return 0;\r
 }\r
 \r
 \r
@@ -62,9 +122,10 @@ int rk29_newton_release(struct inode *inode, struct file *filp)
 static struct file_operations rk29_newton_fops = {\r
        .owner   = THIS_MODULE,\r
        .open    = rk29_newton_open,\r
-       .read    = rk29_newton_read,\r
+       //.read    = rk29_newton_read,\r
+       //.write         = rk29_newton_write,\r
        .ioctl   = rk29_newton_ioctl,\r
-       .release = rk29_newton_release,\r
+       //.release = rk29_newton_release,\r
 };\r
 \r
 \r
@@ -88,22 +149,32 @@ static int rk29_newton_probe(struct platform_device *pdev)
                printk("rk29 newton register err!\n");\r
                return ret;\r
        }\r
-       #if 0\r
-       init_MUTEX(&pdata->power_sem);\r
-       pdata->wq = create_freezeable_workqueue("rk29_gps");\r
-       INIT_WORK(&pdata->work, rk29_gps_delay_power_downup);\r
-       pdata->power_flag = 0;\r
-\r
-       //gps power down\r
-       rk29_gps_uart_to_gpio(pdata->uart_id);\r
-       if (pdata->power_down)\r
-               pdata->power_down();\r
-       if (pdata->reset)\r
-               pdata->reset(GPIO_LOW);\r
-\r
-       pgps = pdata;\r
+#if 0\r
+    if(gpio_request(NEWTON_GPIO_R,NULL) != 0){\r
+      gpio_free(NEWTON_GPIO_R);\r
+      printk("rk29_newton_probe gpio_request NEWTON_GPIO_R error\n");\r
+      return -EIO;\r
+    }\r
+       \r
+    if(gpio_request(NEWTON_GPIO_G,NULL) != 0){\r
+      gpio_free(NEWTON_GPIO_G);\r
+      printk("rk29_newton_probe gpio_request NEWTON_GPIO_G error\n");\r
+      return -EIO;\r
+    }\r
+       \r
+    if(gpio_request(NEWTON_GPIO_B,NULL) != 0){\r
+      gpio_free(NEWTON_GPIO_B);\r
+      printk("rk29_newton_probe gpio_request NEWTON_GPIO_B error\n");\r
+      return -EIO;\r
+    }\r
+       \r
+    gpio_direction_output(NEWTON_GPIO_R, 0);\r
+       gpio_set_value(NEWTON_GPIO_R,GPIO_LOW);\r
+       gpio_direction_output(NEWTON_GPIO_G, 0);\r
+       gpio_set_value(NEWTON_GPIO_G,GPIO_LOW);\r
+       gpio_direction_output(NEWTON_GPIO_B, 0);\r
+       gpio_set_value(NEWTON_GPIO_B,GPIO_LOW);\r
 #endif\r
-\r
        DBG("%s:rk29 newton initialized\n",__FUNCTION__);\r
 \r
        return ret;\r