summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorVaibhav Hiremath <vaibhav.hiremath@linaro.org>2016-02-25 04:37:35 +0530
committerGreg Kroah-Hartman <gregkh@google.com>2016-02-25 16:24:23 -0800
commit685353c12ea33e99d1daba5b3721b9033cdbdb87 (patch)
tree6d80d8b42b7f2c8aa41b6270378387ae88fd29d1 /drivers
parentdb5a3bca56584c0ae62dbe0b280333c75a813b0a (diff)
greybus: arche-platform: Add wake detect state based on functionality
If driver needs to process wake/detect events from SVC, by enabling interrupt support on wake/detect event, it becomes easier to maintain state of wake/detect line based on functionality. Testing Done: Tested on DB3.5 platform. Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org> Reviewed-by: Michael Scott <michael.scott@linaro.org> Tested-by: Michael Scott <michael.scott@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/greybus/arche-platform.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/staging/greybus/arche-platform.c b/drivers/staging/greybus/arche-platform.c
index 50991a601731..dcc3844854c2 100644
--- a/drivers/staging/greybus/arche-platform.c
+++ b/drivers/staging/greybus/arche-platform.c
@@ -21,6 +21,15 @@
#include <linux/usb/usb3613.h>
+enum svc_wakedetect_state {
+ WD_STATE_IDLE, /* Default state = pulled high/low */
+ WD_STATE_BOOT_INIT, /* WD = falling edge (low) */
+ WD_STATE_COLDBOOT_TRIG, /* WD = rising edge (high), > 30msec */
+ WD_STATE_STANDBYBOOT_TRIG, /* As of now not used ?? */
+ WD_STATE_COLDBOOT_START, /* Cold boot process started */
+ WD_STATE_STANDBYBOOT_START, /* Not used */
+};
+
struct arche_platform_drvdata {
/* Control GPIO signals to and from AP <=> SVC */
int svc_reset_gpio;
@@ -39,6 +48,8 @@ struct arche_platform_drvdata {
int num_apbs;
struct delayed_work delayed_work;
+ enum svc_wakedetect_state wake_detect_state;
+
struct device *dev;
};
@@ -145,6 +156,7 @@ static void arche_platform_poweroff_seq(struct arche_platform_drvdata *arche_pda
/* Send disconnect/detach event to SVC */
gpio_set_value(arche_pdata->wake_detect_gpio, 0);
usleep_range(100, 200);
+ arche_pdata->wake_detect_state = WD_STATE_IDLE;
clk_disable_unprepare(arche_pdata->svc_ref_clk);
}
@@ -328,6 +340,7 @@ static int arche_platform_probe(struct platform_device *pdev)
}
/* deassert wake detect */
gpio_direction_output(arche_pdata->wake_detect_gpio, 0);
+ arche_pdata->wake_detect_state = WD_STATE_IDLE;
arche_pdata->dev = &pdev->dev;