misc: radio_ctrl: wrigley: add reset command
authorJames Wylder <james.wylder@motorola.com>
Thu, 17 Mar 2011 19:28:54 +0000 (14:28 -0500)
committerBenoit Goby <benoit@android.com>
Fri, 18 Mar 2011 01:58:43 +0000 (18:58 -0700)
Change-Id: Ib0f45c1e9bf584338427e4eb7b1f23334e5c4c8e
Signed-off-by: James Wylder <james.wylder@motorola.com>
drivers/misc/radio_ctrl/wrigley_ctrl.c

index b1e6a136617fb983882548f3ad3964e3572a6646..4e60a2bb04bcbdbc6859532f4c59682cc9118e37 100644 (file)
@@ -101,6 +101,42 @@ static ssize_t wrigley_do_powerdown(struct wrigley_info *info)
        return err;
 }
 
+/* hard reset of Wrigley data card
+ * recipe is:
+ * 1) set force_flash high
+ * 2) configure reset as output and drive low for 10ms
+ * 3) configure reset as input
+ * 4) set force flash low
+ * 5) verify data card reset by sampling reset
+ */
+static ssize_t wrigley_do_reset(struct wrigley_info *info)
+{
+       int i;
+       int value;
+       int err = -1;
+
+       gpio_direction_output(info->flash_gpio, 1);
+
+       gpio_direction_output(info->reset_gpio, 0);
+       msleep(10);
+       gpio_set_value(info->reset_gpio, 1);
+
+       gpio_direction_input(info->reset_gpio);
+       gpio_set_value(info->flash_gpio, 0);
+       for (i = 0; i < 10; i++) {
+               value = gpio_get_value(info->reset_gpio);
+               pr_info("%s: reset value = %d\n", __func__, value);
+               if (!value) {
+                       err = 0;
+                       info->status = WRIGLEY_STATUS_OFF;
+                       break;
+               }
+               msleep(100);
+       }
+
+       return err;
+}
+
 static ssize_t wrigley_do_powerup(struct wrigley_info *info)
 {
        int i, value, err = -1;
@@ -163,6 +199,8 @@ static ssize_t wrigley_command(struct radio_dev *rdev, char *cmd)
 
        if (strcmp(cmd, "shutdown") == 0)
                return wrigley_do_powerdown(info);
+       else if (strcmp(cmd, "reset") == 0)
+               return wrigley_do_reset(info);
        else if (strcmp(cmd, "powerup") == 0)
                return wrigley_do_powerup(info);
        else if (strcmp(cmd, "bootmode_normal") == 0)