diff options
author | Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> | 2011-10-13 18:02:04 +0200 |
---|---|---|
committer | Philippe LANGLAIS <philippe.langlais@stericsson.com> | 2011-10-14 14:28:39 +0200 |
commit | 4782066b55bb4328c611df737671daf80edf3131 (patch) | |
tree | 50948d3c3690259bd0a170d8db5c406f30440e59 | |
parent | b3e7868a67569d7f8e2fcd5d11d92b035da2fcd1 (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.h | 2 | ||||
-rw-r--r-- | drivers/staging/cw1200/cw1200_sdio.c | 11 |
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); } |