summaryrefslogtreecommitdiff
path: root/drivers/mfd/ti_am335x_tscadc.c
diff options
context:
space:
mode:
authorMiquel Raynal <miquel.raynal@bootlin.com>2021-10-15 10:14:53 +0200
committerLee Jones <lee.jones@linaro.org>2021-10-21 09:23:51 +0100
commitbf0f394c7b1e4d623ca2afdf59b3b4b95cc6f592 (patch)
treeca1afad54ccd2a97257e2ecd380974bc10b0d32c /drivers/mfd/ti_am335x_tscadc.c
parent2a4e333a2e9c99ddd27f0a05ef87aae6c3362f8a (diff)
downloadlwn-bf0f394c7b1e4d623ca2afdf59b3b4b95cc6f592.tar.gz
lwn-bf0f394c7b1e4d623ca2afdf59b3b4b95cc6f592.zip
mfd: ti_am335x_tscadc: Introduce a helper to deal with the type of hardware
One way of knowing which hardware we are dealing with is to check the compatible string. When this must be done at several places, it's best and certainly more clear to use a helper for that. Introduce ti_adc_with_touchscreen() to indicate if there is a touchscreen controller available (meaning it's an am33xx-like ADC). This helper does not indicate if it is actually used (that is the purpose of the use_tsc boolean). Introducing this helper helps making a difference in the code between what is generic to both types of ADCs and what is specific to the am33xx hardware before introducing support for the am437x hardware. Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Link: https://lore.kernel.org/r/20211015081506.933180-36-miquel.raynal@bootlin.com
Diffstat (limited to 'drivers/mfd/ti_am335x_tscadc.c')
-rw-r--r--drivers/mfd/ti_am335x_tscadc.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index f7cfe2016bbc..4f76b5498077 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -105,8 +105,9 @@ static void tscadc_idle_config(struct ti_tscadc_dev *tscadc)
{
unsigned int idleconfig;
- idleconfig = STEPCONFIG_YNN | STEPCONFIG_INM_ADCREFM |
- STEPCONFIG_INP_ADCREFM | STEPCONFIG_YPN;
+ idleconfig = STEPCONFIG_INM_ADCREFM | STEPCONFIG_INP_ADCREFM;
+ if (ti_adc_with_touchscreen(tscadc))
+ idleconfig |= STEPCONFIG_YNN | STEPCONFIG_YPN;
regmap_write(tscadc->regmap, REG_IDLECONFIG, idleconfig);
}
@@ -140,12 +141,14 @@ static int ti_tscadc_probe(struct platform_device *pdev)
tscadc->data = of_device_get_match_data(&pdev->dev);
- node = of_get_child_by_name(pdev->dev.of_node, "tsc");
- of_property_read_u32(node, "ti,wires", &tscmag_wires);
- of_property_read_u32(node, "ti,coordiante-readouts", &readouts);
- of_node_put(node);
- if (tscmag_wires)
- use_tsc = true;
+ if (ti_adc_with_touchscreen(tscadc)) {
+ node = of_get_child_by_name(pdev->dev.of_node, "tsc");
+ of_property_read_u32(node, "ti,wires", &tscmag_wires);
+ of_property_read_u32(node, "ti,coordiante-readouts", &readouts);
+ of_node_put(node);
+ if (tscmag_wires)
+ use_tsc = true;
+ }
node = of_get_child_by_name(pdev->dev.of_node, "adc");
of_property_for_each_u32(node, "ti,adc-channels", prop, cur, val) {
@@ -225,13 +228,16 @@ static int ti_tscadc_probe(struct platform_device *pdev)
* of the CTRL register but not the subsystem enable bit which must be
* added manually when timely.
*/
- tscadc->ctrl = CNTRLREG_TSC_STEPCONFIGWRT | CNTRLREG_STEPID;
- if (use_tsc) {
- tscadc->ctrl |= CNTRLREG_TSC_ENB;
- if (tscmag_wires == 5)
- tscadc->ctrl |= CNTRLREG_TSC_5WIRE;
- else
- tscadc->ctrl |= CNTRLREG_TSC_4WIRE;
+ tscadc->ctrl = CNTRLREG_STEPID;
+ if (ti_adc_with_touchscreen(tscadc)) {
+ tscadc->ctrl |= CNTRLREG_TSC_STEPCONFIGWRT;
+ if (use_tsc) {
+ tscadc->ctrl |= CNTRLREG_TSC_ENB;
+ if (tscmag_wires == 5)
+ tscadc->ctrl |= CNTRLREG_TSC_5WIRE;
+ else
+ tscadc->ctrl |= CNTRLREG_TSC_4WIRE;
+ }
}
regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);