mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 14:42:24 +00:00
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: Tony Lindgren <tony@atomide.com> Signed-off-by: Andreas Fenkart <afenkart@gmail.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
326119c992
commit
1e363e3b47
@ -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 @@ err_free_sp:
|
|||||||
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)
|
|||||||
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)
|
|||||||
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 @@ err_irq:
|
|||||||
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)
|
|||||||
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;
|
||||||
|
Loading…
Reference in New Issue
Block a user