[PATCH V2] mfd: Fixed unconditional reset of the ADC reading enable bits

Uwe Kleine-König u.kleine-koenig at pengutronix.de
Mon Nov 28 08:19:18 EST 2011


On Mon, Nov 28, 2011 at 01:52:39PM +0100, Robin van der Gracht wrote:
> When the ADC is being prepared for a single or multiple channel reading,
> the adc0 register is reconfigured without taking the lithium cell, charge
> current and battery current reading enable bits into account. Which results
> in clearing the bits.
> 
> Signed-off-by: Robin van der Gracht <robin at protonic.nl>
> ---
> 
> V2: Maskes now merged to a single mask
> 
>  drivers/mfd/mc13xxx-core.c  |    4 ++--
>  include/linux/mfd/mc13xxx.h |   10 +++++++++-
>  2 files changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c
> index e9619ac..5315999 100644
> --- a/drivers/mfd/mc13xxx-core.c
> +++ b/drivers/mfd/mc13xxx-core.c
> @@ -615,13 +615,13 @@ int mc13xxx_adc_do_conversion(struct mc13xxx *mc13xxx, unsigned int mode,
>  		break;
>  
>  	case MC13XXX_ADC_MODE_SINGLE_CHAN:
> -		adc0 |= old_adc0 & MC13XXX_ADC0_TSMOD_MASK;
> +		adc0 |= old_adc0 & MC13XXX_ADC0_CONFIG_MASK;
>  		adc1 |= (channel & 0x7) << MC13XXX_ADC1_CHAN0_SHIFT;
>  		adc1 |= MC13XXX_ADC1_RAND;
>  		break;
>  
>  	case MC13XXX_ADC_MODE_MULT_CHAN:
> -		adc0 |= old_adc0 & MC13XXX_ADC0_TSMOD_MASK;
> +		adc0 |= old_adc0 & MC13XXX_ADC0_CONFIG_MASK;
>  		adc1 |= 4 << MC13XXX_ADC1_CHAN1_SHIFT;
>  		break;
>  
> diff --git a/include/linux/mfd/mc13xxx.h b/include/linux/mfd/mc13xxx.h
> index 3816c2f..c5011d4 100644
> --- a/include/linux/mfd/mc13xxx.h
> +++ b/include/linux/mfd/mc13xxx.h
> @@ -172,7 +172,10 @@ struct mc13xxx_platform_data {
>  #define MC13XXX_ADC_MODE_SINGLE_CHAN	2
>  #define MC13XXX_ADC_MODE_MULT_CHAN	3
>  
> -#define MC13XXX_ADC0		43
> +#define MC13XXX_ADC0			43
If you keep the line as is (i.e. only two tabs) you can have my Ack.
(The indention is then identical with the one used in
drivers/mfd/mc13xxx-core.c, register offsets appear further to the left
than the masks of the registers.)

Best regards
Uwe

> +#define MC13XXX_ADC0_LICELLCON		(1 << 0)
> +#define MC13XXX_ADC0_CHRGICON		(1 << 1)
> +#define MC13XXX_ADC0_BATICON		(1 << 2)
>  #define MC13XXX_ADC0_ADREFEN		(1 << 10)
>  #define MC13XXX_ADC0_TSMOD0		(1 << 12)
>  #define MC13XXX_ADC0_TSMOD1		(1 << 13)
> @@ -184,4 +187,9 @@ struct mc13xxx_platform_data {
>  					MC13XXX_ADC0_TSMOD1 | \
>  					MC13XXX_ADC0_TSMOD2)
>  
> +#define MC13XXX_ADC0_CONFIG_MASK	(MC13XXX_ADC0_TSMOD_MASK | \
> +					MC13XXX_ADC0_LICELLCON | \
> +					MC13XXX_ADC0_CHRGICON | \
> +					MC13XXX_ADC0_BATICON)
> +
>  #endif /* ifndef __LINUX_MFD_MC13XXX_H */
> -- 
> 1.7.4.1
> 
> 

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |



More information about the linux-arm-kernel mailing list