From: Jonathan Cameron <jic23@kernel.org>
To: David Julian Veenstra <davidjulianveenstra@gmail.com>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>,
lars@metafoo.de, Michael.Hennerich@analog.com, knaack.h@gmx.de,
linux-iio@vger.kernel.org, devel@driverdev.osuosl.org
Subject: Re: [PATCH 10/11] staging: iio: ad2s1200: Replace angle channel with inclination channel
Date: Sat, 24 Mar 2018 17:40:57 +0000 [thread overview]
Message-ID: <20180324174057.44703de3@archlinux> (raw)
In-Reply-To: <87tvt5ttbk.fsf@gmail.com>
On Sat, 24 Mar 2018 15:57:19 +0100
David Julian Veenstra <davidjulianveenstra@gmail.com> wrote:
> On 24, March 2018 14:12, Jonathan Cameron wrote:
>
> > On Sat, 24 Mar 2018 13:36:44 +0100
> > David Julian Veenstra <davidjulianveenstra@gmail.com> wrote:
> >
> >> On 23, March 2018 14:27, Jonathan Cameron wrote:
> >>
> >> > On Sun, 18 Mar 2018 14:37:04 +0100
> >> > David Veenstra <davidjulianveenstra@gmail.com> wrote:
> >> >
> >> >> The angle channel is not defined in sysfs iio ABI. So it is replaced
> >> >> with an inclination channel, because it is defined in the ABI, and has the
> >> >> semantics of an angle.
> >> >>
> >> >> In addition, a fractional scaling factor of 360 / (2^12 -1) is added,
> >> >> to scale the 12-bits angular position to degrees, conform the ABI.
> >> >>
> >> >> Signed-off-by: David Veenstra <davidjulianveenstra@gmail.com>
> >> > No, please do not blugeon a device into the existing documented ABI.
> >> >
> >> > A resolver does not measure something that can be remotely
> >> > sensibly mapped to inclination. Inclination is relative to 'down'.
> >> > A resolver doesn't care about down.
> >> >
> >> > Add an angle type to the ABI docs. It simply hasn't been documented
> >> > before because there were no drivers outside staging that use it.
> >>
> >> I'm sorry, I misunderstood our previous discussing on this topic
> >> (https://marc.info/?l=linux-iio&m=152087432322446&w=2) as saying:
> >> "there already exists another channel type that is a good enough match".
> > Ah, no I was making the point we need to match with the 'units' not
> > use the channel type.
> >
> > Hmm. We have an an unfortunate inconsistency between use of radians/sec
> > and degrees for different types.
> >
> > Radians feels perfectly sensible for a rotary device, but not so much
> > for an angle of tilt.
> >
> > I'm not sure how we resolve this cleanly or if we can.
> > My gut feeling is we need to go with radians for angle measures on
> > a rotating devices (to match against anglvel) and leave inclination
> > in degrees.
>
> I agree that radians doesn't make sense for inclination, and that it
> makes sense to have consistency between the unit of angle and that of
> angular velocity.
>
> However, if ABI consistency is desired, another option would be to
> change the unit of angular velocity to degrees per seconds. Then
> everything would be the same. But this sounds like a very painful
> change...
It's effectively impossible without ABI breakage and getting shouted
at by users (and potentially Linus forcing a revert).
The only way we could do it would be to introduce a new 'similarly'
named type and deprecate the old one, removing it some years in the
future.
Unfortunately we (where I meant I :() mess up sometimes and have
to live with the result.
Jonathan
>
> For now, I'll use radians for the angle.
>
> Best regards,
> David Veenstra
>
> >
> > Sorry for the confusion, I'd missed that the units were inconsistent
> > which would have made that comment harder to interpret.
> >
> > Jonathan
> >
> >>
> >> The in_incli and in_rot_from_* family all use degrees as their unit.
> >> For V2 I'll change it back to an angle channel and use angle as its
> >> unit.
> >>
> >> Best regards,
> >> David Veenstra
> >>
> >> >
> >> > Jonathan
> >> >
> >> >> ---
> >> >> drivers/staging/iio/resolver/ad2s1200.c | 11 ++++++++---
> >> >> 1 file changed, 8 insertions(+), 3 deletions(-)
> >> >>
> >> >> diff --git a/drivers/staging/iio/resolver/ad2s1200.c b/drivers/staging/iio/resolver/ad2s1200.c
> >> >> index 4b97a106012c..937676bcc0d4 100644
> >> >> --- a/drivers/staging/iio/resolver/ad2s1200.c
> >> >> +++ b/drivers/staging/iio/resolver/ad2s1200.c
> >> >> @@ -64,6 +64,10 @@ static int ad2s1200_read_raw(struct iio_dev *indio_dev,
> >> >> switch (m) {
> >> >> case IIO_CHAN_INFO_SCALE:
> >> >> switch (chan->type) {
> >> >> + case IIO_INCLI:
> >> >> + *val = 360;
> >> >> + *val2 = 0xFFF;
> >> >> + return IIO_VAL_FRACTIONAL;
> >> >> case IIO_ANGL_VEL:
> >> >> /*
> >> >> * 2 * Pi is almost equal to
> >> >> @@ -91,7 +95,7 @@ static int ad2s1200_read_raw(struct iio_dev *indio_dev,
> >> >> /* delay (6 * AD2S1200_TSCLK + 20) nano seconds */
> >> >> udelay(1);
> >> >> gpiod_set_value(st->sample, 1);
> >> >> - gpiod_set_value(st->rdvel, !!(chan->type == IIO_ANGL));
> >> >> + gpiod_set_value(st->rdvel, !!(chan->type == IIO_INCLI));
> >> >>
> >> >> ret = spi_read(st->sdev, st->rx, 2);
> >> >> if (ret < 0) {
> >> >> @@ -101,7 +105,7 @@ static int ad2s1200_read_raw(struct iio_dev *indio_dev,
> >> >>
> >> >> vel = be16_to_cpup((__be16 *)st->rx);
> >> >> switch (chan->type) {
> >> >> - case IIO_ANGL:
> >> >> + case IIO_INCLI:
> >> >> *val = vel >> 4;
> >> >> ret = IIO_VAL_INT;
> >> >> break;
> >> >> @@ -128,10 +132,11 @@ static int ad2s1200_read_raw(struct iio_dev *indio_dev,
> >> >>
> >> >> static const struct iio_chan_spec ad2s1200_channels[] = {
> >> >> {
> >> >> - .type = IIO_ANGL,
> >> >> + .type = IIO_INCLI,
> >> >> .indexed = 1,
> >> >> .channel = 0,
> >> >> .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
> >> >> + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
> >> >> }, {
> >> >> .type = IIO_ANGL_VEL,
> >> >> .indexed = 1,
> >>
> >> --
> >> 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
> --
> 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:[~2018-03-24 17:41 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-18 13:33 [PATCH 00/11] staging: iio: ad2s1200: Driver clean up David Veenstra
2018-03-18 13:34 ` [PATCH 01/11] staging: iio: ad2s1200: Sort includes alphabetically David Veenstra
2018-03-18 13:34 ` [PATCH 02/11] staging: iio: ad2s1200: Reverse Christmas tree order David Veenstra
2018-03-18 13:34 ` [PATCH 03/11] staging: iio: ad2s1200: Add blank lines David Veenstra
2018-03-18 13:35 ` [PATCH 04/11] staging: iio: ad2s1200: Add kernel docs to driver state David Veenstra
2018-03-18 13:35 ` [PATCH 05/11] staging: iio: ad2s1200: Introduce variable for repeated value David Veenstra
2018-03-23 13:17 ` Jonathan Cameron
2018-03-24 12:22 ` David Julian Veenstra
2018-03-24 14:04 ` Jonathan Cameron
2018-03-18 13:35 ` [PATCH 06/11] staging: iio: ad2s1200: Improve readability with be16_to_cpup David Veenstra
2018-03-18 13:36 ` [PATCH 07/11] staging: iio: ad2s1200: Ensure udelay(1) in all necessary code paths David Veenstra
2018-03-23 13:20 ` Jonathan Cameron
2018-03-24 12:26 ` David Julian Veenstra
2018-03-18 13:36 ` [PATCH 08/11] staging: iio: ad2s1200: Replace legacy gpio ABI with modern ABI David Veenstra
2018-03-23 13:23 ` Jonathan Cameron
2018-03-18 13:36 ` [PATCH 09/11] staging: iio: ad2s1200: Add scaling factor for IIO_ANGL_VEL channel David Veenstra
2018-03-18 13:37 ` [PATCH 10/11] staging: iio: ad2s1200: Replace angle channel with inclination channel David Veenstra
2018-03-23 13:27 ` Jonathan Cameron
2018-03-24 12:36 ` David Julian Veenstra
2018-03-24 14:12 ` Jonathan Cameron
2018-03-24 14:57 ` David Julian Veenstra
2018-03-24 17:40 ` Jonathan Cameron [this message]
2018-03-18 13:37 ` [PATCH 11/11] Move resolver ad2c1200 driver out of staging to mainline iio David Veenstra
2018-03-23 13:29 ` Jonathan Cameron
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=20180324174057.44703de3@archlinux \
--to=jic23@kernel.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=Michael.Hennerich@analog.com \
--cc=davidjulianveenstra@gmail.com \
--cc=devel@driverdev.osuosl.org \
--cc=knaack.h@gmx.de \
--cc=lars@metafoo.de \
--cc=linux-iio@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 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).