lkml.org 
[lkml]   [2012]   [Jul]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH RESEND v4 1/2] mmc: card: Move MMC specific attributes to mmc sub-directory
    From
    Hi all,

    Do you have additional comments on this patch?

    Thanks,
    Maya

    On Sat, July 14, 2012 11:46 am, Maya Erez wrote:
    > Separate MMC specific attributes from general block device
    > attributes and move them from the /sys/block/<BLOCK_DEV> directory
    > to /sys/block/<BLOCK_DEV>/mmc directory
    >
    > Signed-off-by: Maya Erez <merez@codeaurora.org>
    > ---
    > drivers/mmc/card/block.c | 71
    > +++++++++++++++++++++++++++++++++++++++++----
    > 1 files changed, 64 insertions(+), 7 deletions(-)
    >
    > diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
    > index 4ba0f09..2b8ad9e 100644
    > --- a/drivers/mmc/card/block.c
    > +++ b/drivers/mmc/card/block.c
    > @@ -114,6 +114,9 @@ struct mmc_blk_data {
    > struct device_attribute force_ro;
    > struct device_attribute power_ro_lock;
    > int area_type;
    > +
    > + struct kobject kobj;
    > + struct kobj_type kobj_type;
    > };
    >
    > static DEFINE_MUTEX(open_lock);
    > @@ -185,6 +188,51 @@ static void mmc_blk_put(struct mmc_blk_data *md)
    > mutex_unlock(&open_lock);
    > }
    >
    > +static ssize_t mmc_blk_attr_show(struct kobject *kobj, struct attribute
    > *attr,
    > + char *buf)
    > +{
    > + struct device_attribute *dev_attr;
    > + struct mmc_blk_data *md;
    > + ssize_t ret;
    > +
    > + dev_attr = container_of(attr, struct device_attribute, attr);
    > + if (!dev_attr->show)
    > + return -EIO;
    > +
    > + md = container_of(kobj, struct mmc_blk_data, kobj);
    > + if (!md || &md->kobj != kobj)
    > + return -EINVAL;
    > +
    > + ret = dev_attr->show(disk_to_dev(md->disk), dev_attr, buf);
    > +
    > + return ret;
    > +}
    > +
    > +static ssize_t mmc_blk_attr_store(struct kobject *kobj, struct attribute
    > *attr,
    > + const char *buf, size_t count)
    > +{
    > + struct device_attribute *dev_attr;
    > + struct mmc_blk_data *md;
    > + ssize_t ret;
    > +
    > + dev_attr = container_of(attr, struct device_attribute, attr);
    > + if (!dev_attr->store)
    > + return -EIO;
    > +
    > + md = container_of(kobj, struct mmc_blk_data, kobj);
    > + if (!md || &md->kobj != kobj)
    > + return -EINVAL;
    > +
    > + ret = dev_attr->store(disk_to_dev(md->disk), dev_attr, buf, count);
    > +
    > + return ret;
    > +}
    > +
    > +static const struct sysfs_ops mmc_blk_sysfs_ops = {
    > + .show = mmc_blk_attr_show,
    > + .store = mmc_blk_attr_store,
    > +};
    > +
    > static ssize_t power_ro_lock_show(struct device *dev,
    > struct device_attribute *attr, char *buf)
    > {
    > @@ -1999,14 +2047,15 @@ static void mmc_blk_remove_req(struct mmc_blk_data
    > *md)
    > if (md) {
    > card = md->queue.card;
    > if (md->disk->flags & GENHD_FL_UP) {
    > - device_remove_file(disk_to_dev(md->disk), &md->force_ro);
    > + sysfs_remove_file(&md->kobj, &md->force_ro.attr);
    > if ((md->area_type & MMC_BLK_DATA_AREA_BOOT) &&
    > card->ext_csd.boot_ro_lockable)
    > - device_remove_file(disk_to_dev(md->disk),
    > - &md->power_ro_lock);
    > + sysfs_remove_file(&md->kobj,
    > + &md->power_ro_lock.attr);
    >
    > /* Stop new requests from getting into the queue */
    > del_gendisk(md->disk);
    > + kobject_put(&md->kobj);
    > }
    >
    > /* Then flush out any already in there */
    > @@ -2035,12 +2084,19 @@ static int mmc_add_disk(struct mmc_blk_data *md)
    > struct mmc_card *card = md->queue.card;
    >
    > add_disk(md->disk);
    > +
    > + md->kobj_type.sysfs_ops = &mmc_blk_sysfs_ops;
    > + ret = kobject_init_and_add(&md->kobj, &md->kobj_type,
    > + &disk_to_dev(md->disk)->kobj, "%s", "mmc");
    > + if (ret)
    > + goto init_kobj_fail;
    > +
    > md->force_ro.show = force_ro_show;
    > md->force_ro.store = force_ro_store;
    > sysfs_attr_init(&md->force_ro.attr);
    > md->force_ro.attr.name = "force_ro";
    > md->force_ro.attr.mode = S_IRUGO | S_IWUSR;
    > - ret = device_create_file(disk_to_dev(md->disk), &md->force_ro);
    > + ret = sysfs_create_file(&md->kobj, &md->force_ro.attr);
    > if (ret)
    > goto force_ro_fail;
    >
    > @@ -2059,16 +2115,17 @@ static int mmc_add_disk(struct mmc_blk_data *md)
    > md->power_ro_lock.attr.mode = mode;
    > md->power_ro_lock.attr.name =
    > "ro_lock_until_next_power_on";
    > - ret = device_create_file(disk_to_dev(md->disk),
    > - &md->power_ro_lock);
    > + ret = sysfs_create_file(&md->kobj, &md->power_ro_lock.attr);
    > if (ret)
    > goto power_ro_lock_fail;
    > }
    > return ret;
    >
    > power_ro_lock_fail:
    > - device_remove_file(disk_to_dev(md->disk), &md->force_ro);
    > + sysfs_remove_file(&md->kobj, &md->force_ro.attr);
    > force_ro_fail:
    > + kobject_put(&md->kobj);
    > +init_kobj_fail:
    > del_gendisk(md->disk);
    >
    > return ret;
    > --
    > 1.7.3.3
    > --
    > Sent by a consultant of the Qualcomm Innovation Center, Inc.
    > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
    >


    --
    Sent by consultant of Qualcomm Innovation Center, Inc.
    Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum



    \
     
     \ /
      Last update: 2012-07-14 21:21    [W:0.051 / U:0.368 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site