summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2011-10-13 18:02:04 +0200
committerPhilippe LANGLAIS <philippe.langlais@stericsson.com>2011-10-14 14:28:39 +0200
commit4782066b55bb4328c611df737671daf80edf3131 (patch)
tree50948d3c3690259bd0a170d8db5c406f30440e59
parentb3e7868a67569d7f8e2fcd5d11d92b035da2fcd1 (diff)
cw1200: Enable clock at startup.
cw1200 device has hardware clock control. However on some platforms it is required to explicitly enable clock for the device. This is something platform-specific and should be handled in the platform code. The patch adds support for enabling clock by a callback in the platform data. ST-Ericsson ID: 361990 Change-Id: Ifdc7a00b28e3864922b3bcdfab09cbd3092e91ea Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/34068 Reviewed-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com> Tested-by: Robert MARKLUND <robert.marklund@stericsson.com> Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com>
-rw-r--r--drivers/staging/cw1200/cw1200_plat.h2
-rw-r--r--drivers/staging/cw1200/cw1200_sdio.c11
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/staging/cw1200/cw1200_plat.h b/drivers/staging/cw1200/cw1200_plat.h
index e79794f42a3..4d30dbd3979 100644
--- a/drivers/staging/cw1200/cw1200_plat.h
+++ b/drivers/staging/cw1200/cw1200_plat.h
@@ -16,6 +16,8 @@ struct cw1200_platform_data {
const struct resource *reset;
int (*power_ctrl)(const struct cw1200_platform_data *pdata,
bool enable);
+ int (*clk_ctrl)(const struct cw1200_platform_data *pdata,
+ bool enable);
};
/* Declaration only. Should be implemented in arch/xxx/mach-yyy */
diff --git a/drivers/staging/cw1200/cw1200_sdio.c b/drivers/staging/cw1200/cw1200_sdio.c
index b04f31e0684..cd432655bff 100644
--- a/drivers/staging/cw1200/cw1200_sdio.c
+++ b/drivers/staging/cw1200/cw1200_sdio.c
@@ -388,6 +388,12 @@ static int __init cw1200_sdio_init(void)
if (ret)
goto err_reg;
+ if (pdata->clk_ctrl) {
+ ret = pdata->clk_ctrl(pdata, true);
+ if (ret)
+ goto err_clk;
+ }
+
if (pdata->power_ctrl) {
ret = pdata->power_ctrl(pdata, true);
if (ret)
@@ -404,6 +410,9 @@ err_on:
if (pdata->power_ctrl)
pdata->power_ctrl(pdata, false);
err_power:
+ if (pdata->clk_ctrl)
+ pdata->clk_ctrl(pdata, false);
+err_clk:
sdio_unregister_driver(&sdio_driver);
err_reg:
return ret;
@@ -418,6 +427,8 @@ static void __exit cw1200_sdio_exit(void)
cw1200_sdio_off(pdata);
if (pdata->power_ctrl)
pdata->power_ctrl(pdata, false);
+ if (pdata->clk_ctrl)
+ pdata->clk_ctrl(pdata, false);
}