linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Daniel Baluta <daniel.baluta@intel.com>
Cc: Joel Becker <jlbec@evilplan.org>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Hartmut Knaack <knaack.h@gmx.de>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"linux-iio@vger.kernel.org" <linux-iio@vger.kernel.org>,
	"octavian.purdila@intel.com" <octavian.purdila@intel.com>,
	Paul Bolle <pebolle@tiscali.nl>,
	patrick.porlan@intel.com, adriana.reus@intel.com,
	constantin.musca@intel.com, marten@intuitiveaerial.com
Subject: Re: [PATCH v4 2/4] iio: core: Introduce IIO configfs support
Date: Sun, 26 Apr 2015 20:39:25 +0100	[thread overview]
Message-ID: <553D3EED.7030108@kernel.org> (raw)
In-Reply-To: <CAEnQRZCa-h9o--2aRXiXHwy9e2xbKENfKk-Xqy9GF5qExud+cg@mail.gmail.com>

On 26/04/15 20:36, Daniel Baluta wrote:
> On Sun, Apr 26, 2015 at 10:26 PM, Jonathan Cameron <jic23@kernel.org> wrote:
>> On 20/04/15 15:02, Daniel Baluta wrote:
>>> This creates an IIO configfs subystem named "iio", with a default "triggers"
>>> group.
>>>
>>> Triggers group is used for handling software triggers. To create a new software
>>> trigger one must create a directory inside the trigger directory.
>>>
>>> Software trigger name MUST follow the following convention:
>>>       * <trigger-type>-<trigger-name>
>>> Where:
>>>       * <trigger_type>, specifies the interrupt source (e.g: hrtimer)
>>>       * <trigger-name>, specifies the IIO device trigger name
>>>
>>> Failing to follow this convention will result in an directory creation error.
>>>
>>> E.g, assuming that hrtimer trigger type is registered with IIO software
>>> trigger core:
>>>
>>> $ mkdir /config/iio/triggers/hrtimer-instance1
>>>
>>> Signed-off-by: Daniel Baluta <daniel.baluta@intel.com>
>> Looks good. Couple of little comments inline.
>>
>> Jonathan
>>> ---
>>>  drivers/iio/Kconfig                 |   8 +++
>>>  drivers/iio/Makefile                |   1 +
>>>  drivers/iio/industrialio-configfs.c | 117 ++++++++++++++++++++++++++++++++++++
>>>  3 files changed, 126 insertions(+)
>>>  create mode 100644 drivers/iio/industrialio-configfs.c
>>>
>>> diff --git a/drivers/iio/Kconfig b/drivers/iio/Kconfig
>>> index de7f1d9..c310156 100644
>>> --- a/drivers/iio/Kconfig
>>> +++ b/drivers/iio/Kconfig
>>> @@ -18,6 +18,14 @@ config IIO_BUFFER
>>>         Provide core support for various buffer based data
>>>         acquisition methods.
>>>
>>> +config IIO_CONFIGFS
>>> +     tristate "Enable IIO configuration via configfs"
>>> +     select CONFIGFS_FS
>>> +     help
>>> +       This allows configuring various IIO bits through configfs
>>> +       (e.g. software triggers). For more info see
>>> +       Documentation/iio/iio_configfs.txt.
>>> +
>>>  if IIO_BUFFER
>>>
>>>  config IIO_BUFFER_CB
>>> diff --git a/drivers/iio/Makefile b/drivers/iio/Makefile
>>> index df87975..31aead3 100644
>>> --- a/drivers/iio/Makefile
>>> +++ b/drivers/iio/Makefile
>>> @@ -10,6 +10,7 @@ industrialio-$(CONFIG_IIO_SW_TRIGGER) += industrialio-sw-trigger.o
>>>  industrialio-$(CONFIG_IIO_BUFFER_CB) += buffer_cb.o
>>>
>>>  obj-$(CONFIG_IIO_TRIGGERED_BUFFER) += industrialio-triggered-buffer.o
>>> +obj-$(CONFIG_IIO_CONFIGFS) += industrialio-configfs.o
>>>  obj-$(CONFIG_IIO_KFIFO_BUF) += kfifo_buf.o
>>>
>>>  obj-y += accel/
>>> diff --git a/drivers/iio/industrialio-configfs.c b/drivers/iio/industrialio-configfs.c
>>> new file mode 100644
>>> index 0000000..0361434
>>> --- /dev/null
>>> +++ b/drivers/iio/industrialio-configfs.c
>>> @@ -0,0 +1,117 @@
>>> +/*
>>> + * Industrial I/O configfs bits
>>> + *
>>> + * Copyright (c) 2015 Intel Corporation
>>> + *
>>> + * This program is free software; you can redistribute it and/or modify it
>>> + * under the terms of the GNU General Public License version 2 as published by
>>> + * the Free Software Foundation.
>>> + */
>>> +
>>> +#include <linux/configfs.h>
>>> +#include <linux/module.h>
>>> +#include <linux/init.h>
>>> +#include <linux/kmod.h>
>>> +#include <linux/slab.h>
>>> +
>>> +#include <linux/iio/iio.h>
>>> +#include <linux/iio/sw_trigger.h>
>>> +
>>> +#define MAX_NAME_LEN 32
>> Strikes me as perhaps a little short given we want to allow 'almost' arbitary names for the triggers.
> 
> We are anyhow, limited by the configfs name len here.
> 
> http://lxr.linux.no/linux+v3.19.1/include/linux/configfs.h#L47
> 
Fair enough. Missed that.
> 
>>> +
>>> +static struct config_group *trigger_make_group(struct config_group *group,
>>> +                                            const char *name)
>>> +{
>>> +     char *type_name;
>>> +     char *trigger_name;
>>> +     char buf[MAX_NAME_LEN];
>>> +     struct iio_sw_trigger *t;
>>> +
>>> +     snprintf(buf, MAX_NAME_LEN, "%s", name);
>>> +
>>> +     /* group name should have the form <trigger-type>-<trigger-name> */
>>> +     type_name = buf;
>>> +     trigger_name = strchr(buf, '-');
>>> +     if (!trigger_name) {
>>> +             pr_err("Unable to locate '-' in %s. Use <type>-<name>.\n", buf);
>>> +             return ERR_PTR(-EINVAL);
>>> +     }
>>> +
>>> +     /* replace - with \0, this nicely separates the two strings */
>>> +     *trigger_name = '\0';
>> Dirty trick, but I like it.
> 
> Me too, I borrowed it from the usb gadget code. :)
> 
>>> +     trigger_name++;
>>> +
>>> +     t = iio_sw_trigger_create(type_name, trigger_name);
>>> +     if (IS_ERR(t))
>>> +             return ERR_CAST(t);
>>> +
>>> +     config_item_set_name(&t->group.cg_item, name);
>>> +
>>> +     return &t->group;
>>> +}
>>> +
>>> +static void trigger_drop_group(struct config_group *group,
>>> +                            struct config_item *item)
>>> +{
>>> +     struct iio_sw_trigger *t = to_iio_sw_trigger(item);
>>> +
>>> +     if (t)
>>> +             iio_sw_trigger_destroy(t);
>>> +     config_item_put(item);
>>> +}
>>> +
>>> +static struct configfs_group_operations triggers_ops = {
>>> +     .make_group     = &trigger_make_group,
>>> +     .drop_item      = &trigger_drop_group,
>>> +};
>>> +
>>> +static struct config_item_type iio_triggers_group_type = {
>>> +     .ct_group_ops = &triggers_ops,
>>> +     .ct_owner       = THIS_MODULE,
>>> +};
>>> +
>>> +static struct config_group iio_triggers_group = {
>>> +     .cg_item = {
>>> +             .ci_namebuf = "triggers",
>>> +             .ci_type = &iio_triggers_group_type,
>>> +     },
>>> +};
>>> +
>>> +static struct config_group *iio_root_default_groups[] = {
>>> +     &iio_triggers_group,
>>> +     NULL
>>> +};
>>> +
>>> +static struct config_item_type iio_root_group_type = {
>>> +     .ct_owner       = THIS_MODULE,
>>> +};
>>> +
>>> +static struct configfs_subsystem iio_configfs_subsys = {
>>> +     .su_group = {
>>> +             .cg_item = {
>>> +                     .ci_namebuf = "iio",
>>> +                     .ci_type = &iio_root_group_type,
>>> +             },
>>> +             .default_groups = iio_root_default_groups,
>>> +     },
>>> +     .su_mutex = __MUTEX_INITIALIZER(iio_configfs_subsys.su_mutex),
>>> +};
>>> +
>>> +static int __init iio_configfs_init(void)
>>> +{
>>> +     config_group_init(&iio_triggers_group);
>>> +     config_group_init(&iio_configfs_subsys.su_group);
>>> +
>>> +     return configfs_register_subsystem(&iio_configfs_subsys);
>>> +}
>>> +module_init(iio_configfs_init);
>>> +
>>> +static void __exit iio_configfs_exit(void)
>>> +{
>>> +     configfs_unregister_subsystem(&iio_configfs_subsys);
>>> +}
>>> +module_exit(iio_configfs_exit);
>>> +
>>> +MODULE_AUTHOR("Daniel Baluta <daniel.baluta@intel.com>");
>>> +MODULE_DESCRIPTION("Industrial I/O configfs support");
>>> +MODULE_LICENSE("GPL v2");
> 
> 
> thanks,
> Daniel.
> 


  reply	other threads:[~2015-04-26 19:39 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-20 14:02 [PATCH v4 0/4] Add initial configfs support for IIO Daniel Baluta
2015-04-20 14:02 ` [PATCH v4 1/4] iio: core: Introduce IIO software triggers Daniel Baluta
2015-04-26 19:21   ` Jonathan Cameron
2015-04-26 19:32     ` Daniel Baluta
2015-04-26 19:38       ` Jonathan Cameron
2015-04-20 14:02 ` [PATCH v4 2/4] iio: core: Introduce IIO configfs support Daniel Baluta
2015-04-26 19:26   ` Jonathan Cameron
2015-04-26 19:36     ` Daniel Baluta
2015-04-26 19:39       ` Jonathan Cameron [this message]
2015-04-20 14:02 ` [PATCH v4 3/4] iio: trigger: Introduce IIO hrtimer based trigger Daniel Baluta
2015-04-26 19:28   ` Jonathan Cameron
2015-04-20 14:02 ` [PATCH v4 4/4] iio: Documentation: Add IIO configfs documentation Daniel Baluta
2015-04-26 19:30   ` Jonathan Cameron
2015-04-26 19:37     ` Daniel Baluta
2015-04-26 19:35 ` [PATCH v4 0/4] Add initial configfs support for IIO Jonathan Cameron
2015-05-03 19:20   ` Jonathan Cameron
2015-05-03 19:22     ` Lars-Peter Clausen
2015-05-04 10:56       ` Daniel Baluta

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=553D3EED.7030108@kernel.org \
    --to=jic23@kernel.org \
    --cc=adriana.reus@intel.com \
    --cc=constantin.musca@intel.com \
    --cc=daniel.baluta@intel.com \
    --cc=jlbec@evilplan.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marten@intuitiveaerial.com \
    --cc=octavian.purdila@intel.com \
    --cc=patrick.porlan@intel.com \
    --cc=pebolle@tiscali.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).