summaryrefslogtreecommitdiffstats
path: root/drivers/mci
diff options
context:
space:
mode:
authorTrent Piepho <tpiepho@kymetacorp.com>2016-05-31 19:58:56 +0000
committerSascha Hauer <s.hauer@pengutronix.de>2016-06-07 08:06:43 +0200
commitedb96cf3d72920d428cef39a80dffb131d67e696 (patch)
treee1f2fb6e12974d0238147dbcffb1268abc02d3a5 /drivers/mci
parent17f77702e5546021c1a5c55de31d2559c9abae50 (diff)
downloadbarebox-edb96cf3d72920d428cef39a80dffb131d67e696.tar.gz
barebox-edb96cf3d72920d428cef39a80dffb131d67e696.tar.xz
mci: Fix version numbers again
The SD and eMMC version numbers are a pain to print and sort, since they are inconsistent in if a two digit minor version shdoulde be treated as a single number or as minor and micro version numbers. This allows version 1.10 and 4.5 and 4.41, where 41 is less than 5. Signed-off-by: Trent Piepho <tpiepho@kymetacorp.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/mci')
-rw-r--r--drivers/mci/mci-core.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c
index 59f66757d9..42dde06c3c 100644
--- a/drivers/mci/mci-core.c
+++ b/drivers/mci/mci-core.c
@@ -949,14 +949,18 @@ out:
static char *mci_version_string(struct mci *mci)
{
- static char version[sizeof("x.xx")];
- unsigned major, minor;
+ static char version[sizeof("xx.xxx")];
+ unsigned major, minor, micro;
+ int n;
major = (mci->version >> 8) & 0xf;
- minor = mci->version & 0xff;
+ minor = (mci->version >> 4) & 0xf;
+ micro = mci->version & 0xf;
- /* Shift off last digit of minor if it's 0 */
- sprintf(version, "%u.%x", major, minor & 0xf ? minor : minor >> 4);
+ n = sprintf(version, "%u.%u", major, minor);
+ /* Omit zero micro versions */
+ if (micro)
+ sprintf(version + n, "%u", micro);
return version;
}