Skip to content

Commit

Permalink
mmc: core: provide macro and table to match the device tree to apply …
Browse files Browse the repository at this point in the history
…quirks

This (initially empty) table allows to match quirks early based
on .compatible of the child node of some mmc/sdio interface.

This allows to add quirks based on device tree instead of having
card specific code in the host ops.

A new macro SDIO_FIXUP_COMPATIBLE makes the definition readable.

And we call mmc_fixup_device(sdio_card_init_methods) just after
where host->ops->init_card() can be optionally called.

Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
Link: https://lore.kernel.org/r/b13fd8b3eebc3c23b6816b254a518c224cbdcfd4.1636564631.git.hns@goldelico.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
  • Loading branch information
goldelico authored and storulf committed Dec 14, 2021
1 parent b360b11 commit 818cd40
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 0 deletions.
15 changes: 15 additions & 0 deletions drivers/mmc/core/card.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,21 @@ struct mmc_fixup {
_vendor, _device, \
_fixup, _data, EXT_CSD_REV_ANY) \

#define SDIO_FIXUP_COMPATIBLE(_compatible, _fixup, _data) \
{ \
.name = CID_NAME_ANY, \
.manfid = CID_MANFID_ANY, \
.oemid = CID_OEMID_ANY, \
.rev_start = 0, \
.rev_end = -1ull, \
.cis_vendor = SDIO_ANY_ID, \
.cis_device = SDIO_ANY_ID, \
.vendor_fixup = (_fixup), \
.data = (_data), \
.ext_csd_rev = EXT_CSD_REV_ANY, \
.of_compatible = _compatible, \
}

#define cid_rev(hwrev, fwrev, year, month) \
(((u64) hwrev) << 40 | \
((u64) fwrev) << 32 | \
Expand Down
4 changes: 4 additions & 0 deletions drivers/mmc/core/quirks.h
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,10 @@ static const struct mmc_fixup __maybe_unused sdio_fixup_methods[] = {
END_FIXUP
};

static const struct mmc_fixup __maybe_unused sdio_card_init_methods[] = {
END_FIXUP
};

static inline bool mmc_fixup_of_compatible_match(struct mmc_card *card,
const char *compatible)
{
Expand Down
1 change: 1 addition & 0 deletions drivers/mmc/core/sdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -707,6 +707,7 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
*/
if (host->ops->init_card)
host->ops->init_card(host, card);
mmc_fixup_device(card, sdio_card_init_methods);

/*
* If the host and card support UHS-I mode request the card
Expand Down

0 comments on commit 818cd40

Please sign in to comment.