diff options
Diffstat (limited to 'drivers/mtd/devices/phram.c')
-rw-r--r-- | drivers/mtd/devices/phram.c | 66 |
1 files changed, 33 insertions, 33 deletions
diff --git a/drivers/mtd/devices/phram.c b/drivers/mtd/devices/phram.c index e1f2aeb..67823de 100644 --- a/drivers/mtd/devices/phram.c +++ b/drivers/mtd/devices/phram.c @@ -94,7 +94,7 @@ static void unregister_devices(void) } } -static int register_device(char *name, phys_addr_t start, size_t len) +static int register_device(char *name, unsigned long start, unsigned long len) { struct phram_mtd_list *new; int ret = -ENOMEM; @@ -141,35 +141,35 @@ out0: return ret; } -static int parse_num64(uint64_t *num64, char *token) +static int ustrtoul(const char *cp, char **endp, unsigned int base) { - size_t len; - int shift = 0; - int ret; - - len = strlen(token); + unsigned long result = simple_strtoul(cp, endp, base); + + switch (**endp) { + case 'G': + result *= 1024; + case 'M': + result *= 1024; + case 'k': + result *= 1024; /* By dwmw2 editorial decree, "ki", "Mi" or "Gi" are to be used. */ - if (len > 2) { - if (token[len - 1] == 'i') { - switch (token[len - 2]) { - case 'G': - shift += 10; - case 'M': - shift += 10; - case 'k': - shift += 10; - token[len - 2] = 0; - break; - default: - return -EINVAL; - } - } + if ((*endp)[1] == 'i') + (*endp) += 2; } + return result; +} - ret = kstrtou64(token, 0, num64); - *num64 <<= shift; +static int parse_num32(uint32_t *num32, const char *token) +{ + char *endp; + unsigned long n; - return ret; + n = ustrtoul(token, &endp, 0); + if (*endp) + return -EINVAL; + + *num32 = n; + return 0; } static int parse_name(char **pname, const char *token) @@ -209,19 +209,19 @@ static inline void kill_final_newline(char *str) * This shall contain the module parameter if any. It is of the form: * - phram=<device>,<address>,<size> for module case * - phram.phram=<device>,<address>,<size> for built-in case - * We leave 64 bytes for the device name, 20 for the address and 20 for the + * We leave 64 bytes for the device name, 12 for the address and 12 for the * size. * Example: phram.phram=rootfs,0xa0000000,512Mi */ -static __initdata char phram_paramline[64 + 20 + 20]; +static __initdata char phram_paramline[64+12+12]; static int __init phram_setup(const char *val) { - char buf[64 + 20 + 20], *str = buf; + char buf[64+12+12], *str = buf; char *token[3]; char *name; - uint64_t start; - uint64_t len; + uint32_t start; + uint32_t len; int i, ret; if (strnlen(val, sizeof(buf)) >= sizeof(buf)) @@ -243,13 +243,13 @@ static int __init phram_setup(const char *val) if (ret) return ret; - ret = parse_num64(&start, token[1]); + ret = parse_num32(&start, token[1]); if (ret) { kfree(name); parse_err("illegal start address\n"); } - ret = parse_num64(&len, token[2]); + ret = parse_num32(&len, token[2]); if (ret) { kfree(name); parse_err("illegal device length\n"); @@ -257,7 +257,7 @@ static int __init phram_setup(const char *val) ret = register_device(name, start, len); if (!ret) - pr_info("%s device: %#llx at %#llx\n", name, len, start); + pr_info("%s device: %#x at %#x\n", name, len, start); else kfree(name); |