linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Lars-Peter Clausen <lars@metafoo.de>,
	Hartmut Knaack <knaack.h@gmx.de>,
	Peter Meerwald <pmeerw@pmeerw.net>
Cc: Marc Andre <marc.andre@netline.ch>, linux-iio@vger.kernel.org
Subject: Re: [PATCH 2/2] iio: ad5064: Fix ad5629/ad5669 shift
Date: Sun, 25 Oct 2015 12:31:27 +0000	[thread overview]
Message-ID: <562CCB9F.1060809@kernel.org> (raw)
In-Reply-To: <1444752938-4680-2-git-send-email-lars@metafoo.de>

On 13/10/15 17:15, Lars-Peter Clausen wrote:
> The ad5629/ad5669 are the I2C variant of the ad5628/ad5668, which has a SPI
> interface. They are mostly identical with the exception that the shift
> factor is different. Currently the driver does not take care of this
> difference which leads to incorrect DAC output values.
> 
> Fix this by introducing a custom channel spec for the ad5629/ad5669 with
> the correct shift factor.
> 
> Fixes: commit 6a17a0768f77 ("iio:dac:ad5064: Add support for the ad5629r and ad5669r")
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Applied to fixes-togreg and marked for stable.  Will be post rc1 now.
> ---
>  drivers/iio/dac/ad5064.c | 83 +++++++++++++++++++++++++++++++++---------------
>  1 file changed, 57 insertions(+), 26 deletions(-)
> 
> diff --git a/drivers/iio/dac/ad5064.c b/drivers/iio/dac/ad5064.c
> index 7e7ebf3..978f130 100644
> --- a/drivers/iio/dac/ad5064.c
> +++ b/drivers/iio/dac/ad5064.c
> @@ -113,12 +113,16 @@ enum ad5064_type {
>  	ID_AD5065,
>  	ID_AD5628_1,
>  	ID_AD5628_2,
> +	ID_AD5629_1,
> +	ID_AD5629_2,
>  	ID_AD5648_1,
>  	ID_AD5648_2,
>  	ID_AD5666_1,
>  	ID_AD5666_2,
>  	ID_AD5668_1,
>  	ID_AD5668_2,
> +	ID_AD5669_1,
> +	ID_AD5669_2,
>  };
>  
>  static int ad5064_write(struct ad5064_state *st, unsigned int cmd,
> @@ -291,7 +295,7 @@ static const struct iio_chan_spec_ext_info ad5064_ext_info[] = {
>  	{ },
>  };
>  
> -#define AD5064_CHANNEL(chan, addr, bits) {			\
> +#define AD5064_CHANNEL(chan, addr, bits, _shift) {		\
>  	.type = IIO_VOLTAGE,					\
>  	.indexed = 1,						\
>  	.output = 1,						\
> @@ -303,36 +307,39 @@ static const struct iio_chan_spec_ext_info ad5064_ext_info[] = {
>  		.sign = 'u',					\
>  		.realbits = (bits),				\
>  		.storagebits = 16,				\
> -		.shift = 20 - bits,				\
> +		.shift = (_shift),				\
>  	},							\
>  	.ext_info = ad5064_ext_info,				\
>  }
>  
> -#define DECLARE_AD5064_CHANNELS(name, bits) \
> +#define DECLARE_AD5064_CHANNELS(name, bits, shift) \
>  const struct iio_chan_spec name[] = { \
> -	AD5064_CHANNEL(0, 0, bits), \
> -	AD5064_CHANNEL(1, 1, bits), \
> -	AD5064_CHANNEL(2, 2, bits), \
> -	AD5064_CHANNEL(3, 3, bits), \
> -	AD5064_CHANNEL(4, 4, bits), \
> -	AD5064_CHANNEL(5, 5, bits), \
> -	AD5064_CHANNEL(6, 6, bits), \
> -	AD5064_CHANNEL(7, 7, bits), \
> +	AD5064_CHANNEL(0, 0, bits, shift), \
> +	AD5064_CHANNEL(1, 1, bits, shift), \
> +	AD5064_CHANNEL(2, 2, bits, shift), \
> +	AD5064_CHANNEL(3, 3, bits, shift), \
> +	AD5064_CHANNEL(4, 4, bits, shift), \
> +	AD5064_CHANNEL(5, 5, bits, shift), \
> +	AD5064_CHANNEL(6, 6, bits, shift), \
> +	AD5064_CHANNEL(7, 7, bits, shift), \
>  }
>  
> -#define DECLARE_AD5065_CHANNELS(name, bits) \
> +#define DECLARE_AD5065_CHANNELS(name, bits, shift) \
>  const struct iio_chan_spec name[] = { \
> -	AD5064_CHANNEL(0, 0, bits), \
> -	AD5064_CHANNEL(1, 3, bits), \
> +	AD5064_CHANNEL(0, 0, bits, shift), \
> +	AD5064_CHANNEL(1, 3, bits, shift), \
>  }
>  
> -static DECLARE_AD5064_CHANNELS(ad5024_channels, 12);
> -static DECLARE_AD5064_CHANNELS(ad5044_channels, 14);
> -static DECLARE_AD5064_CHANNELS(ad5064_channels, 16);
> +static DECLARE_AD5064_CHANNELS(ad5024_channels, 12, 8);
> +static DECLARE_AD5064_CHANNELS(ad5044_channels, 14, 6);
> +static DECLARE_AD5064_CHANNELS(ad5064_channels, 16, 4);
>  
> -static DECLARE_AD5065_CHANNELS(ad5025_channels, 12);
> -static DECLARE_AD5065_CHANNELS(ad5045_channels, 14);
> -static DECLARE_AD5065_CHANNELS(ad5065_channels, 16);
> +static DECLARE_AD5065_CHANNELS(ad5025_channels, 12, 8);
> +static DECLARE_AD5065_CHANNELS(ad5045_channels, 14, 6);
> +static DECLARE_AD5065_CHANNELS(ad5065_channels, 16, 4);
> +
> +static DECLARE_AD5064_CHANNELS(ad5629_channels, 12, 4);
> +static DECLARE_AD5064_CHANNELS(ad5669_channels, 16, 0);
>  
>  static const struct ad5064_chip_info ad5064_chip_info_tbl[] = {
>  	[ID_AD5024] = {
> @@ -382,6 +389,18 @@ static const struct ad5064_chip_info ad5064_chip_info_tbl[] = {
>  		.channels = ad5024_channels,
>  		.num_channels = 8,
>  	},
> +	[ID_AD5629_1] = {
> +		.shared_vref = true,
> +		.internal_vref = 2500000,
> +		.channels = ad5629_channels,
> +		.num_channels = 8,
> +	},
> +	[ID_AD5629_2] = {
> +		.shared_vref = true,
> +		.internal_vref = 5000000,
> +		.channels = ad5629_channels,
> +		.num_channels = 8,
> +	},
>  	[ID_AD5648_1] = {
>  		.shared_vref = true,
>  		.internal_vref = 2500000,
> @@ -418,6 +437,18 @@ static const struct ad5064_chip_info ad5064_chip_info_tbl[] = {
>  		.channels = ad5064_channels,
>  		.num_channels = 8,
>  	},
> +	[ID_AD5669_1] = {
> +		.shared_vref = true,
> +		.internal_vref = 2500000,
> +		.channels = ad5669_channels,
> +		.num_channels = 8,
> +	},
> +	[ID_AD5669_2] = {
> +		.shared_vref = true,
> +		.internal_vref = 5000000,
> +		.channels = ad5669_channels,
> +		.num_channels = 8,
> +	},
>  };
>  
>  static inline unsigned int ad5064_num_vref(struct ad5064_state *st)
> @@ -623,12 +654,12 @@ static int ad5064_i2c_remove(struct i2c_client *i2c)
>  }
>  
>  static const struct i2c_device_id ad5064_i2c_ids[] = {
> -	{"ad5629-1", ID_AD5628_1},
> -	{"ad5629-2", ID_AD5628_2},
> -	{"ad5629-3", ID_AD5628_2}, /* similar enough to ad5629-2 */
> -	{"ad5669-1", ID_AD5668_1},
> -	{"ad5669-2", ID_AD5668_2},
> -	{"ad5669-3", ID_AD5668_2}, /* similar enough to ad5669-2 */
> +	{"ad5629-1", ID_AD5629_1},
> +	{"ad5629-2", ID_AD5629_2},
> +	{"ad5629-3", ID_AD5629_2}, /* similar enough to ad5629-2 */
> +	{"ad5669-1", ID_AD5669_1},
> +	{"ad5669-2", ID_AD5669_2},
> +	{"ad5669-3", ID_AD5669_2}, /* similar enough to ad5669-2 */
>  	{}
>  };
>  MODULE_DEVICE_TABLE(i2c, ad5064_i2c_ids);
> 


  reply	other threads:[~2015-10-25 12:31 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-13 16:15 [PATCH 1/2] iio:ad5064: Make sure ad5064_i2c_write() returns 0 on success Lars-Peter Clausen
2015-10-13 16:15 ` [PATCH 2/2] iio: ad5064: Fix ad5629/ad5669 shift Lars-Peter Clausen
2015-10-25 12:31   ` Jonathan Cameron [this message]
2015-10-13 16:23 ` [PATCH 1/2] iio:ad5064: Make sure ad5064_i2c_write() returns 0 on success Lars-Peter Clausen
2015-10-25 12:31   ` 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=562CCB9F.1060809@kernel.org \
    --to=jic23@kernel.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=marc.andre@netline.ch \
    --cc=pmeerw@pmeerw.net \
    /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).