[PATCH] mtd: export mtd->writebufsize attribute over sysfs
Anatolij Gustschin
agust at denx.de
Fri Feb 11 06:46:29 EST 2011
Also allow to change mtd->writebufsize for MTD ram test
device dynamicaly.
Signed-off-by: Anatolij Gustschin <agust at denx.de>
---
drivers/mtd/mtdcore.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 52 insertions(+), 0 deletions(-)
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index b177e75..282ad41 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -230,12 +230,40 @@ static ssize_t mtd_name_show(struct device *dev,
}
static DEVICE_ATTR(name, S_IRUGO, mtd_name_show, NULL);
+static ssize_t mtd_writebufsize_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct mtd_info *mtd = dev_to_mtd(dev);
+
+ return snprintf(buf, PAGE_SIZE, "%lu\n",
+ (unsigned long)mtd->writebufsize);
+}
+
+static ssize_t mtd_writebufsize_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t size)
+{
+ struct mtd_info *mtd = dev_to_mtd(dev);
+ unsigned long value;
+ int ret;
+
+ ret = strict_strtoul(buf, 0, &value);
+ if (ret < 0)
+ return ret;
+
+ mtd->writebufsize = value;
+ return size;
+}
+static DEVICE_ATTR(writebufsize, S_IRUGO, mtd_writebufsize_show,
+ mtd_writebufsize_store);
+
static struct attribute *mtd_attrs[] = {
&dev_attr_type.attr,
&dev_attr_flags.attr,
&dev_attr_size.attr,
&dev_attr_erasesize.attr,
&dev_attr_writesize.attr,
+ &dev_attr_writebufsize.attr,
&dev_attr_subpagesize.attr,
&dev_attr_oobsize.attr,
&dev_attr_numeraseregions.attr,
@@ -258,6 +286,28 @@ static struct device_type mtd_devtype = {
.release = mtd_release,
};
+/*
+ * Make attributes of the mtdram test device writable.
+ * Useful for testing different UBIFS images.
+ */
+static inline void mtd_fixup_attr(struct mtd_info *mtd)
+{
+ struct attribute *attr = mtd_attrs[0];
+ int i = 0;
+
+ if (mtd->type != MTD_RAM)
+ return;
+
+ for (i = 0; mtd_attrs[i]; i++) {
+ attr = mtd_attrs[i];
+ if (!strcmp(attr->name, "writebufsize")) {
+ sysfs_chmod_file(&mtd->dev.kobj, attr,
+ S_IRUGO | S_IWUSR | S_IWGRP);
+ break;
+ }
+ }
+}
+
/**
* add_mtd_device - register an MTD device
* @mtd: pointer to new MTD device info structure
@@ -339,6 +389,8 @@ int add_mtd_device(struct mtd_info *mtd)
MTD_DEVT(i) + 1,
NULL, "mtd%dro", i);
+ mtd_fixup_attr(mtd);
+
DEBUG(0, "mtd: Giving out device %d to %s\n",i, mtd->name);
/* No need to get a refcount on the module containing
the notifier, since we hold the mtd_table_mutex */
--
1.7.4
More information about the linux-mtd
mailing list