Patch "iio: adc: cc10001: Fix incorrect use of power-up/power-down register" has been added to the 4.0-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iio: adc: cc10001: Fix incorrect use of power-up/power-down register
to the 4.0-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
iio-adc-cc10001-fix-incorrect-use-of-power-up-power-down-register.patch
and it can be found in the queue-4.0 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
713276ea88a295a79aa6633ba639ed47692a8de4Mon Sep 17 00:00:00 2001
From: Naidu Tellapati <[email protected]>
Date: Thu, 7 May 2015 18:22:18 -0300
Subject: iio: adc: cc10001: Fix incorrect use of power-up/power-down register
From: Naidu Tellapati <[email protected]>
commit 713276ea88a295a79aa6633ba639ed47692a8de4 upstream.
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.
--- drivers/iio/adc/cc10001_adc.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-)
drivers/iio/adc/cc10001_adc.c +19 -14
@@ -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,18 @@ static inline u32 cc10001_adc_read_reg(sreturn 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 ,0 ); +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 +152,7 @@ static irqreturn_t cc10001_adc_trigger_hmutex_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 +176,7 @@ static irqreturn_t cc10001_adc_trigger_h } 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 +195,7 @@ static u16 cc10001_adc_read_raw_voltage(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 +204,7 @@ static u16 cc10001_adc_read_raw_voltage( 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; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.0/iio-adc-cc10001-fix-the-channel-number-mapping.patch queue-4.0/iio-adc-cc10001-fix-regulator_get_voltage-return-value-check.patch queue-4.0/iio-adc-cc10001-add-delay-before-setting-start-bit.patch queue-4.0/iio-adc-cc10001-fix-incorrect-use-of-power-up-power-down-register.patch