Commit 6da86df3 authored by Vaibhav Hiremath's avatar Vaibhav Hiremath Committed by Greg Kroah-Hartman

greybus: arche-platform: Export gpio (reset & sys_boot) to user

In order to allow user to flash the firmware to,

SVC:
user need to assert the reset first, set sysboot pin and
deassert reset. And then issue a flashing command.

And APB:
User need to assert the reset first, and then issue flashing
command.

So this patch exports the gpio's to user.
Signed-off-by: default avatarVaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 1f67ee5c
...@@ -71,6 +71,17 @@ static inline void deassert_gpio(unsigned int gpio) ...@@ -71,6 +71,17 @@ static inline void deassert_gpio(unsigned int gpio)
gpio_set_value(gpio, 0); gpio_set_value(gpio, 0);
} }
/* Export gpio's to user space */
static void export_gpios(struct arche_apb_ctrl_drvdata *apb)
{
gpio_export(apb->resetn_gpio, false);
}
static void unexport_gpios(struct arche_apb_ctrl_drvdata *apb)
{
gpio_unexport(apb->resetn_gpio);
}
static irqreturn_t apb_ctrl_wake_detect_irq(int irq, void *devid) static irqreturn_t apb_ctrl_wake_detect_irq(int irq, void *devid)
{ {
struct arche_apb_ctrl_drvdata *apb = devid; struct arche_apb_ctrl_drvdata *apb = devid;
...@@ -328,6 +339,8 @@ int arche_apb_ctrl_probe(struct platform_device *pdev) ...@@ -328,6 +339,8 @@ int arche_apb_ctrl_probe(struct platform_device *pdev)
assert_gpio(apb->resetn_gpio); assert_gpio(apb->resetn_gpio);
export_gpios(apb);
dev_info(&pdev->dev, "Device registered successfully\n"); dev_info(&pdev->dev, "Device registered successfully\n");
return 0; return 0;
...@@ -344,6 +357,7 @@ int arche_apb_ctrl_remove(struct platform_device *pdev) ...@@ -344,6 +357,7 @@ int arche_apb_ctrl_remove(struct platform_device *pdev)
apb_ctrl_cleanup(apb); apb_ctrl_cleanup(apb);
platform_set_drvdata(pdev, NULL); platform_set_drvdata(pdev, NULL);
unexport_gpios(apb);
return 0; return 0;
} }
......
...@@ -45,6 +45,19 @@ static inline void svc_reset_onoff(unsigned int gpio, bool onoff) ...@@ -45,6 +45,19 @@ static inline void svc_reset_onoff(unsigned int gpio, bool onoff)
gpio_set_value(gpio, onoff); gpio_set_value(gpio, onoff);
} }
/* Export gpio's to user space */
static void export_gpios(struct arche_platform_drvdata *arche_pdata)
{
gpio_export(arche_pdata->svc_reset_gpio, false);
gpio_export(arche_pdata->svc_sysboot_gpio, false);
}
static void unexport_gpios(struct arche_platform_drvdata *arche_pdata)
{
gpio_unexport(arche_pdata->svc_reset_gpio);
gpio_unexport(arche_pdata->svc_sysboot_gpio);
}
static void arche_platform_cleanup(struct arche_platform_drvdata *arche_pdata) static void arche_platform_cleanup(struct arche_platform_drvdata *arche_pdata)
{ {
/* As part of exit, put APB back in reset state */ /* As part of exit, put APB back in reset state */
...@@ -141,6 +154,8 @@ static int arche_platform_probe(struct platform_device *pdev) ...@@ -141,6 +154,8 @@ static int arche_platform_probe(struct platform_device *pdev)
arche_pdata->num_apbs = of_get_child_count(np); arche_pdata->num_apbs = of_get_child_count(np);
dev_dbg(dev, "Number of APB's available - %d\n", arche_pdata->num_apbs); dev_dbg(dev, "Number of APB's available - %d\n", arche_pdata->num_apbs);
export_gpios(arche_pdata);
/* probe all childs here */ /* probe all childs here */
ret = of_platform_populate(np, NULL, NULL, dev); ret = of_platform_populate(np, NULL, NULL, dev);
if (ret) if (ret)
...@@ -169,6 +184,7 @@ static int arche_platform_remove(struct platform_device *pdev) ...@@ -169,6 +184,7 @@ static int arche_platform_remove(struct platform_device *pdev)
arche_platform_cleanup(arche_pdata); arche_platform_cleanup(arche_pdata);
platform_set_drvdata(pdev, NULL); platform_set_drvdata(pdev, NULL);
unexport_gpios(arche_pdata);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment