Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1e363e3b authored by Andreas Fenkart's avatar Andreas Fenkart Committed by Ulf Hansson
Browse files

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: default avatarTony Lindgren <tony@atomide.com>
Signed-off-by: default avatarAndreas Fenkart <afenkart@gmail.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 326119c9
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -449,7 +449,8 @@ static inline int omap_hsmmc_have_reg(void)

#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;

@@ -494,7 +495,8 @@ static int omap_hsmmc_gpio_init(struct omap_hsmmc_platform_data *pdata)
	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))
		gpio_free(pdata->gpio_wp);
@@ -2064,14 +2066,10 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
	if (IS_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);
	if (!mmc) {
		ret = -ENOMEM;
		goto err_alloc;
		goto err;
	}

	host		= mmc_priv(mmc);
@@ -2088,6 +2086,10 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
	host->next_data.cookie = 1;
	host->pbias_enabled = 0;

	ret = omap_hsmmc_gpio_init(host, pdata);
	if (ret)
		goto err_gpio;

	platform_set_drvdata(pdev, host);

	if (pdev->dev.of_node)
@@ -2283,9 +2285,9 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
	if (host->dbclk)
		clk_disable_unprepare(host->dbclk);
err1:
	omap_hsmmc_gpio_free(host, pdata);
err_gpio:
	mmc_free_host(mmc);
err_alloc:
	omap_hsmmc_gpio_free(pdata);
err:
	return ret;
}
@@ -2309,7 +2311,7 @@ static int omap_hsmmc_remove(struct platform_device *pdev)
	if (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);

	return 0;