RE: [PATCH 4/5] staging:iio:gyro: add adis16251 support to adis16260 driver.

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

 



Jonathan Cameron wrote on 2011-02-25:
> On 02/11/11 14:11, Jonathan Cameron wrote:
>> On 02/05/11 17:52, Jonathan Cameron wrote:
>>> These parts are very similar and the adis16260 driver supports a
>>> lot of additional functionality.
>>>
>>> Precursor to removal of adis16251 driver.
>>>
>>> Note that some supported devices were missing from Kconfig help
>>> text and are also added in this patch.
>>
>> I'll hold the this one and the next back for another week. The other 3
>> are going to Greg shortly as they are just code tidying.
>>
>> Any feedback on this patch welcomed.
> Just a friendly note to ask if anyone Analog related will have a
> chance to look at this one.  If not, then do people mind if I send
> this and the next one on to Greg anyway?  I'm almost entirely certain
> they won't cause any problems and would like to finish the gyro driver
> cleanup before moving onto another set.
>
> Thanks,
>
> Jonathan
>>
>> Jonathan
>>>
>>> Signed-off-by: Jonathan Cameron <jic23@xxxxxxxxx>

Looks good to me.
Acked-by: Michael Hennerich <michael.hennerich@xxxxxxxxxx>

>>> ---
>>>  drivers/staging/iio/gyro/Kconfig          |    4 +-
>>>  drivers/staging/iio/gyro/adis16260_core.c |   49
>>>  +++++++++++++++++++++++------ 2 files changed, 41 insertions(+), 12
>>>  deletions(-)
>>> diff --git a/drivers/staging/iio/gyro/Kconfig
>>> b/drivers/staging/iio/gyro/Kconfig
>>> index 236f15f..5bba4b0 100644
>>> --- a/drivers/staging/iio/gyro/Kconfig
>>> +++ b/drivers/staging/iio/gyro/Kconfig
>>> @@ -25,13 +25,13 @@ config ADIS16130
>>>       Angular Rate Sensor driver.
>>>
>>>  config ADIS16260
>>> -   tristate "Analog Devices ADIS16260 ADIS16265 Digital Gyroscope
>>> Sensor SPI driver" +        tristate "Analog Devices ADIS16260 Digital
>>> Gyroscope Sensor SPI
> driver"
>>>     depends on SPI
>>>     select IIO_TRIGGER if IIO_RING_BUFFER
>>>     select IIO_SW_RING if IIO_RING_BUFFER
>>>     help
>>>       Say yes here to build support for Analog Devices ADIS16260
> ADIS16265
>>> -     programmable digital gyroscope sensor. +        ADIS16250 ADIS16255 and
>>> ADIS16251 programmable digital gyroscope sensors.
>>>
>>>       This driver can also be built as a module.  If so, the module
>>>       will be called adis16260.
>>> diff --git a/drivers/staging/iio/gyro/adis16260_core.c
>>> b/drivers/staging/iio/gyro/adis16260_core.c
>>> index 045e27d..69a29ec 100644
>>> --- a/drivers/staging/iio/gyro/adis16260_core.c
>>> +++ b/drivers/staging/iio/gyro/adis16260_core.c
>>> @@ -238,10 +238,24 @@ error_ret:
>>>     return ret ? ret : len;
>>>  }
>>> +static ssize_t adis16260_read_frequency_available(struct device *dev,
>>> +                                             struct device_attribute *attr, +                                                char *buf) +{
>>> +   struct iio_dev *indio_dev = dev_get_drvdata(dev); +     struct
>>> adis16260_state *st = iio_dev_get_devdata(indio_dev); +     if
>>> (spi_get_device_id(st->us)->driver_data) +          return sprintf(buf,
>>> "%s\n", "0.129 ~ 256"); +   else +          return sprintf(buf, "%s\n", "256
>>> 2048"); } +
>>>  static ssize_t adis16260_read_frequency(struct device *dev,
>>>             struct device_attribute *attr,
>>>             char *buf)
>>>  {
>>> +   struct iio_dev *indio_dev = dev_get_drvdata(dev);
>>> +   struct adis16260_state *st = iio_dev_get_devdata(indio_dev);
>>>     int ret, len = 0;
>>>     u16 t;
>>>     int sps;
>>> @@ -250,7 +264,11 @@ static ssize_t adis16260_read_frequency(struct
> device *dev,
>>>                     &t);
>>>     if (ret)
>>>             return ret;
>>> -   sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
>>> +
>>> +   if (spi_get_device_id(st->us)->driver_data) /* If an adis16251 */
>>> +           sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
>>> +   else
>>> +           sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
>>>     sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1;
>>>     len = sprintf(buf, "%d SPS\n", sps);
>>>     return len;
>>> @@ -272,16 +290,21 @@ static ssize_t
> adis16260_write_frequency(struct device *dev,
>>>             return ret;
>>>
>>>     mutex_lock(&indio_dev->mlock);
>>> -
>>> -   t = (2048 / val);
>>> -   if (t > 0)
>>> -           t--;
>>> -   t &= ADIS16260_SMPL_PRD_DIV_MASK;
>>> +   if (spi_get_device_id(st->us)) {
>>> +           t = (256 / val);
>>> +           if (t > 0)
>>> +                   t--;
>>> +           t &= ADIS16260_SMPL_PRD_DIV_MASK;
>>> +   } else {
>>> +           t = (2048 / val);
>>> +           if (t > 0)
>>> +                   t--;
>>> +           t &= ADIS16260_SMPL_PRD_DIV_MASK;
>>> +   }
>>>     if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A)
>>>             st->us->max_speed_hz = ADIS16260_SPI_SLOW;      else
>>>             st->us->max_speed_hz = ADIS16260_SPI_FAST; -    ret =
>>>  adis16260_spi_write_reg_8(dev,                     ADIS16260_SMPL_PRD,                     t);
>>> @@ -302,7 +325,10 @@ static ssize_t
>>> adis16260_read_gyro_scale(struct
> device *dev,
>>>     if (st->negate)
>>>             ret = sprintf(buf, "-");
>>>     /* Take the iio_dev status lock */
>>> -   ret += sprintf(buf + ret, "%s\n", "0.00127862821");
>>> +   if (spi_get_device_id(st->us)->driver_data)
>>> +           ret += sprintf(buf + ret, "%s\n", "0.00031974432");
>>> +   else
>>> +           ret += sprintf(buf + ret, "%s\n", "0.00127862821");
>>>
>>>     return ret;
>>>  }
>>> @@ -475,7 +501,9 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR |
>>> S_IRUGO,
>>>
>>>  static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL,
>>> adis16260_write_reset, 0);
>>>
>>> -static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("256 2048"); + +static
>>> IIO_DEVICE_ATTR(sampling_frequency_available, +                    S_IRUGO,
>>> adis16260_read_frequency_available, NULL, 0);
>>>
>>>  static IIO_CONST_ATTR_NAME("adis16260");
>>> @@ -525,7 +553,7 @@ static ADIS16260_GYRO_ATTR_SET(_Z);
>>>             &iio_dev_attr_in1_raw.dev_attr.attr,                    \
>>>             &iio_const_attr_in1_scale.dev_attr.attr,                \
>>>             &iio_dev_attr_sampling_frequency.dev_attr.attr,         \
>>> -           &iio_const_attr_sampling_frequency_available.dev_attr.attr, \
>>> +           &iio_dev_attr_sampling_frequency_available.dev_attr.attr, \
>>>             &iio_dev_attr_reset.dev_attr.attr,                      \
>>>             &iio_const_attr_name.dev_attr.attr,                     \
>>>             NULL                                                    \
>>> @@ -693,6 +721,7 @@ static const struct spi_device_id
>>> adis16260_id[]
> = {
>>>     {"adis16265", 0},       {"adis16250", 0},       {"adis16255", 0},
>>>  +  {"adis16251", 1},       {} };
>>
>>
>

Greetings,
Michael

--
Analog Devices GmbH      Wilhelm-Wagenfeld-Str. 6      80807 Muenchen
Sitz der Gesellschaft: Muenchen; Registergericht: Muenchen HRB 40368; Geschaeftsfuehrer:Dr.Carsten Suckrow, Thomas Wessel, William A. Martin, Margaret Seif

--
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