From: Jonathan Cameron <jic23@kernel.org>
To: Hartmut Knaack <knaack.h@gmx.de>,
Daniel Baluta <daniel.baluta@intel.com>
Cc: irina.tirdea@intel.com, linux-iio@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH v2 1/7] iio: dummy: Add virtual registers for dummy device
Date: Sat, 25 Oct 2014 20:56:34 +0100 [thread overview]
Message-ID: <544C0072.1000709@kernel.org> (raw)
In-Reply-To: <544BFEDE.7050604@gmx.de>
HOn 25/10/14 20:49, Hartmut Knaack wrote:
> Jonathan Cameron schrieb am 25.10.2014 20:55:
>> On 09/10/14 13:39, Daniel Baluta wrote:
>>> We need a way to store events generated by iio_dummy_evgen module,
>>> in order to correctly process IRQs in iio_simple_dummy_events.
>>>
>>> For the moment, we add two registers:
>>>
>>> * id_reg - ID register, stores the source of the event
>>> * id_data - DATA register, stores the type of the event
>>>
>>> e.g echo 4 > /sys/bus/iio/devices/iio_evgen/poke2
>>>
>>> id_reg 0x02, id_data 0x04
>>>
>>> This means, event of type 4 was generated by fake device 2.
>>>
>>> We currently use a hardcoded mapping of virtual events to IIO events.
>>>
>>> Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
>>> Signed-off-by: Daniel Baluta <daniel.baluta@intel.com>
>> Applied to the togreg branch of iio.git.
>> Initially pushed out as testing for the autobuilders to play with it.
> I think Daniel wanted to work on a V3 for (at least) this one, fixing variable type of ret from long to int in iio_evgen_poke(). Had spotted it in V1, when V2 was already sent out - sorry for that. See [1].
>
> [1] http://marc.info/?l=linux-iio&m=141375116229102&w=2
Backed out. Thanks for letting me know.
>
>>> ---
>>> drivers/staging/iio/iio_dummy_evgen.c | 16 ++++++++++++++++
>>> drivers/staging/iio/iio_dummy_evgen.h | 6 ++++++
>>> drivers/staging/iio/iio_simple_dummy.h | 2 ++
>>> drivers/staging/iio/iio_simple_dummy_events.c | 23 ++++++++++++++++++-----
>>> 4 files changed, 42 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/drivers/staging/iio/iio_dummy_evgen.c b/drivers/staging/iio/iio_dummy_evgen.c
>>> index 5a804f1..d44f138 100644
>>> --- a/drivers/staging/iio/iio_dummy_evgen.c
>>> +++ b/drivers/staging/iio/iio_dummy_evgen.c
>>> @@ -33,6 +33,7 @@
>>> * @base: base of irq range
>>> * @enabled: mask of which irqs are enabled
>>> * @inuse: mask of which irqs are connected
>>> + * @regs: irq regs we are faking
>>> * @lock: protect the evgen state
>>> */
>>> struct iio_dummy_eventgen {
>>> @@ -40,6 +41,7 @@ struct iio_dummy_eventgen {
>>> int base;
>>> bool enabled[IIO_EVENTGEN_NO];
>>> bool inuse[IIO_EVENTGEN_NO];
>>> + struct iio_dummy_regs regs[IIO_EVENTGEN_NO];
>>> struct mutex lock;
>>> };
>>>
>>> @@ -136,6 +138,12 @@ int iio_dummy_evgen_release_irq(int irq)
>>> }
>>> EXPORT_SYMBOL_GPL(iio_dummy_evgen_release_irq);
>>>
>>> +struct iio_dummy_regs *iio_dummy_evgen_get_regs(int irq)
>>> +{
>>> + return &iio_evgen->regs[irq - iio_evgen->base];
>>> +}
>>> +EXPORT_SYMBOL_GPL(iio_dummy_evgen_get_regs);
>>> +
>>> static void iio_dummy_evgen_free(void)
>>> {
>>> irq_free_descs(iio_evgen->base, IIO_EVENTGEN_NO);
>>> @@ -153,6 +161,14 @@ static ssize_t iio_evgen_poke(struct device *dev,
>>> size_t len)
>>> {
>>> struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
>>> + unsigned long event, ret;
>>> +
>>> + ret = kstrtoul(buf, 10, &event);
>>> + if (ret)
>>> + return ret;
>>> +
>>> + iio_evgen->regs[this_attr->address].reg_id = this_attr->address;
>>> + iio_evgen->regs[this_attr->address].reg_data = event;
>>>
>>> if (iio_evgen->enabled[this_attr->address])
>>> handle_nested_irq(iio_evgen->base + this_attr->address);
>>> diff --git a/drivers/staging/iio/iio_dummy_evgen.h b/drivers/staging/iio/iio_dummy_evgen.h
>>> index d8845e2..3ef3a1c 100644
>>> --- a/drivers/staging/iio/iio_dummy_evgen.h
>>> +++ b/drivers/staging/iio/iio_dummy_evgen.h
>>> @@ -1,2 +1,8 @@
>>> +struct iio_dummy_regs {
>>> + u32 reg_id;
>>> + u32 reg_data;
>>> +};
>>> +
>>> +struct iio_dummy_regs *iio_dummy_evgen_get_regs(int irq);
>>> int iio_dummy_evgen_get_irq(void);
>>> int iio_dummy_evgen_release_irq(int irq);
>>> diff --git a/drivers/staging/iio/iio_simple_dummy.h b/drivers/staging/iio/iio_simple_dummy.h
>>> index b126196..1a74e26 100644
>>> --- a/drivers/staging/iio/iio_simple_dummy.h
>>> +++ b/drivers/staging/iio/iio_simple_dummy.h
>>> @@ -11,6 +11,7 @@
>>> #include <linux/kernel.h>
>>>
>>> struct iio_dummy_accel_calibscale;
>>> +struct iio_dummy_regs;
>>>
>>> /**
>>> * struct iio_dummy_state - device instance specific state.
>>> @@ -33,6 +34,7 @@ struct iio_dummy_state {
>>> int accel_calibbias;
>>> const struct iio_dummy_accel_calibscale *accel_calibscale;
>>> struct mutex lock;
>>> + struct iio_dummy_regs *regs;
>>> #ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
>>> int event_irq;
>>> int event_val;
>>> diff --git a/drivers/staging/iio/iio_simple_dummy_events.c b/drivers/staging/iio/iio_simple_dummy_events.c
>>> index 64b45b0..719dfa5 100644
>>> --- a/drivers/staging/iio/iio_simple_dummy_events.c
>>> +++ b/drivers/staging/iio/iio_simple_dummy_events.c
>>> @@ -148,12 +148,23 @@ int iio_simple_dummy_write_event_value(struct iio_dev *indio_dev,
>>> static irqreturn_t iio_simple_dummy_event_handler(int irq, void *private)
>>> {
>>> struct iio_dev *indio_dev = private;
>>> + struct iio_dummy_state *st = iio_priv(indio_dev);
>>> +
>>> + dev_dbg(&indio_dev->dev, "id %x event %x\n",
>>> + st->regs->reg_id, st->regs->reg_data);
>>> +
>>> + switch (st->regs->reg_data) {
>>> + case 0:
>>> + iio_push_event(indio_dev,
>>> + IIO_EVENT_CODE(IIO_VOLTAGE, 0, 0,
>>> + IIO_EV_DIR_RISING,
>>> + IIO_EV_TYPE_THRESH, 0, 0, 0),
>>> + iio_get_time_ns());
>>> + break;
>>> + default:
>>> + break;
>>> + }
>>>
>>> - iio_push_event(indio_dev,
>>> - IIO_EVENT_CODE(IIO_VOLTAGE, 0, 0,
>>> - IIO_EV_DIR_RISING,
>>> - IIO_EV_TYPE_THRESH, 0, 0, 0),
>>> - iio_get_time_ns());
>>> return IRQ_HANDLED;
>>> }
>>>
>>> @@ -179,6 +190,8 @@ int iio_simple_dummy_events_register(struct iio_dev *indio_dev)
>>> ret = st->event_irq;
>>> goto error_ret;
>>> }
>>> + st->regs = iio_dummy_evgen_get_regs(st->event_irq);
>>> +
>>> ret = request_threaded_irq(st->event_irq,
>>> NULL,
>>> &iio_simple_dummy_event_handler,
>>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>
next prev parent reply other threads:[~2014-10-25 19:56 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-09 12:39 [RFC PATCH v2 0/7] Introduce IIO interface for Android advanced features Daniel Baluta
2014-10-09 12:39 ` [RFC PATCH v2 1/7] iio: dummy: Add virtual registers for dummy device Daniel Baluta
2014-10-25 18:55 ` Jonathan Cameron
2014-10-25 19:49 ` Hartmut Knaack
2014-10-25 19:56 ` Jonathan Cameron [this message]
2014-10-25 19:58 ` Daniel Baluta
2014-10-09 12:39 ` [RFC PATCH v2 2/7] iio: core: Introduce IIO_ACTIVITY channel and TRANSITION event Daniel Baluta
2014-10-25 19:01 ` Jonathan Cameron
2014-10-25 19:19 ` Daniel Baluta
2014-10-25 19:28 ` Jonathan Cameron
2014-10-09 12:39 ` [RFC PATCH v2 3/7] iio: core: Introduce IIO_EV_DIR_NONE Daniel Baluta
2014-10-25 19:02 ` Jonathan Cameron
2014-10-09 12:39 ` [RFC PATCH v2 4/7] iio: core: Introduce STEPS channel type, ENABLE mask and INSTANCE event Daniel Baluta
2014-10-24 22:31 ` Hartmut Knaack
2014-10-25 19:18 ` Jonathan Cameron
2014-10-28 10:22 ` Daniel Baluta
2014-10-25 19:11 ` Jonathan Cameron
2014-10-09 12:39 ` [RFC PATCH v2 5/7] iio: core: Introduce HEIGHT channel type Daniel Baluta
2014-10-25 19:24 ` Jonathan Cameron
2014-10-09 12:39 ` [RFC PATCH v2 6/7] iio: dummy: Demonstrate the usage of new channel types Daniel Baluta
2014-10-25 19:27 ` Jonathan Cameron
2014-10-09 12:39 ` [RFC PATCH v2 7/7] iio: event_monitor: Add support for " 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=544C0072.1000709@kernel.org \
--to=jic23@kernel.org \
--cc=daniel.baluta@intel.com \
--cc=irina.tirdea@intel.com \
--cc=knaack.h@gmx.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.