diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c index fc2ac0033..6db1c6db3 100644 --- a/drivers/mtd/core.c +++ b/drivers/mtd/core.c @@ -236,6 +236,7 @@ int mtd_ioctl(struct cdev *cdev, int request, void *buf) user->erasesize = mtd->erasesize; user->writesize = mtd->writesize; user->oobsize = mtd->oobsize; + user->subpagesize = mtd->writesize >> mtd->subpage_sft; user->mtd = mtd; /* The below fields are obsolete */ user->ecctype = -1; diff --git a/fs/devfs-core.c b/fs/devfs-core.c index a92d4347f..44f0169e6 100644 --- a/fs/devfs-core.c +++ b/fs/devfs-core.c @@ -171,6 +171,7 @@ static int partition_ioctl(struct cdev *cdev, int request, void *buf) user->erasesize = cdev->mtd->erasesize; user->writesize = cdev->mtd->writesize; user->oobsize = cdev->mtd->oobsize; + user->subpagesize = cdev->mtd->writesize >> cdev->mtd->subpage_sft; user->mtd = cdev->mtd; /* The below fields are obsolete */ user->ecctype = -1; diff --git a/include/linux/mtd/mtd-abi.h b/include/linux/mtd/mtd-abi.h index fa8e36f13..11d51e274 100644 --- a/include/linux/mtd/mtd-abi.h +++ b/include/linux/mtd/mtd-abi.h @@ -82,6 +82,7 @@ struct mtd_info_user { uint32_t ecctype; uint32_t eccsize; struct mtd_info *mtd; + uint32_t subpagesize; }; struct region_info_user { diff --git a/lib/libmtd.c b/lib/libmtd.c index eecc76054..1606b872f 100644 --- a/lib/libmtd.c +++ b/lib/libmtd.c @@ -308,6 +308,7 @@ int mtd_get_dev_info(const char *node, struct mtd_dev_info *mtd) mtd->eb_size = ui.erasesize; mtd->min_io_size = ui.writesize; mtd->oob_size = ui.oobsize; + mtd->subpage_size = ui.subpagesize; if (mtd->min_io_size <= 0) { errmsg("%s has insane min. I/O unit size %d", @@ -356,7 +357,6 @@ int mtd_get_dev_info(const char *node, struct mtd_dev_info *mtd) if (ui.flags & MTD_WRITEABLE) mtd->writable = 1; - mtd->subpage_size = mtd->min_io_size; close(fd);