\r
\r
\r
-\r
+#define NEWTON_DEV "newton:"\r
#if 1\r
-#define DBG(x...) printk(KERN_INFO x)\r
+#define DBG(x...) printk(KERN_INFO NEWTON_DEV x)\r
#else\r
#define DBG(x...)\r
#endif\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
+#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_GPIO_AC_DETEC RK29_PIN4_PA1\r
+#define NEWTON_GPIO_GPS_PWR RK29_PIN6_PB2\r
+#define NEWTON_GET_UID 0x6001\r
+#define NEWTON_AC_DETEC 0x6002\r
+#define NEWTON_GPS_CTRL 0x6003\r
typedef struct{\r
uint16_t SN_Size; //0-1\r
char SN[30]; //2-31\r
char Mac_Size; //505\r
char Mac_Data[6]; //506-511\r
}IdbSector3;\r
-static int led_state = 0;\r
+int gps_power = 0;\r
char GetSNSectorInfo(char * pbuf);\r
\r
int newton_print_buf(char *buf,int size)\r
printk("0x%02x ",*pbuf);\r
pbuf++;\r
}\r
+ return 0;\r
+}\r
+\r
+\r
+int rk29_newton_get_ac_status()\r
+{\r
+ int ac_status = 0; \r
+\r
+ gpio_direction_input(NEWTON_GPIO_AC_DETEC);\r
+ ac_status = gpio_get_value(NEWTON_GPIO_AC_DETEC);\r
+ DBG("%s:NEWTON_GPIO_AC_DETEC = %d\n",__FUNCTION__,ac_status);\r
+ return ac_status;\r
+}\r
+\r
+\r
+int rk29_newton_set_gps_power(int value)\r
+{\r
+ DBG("%s:value = %d\n",__FUNCTION__,value);\r
+ gpio_direction_output(NEWTON_GPIO_GPS_PWR, 0);\r
+ gpio_set_value(NEWTON_GPIO_GPS_PWR,value);\r
+ return 0;\r
}\r
\r
+\r
int rk29_newton_open(struct inode *inode, struct file *filp)\r
{\r
DBG("%s\n",__FUNCTION__);\r
\r
ssize_t rk29_newton_write(struct file *filp, char __user *ptr, size_t size, loff_t *pos)\r
{\r
+ DBG("%s\n",__FUNCTION__);\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
void __user *argp = (void __user *)arg;\r
- DBG("%s\n",__FUNCTION__);\r
+ //DBG("%s\n",__FUNCTION__);\r
\r
switch(cmd)\r
{\r
case NEWTON_GET_UID:\r
{\r
IdbSector3 sn;\r
+ DBG("%s:NEWTON_GET_UID\n",__FUNCTION__);\r
memset(&sn,0,sizeof(IdbSector3));\r
- GetSNSectorInfo(&sn);\r
+ GetSNSectorInfo((char*)&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
+ case NEWTON_AC_DETEC:\r
+ {\r
+ int ac_status = rk29_newton_get_ac_status();\r
+ if(copy_to_user(argp, &ac_status, 4)) return -EFAULT;\r
+ }\r
+ break;\r
+ case NEWTON_GPS_CTRL:\r
+ {\r
+ int value = 0;\r
+ if(copy_from_user(&value, (void*)arg, 4)){\r
+ DBG("%s:NEWTON_GPS_CTRL,copy_from_user error\n",__FUNCTION__);\r
+ return -EFAULT;\r
+ }\r
+ if((value != 0) && (value != 1)){\r
+ DBG("%s:NEWTON_GPS_CTRL,parameter error,value = %d\n",__FUNCTION__,value);\r
+ return -EFAULT;\r
+ }\r
+ gps_power = value;\r
+ rk29_newton_set_gps_power(value);\r
+ }\r
+ break;\r
default:\r
break;\r
}\r
printk("rk29 newton register err!\n");\r
return ret;\r
}\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
+ if(gpio_request(NEWTON_GPIO_GPS_PWR,NULL) != 0){\r
+ gpio_free(NEWTON_GPIO_GPS_PWR);\r
+ printk("gpio_request NEWTON_GPIO_GPS_PWR error\n");\r
+ return -EIO;\r
+ }\r
+ if(gpio_request(NEWTON_GPIO_AC_DETEC,NULL) != 0){\r
+ gpio_free(NEWTON_GPIO_AC_DETEC);\r
+ printk("gpio_request NEWTON_GPIO_AC_DETEC error\n");\r
+ return -EIO;\r
+ }\r
+ rk29_newton_set_gps_power(GPIO_LOW);\r
DBG("%s:rk29 newton initialized\n",__FUNCTION__);\r
-\r
return ret;\r
}\r
\r
\r
int rk29_newton_suspend(struct platform_device *pdev, pm_message_t state)\r
{\r
+ if(gps_power==GPIO_HIGH)\r
+ rk29_newton_set_gps_power(GPIO_LOW);\r
return 0; \r
}\r
\r
int rk29_newton_resume(struct platform_device *pdev)\r
{\r
+ if(gps_power==GPIO_HIGH)\r
+ rk29_newton_set_gps_power(gps_power);\r
return 0;\r
}\r
\r