All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Ezequiel Garcia <ezequiel.garcia@imgtec.com>,
	linux-iio@vger.kernel.org, Lars-Peter Clausen <lars@metafoo.de>
Cc: Naidu Tellapati <naidu.tellapati@imgtec.com>,
	James Hartley <james.hartley@imgtec.com>,
	phani.movva@imgtec.com
Subject: Re: [PATCH 2/5] iio: adc: cc10001: Fix incorrect use of power-up/power-down register
Date: Fri, 08 May 2015 09:36:26 -0400	[thread overview]
Message-ID: <554CBBDA.6040202@kernel.org> (raw)
In-Reply-To: <1431033741-1088-3-git-send-email-ezequiel.garcia@imgtec.com>

On 07/05/15 17:22, Ezequiel Garcia wrote:
> From: Naidu Tellapati <naidu.tellapati@imgtec.com>
> 
> At present we are incorrectly setting the register to 0x1 to power up
> the ADC. Since it is an active high power down register, we need to set
> the register to 0x0 to actually power up. Conversely, writing 0x1 to the
> register powers it down.
> 
> This commit adds a couple of helpers to make the code clearer and then
> use them to do the power-up/power-down properly.
> 
> Fixes: 1664f6a5b0c8 ("iio: adc: Cosmic Circuits 10001 ADC driver")
> Signed-off-by: Naidu Tellapati <naidu.tellapati@imgtec.com>
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@imgtec.com>
Applied to the fixes-togreg branch of iio.git.
Thanks,

Jonathan
> ---
>  drivers/iio/adc/cc10001_adc.c | 35 +++++++++++++++++++++--------------
>  1 file changed, 21 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/iio/adc/cc10001_adc.c b/drivers/iio/adc/cc10001_adc.c
> index 357e6c2..cf6c6fb 100644
> --- a/drivers/iio/adc/cc10001_adc.c
> +++ b/drivers/iio/adc/cc10001_adc.c
> @@ -35,8 +35,9 @@
>  #define CC10001_ADC_EOC_SET		BIT(0)
>  
>  #define CC10001_ADC_CHSEL_SAMPLED	0x0c
> -#define CC10001_ADC_POWER_UP		0x10
> -#define CC10001_ADC_POWER_UP_SET	BIT(0)
> +#define CC10001_ADC_POWER_DOWN		0x10
> +#define CC10001_ADC_POWER_DOWN_SET	BIT(0)
> +
>  #define CC10001_ADC_DEBUG		0x14
>  #define CC10001_ADC_DATA_COUNT		0x20
>  
> @@ -78,6 +79,20 @@ static inline u32 cc10001_adc_read_reg(struct cc10001_adc_device *adc_dev,
>  	return readl(adc_dev->reg_base + reg);
>  }
>  
> +static void cc10001_adc_power_up(struct cc10001_adc_device *adc_dev)
> +{
> +	cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_DOWN,
> +			      ~CC10001_ADC_POWER_DOWN_SET);
> +
> +	ndelay(adc_dev->start_delay_ns);
> +}
> +
> +static void cc10001_adc_power_down(struct cc10001_adc_device *adc_dev)
> +{
> +	cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_DOWN,
> +			      CC10001_ADC_POWER_DOWN_SET);
> +}
> +
>  static void cc10001_adc_start(struct cc10001_adc_device *adc_dev,
>  			      unsigned int channel)
>  {
> @@ -139,11 +154,7 @@ static irqreturn_t cc10001_adc_trigger_h(int irq, void *p)
>  
>  	mutex_lock(&adc_dev->lock);
>  
> -	cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_UP,
> -			      CC10001_ADC_POWER_UP_SET);
> -
> -	/* Wait for 8 (6+2) clock cycles before activating START */
> -	ndelay(adc_dev->start_delay_ns);
> +	cc10001_adc_power_up(adc_dev);
>  
>  	/* Calculate delay step for eoc and sampled data */
>  	delay_ns = adc_dev->eoc_delay_ns / CC10001_MAX_POLL_COUNT;
> @@ -167,7 +178,7 @@ static irqreturn_t cc10001_adc_trigger_h(int irq, void *p)
>  	}
>  
>  done:
> -	cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_UP, 0);
> +	cc10001_adc_power_down(adc_dev);
>  
>  	mutex_unlock(&adc_dev->lock);
>  
> @@ -186,11 +197,7 @@ static u16 cc10001_adc_read_raw_voltage(struct iio_dev *indio_dev,
>  	unsigned int delay_ns;
>  	u16 val;
>  
> -	cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_UP,
> -			      CC10001_ADC_POWER_UP_SET);
> -
> -	/* Wait for 8 (6+2) clock cycles before activating START */
> -	ndelay(adc_dev->start_delay_ns);
> +	cc10001_adc_power_up(adc_dev);
>  
>  	/* Calculate delay step for eoc and sampled data */
>  	delay_ns = adc_dev->eoc_delay_ns / CC10001_MAX_POLL_COUNT;
> @@ -199,7 +206,7 @@ static u16 cc10001_adc_read_raw_voltage(struct iio_dev *indio_dev,
>  
>  	val = cc10001_adc_poll_done(indio_dev, chan->channel, delay_ns);
>  
> -	cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_UP, 0);
> +	cc10001_adc_power_down(adc_dev);
>  
>  	return val;
>  }
> 


  reply	other threads:[~2015-05-08 18:30 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-07 21:22 [PATCH 0/5] IIO: cc10001 assorted fixes Ezequiel Garcia
2015-05-07 21:22 ` [PATCH 1/5] iio: adc: cc10001: Fix the channel number mapping Ezequiel Garcia
2015-05-08 13:36   ` Jonathan Cameron
2015-05-07 21:22 ` [PATCH 2/5] iio: adc: cc10001: Fix incorrect use of power-up/power-down register Ezequiel Garcia
2015-05-08 13:36   ` Jonathan Cameron [this message]
2015-05-07 21:22 ` [PATCH 3/5] iio: adc: cc10001: Fix regulator_get_voltage() return value check Ezequiel Garcia
2015-05-08 13:37   ` Jonathan Cameron
2015-05-07 21:22 ` [PATCH 4/5] iio: adc: cc10001: Add delay before setting START bit Ezequiel Garcia

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=554CBBDA.6040202@kernel.org \
    --to=jic23@kernel.org \
    --cc=ezequiel.garcia@imgtec.com \
    --cc=james.hartley@imgtec.com \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=naidu.tellapati@imgtec.com \
    --cc=phani.movva@imgtec.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.