// SPDX-License-Identifier: GPL-2.0-only /* * linux/drivers/mmc/core/bus.c * * Copyright (C) 2003 Russell King, All Rights Reserved. * Copyright (C) 2007 Pierre Ossman * * MMC card bus driver model
*/
switch (card->type) { case MMC_TYPE_MMC:
type = "MMC"; break; case MMC_TYPE_SD:
type = "SD"; break; case MMC_TYPE_SDIO:
type = "SDIO"; break; case MMC_TYPE_SD_COMBO:
type = "SDcombo"; break; default:
type = NULL;
}
if (type) {
retval = add_uevent_var(env, "MMC_TYPE=%s", type); if (retval) return retval;
}
if (mmc_card_sdio(card) || mmc_card_sd_combo(card)) {
retval = add_uevent_var(env, "SDIO_ID=%04X:%04X",
card->cis.vendor, card->cis.device); if (retval) return retval;
retval = add_uevent_var(env, "SDIO_REVISION=%u.%u",
card->major_rev, card->minor_rev); if (retval) return retval;
for (i = 0; i < card->num_info; i++) {
retval = add_uevent_var(env, "SDIO_INFO%u=%s", i+1, card->info[i]); if (retval) return retval;
}
}
/* * SDIO (non-combo) cards are not handled by mmc_block driver and do not * have accessible CID register which used by mmc_card_name() function.
*/ if (mmc_card_sdio(card)) return 0;
retval = add_uevent_var(env, "MMC_NAME=%s", mmc_card_name(card)); if (retval) return retval;
/* * Request the mmc_block device. Note: that this is a direct request * for the module it carries no information as to what is inserted.
*/
retval = add_uevent_var(env, "MODALIAS=mmc:block");
switch (card->type) { case MMC_TYPE_MMC:
type = "MMC"; break; case MMC_TYPE_SD:
type = "SD"; if (mmc_card_blockaddr(card)) { if (mmc_card_ult_capacity(card))
type = "SDUC"; elseif (mmc_card_ext_capacity(card))
type = "SDXC"; else
type = "SDHC";
} break; case MMC_TYPE_SDIO:
type = "SDIO"; break; case MMC_TYPE_SD_COMBO:
type = "SD-combo"; if (mmc_card_blockaddr(card))
type = "SDHC-combo"; break; default:
type = "?"; break;
}
if (mmc_card_uhs(card) &&
(card->sd_bus_speed < ARRAY_SIZE(uhs_speeds)))
uhs_bus_speed_mode = uhs_speeds[card->sd_bus_speed];
if (mmc_host_is_spi(card->host))
pr_info("%s: new %s%s card on SPI\n",
mmc_hostname(card->host), speed_mode, type); else
pr_info("%s: new %s%s%s card at address %04x\n",
mmc_hostname(card->host), speed_mode,
uhs_bus_speed_mode, type, card->rca);
ret = device_add(&card->dev); if (ret) return ret;
mmc_card_set_present(card);
return 0;
}
/* * Unregister a new MMC card with the driver model, and * (eventually) free it.
*/ void mmc_remove_card(struct mmc_card *card)
{ struct mmc_host *host = card->host;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.