summaryrefslogtreecommitdiffstats
path: root/sys/dev/mmc/mmc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/mmc/mmc.c')
-rw-r--r--sys/dev/mmc/mmc.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/dev/mmc/mmc.c b/sys/dev/mmc/mmc.c
index c3f96c9..cc0db3f 100644
--- a/sys/dev/mmc/mmc.c
+++ b/sys/dev/mmc/mmc.c
@@ -86,6 +86,7 @@ struct mmc_ivars {
enum mmc_card_mode mode;
struct mmc_cid cid; /* cid decoded */
struct mmc_csd csd; /* csd decoded */
+ u_char read_only; /* True when the device is read-only */
};
#define CMD_RETRIES 3
@@ -613,7 +614,8 @@ mmc_discover_cards(struct mmc_softc *sc)
mmc_decode_cid(1, ivar->raw_cid, &ivar->cid);
mmc_send_relative_addr(sc, &resp);
ivar->rca = resp >> 16;
- // RO check
+ if (mmcbr_get_ro(sc->dev))
+ ivar->read_only = 1;
mmc_send_csd(sc, ivar->rca, ivar->raw_csd);
mmc_decode_csd(1, ivar->raw_csd, &ivar->csd);
printf("SD CARD: %lld bytes\n", (long long)
@@ -738,6 +740,9 @@ mmc_read_ivar(device_t bus, device_t child, int which, u_char *result)
case MMC_IVAR_TRAN_SPEED:
*(int *)result = ivar->csd.tran_speed;
break;
+ case MMC_IVAR_READ_ONLY:
+ *(int *)result = ivar->read_only;
+ break;
}
return (0);
}
OpenPOWER on IntegriCloud