From 865bab03473465ef67c069fc9209911cb6faf367 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Mon, 28 Oct 2013 12:41:58 +0100 Subject: [PATCH 1/3] mtd: raw: rename raw device The name of the raw device is mtdraw which is inconsistent to other mtd devices which are named mtd.. Rename it to mtd.raw. Signed-off-by: Sascha Hauer --- arch/arm/boards/mioa701/env/bin/barebox_update | 8 ++++---- arch/arm/boards/mioa701/env/bin/dps1_update | 6 +++--- drivers/mtd/mtdraw.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/arch/arm/boards/mioa701/env/bin/barebox_update b/arch/arm/boards/mioa701/env/bin/barebox_update index b544563be..10237709c 100644 --- a/arch/arm/boards/mioa701/env/bin/barebox_update +++ b/arch/arm/boards/mioa701/env/bin/barebox_update @@ -1,10 +1,10 @@ #!/bin/sh # Page+OOB specific partitions -addpart /dev/mtdraw0 1081344@3649536(msipl) -addpart /dev/mtdraw0 270336@3649536(barebox) +addpart /dev/mtd0.raw 1081344@3649536(msipl) +addpart /dev/mtd0.raw 270336@3649536(barebox) if [ -r /barebox.BIP0 ]; then - erase /dev/mtdraw0.barebox - cp -v /barebox.BIP0 /dev/mtdraw0.barebox + erase /dev/mtd0.raw.barebox + cp -v /barebox.BIP0 /dev/mtd0.raw.barebox fi diff --git a/arch/arm/boards/mioa701/env/bin/dps1_update b/arch/arm/boards/mioa701/env/bin/dps1_update index a9d72da89..e6535eda7 100644 --- a/arch/arm/boards/mioa701/env/bin/dps1_update +++ b/arch/arm/boards/mioa701/env/bin/dps1_update @@ -1,12 +1,12 @@ #!/bin/sh # Page+OOB specific partitions -addpart /dev/mtdraw0 67584@202752(dps1) +addpart /dev/mtd0.raw 67584@202752(dps1) uncompress /env/data/dps1.raw.gz /dps1.raw if [ -r /dps1.raw ]; then dps1_unlock - erase /dev/mtdraw0.dps1 - cp -v /dps1.raw /dev/mtdraw0.dps1 + erase /dev/mtd0.raw.dps1 + cp -v /dps1.raw /dev/mtd0.raw.dps1 dps1_unlock fi diff --git a/drivers/mtd/mtdraw.c b/drivers/mtd/mtdraw.c index 1a4711e7d..2acd51f70 100644 --- a/drivers/mtd/mtdraw.c +++ b/drivers/mtd/mtdraw.c @@ -293,7 +293,7 @@ static int add_mtdraw_device(struct mtd_info *mtd, char *devname, void **priv) mtdraw->cdev.ops = (struct file_operations *)&mtd_raw_fops; mtdraw->cdev.size = mtd->size / mtd->writesize * (mtd->writesize + mtd->oobsize); - mtdraw->cdev.name = asprintf("%sraw%d", devname, mtd->class_dev.id); + mtdraw->cdev.name = asprintf("%s.raw", mtd->cdev.name); mtdraw->cdev.priv = mtdraw; mtdraw->cdev.dev = &mtd->class_dev; mtdraw->cdev.mtd = mtd; From d317b1bf8500dc67adfb5903119fef28adb4b4c1 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Mon, 28 Oct 2013 12:45:56 +0100 Subject: [PATCH 2/3] mtd: Pass device_id to add_mtd_device Right now we do not support persistent names for mtd devices. The base name can be passed to add_mtd_device, but this is always appended with a dynamic number. With this patch add_mtd_device takes a device_id argument which can be used to create a mtd device with an exact name. Signed-off-by: Sascha Hauer --- drivers/mtd/core.c | 10 +++++++--- drivers/mtd/devices/docg3.c | 2 +- drivers/mtd/devices/m25p80.c | 4 +--- drivers/mtd/devices/mtd_dataflash.c | 2 +- drivers/mtd/nand/nand_base.c | 2 +- drivers/mtd/nor/cfi_flash.c | 2 +- include/linux/mtd/mtd.h | 2 +- 7 files changed, 13 insertions(+), 11 deletions(-) diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c index 70036aaa5..f63b10e9c 100644 --- a/drivers/mtd/core.c +++ b/drivers/mtd/core.c @@ -359,21 +359,25 @@ static struct file_operations mtd_ops = { .lseek = dev_lseek_default, }; -int add_mtd_device(struct mtd_info *mtd, char *devname) +int add_mtd_device(struct mtd_info *mtd, char *devname, int device_id) { struct mtddev_hook *hook; if (!devname) devname = "mtd"; strcpy(mtd->class_dev.name, devname); - mtd->class_dev.id = DEVICE_ID_DYNAMIC; + mtd->class_dev.id = device_id; if (mtd->parent) mtd->class_dev.parent = mtd->parent; register_device(&mtd->class_dev); mtd->cdev.ops = &mtd_ops; mtd->cdev.size = mtd->size; - mtd->cdev.name = asprintf("%s%d", devname, mtd->class_dev.id); + if (device_id == DEVICE_ID_SINGLE) + mtd->cdev.name = xstrdup(devname); + else + mtd->cdev.name = asprintf("%s%d", devname, mtd->class_dev.id); + mtd->cdev.priv = mtd; mtd->cdev.dev = &mtd->class_dev; mtd->cdev.mtd = mtd; diff --git a/drivers/mtd/devices/docg3.c b/drivers/mtd/devices/docg3.c index e15c80952..9ae606b3d 100644 --- a/drivers/mtd/devices/docg3.c +++ b/drivers/mtd/devices/docg3.c @@ -1173,7 +1173,7 @@ static int __init docg3_probe(struct device_d *dev) } docg3_floors[floor] = mtd; mtd->parent = dev; - ret = add_mtd_device(mtd, NULL); + ret = add_mtd_device(mtd, NULL, DEVICE_ID_DYNAMIC); if (ret) goto err_probe; found++; diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c index 57fe1f27e..429ddf6f0 100644 --- a/drivers/mtd/devices/m25p80.c +++ b/drivers/mtd/devices/m25p80.c @@ -942,9 +942,7 @@ static int m25p_probe(struct device_d *dev) flash->mtd.eraseregions[i].erasesize / 1024, flash->mtd.eraseregions[i].numblocks); - - - return add_mtd_device(&flash->mtd, flash->mtd.name); + return add_mtd_device(&flash->mtd, flash->mtd.name, DEVICE_ID_DYNAMIC); } static __maybe_unused struct of_device_id m25p80_dt_ids[] = { diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c index 52bd84266..d785e33da 100644 --- a/drivers/mtd/devices/mtd_dataflash.c +++ b/drivers/mtd/devices/mtd_dataflash.c @@ -643,7 +643,7 @@ add_dataflash_otp(struct spi_device *spi, char *name, name, (long long)((device->size + 1023) >> 10), pagesize, otp_tag); - err = add_mtd_device(device, device->name); + err = add_mtd_device(device, device->name, DEVICE_ID_DYNAMIC); if (!err) return 0; diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index c252a2a2d..d2495651b 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c @@ -3687,7 +3687,7 @@ int add_mtd_nand_device(struct mtd_info *mtd, char *devname) { int ret; - ret = add_mtd_device(mtd, devname); + ret = add_mtd_device(mtd, devname, DEVICE_ID_DYNAMIC); if (ret) return ret; diff --git a/drivers/mtd/nor/cfi_flash.c b/drivers/mtd/nor/cfi_flash.c index 51fc6bc89..71dd3c86c 100644 --- a/drivers/mtd/nor/cfi_flash.c +++ b/drivers/mtd/nor/cfi_flash.c @@ -965,7 +965,7 @@ static void cfi_init_mtd(struct flash_info *info) mtd->type = MTD_NORFLASH; mtd->parent = info->dev; - add_mtd_device(mtd, "nor"); + add_mtd_device(mtd, "nor", DEVICE_ID_DYNAMIC); } static int cfi_probe (struct device_d *dev) diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index ed8722ea9..1735b4987 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h @@ -254,7 +254,7 @@ static inline uint32_t mtd_mod_by_eb(uint64_t sz, struct mtd_info *mtd) } /* Kernel-side ioctl definitions */ -extern int add_mtd_device(struct mtd_info *mtd, char *devname); +extern int add_mtd_device(struct mtd_info *mtd, char *devname, int device_id); extern int del_mtd_device (struct mtd_info *mtd); extern struct mtd_info *get_mtd_device(struct mtd_info *mtd, int num); From 5f0bd3edc277bd2a435d60d1d36ea60738bc9c92 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Mon, 28 Oct 2013 12:56:02 +0100 Subject: [PATCH 3/3] mtd: m25p80: Allow to specify devicename via devicetree alias Signed-off-by: Sascha Hauer --- drivers/mtd/devices/m25p80.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c index 429ddf6f0..1e3bc936f 100644 --- a/drivers/mtd/devices/m25p80.c +++ b/drivers/mtd/devices/m25p80.c @@ -808,6 +808,8 @@ static int m25p_probe(struct device_d *dev) struct flash_info *info = NULL; unsigned i; unsigned do_jdec_probe = 1; + char *flashname = NULL; + int device_id; /* Platform data helps sort out which chip type we have, as * well as how this board partitions it. If we don't have @@ -876,10 +878,19 @@ static int m25p_probe(struct device_d *dev) write_sr(flash, 0); } - if (data && data->name) - flash->mtd.name = data->name; - else - flash->mtd.name = "m25p"; + device_id = DEVICE_ID_SINGLE; + if (dev->device_node) { + const char *alias = of_alias_get(dev->device_node); + if (alias) + flashname = xstrdup(alias); + } else if (data && data->name) { + flashname = data->name; + } + + if (!flashname) { + device_id = DEVICE_ID_DYNAMIC; + flashname = "m25p"; + } flash->mtd.type = MTD_NORFLASH; flash->mtd.writesize = 1; @@ -942,7 +953,7 @@ static int m25p_probe(struct device_d *dev) flash->mtd.eraseregions[i].erasesize / 1024, flash->mtd.eraseregions[i].numblocks); - return add_mtd_device(&flash->mtd, flash->mtd.name, DEVICE_ID_DYNAMIC); + return add_mtd_device(&flash->mtd, flashname, device_id); } static __maybe_unused struct of_device_id m25p80_dt_ids[] = {