modify suspend of gps and default close gyroscope
authorlinjh <linjh@rock-chips.com>
Wed, 20 Apr 2011 09:14:19 +0000 (17:14 +0800)
committerlinjh <linjh@rock-chips.com>
Wed, 20 Apr 2011 09:14:19 +0000 (17:14 +0800)
drivers/input/gsensor/Kconfig
drivers/misc/gps/rk29_gps.c
drivers/misc/gps/rk29_gps.h

index 31b87eb6740314ae3ecce40165503fc7da59db40..687fcec8752760c3bc22bfdcfdfb094539812a39 100644 (file)
@@ -30,7 +30,7 @@ config GS_MMA8452
 config GS_L3G4200D
   bool "gs_l3g4200d"
        depends on G_SENSOR_DEVICE
-       default y
+       default n
        help     
          To have support for your specific gsesnor you will have to
          select the proper drivers which depend on this option.
index f36b9cc43e0250014d616d48f13e5e619ff87c2b..09eedb74eb126ed58fb8b1f03751ceee1846e976 100644 (file)
@@ -108,17 +108,19 @@ int rk29_gps_suspend(struct platform_device *pdev,  pm_message_t state)
 {\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
@@ -126,48 +128,39 @@ int rk29_gps_resume(struct platform_device *pdev)
 {\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
@@ -182,8 +175,11 @@ ssize_t rk29_gps_read(struct file *filp, char __user *ptr, size_t size, loff_t *
 {\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
@@ -206,9 +202,9 @@ int rk29_gps_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, uns
        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
@@ -237,7 +233,7 @@ int rk29_gps_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, uns
 \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
@@ -274,7 +270,6 @@ static int rk29_gps_probe(struct platform_device *pdev)
        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
index 75ce567a35b8257c2667ad06f8a2e2995d59e32a..2599b7e4c4b2ff042eb6801076eaf847e3efd5ed 100644 (file)
@@ -11,7 +11,6 @@ struct rk29_gps_data {
        int (*reset)(int);\r
        int uart_id;\r
        int power_flag;\r
-       int suspend;\r
        struct semaphore power_sem;\r
        struct workqueue_struct *wq;\r
        struct work_struct work;\r