aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mtd/devices/block2mtd.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c
index 4160b8334c53..f54e4bf9b968 100644
--- a/drivers/mtd/devices/block2mtd.c
+++ b/drivers/mtd/devices/block2mtd.c
@@ -4,7 +4,7 @@
4 * block2mtd.c - create an mtd from a block device 4 * block2mtd.c - create an mtd from a block device
5 * 5 *
6 * Copyright (C) 2001,2002 Simon Evans <spse@secret.org.uk> 6 * Copyright (C) 2001,2002 Simon Evans <spse@secret.org.uk>
7 * Copyright (C) 2004,2005 Jörn Engel <joern@wh.fh-wedel.de> 7 * Copyright (C) 2004-2006 Jörn Engel <joern@wh.fh-wedel.de>
8 * 8 *
9 * Licence: GPL 9 * Licence: GPL
10 */ 10 */
@@ -351,6 +351,12 @@ devinit_err:
351} 351}
352 352
353 353
354/* This function works similar to reguler strtoul. In addition, it
355 * allows some suffixes for a more human-readable number format:
356 * ki, Ki, kiB, KiB - multiply result with 1024
357 * Mi, MiB - multiply result with 1024^2
358 * Gi, GiB - multiply result with 1024^3
359 */
354static int ustrtoul(const char *cp, char **endp, unsigned int base) 360static int ustrtoul(const char *cp, char **endp, unsigned int base)
355{ 361{
356 unsigned long result = simple_strtoul(cp, endp, base); 362 unsigned long result = simple_strtoul(cp, endp, base);
@@ -359,11 +365,16 @@ static int ustrtoul(const char *cp, char **endp, unsigned int base)
359 result *= 1024; 365 result *= 1024;
360 case 'M': 366 case 'M':
361 result *= 1024; 367 result *= 1024;
368 case 'K':
362 case 'k': 369 case 'k':
363 result *= 1024; 370 result *= 1024;
364 /* By dwmw2 editorial decree, "ki", "Mi" or "Gi" are to be used. */ 371 /* By dwmw2 editorial decree, "ki", "Mi" or "Gi" are to be used. */
365 if ((*endp)[1] == 'i') 372 if ((*endp)[1] == 'i') {
366 (*endp) += 2; 373 if ((*endp)[2] == 'B')
374 (*endp) += 3;
375 else
376 (*endp) += 2;
377 }
367 } 378 }
368 return result; 379 return result;
369} 380}