{\r
struct rk29_gps_data *pdata = pdev->dev.platform_data;\r
\r
- if(!pdata)\r
+ if(!pdata) {\r
+ printk("%s: pdata = NULL ...... \n", __func__);\r
return -1;\r
+ }\r
\r
if(pdata->power_flag == 1)\r
{\r
- pdata->suspend = 1;\r
- queue_work(pdata->wq, &pdata->work);\r
+ rk29_gps_uart_to_gpio(pdata->uart_id);\r
+ pdata->power_down(); \r
+ pdata->reset(GPIO_LOW);\r
}\r
\r
printk("%s\n",__FUNCTION__);\r
-\r
return 0; \r
}\r
\r
{\r
struct rk29_gps_data *pdata = pdev->dev.platform_data;\r
\r
- if(!pdata)\r
+ if(!pdata) {\r
+ printk("%s: pdata = NULL ...... \n", __func__);\r
return -1;\r
+ }\r
\r
if(pdata->power_flag == 1)\r
{\r
- pdata->suspend = 0;\r
queue_work(pdata->wq, &pdata->work);\r
}\r
\r
printk("%s\n",__FUNCTION__);\r
-\r
return 0;\r
}\r
\r
static void rk29_gps_delay_power_downup(struct work_struct *work)\r
{\r
- //int ret;\r
struct rk29_gps_data *pdata = container_of(work, struct rk29_gps_data, work);\r
if (pdata == NULL) {\r
printk("%s: pdata = NULL\n", __func__);\r
return;\r
}\r
\r
+ DBG("%s: suspend=%d\n", __func__, pdata->suspend);\r
+\r
down(&pdata->power_sem);\r
- //if (ret < 0) {\r
- // printk("%s: down power_sem error ret = %d\n", __func__, ret);\r
- // return ;\r
- //}\r
\r
- if (pdata->suspend) {\r
- rk29_gps_uart_to_gpio(pdata->uart_id);\r
- pdata->power_down(); \r
- pdata->reset(GPIO_LOW);\r
- }\r
- else {\r
- pdata->reset(GPIO_LOW);\r
- mdelay(10);\r
- pdata->power_up();\r
- mdelay(500);\r
- pdata->reset(GPIO_HIGH);\r
- rk29_gps_gpio_to_uart(pdata->uart_id);\r
- }\r
+ pdata->reset(GPIO_LOW);\r
+ mdelay(5);\r
+ pdata->power_up();\r
+ msleep(500);\r
+ pdata->reset(GPIO_HIGH);\r
+ rk29_gps_gpio_to_uart(pdata->uart_id);\r
+\r
up(&pdata->power_sem);\r
}\r
\r
{\r
if (ptr == NULL)\r
printk("%s: user space address is NULL\n", __func__);\r
- if (pgps == NULL)\r
+\r
+ if (pgps == NULL) {\r
printk("%s: pgps addr is NULL\n", __func__);\r
+ return -1;\r
+ }\r
\r
put_user(pgps->uart_id, ptr);\r
\r
switch (cmd){\r
case ENABLE:\r
pdata->reset(GPIO_LOW);\r
- mdelay(10);\r
+ mdelay(5);\r
pdata->power_up();\r
- mdelay(10);\r
+ mdelay(5);\r
rk29_gps_gpio_to_uart(pdata->uart_id);\r
mdelay(500);\r
pdata->reset(GPIO_HIGH);\r
\r
int rk29_gps_release(struct inode *inode, struct file *filp)\r
{\r
- DBG("rk29_gps_release\n");\r
+ DBG("rk29_gps_release\n");\r
\r
return 0;\r
}\r
pdata->wq = create_freezeable_workqueue("rk29_gps");\r
INIT_WORK(&pdata->work, rk29_gps_delay_power_downup);\r
pdata->power_flag = 0;\r
- pdata->suspend = 0;\r
\r
pgps = pdata;\r
\r