提交 1e363e3b 编写于 作者: A Andreas Fenkart 提交者: Ulf Hansson

mmc: omap_hsmmc: pass mmc_priv struct to gpio init / free

this is needed when installing callbacks in the host struct and not
in the platform data, e.g. cover detect irq should be stored in
omap_hsmmc_host and not platform data
Acked-by: NTony Lindgren <tony@atomide.com>
Signed-off-by: NAndreas Fenkart <afenkart@gmail.com>
Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
上级 326119c9
...@@ -449,7 +449,8 @@ static inline int omap_hsmmc_have_reg(void) ...@@ -449,7 +449,8 @@ static inline int omap_hsmmc_have_reg(void)
#endif #endif
static int omap_hsmmc_gpio_init(struct omap_hsmmc_platform_data *pdata) static int omap_hsmmc_gpio_init(struct omap_hsmmc_host *host,
struct omap_hsmmc_platform_data *pdata)
{ {
int ret; int ret;
...@@ -494,7 +495,8 @@ static int omap_hsmmc_gpio_init(struct omap_hsmmc_platform_data *pdata) ...@@ -494,7 +495,8 @@ static int omap_hsmmc_gpio_init(struct omap_hsmmc_platform_data *pdata)
return ret; return ret;
} }
static void omap_hsmmc_gpio_free(struct omap_hsmmc_platform_data *pdata) static void omap_hsmmc_gpio_free(struct omap_hsmmc_host *host,
struct omap_hsmmc_platform_data *pdata)
{ {
if (gpio_is_valid(pdata->gpio_wp)) if (gpio_is_valid(pdata->gpio_wp))
gpio_free(pdata->gpio_wp); gpio_free(pdata->gpio_wp);
...@@ -2064,14 +2066,10 @@ static int omap_hsmmc_probe(struct platform_device *pdev) ...@@ -2064,14 +2066,10 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
if (IS_ERR(base)) if (IS_ERR(base))
return PTR_ERR(base); return PTR_ERR(base);
ret = omap_hsmmc_gpio_init(pdata);
if (ret)
goto err;
mmc = mmc_alloc_host(sizeof(struct omap_hsmmc_host), &pdev->dev); mmc = mmc_alloc_host(sizeof(struct omap_hsmmc_host), &pdev->dev);
if (!mmc) { if (!mmc) {
ret = -ENOMEM; ret = -ENOMEM;
goto err_alloc; goto err;
} }
host = mmc_priv(mmc); host = mmc_priv(mmc);
...@@ -2088,6 +2086,10 @@ static int omap_hsmmc_probe(struct platform_device *pdev) ...@@ -2088,6 +2086,10 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
host->next_data.cookie = 1; host->next_data.cookie = 1;
host->pbias_enabled = 0; host->pbias_enabled = 0;
ret = omap_hsmmc_gpio_init(host, pdata);
if (ret)
goto err_gpio;
platform_set_drvdata(pdev, host); platform_set_drvdata(pdev, host);
if (pdev->dev.of_node) if (pdev->dev.of_node)
...@@ -2283,9 +2285,9 @@ static int omap_hsmmc_probe(struct platform_device *pdev) ...@@ -2283,9 +2285,9 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
if (host->dbclk) if (host->dbclk)
clk_disable_unprepare(host->dbclk); clk_disable_unprepare(host->dbclk);
err1: err1:
omap_hsmmc_gpio_free(host, pdata);
err_gpio:
mmc_free_host(mmc); mmc_free_host(mmc);
err_alloc:
omap_hsmmc_gpio_free(pdata);
err: err:
return ret; return ret;
} }
...@@ -2309,7 +2311,7 @@ static int omap_hsmmc_remove(struct platform_device *pdev) ...@@ -2309,7 +2311,7 @@ static int omap_hsmmc_remove(struct platform_device *pdev)
if (host->dbclk) if (host->dbclk)
clk_disable_unprepare(host->dbclk); clk_disable_unprepare(host->dbclk);
omap_hsmmc_gpio_free(host->pdata); omap_hsmmc_gpio_free(host, host->pdata);
mmc_free_host(host->mmc); mmc_free_host(host->mmc);
return 0; return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册