mmc: tmio: move mmc_host_ops to struct tmio_mmc_host from static data
Currently, tmio_mmc_ops is static data and tmio_mmc_host_probe() updates some hooks in the static data. This is a problem when two or more instances call tmio_mmc_host_probe() and each of them requests to use its own card_busy/start_signal_voltage_switch. We can borrow a solution from sdhci_alloc_host(). Copy the whole ops structure to host->mmc_host_ops, then override the hooks in malloc'ed data. Constify tmio_mmc_ops since it is now a template ops used by default. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
4139696b79
commit
c055fc75c1
|
@ -134,6 +134,7 @@ struct tmio_mmc_host {
|
||||||
struct mmc_request *mrq;
|
struct mmc_request *mrq;
|
||||||
struct mmc_data *data;
|
struct mmc_data *data;
|
||||||
struct mmc_host *mmc;
|
struct mmc_host *mmc;
|
||||||
|
struct mmc_host_ops ops;
|
||||||
|
|
||||||
/* Callbacks for clock / power control */
|
/* Callbacks for clock / power control */
|
||||||
void (*set_pwr)(struct platform_device *host, int state);
|
void (*set_pwr)(struct platform_device *host, int state);
|
||||||
|
|
|
@ -1098,7 +1098,7 @@ static int tmio_multi_io_quirk(struct mmc_card *card,
|
||||||
return blk_size;
|
return blk_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct mmc_host_ops tmio_mmc_ops = {
|
static const struct mmc_host_ops tmio_mmc_ops = {
|
||||||
.request = tmio_mmc_request,
|
.request = tmio_mmc_request,
|
||||||
.set_ios = tmio_mmc_set_ios,
|
.set_ios = tmio_mmc_set_ios,
|
||||||
.get_ro = tmio_mmc_get_ro,
|
.get_ro = tmio_mmc_get_ro,
|
||||||
|
@ -1158,6 +1158,8 @@ tmio_mmc_host_alloc(struct platform_device *pdev)
|
||||||
host = mmc_priv(mmc);
|
host = mmc_priv(mmc);
|
||||||
host->mmc = mmc;
|
host->mmc = mmc;
|
||||||
host->pdev = pdev;
|
host->pdev = pdev;
|
||||||
|
host->ops = tmio_mmc_ops;
|
||||||
|
mmc->ops = &host->ops;
|
||||||
|
|
||||||
return host;
|
return host;
|
||||||
}
|
}
|
||||||
|
@ -1203,10 +1205,9 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host,
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
tmio_mmc_ops.card_busy = _host->card_busy;
|
_host->ops.card_busy = _host->card_busy;
|
||||||
tmio_mmc_ops.start_signal_voltage_switch =
|
_host->ops.start_signal_voltage_switch =
|
||||||
_host->start_signal_voltage_switch;
|
_host->start_signal_voltage_switch;
|
||||||
mmc->ops = &tmio_mmc_ops;
|
|
||||||
|
|
||||||
mmc->caps |= MMC_CAP_4_BIT_DATA | pdata->capabilities;
|
mmc->caps |= MMC_CAP_4_BIT_DATA | pdata->capabilities;
|
||||||
mmc->caps2 |= pdata->capabilities2;
|
mmc->caps2 |= pdata->capabilities2;
|
||||||
|
|
Loading…
Reference in New Issue