summaryrefslogtreecommitdiff
path: root/drivers/staging
diff options
context:
space:
mode:
authorJinyoung Park <jinyoungp@nvidia.com>2014-03-20 17:51:56 +0900
committerMandar Padmawar <mpadmawar@nvidia.com>2014-06-05 06:16:46 -0700
commitf005bb76fb154f9979cb61bf51c19dcab3eaad3b (patch)
treec670829fdf2fc2dc37122bfd792051f652643e66 /drivers/staging
parent33d75ff704abd8b220bae4040e5e05c72b00112e (diff)
staging: iio: adc: palmas: Add current source init
Added current source initialization for CH0 and CH3 before auto conversion configuration. The current sources should be configured with preferred settings before perform auto conversion to get expected result of auto conversion. Bug 1514756 Signed-off-by: Jinyoung Park <jinyoungp@nvidia.com> Reviewed-on: http://git-master/r/414750 (cherry picked from commit d22d48a2ea781aef641498e63c1bbb827a5b0a76) Change-Id: I1c5440f8021a90f3eee4b80c3f70ab1956ac0cf5 Signed-off-by: Jinyoung Park <jinyoungp@nvidia.com> Reviewed-on: http://git-master/r/418392 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Diwakar Tundlam <dtundlam@nvidia.com>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/iio/adc/palmas_gpadc.c34
1 files changed, 25 insertions, 9 deletions
diff --git a/drivers/staging/iio/adc/palmas_gpadc.c b/drivers/staging/iio/adc/palmas_gpadc.c
index dc2e03fd2a48..92129bf550cf 100644
--- a/drivers/staging/iio/adc/palmas_gpadc.c
+++ b/drivers/staging/iio/adc/palmas_gpadc.c
@@ -330,6 +330,19 @@ static int palmas_gpadc_auto_conv_reset(struct palmas_gpadc *adc)
return 0;
}
+static inline int palmas_gpadc_set_current_src(struct palmas_gpadc *adc,
+ u8 ch0_current, u8 ch3_current)
+{
+ unsigned int mask, val;
+
+ mask = (PALMAS_GPADC_CTRL1_CURRENT_SRC_CH0_MASK |
+ PALMAS_GPADC_CTRL1_CURRENT_SRC_CH3_MASK);
+ val = (ch0_current << PALMAS_GPADC_CTRL1_CURRENT_SRC_CH0_SHIFT) |
+ (ch3_current << PALMAS_GPADC_CTRL1_CURRENT_SRC_CH3_SHIFT);
+ return palmas_update_bits(adc->palmas, PALMAS_GPADC_BASE,
+ PALMAS_GPADC_CTRL1, mask, val);
+}
+
static int palmas_gpadc_check_status(struct palmas_gpadc *adc)
{
int retry_cnt = 3;
@@ -640,16 +653,11 @@ static int palmas_gpadc_read_raw(struct iio_dev *indio_dev,
if ((adc_chan == PALMAS_ADC_CH_IN3)
&& adc->ch3_dual_current && val2) {
- unsigned int reg_mask, reg_val;
-
- reg_mask = PALMAS_GPADC_CTRL1_CURRENT_SRC_CH3_MASK;
- reg_val = ((adc->ch3_current + 1)
- << PALMAS_GPADC_CTRL1_CURRENT_SRC_CH3_SHIFT);
- ret = palmas_update_bits(adc->palmas, PALMAS_GPADC_BASE,
- PALMAS_GPADC_CTRL1,
- reg_mask, reg_val);
+ ret = palmas_gpadc_set_current_src(adc,
+ adc->ch0_current, adc->ch3_current + 1);
if (ret < 0) {
- dev_err(adc->dev, "CTRL1 update failed\n");
+ dev_err(adc->dev,
+ "Failed to set current src: %d\n", ret);
goto out;
}
@@ -1132,6 +1140,14 @@ static int palmas_gpadc_probe(struct platform_device *pdev)
else
adc->ch3_current = PALMAS_ADC_CH3_CURRENT_SRC_800;
+ /* Init current source for CH0 and CH3 */
+ ret = palmas_gpadc_set_current_src(adc, adc->ch0_current,
+ adc->ch3_current);
+ if (ret < 0) {
+ dev_err(adc->dev, "Failed to set current src: %d\n", ret);
+ goto out_irq_auto1_free;
+ }
+
/* If ch3_dual_current is true, it will measure ch3 input signal with
* ch3_current and the next current of ch3_current. */
adc->ch3_dual_current = gpadc_pdata->ch3_dual_current;