greybus: arche-platform: Disable clock as part of driver remove
authorVaibhav Hiremath <vaibhav.hiremath@linaro.org>
Tue, 26 Jan 2016 01:53:29 +0000 (07:23 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Tue, 26 Jan 2016 04:08:55 +0000 (20:08 -0800)
As part of driver remove (cleanup) function, disable the clock for both
SVC, APB1 & APB2.

Testing Done:
Tested on EVT1 platform with Connect=>disconnect=>connect
iteration, almost close to 100 iterations have passed (demo branch).
And also tested with kernel-only build.

Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/arche-apb-ctrl.c
drivers/staging/greybus/arche-platform.c

index d073543..f2bad8d 100644 (file)
@@ -220,6 +220,10 @@ static int apb_ctrl_get_devtree_data(struct platform_device *pdev,
 
 static void apb_ctrl_cleanup(struct arche_apb_ctrl_drvdata *apb)
 {
+       /* disable the clock */
+       if (gpio_is_valid(apb->clk_en_gpio))
+               gpio_set_value(apb->clk_en_gpio, 0);
+
        if (!IS_ERR(apb->vcore) && regulator_is_enabled(apb->vcore) > 0)
                regulator_disable(apb->vcore);
 
index d12fa0e..b5596ec 100644 (file)
@@ -104,6 +104,7 @@ static void unexport_gpios(struct arche_platform_drvdata *arche_pdata)
 
 static void arche_platform_cleanup(struct arche_platform_drvdata *arche_pdata)
 {
+       clk_disable_unprepare(arche_pdata->svc_ref_clk);
        /* As part of exit, put APB back in reset state */
        svc_reset_onoff(arche_pdata->svc_reset_gpio,
                        arche_pdata->is_reset_act_hi);