aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/mmc_sysfs.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/drivers/mmc/mmc_sysfs.c b/drivers/mmc/mmc_sysfs.c
index 9e23ad3ae27b..3f4a66ca9555 100644
--- a/drivers/mmc/mmc_sysfs.c
+++ b/drivers/mmc/mmc_sysfs.c
@@ -48,7 +48,6 @@ MMC_ATTR(serial, "0x%08x\n", card->cid.serial);
48static struct device_attribute mmc_dev_attrs[] = { 48static struct device_attribute mmc_dev_attrs[] = {
49 MMC_ATTR_RO(cid), 49 MMC_ATTR_RO(cid),
50 MMC_ATTR_RO(csd), 50 MMC_ATTR_RO(csd),
51 MMC_ATTR_RO(scr),
52 MMC_ATTR_RO(date), 51 MMC_ATTR_RO(date),
53 MMC_ATTR_RO(fwrev), 52 MMC_ATTR_RO(fwrev),
54 MMC_ATTR_RO(hwrev), 53 MMC_ATTR_RO(hwrev),
@@ -59,6 +58,8 @@ static struct device_attribute mmc_dev_attrs[] = {
59 __ATTR_NULL 58 __ATTR_NULL
60}; 59};
61 60
61static struct device_attribute mmc_dev_attr_scr = MMC_ATTR_RO(scr);
62
62 63
63static void mmc_release_card(struct device *dev) 64static void mmc_release_card(struct device *dev)
64{ 65{
@@ -209,10 +210,20 @@ void mmc_init_card(struct mmc_card *card, struct mmc_host *host)
209 */ 210 */
210int mmc_register_card(struct mmc_card *card) 211int mmc_register_card(struct mmc_card *card)
211{ 212{
213 int ret;
214
212 snprintf(card->dev.bus_id, sizeof(card->dev.bus_id), 215 snprintf(card->dev.bus_id, sizeof(card->dev.bus_id),
213 "%s:%04x", mmc_hostname(card->host), card->rca); 216 "%s:%04x", mmc_hostname(card->host), card->rca);
214 217
215 return device_add(&card->dev); 218 ret = device_add(&card->dev);
219 if (ret == 0) {
220 if (mmc_card_sd(card)) {
221 ret = device_create_file(&card->dev, &mmc_dev_attr_scr);
222 if (ret)
223 device_del(&card->dev);
224 }
225 }
226 return ret;
216} 227}
217 228
218/* 229/*
@@ -221,8 +232,12 @@ int mmc_register_card(struct mmc_card *card)
221 */ 232 */
222void mmc_remove_card(struct mmc_card *card) 233void mmc_remove_card(struct mmc_card *card)
223{ 234{
224 if (mmc_card_present(card)) 235 if (mmc_card_present(card)) {
236 if (mmc_card_sd(card))
237 device_remove_file(&card->dev, &mmc_dev_attr_scr);
238
225 device_del(&card->dev); 239 device_del(&card->dev);
240 }
226 241
227 put_device(&card->dev); 242 put_device(&card->dev);
228} 243}