Antwort: Re: [PATCH] staging:iio:adc Add range to max1363

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jonathan Cameron <jic23@xxxxxxxxx> schrieb am 30.03.2011 15:16:55:

> Von: Jonathan Cameron <jic23@xxxxxxxxx>
> An: mailinglists@xxxxxxxxx
> Kopie: linux-iio@xxxxxxxxxxxxxxx, Jan Weitzel <j.weitzel@xxxxxxxxx>
> Datum: 30.03.2011 15:15
> Betreff: Re: [PATCH] staging:iio:adc Add range to max1363
> 
> On 03/30/11 13:20, mailinglists@xxxxxxxxx wrote:
> > From: Jan Weitzel <j.weitzel@xxxxxxxxx>
> > 
> > by default MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD is set, add VDD is
> > the voltage reference, not the internal one. So in_scale is wrong.
> > If a regulator is available it is ask about the voltage. If it is
> > not available the old (wrong) internal reference is used.
> > 
> Hi Jan,
> 
> Nice to know this driver has some users.
:)
> 
> Firstly there are two completely different elements to this patch, so 
they
> should be broken out into 2 patches.
> For the fix, perhaps the easier option is just to change the defaultto 
use the
> internal reference?   Do you have a use that requires it to be up to 
VDD?
Ok I can fix it. But in our application we messarue above the internal 
reference and need vdd reference support. So best solution is platformcode 
for selecting the source and the its value, right?

> Now you have pointed out this bug, I am rather dubious about simply 
outputting
> vref if the regulator isn't specified.  We could do this via 
> platform data I guess.
> I wonder how much trouble it would cause to just remove all options 
> for not having
> the reg there?  After all people can just use a fixed voltage 
> regulator to specify
thats the way I do it now ;) I didn't want to add max1363 platformcode by 
now.
> what it is.
> 
> Hmm. These range attributes are a pain.  Do you have a use case 
> actually needing
No but in_scale depents also on the "range"

Kind regards,
Jan

> that value?  I'm also tempted to suggest changing the abi to at 
> least identify them with
> a type of channel (hence in_range). Right now they aren't well specified
> (what's the syntax for something covering 1-2V only for example?)
> 
> Thanks,
> 
> Jonathan
> 
> 
> 
> > Signed-off-by: Jan Weitzel <j.weitzel@xxxxxxxxx>
> > ---
> >  drivers/staging/iio/adc/max1363_core.c |   29 
+++++++++++++++++++++++++----
> >  1 files changed, 25 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/
> staging/iio/adc/max1363_core.c
> > index 905f856..cf49124 100644
> > --- a/drivers/staging/iio/adc/max1363_core.c
> > +++ b/drivers/staging/iio/adc/max1363_core.c
> > @@ -279,22 +279,31 @@ static IIO_DEV_ATTR_IN_DIFF_RAW(7, 6, 
> max1363_read_single_channel, d7m6);
> >  static IIO_DEV_ATTR_IN_DIFF_RAW(9, 8, max1363_read_single_channel, 
d9m8);
> >  static IIO_DEV_ATTR_IN_DIFF_RAW(11, 10, 
> max1363_read_single_channel, d11m10);
> > 
> > +static u16 max1363_get_range(struct max1363_state *st)
> > +{
> > +   u16 range;
> > +   if (IS_ERR(st->reg))
> > +      range = st->chip_info->int_vref_mv;
> > +   else
> > +      range = regulator_get_voltage(st->reg) / 1000;
> > +
> > +   return range;
> > +}
> > 
> >  static ssize_t max1363_show_scale(struct device *dev,
> >              struct device_attribute *attr,
> >              char *buf)
> >  {
> > -   /* Driver currently only support internal vref */
> > +   /* Driver currently only support vcc vref */
> >     struct iio_dev *dev_info = dev_get_drvdata(dev);
> >     struct max1363_state *st = iio_dev_get_devdata(dev_info);
> >     /* Corresponds to Vref / 2^(bits) */
> > 
> > -   if ((1 << (st->chip_info->bits + 1))
> > -       > st->chip_info->int_vref_mv)
> > +   if ((1 << (st->chip_info->bits + 1)) > max1363_get_range(st))
> >        return sprintf(buf, "0.5\n");
> >     else
> >        return sprintf(buf, "%d\n",
> > -         st->chip_info->int_vref_mv >> st->chip_info->bits);
> > +         max1363_get_range(st) >> st->chip_info->bits);
> >  }
> > 
> >  static IIO_DEVICE_ATTR(in_scale, S_IRUGO, max1363_show_scale, NULL, 
0);
> > @@ -310,6 +319,17 @@ static ssize_t max1363_show_name(struct device 
*dev,
> > 
> >  static IIO_DEVICE_ATTR(name, S_IRUGO, max1363_show_name, NULL, 0);
> > 
> > +static ssize_t max1363_show_range(struct device *dev,
> > +             struct device_attribute *attr,
> > +             char *buf)
> > +{
> > +   struct iio_dev *dev_info = dev_get_drvdata(dev);
> > +   struct max1363_state *st = iio_dev_get_devdata(dev_info);
> > +   return sprintf(buf, "%d\n", max1363_get_range(st));
> > +}
> > +
> > +static IIO_DEVICE_ATTR(range, S_IRUGO, max1363_show_range, NULL, 0);
> > +
> >  /* Applies to max1363 */
> >  static const enum max1363_modes max1363_mode_list[] = {
> >     _s0, _s1, _s2, _s3,
> > @@ -329,6 +349,7 @@ static struct attribute *max1363_device_attrs[] = 
{
> >     &iio_dev_attr_in3min2_raw.dev_attr.attr,
> >     &iio_dev_attr_name.dev_attr.attr,
> >     &iio_dev_attr_in_scale.dev_attr.attr,
> > +   &iio_dev_attr_range.dev_attr.attr,
> >     NULL
> >  };
> > 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux