From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Artur Rojek <contact@artur-rojek.eu>
Cc: Jonathan Cameron <jic23@kernel.org>,
Chris Morgan <macroalpha82@gmail.com>,
linux-input@vger.kernel.org, linux-iio@vger.kernel.org,
robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org,
heiko@sntech.de, paul@crapouillou.net,
Chris Morgan <macromorgan@hotmail.com>,
Maya Matuszczyk <maccraft123mc@gmail.com>
Subject: Re: [PATCH v12 2/3] Input: adc-joystick - Add polled input device support
Date: Wed, 10 Aug 2022 17:58:48 -0700 [thread overview]
Message-ID: <YvRUSBFGuMmjGsb4@google.com> (raw)
In-Reply-To: <9399f54366be973dba36a70cb3dcbfd9@artur-rojek.eu>
On Sat, Aug 06, 2022 at 04:19:21PM +0200, Artur Rojek wrote:
> On 2022-08-06 16:20, Jonathan Cameron wrote:
> > On Fri, 5 Aug 2022 12:10:15 -0500
> > Chris Morgan <macroalpha82@gmail.com> wrote:
> >
> > > From: Chris Morgan <macromorgan@hotmail.com>
> > >
> > > Add polled input device support to the adc-joystick driver. This is
> > > useful for devices which do not have hardware capable triggers on
> > > their SARADC. Code modified from adc-joystick.c changes made by Maya
> > > Matuszczyk.
> > >
> > > Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
> > > Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
> > Hi Chris,
> >
> > Trying to avoid too much indentation has lead to an odd code structure.
> > Still minor thing, so either way this looks fine to me.
> >
> > Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> >
> > > ---
> > > drivers/input/joystick/adc-joystick.c | 44
> > > +++++++++++++++++++++++++--
> > > 1 file changed, 41 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/drivers/input/joystick/adc-joystick.c
> > > b/drivers/input/joystick/adc-joystick.c
> > > index 78ebca7d400a..77dfb7dd96eb 100644
> > > --- a/drivers/input/joystick/adc-joystick.c
> > > +++ b/drivers/input/joystick/adc-joystick.c
> > > @@ -26,8 +26,23 @@ struct adc_joystick {
> > > struct adc_joystick_axis *axes;
> > > struct iio_channel *chans;
> > > int num_chans;
> > > + bool polled;
> > > };
> > >
> > > +static void adc_joystick_poll(struct input_dev *input)
> > > +{
> > > + struct adc_joystick *joy = input_get_drvdata(input);
> > > + int i, val, ret;
> > > +
> > > + for (i = 0; i < joy->num_chans; i++) {
> > > + ret = iio_read_channel_raw(&joy->chans[i], &val);
> > > + if (ret < 0)
> > > + return;
> > > + input_report_abs(input, joy->axes[i].code, val);
> > > + }
> > > + input_sync(input);
> > > +}
> > > +
> > > static int adc_joystick_handle(const void *data, void *private)
> > > {
> > > struct adc_joystick *joy = private;
> > > @@ -179,6 +194,7 @@ static int adc_joystick_probe(struct
> > > platform_device *pdev)
> > > int error;
> > > int bits;
> > > int i;
> > > + unsigned int poll_interval;
> > >
> > > joy = devm_kzalloc(dev, sizeof(*joy), GFP_KERNEL);
> > > if (!joy)
> > > @@ -192,8 +208,21 @@ static int adc_joystick_probe(struct
> > > platform_device *pdev)
> > > return error;
> > > }
> > >
> > > - /* Count how many channels we got. NULL terminated. */
> > > + if (device_property_present(dev, "poll-interval")) {
> > > + error = device_property_read_u32(dev, "poll-interval",
> > > + &poll_interval);
> > > + if (error)
> > > + return error;
> > > + joy->polled = true;
device_property_read_u32() return -EINVAL if property is not present, so
we can write:
error = device_property_read_u32(dev, "poll-interval", &poll_interval);
if (error) {
/* -EINVAL means the property is absent. */
if (error != -EINVAL)
return error;
} else if (poll_interval == 0) {
dev_err(...);
return -EINVAL;
} else {
joy->polled = true;
}
> > > + }
> > > +
> > > + /*
> > > + * Count how many channels we got. NULL terminated.
> > > + * Do not check the storage size if using polling.
> > > + */
> > > for (i = 0; joy->chans[i].indio_dev; i++) {
> > > + if (joy->polled)
> > > + continue;
> >
> > Whilst I can see why did this, it is a rather 'unusual' code structure
> > and that makes me a tiny bit uncomfortable. However if everyone else
> > is happy with this then fair enough (I see it was Artur's suggestion to
> > handle it like this).
> Yep, I'm fine with the way it is right now :)
>
> Acked-by: Artur Rojek <contact@artur-rojek.eu>
>
> >
> > > bits = joy->chans[i].channel->scan_type.storagebits;
> > > if (!bits || bits > 16) {
> > > dev_err(dev, "Unsupported channel storage size\n");
> > > @@ -215,8 +244,14 @@ static int adc_joystick_probe(struct
> > > platform_device *pdev)
> > > joy->input = input;
> > > input->name = pdev->name;
> > > input->id.bustype = BUS_HOST;
> > > - input->open = adc_joystick_open;
> > > - input->close = adc_joystick_close;
> > > +
> > > + if (joy->polled) {
> > > + input_setup_polling(input, adc_joystick_poll);
> > > + input_set_poll_interval(input, poll_interval);
> > > + } else {
> > > + input->open = adc_joystick_open;
> > > + input->close = adc_joystick_close;
> > > + }
> > >
> > > error = adc_joystick_set_axes(dev, joy);
> > > if (error)
> > > @@ -229,6 +264,9 @@ static int adc_joystick_probe(struct
> > > platform_device *pdev)
> > > return error;
> > > }
> > >
> > > + if (joy->polled)
> > > + return 0;
> > > +
This is no longer compatible with the latest driver code as input device
registration has been moved to the very end, so you actually need to move
getting bugger and setting up cleanup action into the "else" clause of "if
(joy->polled)", even though it adds indentation level.
> > > joy->buffer = iio_channel_get_all_cb(dev, adc_joystick_handle, joy);
> > > if (IS_ERR(joy->buffer)) {
> > > dev_err(dev, "Unable to allocate callback buffer\n");
Thanks.
--
Dmitry
next prev parent reply other threads:[~2022-08-11 0:59 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-05 17:10 [PATCH v12 0/3] dt-bindings: adc-joystick: add poll-interval Chris Morgan
2022-08-05 17:10 ` [PATCH v12 1/3] " Chris Morgan
2022-08-05 17:10 ` [PATCH v12 2/3] Input: adc-joystick - Add polled input device support Chris Morgan
2022-08-06 14:20 ` Jonathan Cameron
2022-08-06 14:19 ` Artur Rojek
2022-08-11 0:58 ` Dmitry Torokhov [this message]
2022-08-12 14:56 ` Chris Morgan
2022-08-05 17:10 ` [PATCH v12 3/3] arm64: dts: rockchip: Update joystick to polled for OG2 Chris Morgan
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=YvRUSBFGuMmjGsb4@google.com \
--to=dmitry.torokhov@gmail.com \
--cc=contact@artur-rojek.eu \
--cc=heiko@sntech.de \
--cc=jic23@kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=maccraft123mc@gmail.com \
--cc=macroalpha82@gmail.com \
--cc=macromorgan@hotmail.com \
--cc=paul@crapouillou.net \
--cc=robh+dt@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 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).