linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/46] TI AM437X ADC1
@ 2021-09-02 21:50 Miquel Raynal
  2021-09-02 21:50 ` [PATCH v2 01/46] clk: ti: am43xx: Add clkctrl data for am43xx ADC1 Miquel Raynal
                   ` (45 more replies)
  0 siblings, 46 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:50 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

Hello,

This is a (fairly big) series bringing support of AM437X ADC1.
On TI AM33XX SoCs family there is an ADC that can also be connected to a
touchscreen. This hardware has been extended and is present on certain
SoCs from the AM437X family. In particular, the touchscreen has been
replaced by a magnetic card reader. In both cases, the representation is
an MFD device with two children:
- on AM33XX: the touchscreen controller and the ADC
- on AM437X: the magnetic card reader and the ADC

This series really targets small and atomic changes so that the overall
review is eased, even though it leads to a lot of rather small patches.
Here are the steps:
* Supporting the missing clock
* Translating a single text file containing the description for the
  MFD, the touchscreen and the ADC into three independent yaml files.
* Cleaning/preparing the MFD driver.
* Supporting ADC1 in the MFD driver.
* Cleaning/preparing of the ADC driver.
* Supporting ADC1 in the ADC driver.
* Updating various device trees.

Here is the full series again. I decided not to split it given the fact
that I moved things around a little bit and addressed several different
issues which impacted other patches, perhaps the next iteration if needed
will be focused on a subset of patches. The clock patch has been acked,
the ADC patches almost as well, so we expect the series to go through
the MFD tree now.

Thanks,
Miquèl

Changes in v2:
* Added various R-by/A-by tags.
* Various typos & style fixes.
[Bindings]
* Included the missing ti,am654-tscadc compatible.
* Reworded the compatible lines as requested by Jonathan.
* Reworded the bindings content a little bit as advised by Rob (subnodes
  being objects, MFD descriptions provided once, status and unused
  labels removed).
[SPDX changes]
* Mentioned that the license macro and the license text matched.
* Also added an SPDX tag in the MFD header.
[MFD header]
* Used the BIT(), GENMASK() and PREP_FIELD() macros when relevant.
[MFD driver]
* Did not reordered the variables declared on the probe stack as advised
  by Jonathan.
* Added missing of_node_put() calls.
* Moved the patch changing the place where the main structure is
  allocated to directly precede the patch using this change.
* Fixed the driver data wiring (bug happening between ex patches 16 and
  28).
* Added a commit just to explain the reordering of the register writes
  during initialization/resume.
* Explained the check about 'use_tsc' in the commit message.
* Added a link to the TRM in a commit message referencing it.
* Removed the use of the ti,tracks property, used a constant value
  instead.
* Dropped the error check when retrieving the "wrong" DT property
  (coordiante-readouts) which is unused.

Miquel Raynal (46):
  clk: ti: am43xx: Add clkctrl data for am43xx ADC1
  dt-bindings: mfd: ti,am3359-tscadc: Add a yaml description for this
    MFD
  dt-bindings: touchscreen: ti,am3359-tsc: New yaml description
  dt-bindings: iio: adc: ti,am3359-adc: New yaml description
  dt-bindings: touchscreen: ti,am3359-tsc: Remove deprecated text file
  dt-bindings: mfd: ti,am3359-tscadc: Describe am4372 MFD compatible
  dt-bindings: iio: adc: ti,am3359-adc: Describe am4372 ADC compatible
  mfd: ti_am335x_tscadc: Replace license text with SPDX tag
  mfd: ti_am335x_tscadc: Fix style
  mfd: ti_am335x_tscadc: Drop extra spacing when declaring stack
    variables
  mfd: ti_am335x_tscadc: Ensure a balanced number of node get/put
  mfd: ti_am335x_tscadc: Get rid of useless gotos
  mfd: ti_am335x_tscadc: Reword the comment explaining the dividers
  mfd: ti_am335x_tscadc: Don't search the tree for our clock
  mfd: ti_am335x_tscadc: Simplify divisor calculation
  mfd: ti_am335x_tscadc: Move the driver structure allocation earlier
  mfd: ti_am335x_tscadc: Use driver data
  mfd: ti_am335x_tscadc: Mimic the probe from resume()
  mfd: ti_am335x_tscadc: Drop useless variables from the driver
    structure
  mfd: ti_am335x_tscadc: Always provide an idle configuration
  mfd: ti_am335x_tscadc: Reorder the initialization steps
  mfd: ti_am335x_tscadc: Gather the ctrl register logic in one place
  mfd: ti_am335x_tscadc: Replace the header license text with SPDX tag
  mfd: ti_am335x_tscadc: Fix header spacing
  mfd: ti_am335x_tscadc: Use BIT() and GENMASK() when relevant in the
    header
  mfd: ti_am335x_tscadc: Use FIELD_PREP() when relevant in the header
  mfd: ti_am335x_tscadc: Rename the subsystem enable macro
  mfd: ti_am335x_tscadc: Add TSC prefix in certain macros
  mfd: ti_am335x_tscadc: Rename a variable
  mfd: ti_am335x_tscadc: Fix an error message
  mfd: ti_am335x_tscadc: Add a boolean to clarify the presence of a
    touchscreen
  mfd: ti_am335x_tscadc: Introduce has_tsc
  mfd: ti_am335x_tscadc: Move control register configuration
  mfd: ti_am335x_tscadc: Add ADC1/magnetic reader support
  mfd: ti_am335x_tscadc: Support the correctly spelled DT property
  iio: adc: ti_am335x_adc: Wait the idle state to avoid stalls
  iio: adc: ti_am335x_adc: Replace license text with SPDX tag
  iio: adc: ti_am335x_adc: Fix style
  iio: adc: ti_am335x_adc: Get rid of useless gotos
  iio: adc: ti_am335x_adc: Gather the checks on the delays
  iio: adc: ti_am335x_adc: Add a unit to the timeout delay
  iio: adc: ti_am335x_adc: Add the scale information
  iio: adc: ti_am335x_adc: Add the am437x compatible
  ARM: dts: am437x-cm-t43: Use a correctly spelled DT property
  ARM: dts: am43xx: Describe the magnetic reader/ADC1 hardware module
  ARM: dts: am437x-gp-evm: enable ADC1

 .../bindings/iio/adc/ti,am3359-adc.yaml       |  70 +++++
 .../input/touchscreen/ti,am3359-tsc.yaml      |  76 ++++++
 .../bindings/input/touchscreen/ti-tsc-adc.txt |  91 -------
 .../bindings/mfd/ti,am3359-tscadc.yaml        |  84 ++++++
 arch/arm/boot/dts/am437x-cm-t43.dts           |   2 +-
 arch/arm/boot/dts/am437x-gp-evm.dts           |   8 +
 arch/arm/boot/dts/am437x-l4.dtsi              |  31 ++-
 arch/arm/boot/dts/am43xx-clocks.dtsi          |   7 +
 drivers/clk/ti/clk-43xx.c                     |   1 +
 drivers/iio/adc/ti_am335x_adc.c               | 217 +++++++++-------
 drivers/mfd/ti_am335x_tscadc.c                | 242 ++++++++++--------
 include/dt-bindings/clock/am4.h               |   1 +
 include/linux/mfd/ti_am335x_tscadc.h          | 127 ++++-----
 13 files changed, 609 insertions(+), 348 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/ti,am3359-adc.yaml
 create mode 100644 Documentation/devicetree/bindings/input/touchscreen/ti,am3359-tsc.yaml
 delete mode 100644 Documentation/devicetree/bindings/input/touchscreen/ti-tsc-adc.txt
 create mode 100644 Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml

-- 
2.27.0


^ permalink raw reply	[flat|nested] 77+ messages in thread

* [PATCH v2 01/46] clk: ti: am43xx: Add clkctrl data for am43xx ADC1
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
@ 2021-09-02 21:50 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 02/46] dt-bindings: mfd: ti,am3359-tscadc: Add a yaml description for this MFD Miquel Raynal
                   ` (44 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:50 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Stephen Boyd

Declare ADC1 clkctrl which feeds the magnetic-reader/ADC1 hardware
module.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Stephen Boyd <sboyd@kernel.org>
---
 drivers/clk/ti/clk-43xx.c       | 1 +
 include/dt-bindings/clock/am4.h | 1 +
 2 files changed, 2 insertions(+)

diff --git a/drivers/clk/ti/clk-43xx.c b/drivers/clk/ti/clk-43xx.c
index e5538d577ce5..4a7900628f0c 100644
--- a/drivers/clk/ti/clk-43xx.c
+++ b/drivers/clk/ti/clk-43xx.c
@@ -116,6 +116,7 @@ static const struct omap_clkctrl_reg_data am4_l3s_clkctrl_regs[] __initconst = {
 	{ AM4_L3S_VPFE0_CLKCTRL, NULL, CLKF_SW_SUP, "l3_gclk" },
 	{ AM4_L3S_VPFE1_CLKCTRL, NULL, CLKF_SW_SUP, "l3_gclk" },
 	{ AM4_L3S_GPMC_CLKCTRL, NULL, CLKF_SW_SUP, "l3s_gclk" },
+	{ AM4_L3S_ADC1_CLKCTRL, NULL, CLKF_SW_SUP, "l3s_gclk" },
 	{ AM4_L3S_MCASP0_CLKCTRL, NULL, CLKF_SW_SUP, "mcasp0_fck" },
 	{ AM4_L3S_MCASP1_CLKCTRL, NULL, CLKF_SW_SUP, "mcasp1_fck" },
 	{ AM4_L3S_MMC3_CLKCTRL, NULL, CLKF_SW_SUP, "mmc_clk" },
diff --git a/include/dt-bindings/clock/am4.h b/include/dt-bindings/clock/am4.h
index d961e7cb3682..4be6c5961f34 100644
--- a/include/dt-bindings/clock/am4.h
+++ b/include/dt-bindings/clock/am4.h
@@ -158,6 +158,7 @@
 #define AM4_L3S_VPFE0_CLKCTRL	AM4_L3S_CLKCTRL_INDEX(0x68)
 #define AM4_L3S_VPFE1_CLKCTRL	AM4_L3S_CLKCTRL_INDEX(0x70)
 #define AM4_L3S_GPMC_CLKCTRL	AM4_L3S_CLKCTRL_INDEX(0x220)
+#define AM4_L3S_ADC1_CLKCTRL	AM4_L3S_CLKCTRL_INDEX(0x230)
 #define AM4_L3S_MCASP0_CLKCTRL	AM4_L3S_CLKCTRL_INDEX(0x238)
 #define AM4_L3S_MCASP1_CLKCTRL	AM4_L3S_CLKCTRL_INDEX(0x240)
 #define AM4_L3S_MMC3_CLKCTRL	AM4_L3S_CLKCTRL_INDEX(0x248)
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 02/46] dt-bindings: mfd: ti,am3359-tscadc: Add a yaml description for this MFD
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
  2021-09-02 21:50 ` [PATCH v2 01/46] clk: ti: am43xx: Add clkctrl data for am43xx ADC1 Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-03 16:05   ` Rob Herring
  2021-09-05 11:57   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 03/46] dt-bindings: touchscreen: ti,am3359-tsc: New yaml description Miquel Raynal
                   ` (43 subsequent siblings)
  45 siblings, 2 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

There is a very light description of this MFD in a text file dedicated
to a touchscreen controller (which is one of the two children of the
MFD). Here is now a complete yaml description.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 .../bindings/mfd/ti,am3359-tscadc.yaml        | 79 +++++++++++++++++++
 1 file changed, 79 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml

diff --git a/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml b/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml
new file mode 100644
index 000000000000..b2bff85f2329
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml
@@ -0,0 +1,79 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mfd/ti,am3359-tscadc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: TI AM3359 Touchscreen controller/ADC
+
+maintainers:
+  - Miquel Raynal <miquel.raynal@bootlin.com>
+
+properties:
+  compatible:
+    oneOf:
+      - const: ti,am3359-tscadc
+      - items:
+          - const: ti,am654-tscadc
+          - const: ti,am3359-tscadc
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  clocks:
+    maxItems: 1
+
+  clock-names:
+    const: fck
+
+  dmas:
+    items:
+      - description: DMA controller phandle and request line for FIFO0
+      - description: DMA controller phandle and request line for FIFO1
+
+  dma-names:
+    items:
+      - const: fifo0
+      - const: fifo1
+
+  adc:
+    type: object
+    description: ADC child
+
+  tsc:
+    type: object
+    description: Touchscreen controller child
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - clock-names
+  - dmas
+  - dma-names
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+    tscadc@0 {
+        compatible = "ti,am3359-tscadc";
+        reg = <0x0 0x1000>;
+        interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
+        clocks = <&adc_tsc_fck>;
+        clock-names = "fck";
+        dmas = <&edma 53 0>, <&edma 57 0>;
+        dma-names = "fifo0", "fifo1";
+
+        tsc {
+        };
+
+        adc {
+        };
+    };
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 03/46] dt-bindings: touchscreen: ti,am3359-tsc: New yaml description
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
  2021-09-02 21:50 ` [PATCH v2 01/46] clk: ti: am43xx: Add clkctrl data for am43xx ADC1 Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 02/46] dt-bindings: mfd: ti,am3359-tscadc: Add a yaml description for this MFD Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-03 16:06   ` Rob Herring
  2021-09-05 11:59   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 04/46] dt-bindings: iio: adc: ti,am3359-adc: " Miquel Raynal
                   ` (42 subsequent siblings)
  45 siblings, 2 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

This touchscreen controller is already described in a text file:
Documentation/devicetree/bindings/input/touchscreen/ti-tsc-adc.txt

After introducing a proper description of the MFD, this is the second
step. The file cannot be removed yet as it also contains an ADC
description.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 .../input/touchscreen/ti,am3359-tsc.yaml      | 76 +++++++++++++++++++
 1 file changed, 76 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/input/touchscreen/ti,am3359-tsc.yaml

diff --git a/Documentation/devicetree/bindings/input/touchscreen/ti,am3359-tsc.yaml b/Documentation/devicetree/bindings/input/touchscreen/ti,am3359-tsc.yaml
new file mode 100644
index 000000000000..e44cc65abc8c
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/touchscreen/ti,am3359-tsc.yaml
@@ -0,0 +1,76 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/input/touchscreen/ti,am3359-tsc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: TI AM3359 Touchscreen controller
+
+maintainers:
+  - Miquel Raynal <miquel.raynal@bootlin.com>
+
+properties:
+  compatible:
+    const: ti,am3359-tsc
+
+  ti,wires:
+    description: Wires refer to application modes i.e. 4/5/8 wire touchscreen
+      support on the platform.
+    $ref: /schemas/types.yaml#/definitions/uint32
+    enum: [4, 5, 8]
+
+  ti,x-plate-resistance:
+    description: X plate resistance
+    $ref: /schemas/types.yaml#/definitions/uint32
+
+  ti,coordinate-readouts:
+    description: The sequencer supports a total of 16 programmable steps. Each
+      step is used to read a single coordinate. A single readout is enough but
+      multiple reads can increase the quality. A value of 5 means, 5 reads for
+      X, 5 for Y and 2 for Z (always). This utilises 12 of the 16 software steps
+      available. The remaining 4 can be used by the ADC.
+    $ref: /schemas/types.yaml#/definitions/uint32
+    minimum: 1
+    maximum: 6
+
+  ti,wire-config:
+    description: Different boards could have a different order for connecting
+      wires on touchscreen. We need to provide an 8-bit number where the
+      first four bits represent the analog lines and the next 4 bits represent
+      positive/negative terminal on that input line. Notations to represent the
+      input lines and terminals respectively are as follows, AIN0 = 0, AIN1 = 1
+      and so on until AIN7 = 7. XP = 0, XN = 1, YP = 2, YN = 3.
+    $ref: /schemas/types.yaml#/definitions/uint32-array
+    minItems: 4
+    maxItems: 8
+
+  ti,charge-delay:
+    description: Length of touch screen charge delay step in terms of ADC clock
+      cycles. Charge delay value should be large in order to avoid false pen-up
+      events. This value effects the overall sampling speed, hence need to be
+      kept as low as possible, while avoiding false pen-up event. Start from a
+      lower value, say 0x400, and increase value until false pen-up events are
+      avoided. The pen-up detection happens immediately after the charge step,
+      so this does in fact function as a hardware knob for adjusting the amount
+      of "settling time".
+    $ref: /schemas/types.yaml#/definitions/uint32
+
+required:
+  - compatible
+  - ti,wires
+  - ti,x-plate-resistance
+  - ti,coordinate-readouts
+  - ti,wire-config
+
+additionalProperties: false
+
+examples:
+  - |
+    tsc {
+        compatible = "ti,am3359-tsc";
+        ti,wires = <4>;
+        ti,x-plate-resistance = <200>;
+        ti,coordinate-readouts = <5>;
+        ti,wire-config = <0x00 0x11 0x22 0x33>;
+        ti,charge-delay = <0x400>;
+    };
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 04/46] dt-bindings: iio: adc: ti,am3359-adc: New yaml description
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (2 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 03/46] dt-bindings: touchscreen: ti,am3359-tsc: New yaml description Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-03 16:07   ` Rob Herring
  2021-09-02 21:51 ` [PATCH v2 05/46] dt-bindings: touchscreen: ti,am3359-tsc: Remove deprecated text file Miquel Raynal
                   ` (41 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

This ADC was already described in a text file also containing an MFD
description an a touchscreen description:
Documentation/devicetree/bindings/input/touchscreen/ti-tsc-adc.txt
Let's add a proper description for this hardware.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 .../bindings/iio/adc/ti,am3359-adc.yaml       | 68 +++++++++++++++++++
 1 file changed, 68 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/ti,am3359-adc.yaml

diff --git a/Documentation/devicetree/bindings/iio/adc/ti,am3359-adc.yaml b/Documentation/devicetree/bindings/iio/adc/ti,am3359-adc.yaml
new file mode 100644
index 000000000000..f262402ca037
--- /dev/null
+++ b/Documentation/devicetree/bindings/iio/adc/ti,am3359-adc.yaml
@@ -0,0 +1,68 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/adc/ti,am3359-adc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: TI AM3359 ADC
+
+maintainers:
+  - Miquel Raynal <miquel.raynal@bootlin.com>
+
+properties:
+  compatible:
+    const: ti,am3359-adc
+
+  '#io-channel-cells':
+    const: 1
+
+  ti,adc-channels:
+    description: List of analog inputs available for ADC. AIN0 = 0, AIN1 = 1 and
+      so on until AIN7 = 7.
+    $ref: /schemas/types.yaml#/definitions/uint32-array
+    minItems: 1
+    maxItems: 8
+
+  ti,chan-step-opendelay:
+    description: List of open delays for each channel of ADC in the order of
+      ti,adc-channels. The value corresponds to the number of ADC clock cycles
+      to wait after applying the step configuration registers and before sending
+      the start of ADC conversion. Maximum value is 0x3FFFF.
+    $ref: /schemas/types.yaml#/definitions/uint32-array
+    minItems: 1
+    maxItems: 8
+
+  ti,chan-step-sampledelay:
+    description: List of sample delays for each channel of ADC in the order of
+      ti,adc-channels. The value corresponds to the number of ADC clock cycles
+      to sample (to hold start of conversion high). Maximum value is 0xFF.
+    $ref: /schemas/types.yaml#/definitions/uint32-array
+    minItems: 1
+    maxItems: 8
+
+  ti,chan-step-avg:
+    description: Number of averages to be performed for each channel of ADC. If
+      average is 16 (this is also the maximum) then input is sampled 16 times
+      and averaged to get more accurate value. This increases the time taken by
+      ADC to generate a sample. Maximum value is 16.
+    $ref: /schemas/types.yaml#/definitions/uint32-array
+    minItems: 1
+    maxItems: 8
+
+required:
+  - compatible
+  - '#io-channel-cells'
+  - ti,adc-channels
+
+additionalProperties: false
+
+examples:
+  - |
+    adc {
+        compatible = "ti,am3359-adc";
+        #io-channel-cells = <1>;
+        ti,adc-channels = <4 5 6 7>;
+        ti,chan-step-opendelay = <0x098 0x3ffff 0x098 0x0>;
+        ti,chan-step-sampledelay = <0xff 0x0 0xf 0x0>;
+        ti,chan-step-avg = <16 2 4 8>;
+    };
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 05/46] dt-bindings: touchscreen: ti,am3359-tsc: Remove deprecated text file
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (3 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 04/46] dt-bindings: iio: adc: ti,am3359-adc: " Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 06/46] dt-bindings: mfd: ti,am3359-tscadc: Describe am4372 MFD compatible Miquel Raynal
                   ` (40 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron,
	Rob Herring

Now that the three hardware peaces described in this file have been
translated in yaml in 3 dedicated files (MFD, touchscreen controller and
ADC) it is time to remove this text file.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Acked-by: Rob Herring <robh@kernel.org>
---
 .../bindings/input/touchscreen/ti-tsc-adc.txt | 91 -------------------
 1 file changed, 91 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/input/touchscreen/ti-tsc-adc.txt

diff --git a/Documentation/devicetree/bindings/input/touchscreen/ti-tsc-adc.txt b/Documentation/devicetree/bindings/input/touchscreen/ti-tsc-adc.txt
deleted file mode 100644
index aad5e34965eb..000000000000
--- a/Documentation/devicetree/bindings/input/touchscreen/ti-tsc-adc.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-* TI - TSC ADC (Touschscreen and analog digital converter)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Required properties:
-- mfd
-	compatible: Should be
-		"ti,am3359-tscadc" for AM335x/AM437x SoCs
-		"ti,am654-tscadc", "ti,am3359-tscadc" for AM654 SoCs
-- child "tsc"
-	compatible: Should be "ti,am3359-tsc".
-	ti,wires: Wires refer to application modes i.e. 4/5/8 wire touchscreen
-		  support on the platform.
-	ti,x-plate-resistance: X plate resistance
-	ti,coordinate-readouts: The sequencer supports a total of 16
-				programmable steps each step is used to
-				read a single coordinate. A single
-                                readout is enough but multiple reads can
-				increase the quality.
-				A value of 5 means, 5 reads for X, 5 for
-				Y and 2 for Z (always). This utilises 12
-				of the 16 software steps available. The
-				remaining 4 can be used by the ADC.
-	ti,wire-config: Different boards could have a different order for
-			connecting wires on touchscreen. We need to provide an
-			8 bit number where in the 1st four bits represent the
-			analog lines and the next 4 bits represent positive/
-			negative terminal on that input line. Notations to
-			represent the input lines and terminals resoectively
-			is as follows:
-			AIN0 = 0, AIN1 = 1 and so on till AIN7 = 7.
-			XP  = 0, XN = 1, YP = 2, YN = 3.
-- child "adc"
-	compatible: Should be
-		    "ti,am3359-adc" for AM335x/AM437x SoCs
-		    "ti,am654-adc", "ti,am3359-adc" for AM654 SoCs
-	ti,adc-channels: List of analog inputs available for ADC.
-			 AIN0 = 0, AIN1 = 1 and so on till AIN7 = 7.
-
-Optional properties:
-- child "tsc"
-	ti,charge-delay: Length of touch screen charge delay step in terms of
-			 ADC clock cycles. Charge delay value should be large
-			 in order to avoid false pen-up events. This value
-			 effects the overall sampling speed, hence need to be
-			 kept as low as possible, while avoiding false pen-up
-			 event. Start from a lower value, say 0x400, and
-			 increase value until false pen-up events are avoided.
-			 The pen-up detection happens immediately after the
-			 charge step, so this does in fact function as a
-			 hardware knob for adjusting the amount of "settling
-			 time".
-
-- child "adc"
-	ti,chan-step-opendelay: List of open delays for each channel of
-				ADC in the order of ti,adc-channels. The
-				value corresponds to the number of ADC
-				clock cycles to wait after applying the
-				step configuration registers and before
-				sending the start of ADC conversion.
-				Maximum value is 0x3FFFF.
-       ti,chan-step-sampledelay: List of sample delays for each channel
-				  of ADC in the order of ti,adc-channels.
-				  The value corresponds to the number of
-				  ADC clock cycles to sample (to hold
-				  start of conversion high).
-				  Maximum value is 0xFF.
-       ti,chan-step-avg: Number of averages to be performed for each
-			  channel of ADC. If average is 16 then input
-			  is sampled 16 times and averaged to get more
-			  accurate value. This increases the time taken
-			  by ADC to generate a sample. Valid range is 0
-			  average to 16 averages. Maximum value is 16.
-
-Example:
-	tscadc: tscadc@44e0d000 {
-		compatible = "ti,am3359-tscadc";
-		tsc {
-			ti,wires = <4>;
-			ti,x-plate-resistance = <200>;
-			ti,coordiante-readouts = <5>;
-			ti,wire-config = <0x00 0x11 0x22 0x33>;
-			ti,charge-delay = <0x400>;
-		};
-
-		adc {
-			ti,adc-channels = <4 5 6 7>;
-			ti,chan-step-opendelay = <0x098 0x3ffff 0x098 0x0>;
-			ti,chan-step-sampledelay = <0xff 0x0 0xf 0x0>;
-			ti,chan-step-avg = <16 2 4 8>;
-		};
-	}
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 06/46] dt-bindings: mfd: ti,am3359-tscadc: Describe am4372 MFD compatible
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (4 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 05/46] dt-bindings: touchscreen: ti,am3359-tsc: Remove deprecated text file Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 12:01   ` Jonathan Cameron
  2021-09-07 19:04   ` Rob Herring
  2021-09-02 21:51 ` [PATCH v2 07/46] dt-bindings: iio: adc: ti,am3359-adc: Describe am4372 ADC compatible Miquel Raynal
                   ` (39 subsequent siblings)
  45 siblings, 2 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

A more recent version of the am3359 ADC/Touchscreen controller is
available on certain SoCs of the am437x family. This IP has evolved a
little bit and deserves its own compatible.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml b/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml
index b2bff85f2329..34bf6a01436f 100644
--- a/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml
+++ b/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml
@@ -16,6 +16,7 @@ properties:
       - items:
           - const: ti,am654-tscadc
           - const: ti,am3359-tscadc
+      - const: ti,am4372-magadc
 
   reg:
     maxItems: 1
@@ -47,6 +48,10 @@ properties:
     type: object
     description: Touchscreen controller child
 
+  mag:
+    type: object
+    description: Magnetic reader
+
 required:
   - compatible
   - reg
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 07/46] dt-bindings: iio: adc: ti,am3359-adc: Describe am4372 ADC compatible
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (5 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 06/46] dt-bindings: mfd: ti,am3359-tscadc: Describe am4372 MFD compatible Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-07 19:05   ` Rob Herring
  2021-09-02 21:51 ` [PATCH v2 08/46] mfd: ti_am335x_tscadc: Replace license text with SPDX tag Miquel Raynal
                   ` (38 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

A more recent version of the am3359 ADC is available on certain SoCs of
the am437x family. This IP has evolved a little bit and deserves its own
compatible.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 Documentation/devicetree/bindings/iio/adc/ti,am3359-adc.yaml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/iio/adc/ti,am3359-adc.yaml b/Documentation/devicetree/bindings/iio/adc/ti,am3359-adc.yaml
index f262402ca037..d6f21d5cccd7 100644
--- a/Documentation/devicetree/bindings/iio/adc/ti,am3359-adc.yaml
+++ b/Documentation/devicetree/bindings/iio/adc/ti,am3359-adc.yaml
@@ -11,7 +11,9 @@ maintainers:
 
 properties:
   compatible:
-    const: ti,am3359-adc
+    enum:
+      - ti,am3359-adc
+      - ti,am4372-adc
 
   '#io-channel-cells':
     const: 1
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 08/46] mfd: ti_am335x_tscadc: Replace license text with SPDX tag
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (6 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 07/46] dt-bindings: iio: adc: ti,am3359-adc: Describe am4372 ADC compatible Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 09/46] mfd: ti_am335x_tscadc: Fix style Miquel Raynal
                   ` (37 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

Drop the text license and replace it with an equivalent SPDX license tag
identifier which also matches the MODULE_LICENSE(GPL) macro.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 0e6e25308190..45262ca7734a 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -1,16 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * TI Touch Screen / ADC MFD driver
  *
  * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation version 2.
- *
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
- * kind, whether express or implied; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
  */
 
 #include <linux/module.h>
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 09/46] mfd: ti_am335x_tscadc: Fix style
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (7 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 08/46] mfd: ti_am335x_tscadc: Replace license text with SPDX tag Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 10/46] mfd: ti_am335x_tscadc: Drop extra spacing when declaring stack variables Miquel Raynal
                   ` (36 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

These are mostly deffects reported by checkpatch.pl.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 45262ca7734a..540c6dcef541 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -140,15 +140,17 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 		adc_channels++;
 		if (val > 7) {
 			dev_err(&pdev->dev, " PIN numbers are 0..7 (not %d)\n",
-					val);
+				val);
 			return -EINVAL;
 		}
 	}
+
 	total_channels = tsc_wires + adc_channels;
 	if (total_channels > 8) {
 		dev_err(&pdev->dev, "Number of i/p channels more than 8\n");
 		return -EINVAL;
 	}
+
 	if (total_channels == 0) {
 		dev_err(&pdev->dev, "Need atleast one channel.\n");
 		return -EINVAL;
@@ -170,8 +172,9 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	if (err < 0) {
 		dev_err(&pdev->dev, "no irq ID is specified.\n");
 		goto ret;
-	} else
+	} else {
 		tscadc->irq = err;
+	}
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	tscadc->tscadc_base = devm_ioremap_resource(&pdev->dev, res);
@@ -180,7 +183,8 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 
 	tscadc->tscadc_phys_base = res->start;
 	tscadc->regmap = devm_regmap_init_mmio(&pdev->dev,
-			tscadc->tscadc_base, &tscadc_regmap_config);
+					       tscadc->tscadc_base,
+					       &tscadc_regmap_config);
 	if (IS_ERR(tscadc->regmap)) {
 		dev_err(&pdev->dev, "regmap init failed\n");
 		err = PTR_ERR(tscadc->regmap);
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 10/46] mfd: ti_am335x_tscadc: Drop extra spacing when declaring stack variables
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (8 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 09/46] mfd: ti_am335x_tscadc: Fix style Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 12:03   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 11/46] mfd: ti_am335x_tscadc: Ensure a balanced number of node get/put Miquel Raynal
                   ` (35 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

Many variables will be updated (renamed, dropped, added) in the upcoming
changes, so let's simplify the style to avoid messing with spaces over
and over again.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 540c6dcef541..858bd22c60f0 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -113,18 +113,18 @@ static void tscadc_idle_config(struct ti_tscadc_dev *tscadc)
 
 static	int ti_tscadc_probe(struct platform_device *pdev)
 {
-	struct ti_tscadc_dev	*tscadc;
-	struct resource		*res;
-	struct clk		*clk;
-	struct device_node	*node;
-	struct mfd_cell		*cell;
-	struct property         *prop;
-	const __be32            *cur;
-	u32			val;
-	int			err, ctrl;
-	int			clock_rate;
-	int			tsc_wires = 0, adc_channels = 0, total_channels;
-	int			readouts = 0;
+	struct ti_tscadc_dev *tscadc;
+	struct resource *res;
+	struct clk *clk;
+	struct device_node *node;
+	struct mfd_cell *cell;
+	struct property *prop;
+	const __be32 *cur;
+	u32 val;
+	int err, ctrl;
+	int clock_rate;
+	int tsc_wires = 0, adc_channels = 0, total_channels;
+	int readouts = 0;
 
 	if (!pdev->dev.of_node) {
 		dev_err(&pdev->dev, "Could not find valid DT data.\n");
@@ -278,7 +278,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 
 static int ti_tscadc_remove(struct platform_device *pdev)
 {
-	struct ti_tscadc_dev	*tscadc = platform_get_drvdata(pdev);
+	struct ti_tscadc_dev *tscadc = platform_get_drvdata(pdev);
 
 	regmap_write(tscadc->regmap, REG_SE, 0x00);
 
@@ -297,7 +297,7 @@ static int __maybe_unused ti_tscadc_can_wakeup(struct device *dev, void *data)
 
 static int __maybe_unused tscadc_suspend(struct device *dev)
 {
-	struct ti_tscadc_dev	*tscadc = dev_get_drvdata(dev);
+	struct ti_tscadc_dev *tscadc = dev_get_drvdata(dev);
 
 	regmap_write(tscadc->regmap, REG_SE, 0x00);
 	if (device_for_each_child(dev, NULL, ti_tscadc_can_wakeup)) {
@@ -315,7 +315,7 @@ static int __maybe_unused tscadc_suspend(struct device *dev)
 
 static int __maybe_unused tscadc_resume(struct device *dev)
 {
-	struct ti_tscadc_dev	*tscadc = dev_get_drvdata(dev);
+	struct ti_tscadc_dev *tscadc = dev_get_drvdata(dev);
 	u32 ctrl;
 
 	pm_runtime_get_sync(dev);
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 11/46] mfd: ti_am335x_tscadc: Ensure a balanced number of node get/put
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (9 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 10/46] mfd: ti_am335x_tscadc: Drop extra spacing when declaring stack variables Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 12:06   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 12/46] mfd: ti_am335x_tscadc: Get rid of useless gotos Miquel Raynal
                   ` (34 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

of_node_put() should be called after a successful of_get_child_by_name().

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 858bd22c60f0..763bbc33fc3f 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -134,6 +134,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	node = of_get_child_by_name(pdev->dev.of_node, "tsc");
 	of_property_read_u32(node, "ti,wires", &tsc_wires);
 	of_property_read_u32(node, "ti,coordiante-readouts", &readouts);
+	of_node_put(node);
 
 	node = of_get_child_by_name(pdev->dev.of_node, "adc");
 	of_property_for_each_u32(node, "ti,adc-channels", prop, cur, val) {
@@ -141,10 +142,13 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 		if (val > 7) {
 			dev_err(&pdev->dev, " PIN numbers are 0..7 (not %d)\n",
 				val);
+			of_node_put(node);
 			return -EINVAL;
 		}
 	}
 
+	of_node_put(node);
+
 	total_channels = tsc_wires + adc_channels;
 	if (total_channels > 8) {
 		dev_err(&pdev->dev, "Number of i/p channels more than 8\n");
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 12/46] mfd: ti_am335x_tscadc: Get rid of useless gotos
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (10 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 11/46] mfd: ti_am335x_tscadc: Ensure a balanced number of node get/put Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 13/46] mfd: ti_am335x_tscadc: Reword the comment explaining the dividers Miquel Raynal
                   ` (33 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

Gotos jumping to a return statement are not really useful, drop them.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 763bbc33fc3f..984206521eca 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -175,7 +175,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	err = platform_get_irq(pdev, 0);
 	if (err < 0) {
 		dev_err(&pdev->dev, "no irq ID is specified.\n");
-		goto ret;
+		return err;
 	} else {
 		tscadc->irq = err;
 	}
@@ -191,8 +191,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 					       &tscadc_regmap_config);
 	if (IS_ERR(tscadc->regmap)) {
 		dev_err(&pdev->dev, "regmap init failed\n");
-		err = PTR_ERR(tscadc->regmap);
-		goto ret;
+		return PTR_ERR(tscadc->regmap);
 	}
 
 	spin_lock_init(&tscadc->reg_lock);
@@ -276,7 +275,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 err_disable_clk:
 	pm_runtime_put_sync(&pdev->dev);
 	pm_runtime_disable(&pdev->dev);
-ret:
+
 	return err;
 }
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 13/46] mfd: ti_am335x_tscadc: Reword the comment explaining the dividers
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (11 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 12/46] mfd: ti_am335x_tscadc: Get rid of useless gotos Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 14/46] mfd: ti_am335x_tscadc: Don't search the tree for our clock Miquel Raynal
                   ` (32 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

The comment misses the main information which is that we assume that a
sample takes 15 ADC clock cycles to be generated. Let's take the
occasion to rework a little bit this comment.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 984206521eca..177d1244a677 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -201,12 +201,12 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	pm_runtime_get_sync(&pdev->dev);
 
 	/*
-	 * The TSC_ADC_Subsystem has 2 clock domains
-	 * OCP_CLK and ADC_CLK.
-	 * The ADC clock is expected to run at target of 3MHz,
-	 * and expected to capture 12-bit data at a rate of 200 KSPS.
-	 * The TSC_ADC_SS controller design assumes the OCP clock is
-	 * at least 6x faster than the ADC clock.
+	 * The TSC_ADC_Subsystem has 2 clock domains: OCP_CLK and ADC_CLK.
+	 * ADCs produce a 12-bit sample every 15 ADC_CLK cycles.
+	 * am33xx ADCs expect to capture 200ksps.
+	 * We need the ADC clocks to run at 3MHz.
+	 * This frequency is valid since TSC_ADC_SS controller design
+	 * assumes the OCP clock is at least 6x faster than the ADC clock.
 	 */
 	clk = devm_clk_get(&pdev->dev, "adc_tsc_fck");
 	if (IS_ERR(clk)) {
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 14/46] mfd: ti_am335x_tscadc: Don't search the tree for our clock
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (12 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 13/46] mfd: ti_am335x_tscadc: Reword the comment explaining the dividers Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 15/46] mfd: ti_am335x_tscadc: Simplify divisor calculation Miquel Raynal
                   ` (31 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

There is a single clock available in our node, which is named
"fck". The clock handler then points to adc_tsc_fck but no need to point
directly to it and do a full tree search.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 177d1244a677..2a2f5036e06f 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -208,7 +208,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	 * This frequency is valid since TSC_ADC_SS controller design
 	 * assumes the OCP clock is at least 6x faster than the ADC clock.
 	 */
-	clk = devm_clk_get(&pdev->dev, "adc_tsc_fck");
+	clk = devm_clk_get(&pdev->dev, NULL);
 	if (IS_ERR(clk)) {
 		dev_err(&pdev->dev, "failed to get TSC fck\n");
 		err = PTR_ERR(clk);
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 15/46] mfd: ti_am335x_tscadc: Simplify divisor calculation
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (13 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 14/46] mfd: ti_am335x_tscadc: Don't search the tree for our clock Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 16/46] mfd: ti_am335x_tscadc: Move the driver structure allocation earlier Miquel Raynal
                   ` (30 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

Let's rewrite this on a single line, it does not hurt the readability
and saves a useless temporary variable.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 2a2f5036e06f..fca58e78abb2 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -122,7 +122,6 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	const __be32 *cur;
 	u32 val;
 	int err, ctrl;
-	int clock_rate;
 	int tsc_wires = 0, adc_channels = 0, total_channels;
 	int readouts = 0;
 
@@ -214,11 +213,8 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 		err = PTR_ERR(clk);
 		goto err_disable_clk;
 	}
-	clock_rate = clk_get_rate(clk);
-	tscadc->clk_div = clock_rate / ADC_CLK;
 
-	/* TSCADC_CLKDIV needs to be configured to the value minus 1 */
-	tscadc->clk_div--;
+	tscadc->clk_div = (clk_get_rate(clk) / ADC_CLK) - 1;
 	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
 
 	/* Set the control register bits */
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 16/46] mfd: ti_am335x_tscadc: Move the driver structure allocation earlier
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (14 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 15/46] mfd: ti_am335x_tscadc: Simplify divisor calculation Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 12:09   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 17/46] mfd: ti_am335x_tscadc: Use driver data Miquel Raynal
                   ` (29 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

Allocating the driver structure should be done earlier in the probe so
that we can used its members from the beginning.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index fca58e78abb2..ea52d8523524 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -125,6 +125,13 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	int tsc_wires = 0, adc_channels = 0, total_channels;
 	int readouts = 0;
 
+	/* Allocate memory for device */
+	tscadc = devm_kzalloc(&pdev->dev, sizeof(*tscadc), GFP_KERNEL);
+	if (!tscadc)
+		return -ENOMEM;
+
+	tscadc->dev = &pdev->dev;
+
 	if (!pdev->dev.of_node) {
 		dev_err(&pdev->dev, "Could not find valid DT data.\n");
 		return -EINVAL;
@@ -164,13 +171,6 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}
 
-	/* Allocate memory for device */
-	tscadc = devm_kzalloc(&pdev->dev, sizeof(*tscadc), GFP_KERNEL);
-	if (!tscadc)
-		return -ENOMEM;
-
-	tscadc->dev = &pdev->dev;
-
 	err = platform_get_irq(pdev, 0);
 	if (err < 0) {
 		dev_err(&pdev->dev, "no irq ID is specified.\n");
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 17/46] mfd: ti_am335x_tscadc: Use driver data
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (15 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 16/46] mfd: ti_am335x_tscadc: Move the driver structure allocation earlier Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 18/46] mfd: ti_am335x_tscadc: Mimic the probe from resume() Miquel Raynal
                   ` (28 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

So far every sub-cell parameter in this driver was hardcoded: cell name,
cell compatible, specific clock name and desired clock frequency.

As we are about to introduce support for ADC1/magnetic reader, we need a
bit of flexibility. Let's add a driver data structure which will contain
these information.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/mfd/ti_am335x_tscadc.c       | 25 +++++++++++++++++++------
 include/linux/mfd/ti_am335x_tscadc.h |  9 +++++++++
 2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index ea52d8523524..3424befb0d29 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -137,6 +137,8 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}
 
+	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", &tsc_wires);
 	of_property_read_u32(node, "ti,coordiante-readouts", &readouts);
@@ -214,7 +216,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 		goto err_disable_clk;
 	}
 
-	tscadc->clk_div = (clk_get_rate(clk) / ADC_CLK) - 1;
+	tscadc->clk_div = (clk_get_rate(clk) / tscadc->data->target_clk_rate) - 1;
 	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
 
 	/* Set the control register bits */
@@ -243,8 +245,8 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	if (tsc_wires > 0) {
 		tscadc->tsc_cell = tscadc->used_cells;
 		cell = &tscadc->cells[tscadc->used_cells++];
-		cell->name = "TI-am335x-tsc";
-		cell->of_compatible = "ti,am3359-tsc";
+		cell->name = tscadc->data->name_tscmag;
+		cell->of_compatible = tscadc->data->compat_tscmag;
 		cell->platform_data = &tscadc;
 		cell->pdata_size = sizeof(tscadc);
 	}
@@ -253,8 +255,8 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	if (adc_channels > 0) {
 		tscadc->adc_cell = tscadc->used_cells;
 		cell = &tscadc->cells[tscadc->used_cells++];
-		cell->name = "TI-am335x-adc";
-		cell->of_compatible = "ti,am3359-adc";
+		cell->name = tscadc->data->name_adc;
+		cell->of_compatible = tscadc->data->compat_adc;
 		cell->platform_data = &tscadc;
 		cell->pdata_size = sizeof(tscadc);
 	}
@@ -340,8 +342,19 @@ static int __maybe_unused tscadc_resume(struct device *dev)
 
 static SIMPLE_DEV_PM_OPS(tscadc_pm_ops, tscadc_suspend, tscadc_resume);
 
+static const struct ti_tscadc_data tscdata = {
+	.name_tscmag = "TI-am335x-tsc",
+	.compat_tscmag = "ti,am3359-tsc",
+	.name_adc = "TI-am335x-adc",
+	.compat_adc = "ti,am3359-adc",
+	.target_clk_rate = ADC_CLK,
+};
+
 static const struct of_device_id ti_tscadc_dt_ids[] = {
-	{ .compatible = "ti,am3359-tscadc", },
+	{
+		.compatible = "ti,am3359-tscadc",
+		.data = &tscdata,
+	},
 	{ }
 };
 MODULE_DEVICE_TABLE(of, ti_tscadc_dt_ids);
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index ffc091b77633..0f581c15d95a 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -162,11 +162,20 @@
 
 #define TSCADC_CELLS		2
 
+struct ti_tscadc_data {
+	char *name_tscmag;
+	char *compat_tscmag;
+	char *name_adc;
+	char *compat_adc;
+	unsigned int target_clk_rate;
+};
+
 struct ti_tscadc_dev {
 	struct device *dev;
 	struct regmap *regmap;
 	void __iomem *tscadc_base;
 	phys_addr_t tscadc_phys_base;
+	const struct ti_tscadc_data *data;
 	int irq;
 	int used_cells;	/* 1-2 */
 	int tsc_wires;
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 18/46] mfd: ti_am335x_tscadc: Mimic the probe from resume()
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (16 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 17/46] mfd: ti_am335x_tscadc: Use driver data Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 19/46] mfd: ti_am335x_tscadc: Drop useless variables from the driver structure Miquel Raynal
                   ` (27 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

Use the number of touchscreen wires (tsc_wires) instead of the flag
indicating a touchscreen cell (tsc_cell) to mimic the logic from the
probe.

Besides keeping a certain harmony in the driver, the main benefit is
that we are going to simplify the number of entries in the main MFD
structure and tsc_cell can now be removed more easily.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 3424befb0d29..0dcc2151ac1f 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -325,7 +325,7 @@ static int __maybe_unused tscadc_resume(struct device *dev)
 	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
 	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
 
-	if (tscadc->tsc_cell != -1) {
+	if (tscadc->tsc_wires > 0) {
 		if (tscadc->tsc_wires == 5)
 			ctrl |= CNTRLREG_5WIRE | CNTRLREG_TSCENB;
 		else
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 19/46] mfd: ti_am335x_tscadc: Drop useless variables from the driver structure
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (17 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 18/46] mfd: ti_am335x_tscadc: Mimic the probe from resume() Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 12:11   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 20/46] mfd: ti_am335x_tscadc: Always provide an idle configuration Miquel Raynal
                   ` (26 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

Keeping the count of tsc_cells and adc_cells is completely redundant, we
can derive this information from other variables. Plus, these variables
are not used anywhere else now. Let's get rid of them.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c       | 15 ++++-----------
 include/linux/mfd/ti_am335x_tscadc.h |  3 ---
 2 files changed, 4 insertions(+), 14 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 0dcc2151ac1f..4a24fc1141cf 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -122,7 +122,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	const __be32 *cur;
 	u32 val;
 	int err, ctrl;
-	int tsc_wires = 0, adc_channels = 0, total_channels;
+	int tsc_wires = 0, adc_channels = 0, cell_idx = 0, total_channels;
 	int readouts = 0;
 
 	/* Allocate memory for device */
@@ -237,14 +237,9 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	ctrl |= CNTRLREG_TSCSSENB;
 	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
 
-	tscadc->used_cells = 0;
-	tscadc->tsc_cell = -1;
-	tscadc->adc_cell = -1;
-
 	/* TSC Cell */
 	if (tsc_wires > 0) {
-		tscadc->tsc_cell = tscadc->used_cells;
-		cell = &tscadc->cells[tscadc->used_cells++];
+		cell = &tscadc->cells[cell_idx++];
 		cell->name = tscadc->data->name_tscmag;
 		cell->of_compatible = tscadc->data->compat_tscmag;
 		cell->platform_data = &tscadc;
@@ -253,8 +248,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 
 	/* ADC Cell */
 	if (adc_channels > 0) {
-		tscadc->adc_cell = tscadc->used_cells;
-		cell = &tscadc->cells[tscadc->used_cells++];
+		cell = &tscadc->cells[cell_idx++];
 		cell->name = tscadc->data->name_adc;
 		cell->of_compatible = tscadc->data->compat_adc;
 		cell->platform_data = &tscadc;
@@ -262,8 +256,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	}
 
 	err = mfd_add_devices(&pdev->dev, PLATFORM_DEVID_AUTO,
-			      tscadc->cells, tscadc->used_cells, NULL,
-			      0, NULL);
+			      tscadc->cells, cell_idx, NULL, 0, NULL);
 	if (err < 0)
 		goto err_disable_clk;
 
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index 0f581c15d95a..e734fb97dff8 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -177,10 +177,7 @@ struct ti_tscadc_dev {
 	phys_addr_t tscadc_phys_base;
 	const struct ti_tscadc_data *data;
 	int irq;
-	int used_cells;	/* 1-2 */
 	int tsc_wires;
-	int tsc_cell;	/* -1 if not used */
-	int adc_cell;	/* -1 if not used */
 	struct mfd_cell cells[TSCADC_CELLS];
 	u32 reg_se_cache;
 	bool adc_waiting;
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 20/46] mfd: ti_am335x_tscadc: Always provide an idle configuration
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (18 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 19/46] mfd: ti_am335x_tscadc: Drop useless variables from the driver structure Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 12:13   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 21/46] mfd: ti_am335x_tscadc: Reorder the initialization steps Miquel Raynal
                   ` (25 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

The idle register is valid no matter if the touchscreen is used or not,
let's always configure it.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 4a24fc1141cf..5f189da99468 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -223,16 +223,16 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
 	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
 
-	/* Set register bits for Idle Config Mode */
 	if (tsc_wires > 0) {
 		tscadc->tsc_wires = tsc_wires;
 		if (tsc_wires == 5)
 			ctrl |= CNTRLREG_5WIRE | CNTRLREG_TSCENB;
 		else
 			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
-		tscadc_idle_config(tscadc);
 	}
 
+	tscadc_idle_config(tscadc);
+
 	/* Enable the TSC module enable bit */
 	ctrl |= CNTRLREG_TSCSSENB;
 	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
@@ -323,8 +323,10 @@ static int __maybe_unused tscadc_resume(struct device *dev)
 			ctrl |= CNTRLREG_5WIRE | CNTRLREG_TSCENB;
 		else
 			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
-		tscadc_idle_config(tscadc);
 	}
+
+	tscadc_idle_config(tscadc);
+
 	ctrl |= CNTRLREG_TSCSSENB;
 	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 21/46] mfd: ti_am335x_tscadc: Reorder the initialization steps
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (19 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 20/46] mfd: ti_am335x_tscadc: Always provide an idle configuration Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 12:18   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 22/46] mfd: ti_am335x_tscadc: Gather the ctrl register logic in one place Miquel Raynal
                   ` (24 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

TI AM335X TRM [1] states that most of the configuration should be set in
the control register in the first place, before actually enabling the
hardware with the subsystem enable bit.

So far only half of the configuration was made in the first step (before
enabling the "subsystem"), which does not make really sense. Also, the
probe and the resume patch were acting differently. Let's harmonize all
this by following these steps:
1/ Configure the CLKDIV register
2/ Configure the CTRL register
3/ Configure the idle configuration
4/ Really enable the device by rewriting the CTRL register with the
   subsystem enable bit set.

[1] https://www.ti.com/lit/pdf/spruh73

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 5f189da99468..61f878c7593b 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -221,8 +221,6 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 
 	/* Set the control register bits */
 	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
-	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
-
 	if (tsc_wires > 0) {
 		tscadc->tsc_wires = tsc_wires;
 		if (tsc_wires == 5)
@@ -230,6 +228,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 		else
 			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
 	}
+	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
 
 	tscadc_idle_config(tscadc);
 
@@ -315,9 +314,9 @@ static int __maybe_unused tscadc_resume(struct device *dev)
 	pm_runtime_get_sync(dev);
 
 	/* context restore */
-	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
-	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
+	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
 
+	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
 	if (tscadc->tsc_wires > 0) {
 		if (tscadc->tsc_wires == 5)
 			ctrl |= CNTRLREG_5WIRE | CNTRLREG_TSCENB;
@@ -325,13 +324,13 @@ static int __maybe_unused tscadc_resume(struct device *dev)
 			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
 	}
 
+	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
+
 	tscadc_idle_config(tscadc);
 
 	ctrl |= CNTRLREG_TSCSSENB;
 	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
 
-	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
-
 	return 0;
 }
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 22/46] mfd: ti_am335x_tscadc: Gather the ctrl register logic in one place
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (20 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 21/46] mfd: ti_am335x_tscadc: Reorder the initialization steps Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 12:20   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 23/46] mfd: ti_am335x_tscadc: Replace the header license text with SPDX tag Miquel Raynal
                   ` (23 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

Instead of deriving in the probe and in the resume path the value of the
ctrl register, let's do it only once in the probe, save the value of
this register in the driver's structure and use it from the resume
callback.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c       | 33 ++++++++--------------------
 include/linux/mfd/ti_am335x_tscadc.h |  2 +-
 2 files changed, 10 insertions(+), 25 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 61f878c7593b..a3ff3cc29318 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -121,7 +121,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	struct property *prop;
 	const __be32 *cur;
 	u32 val;
-	int err, ctrl;
+	int err;
 	int tsc_wires = 0, adc_channels = 0, cell_idx = 0, total_channels;
 	int readouts = 0;
 
@@ -220,21 +220,20 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
 
 	/* Set the control register bits */
-	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
+	tscadc->ctrl = CNTRLREG_STEPCONFIGWRT | CNTRLREG_STEPID;
 	if (tsc_wires > 0) {
-		tscadc->tsc_wires = tsc_wires;
+		tscadc->ctrl |= CNTRLREG_TSCENB;
 		if (tsc_wires == 5)
-			ctrl |= CNTRLREG_5WIRE | CNTRLREG_TSCENB;
+			tscadc->ctrl |= CNTRLREG_5WIRE;
 		else
-			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
+			tscadc->ctrl |= CNTRLREG_4WIRE;
 	}
-	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
+	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
 
 	tscadc_idle_config(tscadc);
 
 	/* Enable the TSC module enable bit */
-	ctrl |= CNTRLREG_TSCSSENB;
-	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
+	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl | CNTRLREG_TSCSSENB);
 
 	/* TSC Cell */
 	if (tsc_wires > 0) {
@@ -309,27 +308,13 @@ static int __maybe_unused tscadc_suspend(struct device *dev)
 static int __maybe_unused tscadc_resume(struct device *dev)
 {
 	struct ti_tscadc_dev *tscadc = dev_get_drvdata(dev);
-	u32 ctrl;
 
 	pm_runtime_get_sync(dev);
 
-	/* context restore */
 	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
-
-	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
-	if (tscadc->tsc_wires > 0) {
-		if (tscadc->tsc_wires == 5)
-			ctrl |= CNTRLREG_5WIRE | CNTRLREG_TSCENB;
-		else
-			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
-	}
-
-	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
-
+	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
 	tscadc_idle_config(tscadc);
-
-	ctrl |= CNTRLREG_TSCSSENB;
-	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
+	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl | CNTRLREG_TSCSSENB);
 
 	return 0;
 }
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index e734fb97dff8..02963b6ebbac 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -177,8 +177,8 @@ struct ti_tscadc_dev {
 	phys_addr_t tscadc_phys_base;
 	const struct ti_tscadc_data *data;
 	int irq;
-	int tsc_wires;
 	struct mfd_cell cells[TSCADC_CELLS];
+	u32 ctrl;
 	u32 reg_se_cache;
 	bool adc_waiting;
 	bool adc_in_use;
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 23/46] mfd: ti_am335x_tscadc: Replace the header license text with SPDX tag
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (21 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 22/46] mfd: ti_am335x_tscadc: Gather the ctrl register logic in one place Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 12:21   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 24/46] mfd: ti_am335x_tscadc: Fix header spacing Miquel Raynal
                   ` (22 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

Drop the text license and replace it with an equivalent SPDX license tag
identifier.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 include/linux/mfd/ti_am335x_tscadc.h | 16 ++++------------
 1 file changed, 4 insertions(+), 12 deletions(-)

diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index 02963b6ebbac..334ce1a879df 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -1,21 +1,13 @@
-#ifndef __LINUX_TI_AM335X_TSCADC_MFD_H
-#define __LINUX_TI_AM335X_TSCADC_MFD_H
-
+/* SPDX-License-Identifier: GPL-2.0-only */
 /*
  * TI Touch Screen / ADC MFD driver
  *
  * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation version 2.
- *
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
- * kind, whether express or implied; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
  */
 
+#ifndef __LINUX_TI_AM335X_TSCADC_MFD_H
+#define __LINUX_TI_AM335X_TSCADC_MFD_H
+
 #include <linux/mfd/core.h>
 
 #define REG_RAWIRQSTATUS	0x024
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 24/46] mfd: ti_am335x_tscadc: Fix header spacing
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (22 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 23/46] mfd: ti_am335x_tscadc: Replace the header license text with SPDX tag Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 12:22   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 25/46] mfd: ti_am335x_tscadc: Use BIT() and GENMASK() when relevant in the header Miquel Raynal
                   ` (21 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

Harmonize the spacing within macro definitions.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 include/linux/mfd/ti_am335x_tscadc.h | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index 334ce1a879df..efafecfc87a7 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -41,7 +41,7 @@
 /* Step Enable */
 #define STEPENB_MASK		(0x1FFFF << 0)
 #define STEPENB(val)		((val) << 0)
-#define ENB(val)			(1 << (val))
+#define ENB(val)		(1 << (val))
 #define STPENB_STEPENB		STEPENB(0x1FFFF)
 #define STPENB_STEPENB_TC	STEPENB(0x1FFF)
 
@@ -122,15 +122,15 @@
 #define CNTRLREG_TSCENB		BIT(7)
 
 /* FIFO READ Register */
-#define FIFOREAD_DATA_MASK (0xfff << 0)
-#define FIFOREAD_CHNLID_MASK (0xf << 16)
+#define FIFOREAD_DATA_MASK	(0xfff << 0)
+#define FIFOREAD_CHNLID_MASK	(0xf << 16)
 
 /* DMA ENABLE/CLEAR Register */
 #define DMA_FIFO0		BIT(0)
 #define DMA_FIFO1		BIT(1)
 
 /* Sequencer Status */
-#define SEQ_STATUS BIT(5)
+#define SEQ_STATUS		BIT(5)
 #define CHARGE_STEP		0x11
 
 #define ADC_CLK			3000000
@@ -150,7 +150,7 @@
  *
  * max processing time: 266431 * 308ns = 83ms(approx)
  */
-#define IDLE_TIMEOUT 83 /* milliseconds */
+#define IDLE_TIMEOUT		83 /* milliseconds */
 
 #define TSCADC_CELLS		2
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 25/46] mfd: ti_am335x_tscadc: Use BIT() and GENMASK() when relevant in the header
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (23 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 24/46] mfd: ti_am335x_tscadc: Fix header spacing Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 13:09   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 26/46] mfd: ti_am335x_tscadc: Use FIELD_PREP() " Miquel Raynal
                   ` (20 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

Convert masks to GENMASK() and regular shifts to BIT() in
ti_am335x_tscadc.h header.

Suggested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 include/linux/mfd/ti_am335x_tscadc.h | 40 ++++++++++++++--------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index efafecfc87a7..4de16fc3d74f 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -39,11 +39,11 @@
 #define IRQWKUP_ENB		BIT(0)
 
 /* Step Enable */
-#define STEPENB_MASK		(0x1FFFF << 0)
+#define STEPENB_MASK		GENMASK(16, 0)
 #define STEPENB(val)		((val) << 0)
-#define ENB(val)		(1 << (val))
-#define STPENB_STEPENB		STEPENB(0x1FFFF)
-#define STPENB_STEPENB_TC	STEPENB(0x1FFF)
+#define ENB(val)		BIT(val)
+#define STPENB_STEPENB		STEPENB(GENMASK(16, 0))
+#define STPENB_STEPENB_TC	STEPENB(GENMASK(12, 0))
 
 /* IRQ enable */
 #define IRQENB_HW_PEN		BIT(0)
@@ -57,11 +57,11 @@
 #define IRQENB_PENUP		BIT(9)
 
 /* Step Configuration */
-#define STEPCONFIG_MODE_MASK	(3 << 0)
+#define STEPCONFIG_MODE_MASK	GENMASK(1, 0)
 #define STEPCONFIG_MODE(val)	((val) << 0)
 #define STEPCONFIG_MODE_SWCNT	STEPCONFIG_MODE(1)
 #define STEPCONFIG_MODE_HWSYNC	STEPCONFIG_MODE(2)
-#define STEPCONFIG_AVG_MASK	(7 << 2)
+#define STEPCONFIG_AVG_MASK	GENMASK(4, 2)
 #define STEPCONFIG_AVG(val)	((val) << 2)
 #define STEPCONFIG_AVG_16	STEPCONFIG_AVG(4)
 #define STEPCONFIG_XPP		BIT(5)
@@ -71,41 +71,41 @@
 #define STEPCONFIG_XNP		BIT(9)
 #define STEPCONFIG_YPN		BIT(10)
 #define STEPCONFIG_RFP(val)	((val) << 12)
-#define STEPCONFIG_RFP_VREFP	(0x3 << 12)
-#define STEPCONFIG_INM_MASK	(0xF << 15)
+#define STEPCONFIG_RFP_VREFP	GENMASK(13, 12)
+#define STEPCONFIG_INM_MASK	GENMASK(18, 15)
 #define STEPCONFIG_INM(val)	((val) << 15)
 #define STEPCONFIG_INM_ADCREFM	STEPCONFIG_INM(8)
-#define STEPCONFIG_INP_MASK	(0xF << 19)
+#define STEPCONFIG_INP_MASK	GENMASK(22, 19)
 #define STEPCONFIG_INP(val)	((val) << 19)
 #define STEPCONFIG_INP_AN4	STEPCONFIG_INP(4)
 #define STEPCONFIG_INP_ADCREFM	STEPCONFIG_INP(8)
 #define STEPCONFIG_FIFO1	BIT(26)
 #define STEPCONFIG_RFM(val)	((val) << 23)
-#define STEPCONFIG_RFM_VREFN	(0x3 << 23)
+#define STEPCONFIG_RFM_VREFN	GENMASK(24, 23)
 
 /* Delay register */
-#define STEPDELAY_OPEN_MASK	(0x3FFFF << 0)
+#define STEPDELAY_OPEN_MASK	GENMASK(17, 0)
 #define STEPDELAY_OPEN(val)	((val) << 0)
 #define STEPCONFIG_OPENDLY	STEPDELAY_OPEN(0x098)
-#define STEPDELAY_SAMPLE_MASK	(0xFF << 24)
+#define STEPDELAY_SAMPLE_MASK	GENMASK(31, 24)
 #define STEPDELAY_SAMPLE(val)	((val) << 24)
 #define STEPCONFIG_SAMPLEDLY	STEPDELAY_SAMPLE(0)
 
 /* Charge Config */
-#define STEPCHARGE_RFP_MASK	(7 << 12)
+#define STEPCHARGE_RFP_MASK	GENMASK(14, 12)
 #define STEPCHARGE_RFP(val)	((val) << 12)
 #define STEPCHARGE_RFP_XPUL	STEPCHARGE_RFP(1)
-#define STEPCHARGE_INM_MASK	(0xF << 15)
+#define STEPCHARGE_INM_MASK	GENMASK(18, 15)
 #define STEPCHARGE_INM(val)	((val) << 15)
 #define STEPCHARGE_INM_AN1	STEPCHARGE_INM(1)
-#define STEPCHARGE_INP_MASK	(0xF << 19)
+#define STEPCHARGE_INP_MASK	GENMASK(22, 19)
 #define STEPCHARGE_INP(val)	((val) << 19)
-#define STEPCHARGE_RFM_MASK	(3 << 23)
+#define STEPCHARGE_RFM_MASK	GENMASK(24, 23)
 #define STEPCHARGE_RFM(val)	((val) << 23)
 #define STEPCHARGE_RFM_XNUR	STEPCHARGE_RFM(1)
 
 /* Charge delay */
-#define CHARGEDLY_OPEN_MASK	(0x3FFFF << 0)
+#define CHARGEDLY_OPEN_MASK	GENMASK(17, 0)
 #define CHARGEDLY_OPEN(val)	((val) << 0)
 #define CHARGEDLY_OPENDLY	CHARGEDLY_OPEN(0x400)
 
@@ -114,7 +114,7 @@
 #define CNTRLREG_STEPID		BIT(1)
 #define CNTRLREG_STEPCONFIGWRT	BIT(2)
 #define CNTRLREG_POWERDOWN	BIT(4)
-#define CNTRLREG_AFE_CTRL_MASK	(3 << 5)
+#define CNTRLREG_AFE_CTRL_MASK	GENMASK(6, 5)
 #define CNTRLREG_AFE_CTRL(val)	((val) << 5)
 #define CNTRLREG_4WIRE		CNTRLREG_AFE_CTRL(1)
 #define CNTRLREG_5WIRE		CNTRLREG_AFE_CTRL(2)
@@ -122,8 +122,8 @@
 #define CNTRLREG_TSCENB		BIT(7)
 
 /* FIFO READ Register */
-#define FIFOREAD_DATA_MASK	(0xfff << 0)
-#define FIFOREAD_CHNLID_MASK	(0xf << 16)
+#define FIFOREAD_DATA_MASK	GENMASK(11, 0)
+#define FIFOREAD_CHNLID_MASK	GENMASK(19, 16)
 
 /* DMA ENABLE/CLEAR Register */
 #define DMA_FIFO0		BIT(0)
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 26/46] mfd: ti_am335x_tscadc: Use FIELD_PREP() when relevant in the header
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (24 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 25/46] mfd: ti_am335x_tscadc: Use BIT() and GENMASK() when relevant in the header Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 13:13   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 27/46] mfd: ti_am335x_tscadc: Rename the subsystem enable macro Miquel Raynal
                   ` (19 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

Use the FIELD_PREP() macro when relevant. Sometimes reorder the lines to
be able to use the relevant bitmask.

Mind the s/%d/%ld/ change in a log due to the type change following the
use of FIELD_PREP() in the header.

Suggested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/iio/adc/ti_am335x_adc.c      |  2 +-
 include/linux/mfd/ti_am335x_tscadc.h | 31 ++++++++++++++--------------
 2 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index e946903b0993..54c410b6ca07 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -126,7 +126,7 @@ static void tiadc_step_config(struct iio_dev *indio_dev)
 		chan = adc_dev->channel_line[i];
 
 		if (adc_dev->step_avg[i] > STEPCONFIG_AVG_16) {
-			dev_warn(dev, "chan %d step_avg truncating to %d\n",
+			dev_warn(dev, "chan %d step_avg truncating to %ld\n",
 				 chan, STEPCONFIG_AVG_16);
 			adc_dev->step_avg[i] = STEPCONFIG_AVG_16;
 		}
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index 4de16fc3d74f..29095c0dc6d8 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -8,6 +8,7 @@
 #ifndef __LINUX_TI_AM335X_TSCADC_MFD_H
 #define __LINUX_TI_AM335X_TSCADC_MFD_H
 
+#include <linux/bitfield.h>
 #include <linux/mfd/core.h>
 
 #define REG_RAWIRQSTATUS	0x024
@@ -40,7 +41,7 @@
 
 /* Step Enable */
 #define STEPENB_MASK		GENMASK(16, 0)
-#define STEPENB(val)		((val) << 0)
+#define STEPENB(val)		FIELD_PREP(STEPENB_MASK, (val))
 #define ENB(val)		BIT(val)
 #define STPENB_STEPENB		STEPENB(GENMASK(16, 0))
 #define STPENB_STEPENB_TC	STEPENB(GENMASK(12, 0))
@@ -58,11 +59,11 @@
 
 /* Step Configuration */
 #define STEPCONFIG_MODE_MASK	GENMASK(1, 0)
-#define STEPCONFIG_MODE(val)	((val) << 0)
+#define STEPCONFIG_MODE(val)	FIELD_PREP(STEPCONFIG_MODE_MASK, (val))
 #define STEPCONFIG_MODE_SWCNT	STEPCONFIG_MODE(1)
 #define STEPCONFIG_MODE_HWSYNC	STEPCONFIG_MODE(2)
 #define STEPCONFIG_AVG_MASK	GENMASK(4, 2)
-#define STEPCONFIG_AVG(val)	((val) << 2)
+#define STEPCONFIG_AVG(val)	FIELD_PREP(STEPCONFIG_AVG_MASK, (val))
 #define STEPCONFIG_AVG_16	STEPCONFIG_AVG(4)
 #define STEPCONFIG_XPP		BIT(5)
 #define STEPCONFIG_XNN		BIT(6)
@@ -70,43 +71,43 @@
 #define STEPCONFIG_YNN		BIT(8)
 #define STEPCONFIG_XNP		BIT(9)
 #define STEPCONFIG_YPN		BIT(10)
-#define STEPCONFIG_RFP(val)	((val) << 12)
 #define STEPCONFIG_RFP_VREFP	GENMASK(13, 12)
+#define STEPCONFIG_RFP(val)	FIELD_PREP(STEPCONFIG_RFP_VREFP, (val))
 #define STEPCONFIG_INM_MASK	GENMASK(18, 15)
-#define STEPCONFIG_INM(val)	((val) << 15)
+#define STEPCONFIG_INM(val)	FIELD_PREP(STEPCONFIG_INM_MASK, (val))
 #define STEPCONFIG_INM_ADCREFM	STEPCONFIG_INM(8)
 #define STEPCONFIG_INP_MASK	GENMASK(22, 19)
-#define STEPCONFIG_INP(val)	((val) << 19)
+#define STEPCONFIG_INP(val)	FIELD_PREP(STEPCONFIG_INP_MASK, (val))
 #define STEPCONFIG_INP_AN4	STEPCONFIG_INP(4)
 #define STEPCONFIG_INP_ADCREFM	STEPCONFIG_INP(8)
 #define STEPCONFIG_FIFO1	BIT(26)
-#define STEPCONFIG_RFM(val)	((val) << 23)
 #define STEPCONFIG_RFM_VREFN	GENMASK(24, 23)
+#define STEPCONFIG_RFM(val)	FIELD_PREP(STEPCONFIG_RFM_VREFN, (val))
 
 /* Delay register */
 #define STEPDELAY_OPEN_MASK	GENMASK(17, 0)
-#define STEPDELAY_OPEN(val)	((val) << 0)
+#define STEPDELAY_OPEN(val)	FIELD_PREP(STEPDELAY_OPEN_MASK, (val))
 #define STEPCONFIG_OPENDLY	STEPDELAY_OPEN(0x098)
 #define STEPDELAY_SAMPLE_MASK	GENMASK(31, 24)
-#define STEPDELAY_SAMPLE(val)	((val) << 24)
+#define STEPDELAY_SAMPLE(val)	FIELD_PREP(STEPDELAY_SAMPLE_MASK, (val))
 #define STEPCONFIG_SAMPLEDLY	STEPDELAY_SAMPLE(0)
 
 /* Charge Config */
 #define STEPCHARGE_RFP_MASK	GENMASK(14, 12)
-#define STEPCHARGE_RFP(val)	((val) << 12)
+#define STEPCHARGE_RFP(val)	FIELD_PREP(STEPCHARGE_RFP_MASK, (val))
 #define STEPCHARGE_RFP_XPUL	STEPCHARGE_RFP(1)
 #define STEPCHARGE_INM_MASK	GENMASK(18, 15)
-#define STEPCHARGE_INM(val)	((val) << 15)
+#define STEPCHARGE_INM(val)	FIELD_PREP(STEPCHARGE_INM_MASK, (val))
 #define STEPCHARGE_INM_AN1	STEPCHARGE_INM(1)
 #define STEPCHARGE_INP_MASK	GENMASK(22, 19)
-#define STEPCHARGE_INP(val)	((val) << 19)
+#define STEPCHARGE_INP(val)	FIELD_PREP(STEPCHARGE_INP_MASK, (val))
 #define STEPCHARGE_RFM_MASK	GENMASK(24, 23)
-#define STEPCHARGE_RFM(val)	((val) << 23)
+#define STEPCHARGE_RFM(val)	FIELD_PREP(STEPCHARGE_RFM_MASK, (val))
 #define STEPCHARGE_RFM_XNUR	STEPCHARGE_RFM(1)
 
 /* Charge delay */
 #define CHARGEDLY_OPEN_MASK	GENMASK(17, 0)
-#define CHARGEDLY_OPEN(val)	((val) << 0)
+#define CHARGEDLY_OPEN(val)	FIELD_PREP(CHARGEDLY_OPEN_MASK, (val))
 #define CHARGEDLY_OPENDLY	CHARGEDLY_OPEN(0x400)
 
 /* Control register */
@@ -115,7 +116,7 @@
 #define CNTRLREG_STEPCONFIGWRT	BIT(2)
 #define CNTRLREG_POWERDOWN	BIT(4)
 #define CNTRLREG_AFE_CTRL_MASK	GENMASK(6, 5)
-#define CNTRLREG_AFE_CTRL(val)	((val) << 5)
+#define CNTRLREG_AFE_CTRL(val)	FIELD_PREP(CNTRLREG_AFE_CTRL_MASK, (val))
 #define CNTRLREG_4WIRE		CNTRLREG_AFE_CTRL(1)
 #define CNTRLREG_5WIRE		CNTRLREG_AFE_CTRL(2)
 #define CNTRLREG_8WIRE		CNTRLREG_AFE_CTRL(3)
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 27/46] mfd: ti_am335x_tscadc: Rename the subsystem enable macro
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (25 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 26/46] mfd: ti_am335x_tscadc: Use FIELD_PREP() " Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 28/46] mfd: ti_am335x_tscadc: Add TSC prefix in certain macros Miquel Raynal
                   ` (18 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

This bit is common to all devices (ADC, Touchscreen, Magnetic reader) so
make it clear that it can be used from any location by operating a
mechanical rename:
s/CNTRLREG_TSCSSENB/CNTRLREG_SSENB/

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti_am335x_adc.c      | 6 +++---
 drivers/mfd/ti_am335x_tscadc.c       | 6 +++---
 include/linux/mfd/ti_am335x_tscadc.h | 2 +-
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 54c410b6ca07..25af90af16a3 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -184,7 +184,7 @@ static irqreturn_t tiadc_irq_h(int irq, void *private)
 	if (status & IRQENB_FIFO1OVRRUN) {
 		/* FIFO Overrun. Clear flag. Disable/Enable ADC to recover */
 		config = tiadc_readl(adc_dev, REG_CTRL);
-		config &= ~(CNTRLREG_TSCSSENB);
+		config &= ~(CNTRLREG_SSENB);
 		tiadc_writel(adc_dev, REG_CTRL, config);
 		tiadc_writel(adc_dev, REG_IRQSTATUS, IRQENB_FIFO1OVRRUN
 				| IRQENB_FIFO1UNDRFLW | IRQENB_FIFO1THRES);
@@ -197,7 +197,7 @@ static irqreturn_t tiadc_irq_h(int irq, void *private)
 			adc_fsm = tiadc_readl(adc_dev, REG_ADCFSM);
 		} while (adc_fsm != 0x10 && count++ < 100);
 
-		tiadc_writel(adc_dev, REG_CTRL, (config | CNTRLREG_TSCSSENB));
+		tiadc_writel(adc_dev, REG_CTRL, (config | CNTRLREG_SSENB));
 		return IRQ_HANDLED;
 	} else if (status & IRQENB_FIFO1THRES) {
 		/* Disable irq and wake worker thread */
@@ -679,7 +679,7 @@ static int __maybe_unused tiadc_suspend(struct device *dev)
 	unsigned int idle;
 
 	idle = tiadc_readl(adc_dev, REG_CTRL);
-	idle &= ~(CNTRLREG_TSCSSENB);
+	idle &= ~(CNTRLREG_SSENB);
 	tiadc_writel(adc_dev, REG_CTRL, (idle |
 			CNTRLREG_POWERDOWN));
 
diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index a3ff3cc29318..eba5fba8cf78 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -233,7 +233,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	tscadc_idle_config(tscadc);
 
 	/* Enable the TSC module enable bit */
-	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl | CNTRLREG_TSCSSENB);
+	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl | CNTRLREG_SSENB);
 
 	/* TSC Cell */
 	if (tsc_wires > 0) {
@@ -297,7 +297,7 @@ static int __maybe_unused tscadc_suspend(struct device *dev)
 
 		regmap_read(tscadc->regmap, REG_CTRL, &ctrl);
 		ctrl &= ~(CNTRLREG_POWERDOWN);
-		ctrl |= CNTRLREG_TSCSSENB;
+		ctrl |= CNTRLREG_SSENB;
 		regmap_write(tscadc->regmap, REG_CTRL, ctrl);
 	}
 	pm_runtime_put_sync(dev);
@@ -314,7 +314,7 @@ static int __maybe_unused tscadc_resume(struct device *dev)
 	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
 	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
 	tscadc_idle_config(tscadc);
-	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl | CNTRLREG_TSCSSENB);
+	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl | CNTRLREG_SSENB);
 
 	return 0;
 }
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index 29095c0dc6d8..271b5aefc474 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -111,7 +111,7 @@
 #define CHARGEDLY_OPENDLY	CHARGEDLY_OPEN(0x400)
 
 /* Control register */
-#define CNTRLREG_TSCSSENB	BIT(0)
+#define CNTRLREG_SSENB		BIT(0)
 #define CNTRLREG_STEPID		BIT(1)
 #define CNTRLREG_STEPCONFIGWRT	BIT(2)
 #define CNTRLREG_POWERDOWN	BIT(4)
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 28/46] mfd: ti_am335x_tscadc: Add TSC prefix in certain macros
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (26 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 27/46] mfd: ti_am335x_tscadc: Rename the subsystem enable macro Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 13:15   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 29/46] mfd: ti_am335x_tscadc: Rename a variable Miquel Raynal
                   ` (17 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

While the register list (and names) between ADC0 and ADC1 are pretty
close, the bits inside changed a little bit. To avoid any future
confusion, let's add the TSC prefix when some bits are in a register
that is common to both revisions of the ADC, but are specific to the
am33xx hardware.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c       | 10 +++++-----
 include/linux/mfd/ti_am335x_tscadc.h | 16 ++++++++--------
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index eba5fba8cf78..2fdee0f4814f 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -220,13 +220,13 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
 
 	/* Set the control register bits */
-	tscadc->ctrl = CNTRLREG_STEPCONFIGWRT | CNTRLREG_STEPID;
+	tscadc->ctrl = CNTRLREG_TSC_STEPCONFIGWRT | CNTRLREG_STEPID;
 	if (tsc_wires > 0) {
-		tscadc->ctrl |= CNTRLREG_TSCENB;
+		tscadc->ctrl |= CNTRLREG_TSC_ENB;
 		if (tsc_wires == 5)
-			tscadc->ctrl |= CNTRLREG_5WIRE;
+			tscadc->ctrl |= CNTRLREG_TSC_5WIRE;
 		else
-			tscadc->ctrl |= CNTRLREG_4WIRE;
+			tscadc->ctrl |= CNTRLREG_TSC_4WIRE;
 	}
 	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
 
@@ -326,7 +326,7 @@ static const struct ti_tscadc_data tscdata = {
 	.compat_tscmag = "ti,am3359-tsc",
 	.name_adc = "TI-am335x-adc",
 	.compat_adc = "ti,am3359-adc",
-	.target_clk_rate = ADC_CLK,
+	.target_clk_rate = TSC_ADC_CLK,
 };
 
 static const struct of_device_id ti_tscadc_dt_ids[] = {
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index 271b5aefc474..29d3195b0193 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -113,14 +113,14 @@
 /* Control register */
 #define CNTRLREG_SSENB		BIT(0)
 #define CNTRLREG_STEPID		BIT(1)
-#define CNTRLREG_STEPCONFIGWRT	BIT(2)
+#define CNTRLREG_TSC_STEPCONFIGWRT BIT(2)
 #define CNTRLREG_POWERDOWN	BIT(4)
-#define CNTRLREG_AFE_CTRL_MASK	GENMASK(6, 5)
-#define CNTRLREG_AFE_CTRL(val)	FIELD_PREP(CNTRLREG_AFE_CTRL_MASK, (val))
-#define CNTRLREG_4WIRE		CNTRLREG_AFE_CTRL(1)
-#define CNTRLREG_5WIRE		CNTRLREG_AFE_CTRL(2)
-#define CNTRLREG_8WIRE		CNTRLREG_AFE_CTRL(3)
-#define CNTRLREG_TSCENB		BIT(7)
+#define CNTRLREG_TSC_AFE_CTRL_MASK GENMASK(6, 5)
+#define CNTRLREG_TSC_AFE_CTRL(val) FIELD_PREP(CNTRLREG_TSC_AFE_CTRL_MASK, (val))
+#define CNTRLREG_TSC_4WIRE	CNTRLREG_TSC_AFE_CTRL(1)
+#define CNTRLREG_TSC_5WIRE	CNTRLREG_TSC_AFE_CTRL(2)
+#define CNTRLREG_TSC_8WIRE	CNTRLREG_TSC_AFE_CTRL(3)
+#define CNTRLREG_TSC_ENB	BIT(7)
 
 /* FIFO READ Register */
 #define FIFOREAD_DATA_MASK	GENMASK(11, 0)
@@ -134,7 +134,7 @@
 #define SEQ_STATUS		BIT(5)
 #define CHARGE_STEP		0x11
 
-#define ADC_CLK			3000000
+#define TSC_ADC_CLK		3000000
 #define TOTAL_STEPS		16
 #define TOTAL_CHANNELS		8
 #define FIFO1_THRESHOLD		19
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 29/46] mfd: ti_am335x_tscadc: Rename a variable
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (27 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 28/46] mfd: ti_am335x_tscadc: Add TSC prefix in certain macros Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 30/46] mfd: ti_am335x_tscadc: Fix an error message Miquel Raynal
                   ` (16 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

We need to retrieve the number of wires used by the "secondary" device
(the touchscreen or the magnetic reader). Let's rename tsc_wires to
become tscmag_wires to clarify the fact that this variable can be used
in both situations.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 2fdee0f4814f..24fcc70893f9 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -122,7 +122,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	const __be32 *cur;
 	u32 val;
 	int err;
-	int tsc_wires = 0, adc_channels = 0, cell_idx = 0, total_channels;
+	int tscmag_wires = 0, adc_channels = 0, cell_idx = 0, total_channels;
 	int readouts = 0;
 
 	/* Allocate memory for device */
@@ -140,7 +140,7 @@ 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", &tsc_wires);
+	of_property_read_u32(node, "ti,wires", &tscmag_wires);
 	of_property_read_u32(node, "ti,coordiante-readouts", &readouts);
 	of_node_put(node);
 
@@ -157,7 +157,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 
 	of_node_put(node);
 
-	total_channels = tsc_wires + adc_channels;
+	total_channels = tscmag_wires + adc_channels;
 	if (total_channels > 8) {
 		dev_err(&pdev->dev, "Number of i/p channels more than 8\n");
 		return -EINVAL;
@@ -221,9 +221,9 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 
 	/* Set the control register bits */
 	tscadc->ctrl = CNTRLREG_TSC_STEPCONFIGWRT | CNTRLREG_STEPID;
-	if (tsc_wires > 0) {
+	if (tscmag_wires > 0) {
 		tscadc->ctrl |= CNTRLREG_TSC_ENB;
-		if (tsc_wires == 5)
+		if (tscmag_wires == 5)
 			tscadc->ctrl |= CNTRLREG_TSC_5WIRE;
 		else
 			tscadc->ctrl |= CNTRLREG_TSC_4WIRE;
@@ -236,7 +236,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl | CNTRLREG_SSENB);
 
 	/* TSC Cell */
-	if (tsc_wires > 0) {
+	if (tscmag_wires > 0) {
 		cell = &tscadc->cells[cell_idx++];
 		cell->name = tscadc->data->name_tscmag;
 		cell->of_compatible = tscadc->data->compat_tscmag;
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 30/46] mfd: ti_am335x_tscadc: Fix an error message
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (28 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 29/46] mfd: ti_am335x_tscadc: Rename a variable Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 31/46] mfd: ti_am335x_tscadc: Add a boolean to clarify the presence of a touchscreen Miquel Raynal
                   ` (15 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

The error message if we cannot retrieve the clock tells us that the
touchscreen controller clock was unavailable. This is wrong, this is the
"main" clock for the hardware block, it is not specific to the
touchscreen and won't change when we will introduce ADC1/magnetic reader
support so let's correct this comment.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 24fcc70893f9..f30bcdf600fb 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -211,7 +211,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	 */
 	clk = devm_clk_get(&pdev->dev, NULL);
 	if (IS_ERR(clk)) {
-		dev_err(&pdev->dev, "failed to get TSC fck\n");
+		dev_err(&pdev->dev, "failed to get fck\n");
 		err = PTR_ERR(clk);
 		goto err_disable_clk;
 	}
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 31/46] mfd: ti_am335x_tscadc: Add a boolean to clarify the presence of a touchscreen
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (29 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 30/46] mfd: ti_am335x_tscadc: Fix an error message Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 13:17   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 32/46] mfd: ti_am335x_tscadc: Introduce has_tsc Miquel Raynal
                   ` (14 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

Just checking the number of wires will soon not be enough, add a boolean
to indicated the actual use or not of the touchscreen.

Certain checks only make sense when there is a touchscreen wired. Make
this checks explicitly depend on the presence of the touchscreen.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index f30bcdf600fb..cfdef833dffb 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -120,6 +120,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	struct mfd_cell *cell;
 	struct property *prop;
 	const __be32 *cur;
+	bool use_tsc = false;
 	u32 val;
 	int err;
 	int tscmag_wires = 0, adc_channels = 0, cell_idx = 0, total_channels;
@@ -143,6 +144,8 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	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) {
@@ -168,7 +171,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}
 
-	if (readouts * 2 + 2 + adc_channels > 16) {
+	if (use_tsc && (readouts * 2 + 2 + adc_channels > 16)) {
 		dev_err(&pdev->dev, "Too many step configurations requested\n");
 		return -EINVAL;
 	}
@@ -221,7 +224,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 
 	/* Set the control register bits */
 	tscadc->ctrl = CNTRLREG_TSC_STEPCONFIGWRT | CNTRLREG_STEPID;
-	if (tscmag_wires > 0) {
+	if (use_tsc) {
 		tscadc->ctrl |= CNTRLREG_TSC_ENB;
 		if (tscmag_wires == 5)
 			tscadc->ctrl |= CNTRLREG_TSC_5WIRE;
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 32/46] mfd: ti_am335x_tscadc: Introduce has_tsc
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (30 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 31/46] mfd: ti_am335x_tscadc: Add a boolean to clarify the presence of a touchscreen Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 33/46] mfd: ti_am335x_tscadc: Move control register configuration Miquel Raynal
                   ` (13 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

One way of knowing which hardware we are dealing with is to check its
compatible. When this must be done at several places, it's best to use a
proper boolean for that. ->has_tsc indicates if there is a touchscreen
controller available (meaning it's a am33xx-like ADC) or not but does
not indicate if it is actually used (that is the purpose of the use_tsc
boolean in the probe).

Introducing this boolean 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>
---
 drivers/mfd/ti_am335x_tscadc.c       | 37 +++++++++++++++++-----------
 include/linux/mfd/ti_am335x_tscadc.h |  1 +
 2 files changed, 23 insertions(+), 15 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index cfdef833dffb..29ada9da8826 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 (tscadc->data->has_tsc)
+		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 (tscadc->data->has_tsc) {
+		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) {
@@ -223,13 +226,16 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
 
 	/* Set the control register bits */
-	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 (tscadc->data->has_tsc) {
+		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);
 
@@ -325,6 +331,7 @@ static int __maybe_unused tscadc_resume(struct device *dev)
 static SIMPLE_DEV_PM_OPS(tscadc_pm_ops, tscadc_suspend, tscadc_resume);
 
 static const struct ti_tscadc_data tscdata = {
+	.has_tsc = true,
 	.name_tscmag = "TI-am335x-tsc",
 	.compat_tscmag = "ti,am3359-tsc",
 	.name_adc = "TI-am335x-adc",
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index 29d3195b0193..3dbdb827566c 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -156,6 +156,7 @@
 #define TSCADC_CELLS		2
 
 struct ti_tscadc_data {
+	bool has_tsc;
 	char *name_tscmag;
 	char *compat_tscmag;
 	char *name_adc;
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 33/46] mfd: ti_am335x_tscadc: Move control register configuration
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (31 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 32/46] mfd: ti_am335x_tscadc: Introduce has_tsc Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-03 13:24   ` Grygorii Strashko
  2021-09-02 21:51 ` [PATCH v2 34/46] mfd: ti_am335x_tscadc: Add ADC1/magnetic reader support Miquel Raynal
                   ` (12 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

The datasheet states that most of the configuration should be set in the
control register in the first place, before actually enabling the
hardware. So far only half of the configuration was made in the first
step, which does not make really sense and would complicating the code
when introducing support for the am437x hardware.

Let's move that register write a bit below to enclose more configuration.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index 29ada9da8826..a0db3e4ff265 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -239,6 +239,8 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	}
 	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
 
+	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
+
 	tscadc_idle_config(tscadc);
 
 	/* Enable the TSC module enable bit */
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 34/46] mfd: ti_am335x_tscadc: Add ADC1/magnetic reader support
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (32 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 33/46] mfd: ti_am335x_tscadc: Move control register configuration Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 13:23   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 35/46] mfd: ti_am335x_tscadc: Support the correctly spelled DT property Miquel Raynal
                   ` (11 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

Introduce a new compatible that has another set of driver data,
targeting am437x SoCs with a magnetic reader instead of the
touchscreen and a more featureful set of registers.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c       | 41 ++++++++++++++++++++++++----
 include/linux/mfd/ti_am335x_tscadc.h |  9 +++++-
 2 files changed, 43 insertions(+), 7 deletions(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index a0db3e4ff265..a3347f9fc388 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -121,11 +121,11 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	struct mfd_cell *cell;
 	struct property *prop;
 	const __be32 *cur;
-	bool use_tsc = false;
+	bool use_tsc = false, use_mag = false;
 	u32 val;
 	int err;
 	int tscmag_wires = 0, adc_channels = 0, cell_idx = 0, total_channels;
-	int readouts = 0;
+	int readouts = 0, mag_tracks = 0;
 
 	/* Allocate memory for device */
 	tscadc = devm_kzalloc(&pdev->dev, sizeof(*tscadc), GFP_KERNEL);
@@ -148,6 +148,16 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 		of_node_put(node);
 		if (tscmag_wires)
 			use_tsc = true;
+	} else {
+		/*
+		 * When adding support for the magnetic reader, here is the
+		 * place to look for the number of tracks used from device tree.
+		 * Let's default to 0 for now.
+		 */
+		mag_tracks = 0;
+		tscmag_wires = mag_tracks * 2;
+		if (tscmag_wires)
+			use_mag = true;
 	}
 
 	node = of_get_child_by_name(pdev->dev.of_node, "adc");
@@ -211,8 +221,9 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	 * The TSC_ADC_Subsystem has 2 clock domains: OCP_CLK and ADC_CLK.
 	 * ADCs produce a 12-bit sample every 15 ADC_CLK cycles.
 	 * am33xx ADCs expect to capture 200ksps.
-	 * We need the ADC clocks to run at 3MHz.
-	 * This frequency is valid since TSC_ADC_SS controller design
+	 * am47xx ADCs expect to capture 867ksps.
+	 * We need ADC clocks respectively running at 3MHz and 13MHz.
+	 * These frequencies are valid since TSC_ADC_SS controller design
 	 * assumes the OCP clock is at least 6x faster than the ADC clock.
 	 */
 	clk = devm_clk_get(&pdev->dev, NULL);
@@ -236,6 +247,9 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 			else
 				tscadc->ctrl |= CNTRLREG_TSC_4WIRE;
 		}
+	} else {
+		tscadc->ctrl |= CNTRLREG_MAG_PREAMP_PWRDOWN |
+				CNTRLREG_MAG_PREAMP_BYPASS;
 	}
 	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
 
@@ -246,7 +260,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	/* Enable the TSC module enable bit */
 	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl | CNTRLREG_SSENB);
 
-	/* TSC Cell */
+	/* TSC or MAG Cell */
 	if (tscmag_wires > 0) {
 		cell = &tscadc->cells[cell_idx++];
 		cell->name = tscadc->data->name_tscmag;
@@ -334,6 +348,7 @@ static SIMPLE_DEV_PM_OPS(tscadc_pm_ops, tscadc_suspend, tscadc_resume);
 
 static const struct ti_tscadc_data tscdata = {
 	.has_tsc = true,
+	.has_mag = false,
 	.name_tscmag = "TI-am335x-tsc",
 	.compat_tscmag = "ti,am3359-tsc",
 	.name_adc = "TI-am335x-adc",
@@ -341,11 +356,25 @@ static const struct ti_tscadc_data tscdata = {
 	.target_clk_rate = TSC_ADC_CLK,
 };
 
+static const struct ti_tscadc_data magdata = {
+	.has_tsc = false,
+	.has_mag = true,
+	.name_tscmag = "TI-am43xx-mag",
+	.compat_tscmag = "ti,am4372-mag",
+	.name_adc = "TI-am43xx-adc",
+	.compat_adc = "ti,am4372-adc",
+	.target_clk_rate = MAG_ADC_CLK,
+};
+
 static const struct of_device_id ti_tscadc_dt_ids[] = {
 	{
 		.compatible = "ti,am3359-tscadc",
 		.data = &tscdata,
 	},
+	{
+		.compatible = "ti,am4372-magadc",
+		.data = &magdata,
+	},
 	{ }
 };
 MODULE_DEVICE_TABLE(of, ti_tscadc_dt_ids);
@@ -363,6 +392,6 @@ static struct platform_driver ti_tscadc_driver = {
 
 module_platform_driver(ti_tscadc_driver);
 
-MODULE_DESCRIPTION("TI touchscreen / ADC MFD controller driver");
+MODULE_DESCRIPTION("TI touchscreen/magnetic reader/ADC MFD controller driver");
 MODULE_AUTHOR("Rachna Patil <rachna@ti.com>");
 MODULE_LICENSE("GPL");
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index 3dbdb827566c..1f29bcdf51c7 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -122,6 +122,11 @@
 #define CNTRLREG_TSC_8WIRE	CNTRLREG_TSC_AFE_CTRL(3)
 #define CNTRLREG_TSC_ENB	BIT(7)
 
+/*Control registers bitfields  for MAGADC IP */
+#define CNTRLREG_MAGADCENB      BIT(0)
+#define CNTRLREG_MAG_PREAMP_PWRDOWN BIT(5)
+#define CNTRLREG_MAG_PREAMP_BYPASS  BIT(6)
+
 /* FIFO READ Register */
 #define FIFOREAD_DATA_MASK	GENMASK(11, 0)
 #define FIFOREAD_CHNLID_MASK	GENMASK(19, 16)
@@ -134,7 +139,8 @@
 #define SEQ_STATUS		BIT(5)
 #define CHARGE_STEP		0x11
 
-#define TSC_ADC_CLK		3000000
+#define TSC_ADC_CLK		3000000 /* 3 MHz */
+#define MAG_ADC_CLK		13000000 /* 13 MHz */
 #define TOTAL_STEPS		16
 #define TOTAL_CHANNELS		8
 #define FIFO1_THRESHOLD		19
@@ -157,6 +163,7 @@
 
 struct ti_tscadc_data {
 	bool has_tsc;
+	bool has_mag;
 	char *name_tscmag;
 	char *compat_tscmag;
 	char *name_adc;
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 35/46] mfd: ti_am335x_tscadc: Support the correctly spelled DT property
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (33 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 34/46] mfd: ti_am335x_tscadc: Add ADC1/magnetic reader support Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-05 13:24   ` Jonathan Cameron
  2021-09-02 21:51 ` [PATCH v2 36/46] iio: adc: ti_am335x_adc: Wait the idle state to avoid stalls Miquel Raynal
                   ` (10 subsequent siblings)
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

There was in the past a typo in the coordinate readouts property. The
bindings have been updated, the touchscreen driver as well and now
supports both. However, the MFD driver that is in charge of verifying
the validity of the property only checks the bogus one. Add support for
the correctly spelled DT property.

Fixes: c9aeb249bf72 ("Input: ti_am335x_tsc - fix spelling mistake in TSC/ADC DT binding")
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mfd/ti_am335x_tscadc.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
index a3347f9fc388..4c2fe9910400 100644
--- a/drivers/mfd/ti_am335x_tscadc.c
+++ b/drivers/mfd/ti_am335x_tscadc.c
@@ -144,8 +144,14 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
 	if (tscadc->data->has_tsc) {
 		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);
+		err = of_property_read_u32(node, "ti,coordinate-readouts",
+					   &readouts);
+		if (err < 0)
+			of_property_read_u32(node, "ti,coordiante-readouts",
+					     &readouts);
+
 		of_node_put(node);
+
 		if (tscmag_wires)
 			use_tsc = true;
 	} else {
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 36/46] iio: adc: ti_am335x_adc: Wait the idle state to avoid stalls
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (34 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 35/46] mfd: ti_am335x_tscadc: Support the correctly spelled DT property Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 37/46] iio: adc: ti_am335x_adc: Replace license text with SPDX tag Miquel Raynal
                   ` (9 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

At least on a am4372, a simple:
$ cat /sys/bus/iio/devices/iio\:deviceX/in_voltage*_raw
can stall forever. It seems that it comes from the fact that the
internal state machine does not have enough time to return to its idle
state in this situation before receiving another request, leading to an
internal stall.

Add a tiadc_wait_idle() helper to ensure no new conversion is requested
while the FSM is still busy.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti_am335x_adc.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 25af90af16a3..2e86484409c3 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -25,6 +25,7 @@
 #include <linux/of_device.h>
 #include <linux/iio/machine.h>
 #include <linux/iio/driver.h>
+#include <linux/iopoll.h>
 
 #include <linux/mfd/ti_am335x_tscadc.h>
 #include <linux/iio/buffer.h>
@@ -102,6 +103,15 @@ static u32 get_adc_step_bit(struct tiadc_device *adc_dev, int chan)
 	return 1 << adc_dev->channel_step[chan];
 }
 
+static int tiadc_wait_idle(struct tiadc_device *adc_dev)
+{
+	u32 val;
+
+	return readl_poll_timeout(adc_dev->mfd_tscadc->tscadc_base + REG_ADCFSM,
+				  val, !(val & SEQ_STATUS), 10,
+				  IDLE_TIMEOUT_MS * 1000 * adc_dev->channels);
+}
+
 static void tiadc_step_config(struct iio_dev *indio_dev)
 {
 	struct tiadc_device *adc_dev = iio_priv(indio_dev);
@@ -295,6 +305,11 @@ static int tiadc_buffer_preenable(struct iio_dev *indio_dev)
 {
 	struct tiadc_device *adc_dev = iio_priv(indio_dev);
 	int i, fifo1count;
+	int ret;
+
+	ret = tiadc_wait_idle(adc_dev);
+	if (ret)
+		return ret;
 
 	tiadc_writel(adc_dev, REG_IRQCLR, (IRQENB_FIFO1THRES |
 				IRQENB_FIFO1OVRRUN |
@@ -454,12 +469,12 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
 		int *val, int *val2, long mask)
 {
 	struct tiadc_device *adc_dev = iio_priv(indio_dev);
-	int ret = IIO_VAL_INT;
 	int i, map_val;
 	unsigned int fifo1count, read, stepid;
 	bool found = false;
 	u32 step_en;
 	unsigned long timeout;
+	int ret;
 
 	if (iio_buffer_enabled(indio_dev))
 		return -EBUSY;
@@ -469,6 +484,11 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
 		return -EINVAL;
 
 	mutex_lock(&adc_dev->fifo1_lock);
+
+	ret = tiadc_wait_idle(adc_dev);
+	if (ret)
+		goto err_unlock;
+
 	fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
 	while (fifo1count--)
 		tiadc_readl(adc_dev, REG_FIFO1);
@@ -516,7 +536,7 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
 
 err_unlock:
 	mutex_unlock(&adc_dev->fifo1_lock);
-	return ret;
+	return ret ? ret : IIO_VAL_INT;
 }
 
 static const struct iio_info tiadc_info = {
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 37/46] iio: adc: ti_am335x_adc: Replace license text with SPDX tag
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (35 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 36/46] iio: adc: ti_am335x_adc: Wait the idle state to avoid stalls Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 38/46] iio: adc: ti_am335x_adc: Fix style Miquel Raynal
                   ` (8 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

Drop the text license and replace it with an equivalent SPDX license tag
identifier which also matches the MODULE_LICENSE("GPL").

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti_am335x_adc.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 2e86484409c3..7479b3c629e8 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -1,16 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  * TI ADC MFD driver
  *
  * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation version 2.
- *
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
- * kind, whether express or implied; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
  */
 
 #include <linux/kernel.h>
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 38/46] iio: adc: ti_am335x_adc: Fix style
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (36 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 37/46] iio: adc: ti_am335x_adc: Replace license text with SPDX tag Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 39/46] iio: adc: ti_am335x_adc: Get rid of useless gotos Miquel Raynal
                   ` (7 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

These warnings are reported by checkpatch.pl essentially.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti_am335x_adc.c | 104 ++++++++++++++++----------------
 1 file changed, 52 insertions(+), 52 deletions(-)

diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 7479b3c629e8..cb2ff4eaa35e 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -58,7 +58,7 @@ static unsigned int tiadc_readl(struct tiadc_device *adc, unsigned int reg)
 }
 
 static void tiadc_writel(struct tiadc_device *adc, unsigned int reg,
-					unsigned int val)
+			 unsigned int val)
 {
 	writel(val, adc->mfd_tscadc->tscadc_base + reg);
 }
@@ -73,7 +73,7 @@ static u32 get_adc_step_mask(struct tiadc_device *adc_dev)
 }
 
 static u32 get_adc_chan_step_mask(struct tiadc_device *adc_dev,
-		struct iio_chan_spec const *chan)
+				  struct iio_chan_spec const *chan)
 {
 	int i;
 
@@ -120,8 +120,6 @@ static void tiadc_step_config(struct iio_dev *indio_dev)
 	 * Channel would represent which analog input
 	 * needs to be given to ADC to digitalize data.
 	 */
-
-
 	for (i = 0; i < adc_dev->channels; i++) {
 		int chan;
 
@@ -134,9 +132,8 @@ static void tiadc_step_config(struct iio_dev *indio_dev)
 		}
 
 		if (adc_dev->step_avg[i])
-			stepconfig =
-			STEPCONFIG_AVG(ffs(adc_dev->step_avg[i]) - 1) |
-			STEPCONFIG_FIFO1;
+			stepconfig = STEPCONFIG_AVG(ffs(adc_dev->step_avg[i]) - 1) |
+				     STEPCONFIG_FIFO1;
 		else
 			stepconfig = STEPCONFIG_FIFO1;
 
@@ -144,10 +141,9 @@ static void tiadc_step_config(struct iio_dev *indio_dev)
 			stepconfig |= STEPCONFIG_MODE_SWCNT;
 
 		tiadc_writel(adc_dev, REG_STEPCONFIG(steps),
-				stepconfig | STEPCONFIG_INP(chan) |
-				STEPCONFIG_INM_ADCREFM |
-				STEPCONFIG_RFP_VREFP |
-				STEPCONFIG_RFM_VREFN);
+			     stepconfig | STEPCONFIG_INP(chan) |
+			     STEPCONFIG_INM_ADCREFM | STEPCONFIG_RFP_VREFP |
+			     STEPCONFIG_RFM_VREFN);
 
 		if (adc_dev->open_delay[i] > STEPDELAY_OPEN_MASK) {
 			dev_warn(dev, "chan %d open delay truncating to 0x3FFFF\n",
@@ -162,8 +158,8 @@ static void tiadc_step_config(struct iio_dev *indio_dev)
 		}
 
 		tiadc_writel(adc_dev, REG_STEPDELAY(steps),
-				STEPDELAY_OPEN(adc_dev->open_delay[i]) |
-				STEPDELAY_SAMPLE(adc_dev->sample_delay[i]));
+			     STEPDELAY_OPEN(adc_dev->open_delay[i]) |
+			     STEPDELAY_SAMPLE(adc_dev->sample_delay[i]));
 
 		adc_dev->channel_step[i] = steps;
 		steps++;
@@ -188,10 +184,12 @@ static irqreturn_t tiadc_irq_h(int irq, void *private)
 		config = tiadc_readl(adc_dev, REG_CTRL);
 		config &= ~(CNTRLREG_SSENB);
 		tiadc_writel(adc_dev, REG_CTRL, config);
-		tiadc_writel(adc_dev, REG_IRQSTATUS, IRQENB_FIFO1OVRRUN
-				| IRQENB_FIFO1UNDRFLW | IRQENB_FIFO1THRES);
+		tiadc_writel(adc_dev, REG_IRQSTATUS,
+			     IRQENB_FIFO1OVRRUN | IRQENB_FIFO1UNDRFLW |
+			     IRQENB_FIFO1THRES);
 
-		/* wait for idle state.
+		/*
+		 * Wait for the idle state.
 		 * ADC needs to finish the current conversion
 		 * before disabling the module
 		 */
@@ -219,11 +217,11 @@ static irqreturn_t tiadc_worker_h(int irq, void *private)
 
 	fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
 	for (k = 0; k < fifo1count; k = k + i) {
-		for (i = 0; i < (indio_dev->scan_bytes)/2; i++) {
+		for (i = 0; i < indio_dev->scan_bytes / 2; i++) {
 			read = tiadc_readl(adc_dev, REG_FIFO1);
 			data[i] = read & FIFOREAD_DATA_MASK;
 		}
-		iio_push_to_buffers(indio_dev, (u8 *) data);
+		iio_push_to_buffers(indio_dev, (u8 *)data);
 	}
 
 	tiadc_writel(adc_dev, REG_IRQSTATUS, IRQENB_FIFO1THRES);
@@ -256,6 +254,7 @@ static int tiadc_start_dma(struct iio_dev *indio_dev)
 	struct dma_async_tx_descriptor *desc;
 
 	dma->current_period = 0; /* We start to fill period 0 */
+
 	/*
 	 * Make the fifo thresh as the multiple of total number of
 	 * channels enabled, so make sure that cyclic DMA period
@@ -265,9 +264,10 @@ static int tiadc_start_dma(struct iio_dev *indio_dev)
 	 */
 	dma->fifo_thresh = rounddown(FIFO1_THRESHOLD + 1,
 				     adc_dev->total_ch_enabled) - 1;
+
 	/* Make sure that period length is multiple of fifo thresh level */
 	dma->period_size = rounddown(DMA_BUFFER_SIZE / 2,
-				    (dma->fifo_thresh + 1) * sizeof(u16));
+				     (dma->fifo_thresh + 1) * sizeof(u16));
 
 	dma->conf.src_maxburst = dma->fifo_thresh + 1;
 	dmaengine_slave_config(dma->chan, &dma->conf);
@@ -303,9 +303,9 @@ static int tiadc_buffer_preenable(struct iio_dev *indio_dev)
 	if (ret)
 		return ret;
 
-	tiadc_writel(adc_dev, REG_IRQCLR, (IRQENB_FIFO1THRES |
-				IRQENB_FIFO1OVRRUN |
-				IRQENB_FIFO1UNDRFLW));
+	tiadc_writel(adc_dev, REG_IRQCLR,
+		     IRQENB_FIFO1THRES | IRQENB_FIFO1OVRRUN |
+		     IRQENB_FIFO1UNDRFLW);
 
 	/* Flush FIFO. Needed in corner cases in simultaneous tsc/adc use */
 	fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
@@ -335,8 +335,9 @@ static int tiadc_buffer_postenable(struct iio_dev *indio_dev)
 
 	am335x_tsc_se_set_cache(adc_dev->mfd_tscadc, enb);
 
-	tiadc_writel(adc_dev,  REG_IRQSTATUS, IRQENB_FIFO1THRES
-				| IRQENB_FIFO1OVRRUN | IRQENB_FIFO1UNDRFLW);
+	tiadc_writel(adc_dev, REG_IRQSTATUS,
+		     IRQENB_FIFO1THRES | IRQENB_FIFO1OVRRUN |
+		     IRQENB_FIFO1UNDRFLW);
 
 	irq_enable = IRQENB_FIFO1OVRRUN;
 	if (!dma->chan)
@@ -352,8 +353,9 @@ static int tiadc_buffer_predisable(struct iio_dev *indio_dev)
 	struct tiadc_dma *dma = &adc_dev->dma;
 	int fifo1count, i;
 
-	tiadc_writel(adc_dev, REG_IRQCLR, (IRQENB_FIFO1THRES |
-				IRQENB_FIFO1OVRRUN | IRQENB_FIFO1UNDRFLW));
+	tiadc_writel(adc_dev, REG_IRQCLR,
+		     IRQENB_FIFO1THRES | IRQENB_FIFO1OVRRUN |
+		     IRQENB_FIFO1UNDRFLW);
 	am335x_tsc_se_clr(adc_dev->mfd_tscadc, adc_dev->buffer_en_ch_steps);
 	adc_dev->buffer_en_ch_steps = 0;
 	adc_dev->total_ch_enabled = 0;
@@ -385,12 +387,11 @@ static const struct iio_buffer_setup_ops tiadc_buffer_setup_ops = {
 };
 
 static int tiadc_iio_buffered_hardware_setup(struct device *dev,
-	struct iio_dev *indio_dev,
-	irqreturn_t (*pollfunc_bh)(int irq, void *p),
-	irqreturn_t (*pollfunc_th)(int irq, void *p),
-	int irq,
-	unsigned long flags,
-	const struct iio_buffer_setup_ops *setup_ops)
+					     struct iio_dev *indio_dev,
+					     irqreturn_t (*pollfunc_bh)(int irq, void *p),
+					     irqreturn_t (*pollfunc_th)(int irq, void *p),
+					     int irq, unsigned long flags,
+					     const struct iio_buffer_setup_ops *setup_ops)
 {
 	struct iio_buffer *buffer;
 	int ret;
@@ -402,7 +403,7 @@ static int tiadc_iio_buffered_hardware_setup(struct device *dev,
 	iio_device_attach_buffer(indio_dev, buffer);
 
 	ret = devm_request_threaded_irq(dev, irq, pollfunc_th, pollfunc_bh,
-				flags, indio_dev->name, indio_dev);
+					flags, indio_dev->name, indio_dev);
 	if (ret)
 		return ret;
 
@@ -434,12 +435,11 @@ static int tiadc_channel_init(struct device *dev, struct iio_dev *indio_dev,
 	indio_dev->num_channels = channels;
 	chan_array = devm_kcalloc(dev, channels, sizeof(*chan_array),
 				  GFP_KERNEL);
-	if (chan_array == NULL)
+	if (!chan_array)
 		return -ENOMEM;
 
 	chan = chan_array;
 	for (i = 0; i < channels; i++, chan++) {
-
 		chan->type = IIO_VOLTAGE;
 		chan->indexed = 1;
 		chan->channel = adc_dev->channel_line[i];
@@ -457,8 +457,8 @@ static int tiadc_channel_init(struct device *dev, struct iio_dev *indio_dev,
 }
 
 static int tiadc_read_raw(struct iio_dev *indio_dev,
-		struct iio_chan_spec const *chan,
-		int *val, int *val2, long mask)
+			  struct iio_chan_spec const *chan, int *val, int *val2,
+			  long mask)
 {
 	struct tiadc_device *adc_dev = iio_priv(indio_dev);
 	int i, map_val;
@@ -487,9 +487,8 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
 
 	am335x_tsc_se_set_once(adc_dev->mfd_tscadc, step_en);
 
-	timeout = jiffies + msecs_to_jiffies
-				(IDLE_TIMEOUT * adc_dev->channels);
 	/* Wait for Fifo threshold interrupt */
+	timeout = jiffies + msecs_to_jiffies(IDLE_TIMEOUT * adc_dev->channels);
 	while (1) {
 		fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
 		if (fifo1count)
@@ -501,6 +500,7 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
 			goto err_unlock;
 		}
 	}
+
 	map_val = adc_dev->channel_step[chan->scan_index];
 
 	/*
@@ -518,13 +518,14 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
 		if (stepid == map_val) {
 			read = read & FIFOREAD_DATA_MASK;
 			found = true;
-			*val = (u16) read;
+			*val = (u16)read;
 		}
 	}
+
 	am335x_tsc_se_adc_done(adc_dev->mfd_tscadc);
 
 	if (!found)
-		ret =  -EBUSY;
+		ret = -EBUSY;
 
 err_unlock:
 	mutex_unlock(&adc_dev->fifo1_lock);
@@ -565,6 +566,7 @@ static int tiadc_request_dma(struct platform_device *pdev,
 		goto err;
 
 	return 0;
+
 err:
 	dma_release_channel(dma->chan);
 	return -ENOMEM;
@@ -614,7 +616,7 @@ static int tiadc_probe(struct platform_device *pdev)
 	}
 
 	indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc_dev));
-	if (indio_dev == NULL) {
+	if (!indio_dev) {
 		dev_err(&pdev->dev, "failed to allocate iio device\n");
 		return -ENOMEM;
 	}
@@ -636,12 +638,11 @@ static int tiadc_probe(struct platform_device *pdev)
 		return err;
 
 	err = tiadc_iio_buffered_hardware_setup(&pdev->dev, indio_dev,
-		&tiadc_worker_h,
-		&tiadc_irq_h,
-		adc_dev->mfd_tscadc->irq,
-		IRQF_SHARED,
-		&tiadc_buffer_setup_ops);
-
+						&tiadc_worker_h,
+						&tiadc_irq_h,
+						adc_dev->mfd_tscadc->irq,
+						IRQF_SHARED,
+						&tiadc_buffer_setup_ops);
 	if (err)
 		goto err_free_channels;
 
@@ -692,8 +693,7 @@ static int __maybe_unused tiadc_suspend(struct device *dev)
 
 	idle = tiadc_readl(adc_dev, REG_CTRL);
 	idle &= ~(CNTRLREG_SSENB);
-	tiadc_writel(adc_dev, REG_CTRL, (idle |
-			CNTRLREG_POWERDOWN));
+	tiadc_writel(adc_dev, REG_CTRL, idle | CNTRLREG_POWERDOWN);
 
 	return 0;
 }
@@ -706,12 +706,12 @@ static int __maybe_unused tiadc_resume(struct device *dev)
 
 	/* Make sure ADC is powered up */
 	restore = tiadc_readl(adc_dev, REG_CTRL);
-	restore &= ~(CNTRLREG_POWERDOWN);
+	restore &= ~CNTRLREG_POWERDOWN;
 	tiadc_writel(adc_dev, REG_CTRL, restore);
 
 	tiadc_step_config(indio_dev);
 	am335x_tsc_se_set_cache(adc_dev->mfd_tscadc,
-			adc_dev->buffer_en_ch_steps);
+				adc_dev->buffer_en_ch_steps);
 	return 0;
 }
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 39/46] iio: adc: ti_am335x_adc: Get rid of useless gotos
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (37 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 38/46] iio: adc: ti_am335x_adc: Fix style Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 40/46] iio: adc: ti_am335x_adc: Gather the checks on the delays Miquel Raynal
                   ` (6 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

Gotos jumping to a return statement are not really useful, drop them.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti_am335x_adc.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index cb2ff4eaa35e..fcd5283bda2e 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -644,11 +644,11 @@ static int tiadc_probe(struct platform_device *pdev)
 						IRQF_SHARED,
 						&tiadc_buffer_setup_ops);
 	if (err)
-		goto err_free_channels;
+		return err;
 
 	err = iio_device_register(indio_dev);
 	if (err)
-		goto err_buffer_unregister;
+		return err;
 
 	platform_set_drvdata(pdev, indio_dev);
 
@@ -660,8 +660,7 @@ static int tiadc_probe(struct platform_device *pdev)
 
 err_dma:
 	iio_device_unregister(indio_dev);
-err_buffer_unregister:
-err_free_channels:
+
 	return err;
 }
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 40/46] iio: adc: ti_am335x_adc: Gather the checks on the delays
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (38 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 39/46] iio: adc: ti_am335x_adc: Get rid of useless gotos Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 41/46] iio: adc: ti_am335x_adc: Add a unit to the timeout delay Miquel Raynal
                   ` (5 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

Move the checks over the delays provided in the device tree to the
location where these values are read to clarify where they come from.

There are no functional changes besides the device structure used to
display the warnings: let's use the ADC instead of the MFD device.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti_am335x_adc.c | 47 +++++++++++++++++++--------------
 1 file changed, 27 insertions(+), 20 deletions(-)

diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index fcd5283bda2e..0c72845e2b4f 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -107,7 +107,6 @@ static int tiadc_wait_idle(struct tiadc_device *adc_dev)
 static void tiadc_step_config(struct iio_dev *indio_dev)
 {
 	struct tiadc_device *adc_dev = iio_priv(indio_dev);
-	struct device *dev = adc_dev->mfd_tscadc->dev;
 	unsigned int stepconfig;
 	int i, steps = 0;
 
@@ -125,12 +124,6 @@ static void tiadc_step_config(struct iio_dev *indio_dev)
 
 		chan = adc_dev->channel_line[i];
 
-		if (adc_dev->step_avg[i] > STEPCONFIG_AVG_16) {
-			dev_warn(dev, "chan %d step_avg truncating to %ld\n",
-				 chan, STEPCONFIG_AVG_16);
-			adc_dev->step_avg[i] = STEPCONFIG_AVG_16;
-		}
-
 		if (adc_dev->step_avg[i])
 			stepconfig = STEPCONFIG_AVG(ffs(adc_dev->step_avg[i]) - 1) |
 				     STEPCONFIG_FIFO1;
@@ -145,18 +138,6 @@ static void tiadc_step_config(struct iio_dev *indio_dev)
 			     STEPCONFIG_INM_ADCREFM | STEPCONFIG_RFP_VREFP |
 			     STEPCONFIG_RFM_VREFN);
 
-		if (adc_dev->open_delay[i] > STEPDELAY_OPEN_MASK) {
-			dev_warn(dev, "chan %d open delay truncating to 0x3FFFF\n",
-				 chan);
-			adc_dev->open_delay[i] = STEPDELAY_OPEN_MASK;
-		}
-
-		if (adc_dev->sample_delay[i] > 0xFF) {
-			dev_warn(dev, "chan %d sample delay truncating to 0xFF\n",
-				 chan);
-			adc_dev->sample_delay[i] = 0xFF;
-		}
-
 		tiadc_writel(adc_dev, REG_STEPDELAY(steps),
 			     STEPDELAY_OPEN(adc_dev->open_delay[i]) |
 			     STEPDELAY_SAMPLE(adc_dev->sample_delay[i]));
@@ -580,6 +561,7 @@ static int tiadc_parse_dt(struct platform_device *pdev,
 	const __be32 *cur;
 	int channels = 0;
 	u32 val;
+	int i;
 
 	of_property_for_each_u32(node, "ti,adc-channels", prop, cur, val) {
 		adc_dev->channel_line[channels] = val;
@@ -592,6 +574,8 @@ static int tiadc_parse_dt(struct platform_device *pdev,
 		channels++;
 	}
 
+	adc_dev->channels = channels;
+
 	of_property_read_u32_array(node, "ti,chan-step-avg",
 				   adc_dev->step_avg, channels);
 	of_property_read_u32_array(node, "ti,chan-step-opendelay",
@@ -599,7 +583,30 @@ static int tiadc_parse_dt(struct platform_device *pdev,
 	of_property_read_u32_array(node, "ti,chan-step-sampledelay",
 				   adc_dev->sample_delay, channels);
 
-	adc_dev->channels = channels;
+	for (i = 0; i < adc_dev->channels; i++) {
+		int chan;
+
+		chan = adc_dev->channel_line[i];
+
+		if (adc_dev->step_avg[i] > STEPCONFIG_AVG_16) {
+			dev_warn(&pdev->dev, "chan %d step_avg truncating to %ld\n",
+				 chan, STEPCONFIG_AVG_16);
+			adc_dev->step_avg[i] = STEPCONFIG_AVG_16;
+		}
+
+		if (adc_dev->open_delay[i] > STEPDELAY_OPEN_MASK) {
+			dev_warn(&pdev->dev, "chan %d open delay truncating to 0x3FFFF\n",
+				 chan);
+			adc_dev->open_delay[i] = STEPDELAY_OPEN_MASK;
+		}
+
+		if (adc_dev->sample_delay[i] > 0xFF) {
+			dev_warn(&pdev->dev, "chan %d sample delay truncating to 0xFF\n",
+				 chan);
+			adc_dev->sample_delay[i] = 0xFF;
+		}
+	}
+
 	return 0;
 }
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 41/46] iio: adc: ti_am335x_adc: Add a unit to the timeout delay
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (39 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 40/46] iio: adc: ti_am335x_adc: Gather the checks on the delays Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 42/46] iio: adc: ti_am335x_adc: Add the scale information Miquel Raynal
                   ` (4 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

The lack of unit in the macro name kind of tricked me when I was
troubleshooting an issue. Physical constants should always get a unit.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti_am335x_adc.c      | 2 +-
 include/linux/mfd/ti_am335x_tscadc.h | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 0c72845e2b4f..72b11d7118aa 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -469,7 +469,7 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
 	am335x_tsc_se_set_once(adc_dev->mfd_tscadc, step_en);
 
 	/* Wait for Fifo threshold interrupt */
-	timeout = jiffies + msecs_to_jiffies(IDLE_TIMEOUT * adc_dev->channels);
+	timeout = jiffies + msecs_to_jiffies(IDLE_TIMEOUT_MS * adc_dev->channels);
 	while (1) {
 		fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
 		if (fifo1count)
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index 1f29bcdf51c7..c5daab8682a8 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -157,7 +157,7 @@
  *
  * max processing time: 266431 * 308ns = 83ms(approx)
  */
-#define IDLE_TIMEOUT		83 /* milliseconds */
+#define IDLE_TIMEOUT_MS		83 /* milliseconds */
 
 #define TSCADC_CELLS		2
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 42/46] iio: adc: ti_am335x_adc: Add the scale information
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (40 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 41/46] iio: adc: ti_am335x_adc: Add a unit to the timeout delay Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 43/46] iio: adc: ti_am335x_adc: Add the am437x compatible Miquel Raynal
                   ` (3 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

Without the scale, the values returned to the user are just a picture of
the input voltage against the full scale range of the ADC. We need to
provide the actual conversion factor to get milli-Volts values.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti_am335x_adc.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 72b11d7118aa..751ca70442ba 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -425,6 +425,7 @@ static int tiadc_channel_init(struct device *dev, struct iio_dev *indio_dev,
 		chan->indexed = 1;
 		chan->channel = adc_dev->channel_line[i];
 		chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
+		chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE);
 		chan->datasheet_name = chan_name_ain[chan->channel];
 		chan->scan_index = i;
 		chan->scan_type.sign = 'u';
@@ -449,6 +450,23 @@ static int tiadc_read_raw(struct iio_dev *indio_dev,
 	unsigned long timeout;
 	int ret;
 
+	switch (mask) {
+	case IIO_CHAN_INFO_RAW:
+		break;
+	case IIO_CHAN_INFO_SCALE:
+		switch (chan->type) {
+		case IIO_VOLTAGE:
+			*val = 1800;
+			*val2 = chan->scan_type.realbits;
+			return IIO_VAL_FRACTIONAL_LOG2;
+		default:
+			return -EINVAL;
+		}
+		break;
+	default:
+		return -EINVAL;
+	}
+
 	if (iio_buffer_enabled(indio_dev))
 		return -EBUSY;
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 43/46] iio: adc: ti_am335x_adc: Add the am437x compatible
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (41 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 42/46] iio: adc: ti_am335x_adc: Add the scale information Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 44/46] ARM: dts: am437x-cm-t43: Use a correctly spelled DT property Miquel Raynal
                   ` (2 subsequent siblings)
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal, Jonathan Cameron

This driver supports both the legacy controller (am33xx) and the
extended one (am437x), so let's add a new compatible.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti_am335x_adc.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 751ca70442ba..bd084b31e91e 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -743,6 +743,7 @@ static SIMPLE_DEV_PM_OPS(tiadc_pm_ops, tiadc_suspend, tiadc_resume);
 
 static const struct of_device_id ti_adc_dt_ids[] = {
 	{ .compatible = "ti,am3359-adc", },
+	{ .compatible = "ti,am4372-adc", },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, ti_adc_dt_ids);
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 44/46] ARM: dts: am437x-cm-t43: Use a correctly spelled DT property
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (42 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 43/46] iio: adc: ti_am335x_adc: Add the am437x compatible Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 45/46] ARM: dts: am43xx: Describe the magnetic reader/ADC1 hardware module Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 46/46] ARM: dts: am437x-gp-evm: enable ADC1 Miquel Raynal
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

Back in 2014 a property got misspelled "ti,coordiante-readouts" instead
of "ti,coordinate-readouts".

The year after it got fixed but both are still supported, although this
is not a reason to continue using this old deprecated property.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 arch/arm/boot/dts/am437x-cm-t43.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/am437x-cm-t43.dts b/arch/arm/boot/dts/am437x-cm-t43.dts
index a83f46ed0c9a..c06cf9373812 100644
--- a/arch/arm/boot/dts/am437x-cm-t43.dts
+++ b/arch/arm/boot/dts/am437x-cm-t43.dts
@@ -399,7 +399,7 @@ &tscadc {
 	tsc {
 		ti,wires = <4>;
 		ti,x-plate-resistance = <200>;
-		ti,coordiante-readouts = <5>;
+		ti,coordinate-readouts = <5>;
 		ti,wire-config = <0x00 0x11 0x22 0x33>;
 	};
 
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 45/46] ARM: dts: am43xx: Describe the magnetic reader/ADC1 hardware module
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (43 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 44/46] ARM: dts: am437x-cm-t43: Use a correctly spelled DT property Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  2021-09-02 22:17   ` Miquel Raynal
  2021-09-02 21:51 ` [PATCH v2 46/46] ARM: dts: am437x-gp-evm: enable ADC1 Miquel Raynal
  45 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

This hardware module is close to the am33xx ADC module but instead of
featuring a touchscreen it has a magnetic reader capability.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 arch/arm/boot/dts/am437x-l4.dtsi     | 31 ++++++++++++++++++++++++++--
 arch/arm/boot/dts/am43xx-clocks.dtsi |  7 +++++++
 2 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/arch/arm/boot/dts/am437x-l4.dtsi b/arch/arm/boot/dts/am437x-l4.dtsi
index 370c4e64676f..7a3dcfc7bfc9 100644
--- a/arch/arm/boot/dts/am437x-l4.dtsi
+++ b/arch/arm/boot/dts/am437x-l4.dtsi
@@ -2350,11 +2350,38 @@ hdq: hdq@0 {
 		};
 
 		target-module@4c000 {			/* 0x4834c000, ap 114 72.0 */
-			compatible = "ti,sysc";
-			status = "disabled";
+			compatible = "ti,sysc-omap4", "ti,sysc";
+			reg = <0x4c000 0x4>,
+			      <0x4c010 0x4>;
+			reg-names = "rev", "sysc";
+			ti,sysc-sidle = <SYSC_IDLE_FORCE>,
+					<SYSC_IDLE_NO>,
+					<SYSC_IDLE_SMART>;
+			clocks = <&l3s_clkctrl AM4_L3S_ADC1_CLKCTRL 0>;
+			clock-names = "fck";
 			#address-cells = <1>;
 			#size-cells = <1>;
 			ranges = <0x0 0x4c000 0x2000>;
+
+			magadc: magadc@0 {
+				compatible = "ti,am4372-magadc";
+				reg = <0x0 0x2000>;
+				interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
+				clocks = <&adc_mag_fck>;
+				clock-names = "fck";
+				dmas = <&edma 54 0>, <&edma 55 0>;;
+				dma-names = "fifo0", "fifo1";
+				status = "disabled";
+
+				mag {
+					compatible = "ti,am4372-mag";
+				};
+
+				adc {
+					#io-channel-cells = <1>;
+					compatible ="ti,am4372-adc";
+				};
+			};
 		};
 
 		target-module@80000 {			/* 0x48380000, ap 123 42.0 */
diff --git a/arch/arm/boot/dts/am43xx-clocks.dtsi b/arch/arm/boot/dts/am43xx-clocks.dtsi
index c726cd8dbdf1..59b1f592a743 100644
--- a/arch/arm/boot/dts/am43xx-clocks.dtsi
+++ b/arch/arm/boot/dts/am43xx-clocks.dtsi
@@ -444,6 +444,13 @@ wdt1_fck: wdt1_fck@422c {
 		reg = <0x422c>;
 	};
 
+	adc_mag_fck: adc_mag_fck@424c {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin_ck>, <&dpll_per_m2_ck>;
+		reg = <0x424c>;
+	};
+
 	l3_gclk: l3_gclk {
 		#clock-cells = <0>;
 		compatible = "fixed-factor-clock";
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* [PATCH v2 46/46] ARM: dts: am437x-gp-evm: enable ADC1
  2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
                   ` (44 preceding siblings ...)
  2021-09-02 21:51 ` [PATCH v2 45/46] ARM: dts: am43xx: Describe the magnetic reader/ADC1 hardware module Miquel Raynal
@ 2021-09-02 21:51 ` Miquel Raynal
  45 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 21:51 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Miquel Raynal

ADC0 and ADC1 pins are available on external connector J22.

Enable ADC1 which was missing.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 arch/arm/boot/dts/am437x-gp-evm.dts | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/boot/dts/am437x-gp-evm.dts b/arch/arm/boot/dts/am437x-gp-evm.dts
index 033b984ff637..2396ff2ae790 100644
--- a/arch/arm/boot/dts/am437x-gp-evm.dts
+++ b/arch/arm/boot/dts/am437x-gp-evm.dts
@@ -775,6 +775,14 @@ adc {
 	};
 };
 
+&magadc {
+	status = "okay";
+
+	adc {
+		ti,adc-channels = <0 1 2 3 4 5 6 7>;
+	};
+};
+
 &ecap0 {
 	status = "okay";
 	pinctrl-names = "default";
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 45/46] ARM: dts: am43xx: Describe the magnetic reader/ADC1 hardware module
  2021-09-02 21:51 ` [PATCH v2 45/46] ARM: dts: am43xx: Describe the magnetic reader/ADC1 hardware module Miquel Raynal
@ 2021-09-02 22:17   ` Miquel Raynal
  0 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-02 22:17 UTC (permalink / raw)
  To: Jonathan Cameron, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

Hello,

Miquel Raynal <miquel.raynal@bootlin.com> wrote on Thu,  2 Sep 2021
23:51:43 +0200:

> This hardware module is close to the am33xx ADC module but instead of
> featuring a touchscreen it has a magnetic reader capability.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
>  arch/arm/boot/dts/am437x-l4.dtsi     | 31 ++++++++++++++++++++++++++--
>  arch/arm/boot/dts/am43xx-clocks.dtsi |  7 +++++++
>  2 files changed, 36 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/am437x-l4.dtsi b/arch/arm/boot/dts/am437x-l4.dtsi
> index 370c4e64676f..7a3dcfc7bfc9 100644
> --- a/arch/arm/boot/dts/am437x-l4.dtsi
> +++ b/arch/arm/boot/dts/am437x-l4.dtsi
> @@ -2350,11 +2350,38 @@ hdq: hdq@0 {
>  		};
>  
>  		target-module@4c000 {			/* 0x4834c000, ap 114 72.0 */
> -			compatible = "ti,sysc";
> -			status = "disabled";
> +			compatible = "ti,sysc-omap4", "ti,sysc";
> +			reg = <0x4c000 0x4>,
> +			      <0x4c010 0x4>;
> +			reg-names = "rev", "sysc";
> +			ti,sysc-sidle = <SYSC_IDLE_FORCE>,
> +					<SYSC_IDLE_NO>,
> +					<SYSC_IDLE_SMART>;
> +			clocks = <&l3s_clkctrl AM4_L3S_ADC1_CLKCTRL 0>;
> +			clock-names = "fck";
>  			#address-cells = <1>;
>  			#size-cells = <1>;
>  			ranges = <0x0 0x4c000 0x2000>;
> +
> +			magadc: magadc@0 {
> +				compatible = "ti,am4372-magadc";
> +				reg = <0x0 0x2000>;
> +				interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
> +				clocks = <&adc_mag_fck>;
> +				clock-names = "fck";
> +				dmas = <&edma 54 0>, <&edma 55 0>;;

Small typo here, should have a single ';'.
As the series is fairly long, we will see if there is a need to resend
it or not.

> +				dma-names = "fifo0", "fifo1";
> +				status = "disabled";
> +
> +				mag {
> +					compatible = "ti,am4372-mag";
> +				};
> +
> +				adc {
> +					#io-channel-cells = <1>;
> +					compatible ="ti,am4372-adc";
> +				};
> +			};
>  		};
>  
>  		target-module@80000 {			/* 0x48380000, ap 123 42.0 */
> diff --git a/arch/arm/boot/dts/am43xx-clocks.dtsi b/arch/arm/boot/dts/am43xx-clocks.dtsi
> index c726cd8dbdf1..59b1f592a743 100644
> --- a/arch/arm/boot/dts/am43xx-clocks.dtsi
> +++ b/arch/arm/boot/dts/am43xx-clocks.dtsi
> @@ -444,6 +444,13 @@ wdt1_fck: wdt1_fck@422c {
>  		reg = <0x422c>;
>  	};
>  
> +	adc_mag_fck: adc_mag_fck@424c {
> +		#clock-cells = <0>;
> +		compatible = "ti,mux-clock";
> +		clocks = <&sys_clkin_ck>, <&dpll_per_m2_ck>;
> +		reg = <0x424c>;
> +	};
> +
>  	l3_gclk: l3_gclk {
>  		#clock-cells = <0>;
>  		compatible = "fixed-factor-clock";

Thanks,
Miquèl

^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 33/46] mfd: ti_am335x_tscadc: Move control register configuration
  2021-09-02 21:51 ` [PATCH v2 33/46] mfd: ti_am335x_tscadc: Move control register configuration Miquel Raynal
@ 2021-09-03 13:24   ` Grygorii Strashko
  2021-09-05 13:18     ` Jonathan Cameron
  0 siblings, 1 reply; 77+ messages in thread
From: Grygorii Strashko @ 2021-09-03 13:24 UTC (permalink / raw)
  To: Miquel Raynal, Jonathan Cameron, Lars-Peter Clausen,
	Peter Meerwald-Stadler, Rob Herring, Dmitry Torokhov, Lee Jones,
	bcousson, Tony Lindgren
  Cc: linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Jason Reeder



On 03/09/2021 00:51, Miquel Raynal wrote:
> The datasheet states that most of the configuration should be set in the
> control register in the first place, before actually enabling the
> hardware. So far only half of the configuration was made in the first
> step, which does not make really sense and would complicating the code
> when introducing support for the am437x hardware.
> 
> Let's move that register write a bit below to enclose more configuration.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
>   drivers/mfd/ti_am335x_tscadc.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index 29ada9da8826..a0db3e4ff265 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -239,6 +239,8 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>   	}
>   	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
>   
> +	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
> +

Strange change - above 2 lines a the same !?

>   	tscadc_idle_config(tscadc);
>   
>   	/* Enable the TSC module enable bit */
> 

-- 
Best regards,
grygorii

^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 02/46] dt-bindings: mfd: ti,am3359-tscadc: Add a yaml description for this MFD
  2021-09-02 21:51 ` [PATCH v2 02/46] dt-bindings: mfd: ti,am3359-tscadc: Add a yaml description for this MFD Miquel Raynal
@ 2021-09-03 16:05   ` Rob Herring
  2021-09-05 11:57   ` Jonathan Cameron
  1 sibling, 0 replies; 77+ messages in thread
From: Rob Herring @ 2021-09-03 16:05 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: bcousson, Lee Jones, Tony Lindgren, Vignesh Raghavendra,
	Peter Meerwald-Stadler, Lars-Peter Clausen, Jonathan Cameron,
	Grygorii Strashko, devicetree, Ryan Barnett, linux-omap,
	Jason Reeder, Tero Kristo, Dmitry Torokhov, linux-input,
	Thomas Petazzoni, Lokesh Vutla, Rob Herring, linux-iio

On Thu, 02 Sep 2021 23:51:00 +0200, Miquel Raynal wrote:
> There is a very light description of this MFD in a text file dedicated
> to a touchscreen controller (which is one of the two children of the
> MFD). Here is now a complete yaml description.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
>  .../bindings/mfd/ti,am3359-tscadc.yaml        | 79 +++++++++++++++++++
>  1 file changed, 79 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml
> 

Reviewed-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 03/46] dt-bindings: touchscreen: ti,am3359-tsc: New yaml description
  2021-09-02 21:51 ` [PATCH v2 03/46] dt-bindings: touchscreen: ti,am3359-tsc: New yaml description Miquel Raynal
@ 2021-09-03 16:06   ` Rob Herring
  2021-09-05 11:59   ` Jonathan Cameron
  1 sibling, 0 replies; 77+ messages in thread
From: Rob Herring @ 2021-09-03 16:06 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: linux-omap, Thomas Petazzoni, Tero Kristo, Ryan Barnett,
	devicetree, Rob Herring, Tony Lindgren, Peter Meerwald-Stadler,
	Lee Jones, Grygorii Strashko, linux-input, Jason Reeder,
	Dmitry Torokhov, Jonathan Cameron, Vignesh Raghavendra,
	linux-iio, Lokesh Vutla, Lars-Peter Clausen, bcousson

On Thu, 02 Sep 2021 23:51:01 +0200, Miquel Raynal wrote:
> This touchscreen controller is already described in a text file:
> Documentation/devicetree/bindings/input/touchscreen/ti-tsc-adc.txt
> 
> After introducing a proper description of the MFD, this is the second
> step. The file cannot be removed yet as it also contains an ADC
> description.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
>  .../input/touchscreen/ti,am3359-tsc.yaml      | 76 +++++++++++++++++++
>  1 file changed, 76 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/input/touchscreen/ti,am3359-tsc.yaml
> 

Reviewed-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 04/46] dt-bindings: iio: adc: ti,am3359-adc: New yaml description
  2021-09-02 21:51 ` [PATCH v2 04/46] dt-bindings: iio: adc: ti,am3359-adc: " Miquel Raynal
@ 2021-09-03 16:07   ` Rob Herring
  0 siblings, 0 replies; 77+ messages in thread
From: Rob Herring @ 2021-09-03 16:07 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Tero Kristo, Rob Herring, bcousson, Jason Reeder,
	Vignesh Raghavendra, Grygorii Strashko, Lars-Peter Clausen,
	Jonathan Cameron, Lee Jones, linux-omap, Jonathan Cameron,
	Tony Lindgren, Dmitry Torokhov, Peter Meerwald-Stadler,
	devicetree, Lokesh Vutla, Ryan Barnett, linux-input, linux-iio,
	Thomas Petazzoni

On Thu, 02 Sep 2021 23:51:02 +0200, Miquel Raynal wrote:
> This ADC was already described in a text file also containing an MFD
> description an a touchscreen description:
> Documentation/devicetree/bindings/input/touchscreen/ti-tsc-adc.txt
> Let's add a proper description for this hardware.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
>  .../bindings/iio/adc/ti,am3359-adc.yaml       | 68 +++++++++++++++++++
>  1 file changed, 68 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/iio/adc/ti,am3359-adc.yaml
> 

Reviewed-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 02/46] dt-bindings: mfd: ti,am3359-tscadc: Add a yaml description for this MFD
  2021-09-02 21:51 ` [PATCH v2 02/46] dt-bindings: mfd: ti,am3359-tscadc: Add a yaml description for this MFD Miquel Raynal
  2021-09-03 16:05   ` Rob Herring
@ 2021-09-05 11:57   ` Jonathan Cameron
  1 sibling, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 11:57 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:00 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> There is a very light description of this MFD in a text file dedicated
> to a touchscreen controller (which is one of the two children of the
> MFD). Here is now a complete yaml description.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Looks good now

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  .../bindings/mfd/ti,am3359-tscadc.yaml        | 79 +++++++++++++++++++
>  1 file changed, 79 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml
> 
> diff --git a/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml b/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml
> new file mode 100644
> index 000000000000..b2bff85f2329
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml
> @@ -0,0 +1,79 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/mfd/ti,am3359-tscadc.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: TI AM3359 Touchscreen controller/ADC
> +
> +maintainers:
> +  - Miquel Raynal <miquel.raynal@bootlin.com>
> +
> +properties:
> +  compatible:
> +    oneOf:
> +      - const: ti,am3359-tscadc
> +      - items:
> +          - const: ti,am654-tscadc
> +          - const: ti,am3359-tscadc
> +
> +  reg:
> +    maxItems: 1
> +
> +  interrupts:
> +    maxItems: 1
> +
> +  clocks:
> +    maxItems: 1
> +
> +  clock-names:
> +    const: fck
> +
> +  dmas:
> +    items:
> +      - description: DMA controller phandle and request line for FIFO0
> +      - description: DMA controller phandle and request line for FIFO1
> +
> +  dma-names:
> +    items:
> +      - const: fifo0
> +      - const: fifo1
> +
> +  adc:
> +    type: object
> +    description: ADC child
> +
> +  tsc:
> +    type: object
> +    description: Touchscreen controller child
> +
> +required:
> +  - compatible
> +  - reg
> +  - interrupts
> +  - clocks
> +  - clock-names
> +  - dmas
> +  - dma-names
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/interrupt-controller/arm-gic.h>
> +
> +    tscadc@0 {
> +        compatible = "ti,am3359-tscadc";
> +        reg = <0x0 0x1000>;
> +        interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
> +        clocks = <&adc_tsc_fck>;
> +        clock-names = "fck";
> +        dmas = <&edma 53 0>, <&edma 57 0>;
> +        dma-names = "fifo0", "fifo1";
> +
> +        tsc {
> +        };
> +
> +        adc {
> +        };
> +    };


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 03/46] dt-bindings: touchscreen: ti,am3359-tsc: New yaml description
  2021-09-02 21:51 ` [PATCH v2 03/46] dt-bindings: touchscreen: ti,am3359-tsc: New yaml description Miquel Raynal
  2021-09-03 16:06   ` Rob Herring
@ 2021-09-05 11:59   ` Jonathan Cameron
  1 sibling, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 11:59 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:01 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> This touchscreen controller is already described in a text file:
> Documentation/devicetree/bindings/input/touchscreen/ti-tsc-adc.txt
> 
> After introducing a proper description of the MFD, this is the second
> step. The file cannot be removed yet as it also contains an ADC
> description.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
You addressed my comment on v1 in that thread so I'm fine with this.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  .../input/touchscreen/ti,am3359-tsc.yaml      | 76 +++++++++++++++++++
>  1 file changed, 76 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/input/touchscreen/ti,am3359-tsc.yaml
> 
> diff --git a/Documentation/devicetree/bindings/input/touchscreen/ti,am3359-tsc.yaml b/Documentation/devicetree/bindings/input/touchscreen/ti,am3359-tsc.yaml
> new file mode 100644
> index 000000000000..e44cc65abc8c
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/input/touchscreen/ti,am3359-tsc.yaml
> @@ -0,0 +1,76 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/input/touchscreen/ti,am3359-tsc.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: TI AM3359 Touchscreen controller
> +
> +maintainers:
> +  - Miquel Raynal <miquel.raynal@bootlin.com>
> +
> +properties:
> +  compatible:
> +    const: ti,am3359-tsc
> +
> +  ti,wires:
> +    description: Wires refer to application modes i.e. 4/5/8 wire touchscreen
> +      support on the platform.
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    enum: [4, 5, 8]
> +
> +  ti,x-plate-resistance:
> +    description: X plate resistance
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +
> +  ti,coordinate-readouts:
> +    description: The sequencer supports a total of 16 programmable steps. Each
> +      step is used to read a single coordinate. A single readout is enough but
> +      multiple reads can increase the quality. A value of 5 means, 5 reads for
> +      X, 5 for Y and 2 for Z (always). This utilises 12 of the 16 software steps
> +      available. The remaining 4 can be used by the ADC.
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    minimum: 1
> +    maximum: 6
> +
> +  ti,wire-config:
> +    description: Different boards could have a different order for connecting
> +      wires on touchscreen. We need to provide an 8-bit number where the
> +      first four bits represent the analog lines and the next 4 bits represent
> +      positive/negative terminal on that input line. Notations to represent the
> +      input lines and terminals respectively are as follows, AIN0 = 0, AIN1 = 1
> +      and so on until AIN7 = 7. XP = 0, XN = 1, YP = 2, YN = 3.
> +    $ref: /schemas/types.yaml#/definitions/uint32-array
> +    minItems: 4
> +    maxItems: 8
> +
> +  ti,charge-delay:
> +    description: Length of touch screen charge delay step in terms of ADC clock
> +      cycles. Charge delay value should be large in order to avoid false pen-up
> +      events. This value effects the overall sampling speed, hence need to be
> +      kept as low as possible, while avoiding false pen-up event. Start from a
> +      lower value, say 0x400, and increase value until false pen-up events are
> +      avoided. The pen-up detection happens immediately after the charge step,
> +      so this does in fact function as a hardware knob for adjusting the amount
> +      of "settling time".
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +
> +required:
> +  - compatible
> +  - ti,wires
> +  - ti,x-plate-resistance
> +  - ti,coordinate-readouts
> +  - ti,wire-config
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    tsc {
> +        compatible = "ti,am3359-tsc";
> +        ti,wires = <4>;
> +        ti,x-plate-resistance = <200>;
> +        ti,coordinate-readouts = <5>;
> +        ti,wire-config = <0x00 0x11 0x22 0x33>;
> +        ti,charge-delay = <0x400>;
> +    };


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 06/46] dt-bindings: mfd: ti,am3359-tscadc: Describe am4372 MFD compatible
  2021-09-02 21:51 ` [PATCH v2 06/46] dt-bindings: mfd: ti,am3359-tscadc: Describe am4372 MFD compatible Miquel Raynal
@ 2021-09-05 12:01   ` Jonathan Cameron
  2021-09-07 19:04   ` Rob Herring
  1 sibling, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 12:01 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:04 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> A more recent version of the am3359 ADC/Touchscreen controller is
> available on certain SoCs of the am437x family. This IP has evolved a
> little bit and deserves its own compatible.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
This makes sense given the changes in the precursors from v1.
FWIW

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml b/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml
> index b2bff85f2329..34bf6a01436f 100644
> --- a/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml
> +++ b/Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml
> @@ -16,6 +16,7 @@ properties:
>        - items:
>            - const: ti,am654-tscadc
>            - const: ti,am3359-tscadc
> +      - const: ti,am4372-magadc
>  
>    reg:
>      maxItems: 1
> @@ -47,6 +48,10 @@ properties:
>      type: object
>      description: Touchscreen controller child
>  
> +  mag:
> +    type: object
> +    description: Magnetic reader
> +
>  required:
>    - compatible
>    - reg


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 10/46] mfd: ti_am335x_tscadc: Drop extra spacing when declaring stack variables
  2021-09-02 21:51 ` [PATCH v2 10/46] mfd: ti_am335x_tscadc: Drop extra spacing when declaring stack variables Miquel Raynal
@ 2021-09-05 12:03   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 12:03 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:08 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Many variables will be updated (renamed, dropped, added) in the upcoming
> changes, so let's simplify the style to avoid messing with spaces over
> and over again.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/mfd/ti_am335x_tscadc.c | 30 +++++++++++++++---------------
>  1 file changed, 15 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index 540c6dcef541..858bd22c60f0 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -113,18 +113,18 @@ static void tscadc_idle_config(struct ti_tscadc_dev *tscadc)
>  
>  static	int ti_tscadc_probe(struct platform_device *pdev)
>  {
> -	struct ti_tscadc_dev	*tscadc;
> -	struct resource		*res;
> -	struct clk		*clk;
> -	struct device_node	*node;
> -	struct mfd_cell		*cell;
> -	struct property         *prop;
> -	const __be32            *cur;
> -	u32			val;
> -	int			err, ctrl;
> -	int			clock_rate;
> -	int			tsc_wires = 0, adc_channels = 0, total_channels;
> -	int			readouts = 0;
> +	struct ti_tscadc_dev *tscadc;
> +	struct resource *res;
> +	struct clk *clk;
> +	struct device_node *node;
> +	struct mfd_cell *cell;
> +	struct property *prop;
> +	const __be32 *cur;
> +	u32 val;
> +	int err, ctrl;
> +	int clock_rate;
> +	int tsc_wires = 0, adc_channels = 0, total_channels;
> +	int readouts = 0;
>  
>  	if (!pdev->dev.of_node) {
>  		dev_err(&pdev->dev, "Could not find valid DT data.\n");
> @@ -278,7 +278,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  
>  static int ti_tscadc_remove(struct platform_device *pdev)
>  {
> -	struct ti_tscadc_dev	*tscadc = platform_get_drvdata(pdev);
> +	struct ti_tscadc_dev *tscadc = platform_get_drvdata(pdev);
>  
>  	regmap_write(tscadc->regmap, REG_SE, 0x00);
>  
> @@ -297,7 +297,7 @@ static int __maybe_unused ti_tscadc_can_wakeup(struct device *dev, void *data)
>  
>  static int __maybe_unused tscadc_suspend(struct device *dev)
>  {
> -	struct ti_tscadc_dev	*tscadc = dev_get_drvdata(dev);
> +	struct ti_tscadc_dev *tscadc = dev_get_drvdata(dev);
>  
>  	regmap_write(tscadc->regmap, REG_SE, 0x00);
>  	if (device_for_each_child(dev, NULL, ti_tscadc_can_wakeup)) {
> @@ -315,7 +315,7 @@ static int __maybe_unused tscadc_suspend(struct device *dev)
>  
>  static int __maybe_unused tscadc_resume(struct device *dev)
>  {
> -	struct ti_tscadc_dev	*tscadc = dev_get_drvdata(dev);
> +	struct ti_tscadc_dev *tscadc = dev_get_drvdata(dev);
>  	u32 ctrl;
>  
>  	pm_runtime_get_sync(dev);


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 11/46] mfd: ti_am335x_tscadc: Ensure a balanced number of node get/put
  2021-09-02 21:51 ` [PATCH v2 11/46] mfd: ti_am335x_tscadc: Ensure a balanced number of node get/put Miquel Raynal
@ 2021-09-05 12:06   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 12:06 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:09 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> of_node_put() should be called after a successful of_get_child_by_name().
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
I suppose you 'could' move this to the front of the series as a fix, but
it's probably not critical so fine to keep it here.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/mfd/ti_am335x_tscadc.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index 858bd22c60f0..763bbc33fc3f 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -134,6 +134,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	node = of_get_child_by_name(pdev->dev.of_node, "tsc");
>  	of_property_read_u32(node, "ti,wires", &tsc_wires);
>  	of_property_read_u32(node, "ti,coordiante-readouts", &readouts);
> +	of_node_put(node);
>  
>  	node = of_get_child_by_name(pdev->dev.of_node, "adc");
>  	of_property_for_each_u32(node, "ti,adc-channels", prop, cur, val) {
> @@ -141,10 +142,13 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  		if (val > 7) {
>  			dev_err(&pdev->dev, " PIN numbers are 0..7 (not %d)\n",
>  				val);
> +			of_node_put(node);
>  			return -EINVAL;
>  		}
>  	}
>  
> +	of_node_put(node);
> +
>  	total_channels = tsc_wires + adc_channels;
>  	if (total_channels > 8) {
>  		dev_err(&pdev->dev, "Number of i/p channels more than 8\n");


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 16/46] mfd: ti_am335x_tscadc: Move the driver structure allocation earlier
  2021-09-02 21:51 ` [PATCH v2 16/46] mfd: ti_am335x_tscadc: Move the driver structure allocation earlier Miquel Raynal
@ 2021-09-05 12:09   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 12:09 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:14 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Allocating the driver structure should be done earlier in the probe so
> that we can used its members from the beginning.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/mfd/ti_am335x_tscadc.c | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index fca58e78abb2..ea52d8523524 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -125,6 +125,13 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	int tsc_wires = 0, adc_channels = 0, total_channels;
>  	int readouts = 0;
>  
> +	/* Allocate memory for device */
> +	tscadc = devm_kzalloc(&pdev->dev, sizeof(*tscadc), GFP_KERNEL);
> +	if (!tscadc)
> +		return -ENOMEM;
> +
> +	tscadc->dev = &pdev->dev;
> +
>  	if (!pdev->dev.of_node) {
>  		dev_err(&pdev->dev, "Could not find valid DT data.\n");
>  		return -EINVAL;
> @@ -164,13 +171,6 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  		return -EINVAL;
>  	}
>  
> -	/* Allocate memory for device */
> -	tscadc = devm_kzalloc(&pdev->dev, sizeof(*tscadc), GFP_KERNEL);
> -	if (!tscadc)
> -		return -ENOMEM;
> -
> -	tscadc->dev = &pdev->dev;
> -
>  	err = platform_get_irq(pdev, 0);
>  	if (err < 0) {
>  		dev_err(&pdev->dev, "no irq ID is specified.\n");


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 19/46] mfd: ti_am335x_tscadc: Drop useless variables from the driver structure
  2021-09-02 21:51 ` [PATCH v2 19/46] mfd: ti_am335x_tscadc: Drop useless variables from the driver structure Miquel Raynal
@ 2021-09-05 12:11   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 12:11 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:17 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Keeping the count of tsc_cells and adc_cells is completely redundant, we
> can derive this information from other variables. Plus, these variables
> are not used anywhere else now. Let's get rid of them.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Makes sense and nice to get rid of these.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/mfd/ti_am335x_tscadc.c       | 15 ++++-----------
>  include/linux/mfd/ti_am335x_tscadc.h |  3 ---
>  2 files changed, 4 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index 0dcc2151ac1f..4a24fc1141cf 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -122,7 +122,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	const __be32 *cur;
>  	u32 val;
>  	int err, ctrl;
> -	int tsc_wires = 0, adc_channels = 0, total_channels;
> +	int tsc_wires = 0, adc_channels = 0, cell_idx = 0, total_channels;
>  	int readouts = 0;
>  
>  	/* Allocate memory for device */
> @@ -237,14 +237,9 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	ctrl |= CNTRLREG_TSCSSENB;
>  	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
>  
> -	tscadc->used_cells = 0;
> -	tscadc->tsc_cell = -1;
> -	tscadc->adc_cell = -1;
> -
>  	/* TSC Cell */
>  	if (tsc_wires > 0) {
> -		tscadc->tsc_cell = tscadc->used_cells;
> -		cell = &tscadc->cells[tscadc->used_cells++];
> +		cell = &tscadc->cells[cell_idx++];
>  		cell->name = tscadc->data->name_tscmag;
>  		cell->of_compatible = tscadc->data->compat_tscmag;
>  		cell->platform_data = &tscadc;
> @@ -253,8 +248,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  
>  	/* ADC Cell */
>  	if (adc_channels > 0) {
> -		tscadc->adc_cell = tscadc->used_cells;
> -		cell = &tscadc->cells[tscadc->used_cells++];
> +		cell = &tscadc->cells[cell_idx++];
>  		cell->name = tscadc->data->name_adc;
>  		cell->of_compatible = tscadc->data->compat_adc;
>  		cell->platform_data = &tscadc;
> @@ -262,8 +256,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	}
>  
>  	err = mfd_add_devices(&pdev->dev, PLATFORM_DEVID_AUTO,
> -			      tscadc->cells, tscadc->used_cells, NULL,
> -			      0, NULL);
> +			      tscadc->cells, cell_idx, NULL, 0, NULL);
>  	if (err < 0)
>  		goto err_disable_clk;
>  
> diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
> index 0f581c15d95a..e734fb97dff8 100644
> --- a/include/linux/mfd/ti_am335x_tscadc.h
> +++ b/include/linux/mfd/ti_am335x_tscadc.h
> @@ -177,10 +177,7 @@ struct ti_tscadc_dev {
>  	phys_addr_t tscadc_phys_base;
>  	const struct ti_tscadc_data *data;
>  	int irq;
> -	int used_cells;	/* 1-2 */
>  	int tsc_wires;
> -	int tsc_cell;	/* -1 if not used */
> -	int adc_cell;	/* -1 if not used */
>  	struct mfd_cell cells[TSCADC_CELLS];
>  	u32 reg_se_cache;
>  	bool adc_waiting;


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 20/46] mfd: ti_am335x_tscadc: Always provide an idle configuration
  2021-09-02 21:51 ` [PATCH v2 20/46] mfd: ti_am335x_tscadc: Always provide an idle configuration Miquel Raynal
@ 2021-09-05 12:13   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 12:13 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:18 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> The idle register is valid no matter if the touchscreen is used or not,
> let's always configure it.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
With the earlier reorganization this now obviously only doing what you say.
Thanks for tidying that up.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/mfd/ti_am335x_tscadc.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index 4a24fc1141cf..5f189da99468 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -223,16 +223,16 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
>  	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
>  
> -	/* Set register bits for Idle Config Mode */
>  	if (tsc_wires > 0) {
>  		tscadc->tsc_wires = tsc_wires;
>  		if (tsc_wires == 5)
>  			ctrl |= CNTRLREG_5WIRE | CNTRLREG_TSCENB;
>  		else
>  			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
> -		tscadc_idle_config(tscadc);
>  	}
>  
> +	tscadc_idle_config(tscadc);
> +
>  	/* Enable the TSC module enable bit */
>  	ctrl |= CNTRLREG_TSCSSENB;
>  	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
> @@ -323,8 +323,10 @@ static int __maybe_unused tscadc_resume(struct device *dev)
>  			ctrl |= CNTRLREG_5WIRE | CNTRLREG_TSCENB;
>  		else
>  			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
> -		tscadc_idle_config(tscadc);
>  	}
> +
> +	tscadc_idle_config(tscadc);
> +
>  	ctrl |= CNTRLREG_TSCSSENB;
>  	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
>  


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 21/46] mfd: ti_am335x_tscadc: Reorder the initialization steps
  2021-09-02 21:51 ` [PATCH v2 21/46] mfd: ti_am335x_tscadc: Reorder the initialization steps Miquel Raynal
@ 2021-09-05 12:18   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 12:18 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:19 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> TI AM335X TRM [1] states that most of the configuration should be set in
> the control register in the first place, before actually enabling the
> hardware with the subsystem enable bit.
> 
> So far only half of the configuration was made in the first step (before
> enabling the "subsystem"), which does not make really sense. Also, the
> probe and the resume patch were acting differently. Let's harmonize all
> this by following these steps:
> 1/ Configure the CLKDIV register
> 2/ Configure the CTRL register
> 3/ Configure the idle configuration
> 4/ Really enable the device by rewriting the CTRL register with the
>    subsystem enable bit set.
> 
> [1] https://www.ti.com/lit/pdf/spruh73
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
This tidies up the other patches which is good. Now I haven't checked the new
order against the datasheet but it now does things as you describe so I'm assuming
that's fine.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/mfd/ti_am335x_tscadc.c | 11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index 5f189da99468..61f878c7593b 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -221,8 +221,6 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  
>  	/* Set the control register bits */
>  	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
> -	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
> -
>  	if (tsc_wires > 0) {
>  		tscadc->tsc_wires = tsc_wires;
>  		if (tsc_wires == 5)
> @@ -230,6 +228,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  		else
>  			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
>  	}
> +	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
>  
>  	tscadc_idle_config(tscadc);
>  
> @@ -315,9 +314,9 @@ static int __maybe_unused tscadc_resume(struct device *dev)
>  	pm_runtime_get_sync(dev);
>  
>  	/* context restore */
> -	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
> -	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
> +	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
>  
> +	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
>  	if (tscadc->tsc_wires > 0) {
>  		if (tscadc->tsc_wires == 5)
>  			ctrl |= CNTRLREG_5WIRE | CNTRLREG_TSCENB;
> @@ -325,13 +324,13 @@ static int __maybe_unused tscadc_resume(struct device *dev)
>  			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
>  	}
>  
> +	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
> +
>  	tscadc_idle_config(tscadc);
>  
>  	ctrl |= CNTRLREG_TSCSSENB;
>  	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
>  
> -	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
> -
>  	return 0;
>  }
>  


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 22/46] mfd: ti_am335x_tscadc: Gather the ctrl register logic in one place
  2021-09-02 21:51 ` [PATCH v2 22/46] mfd: ti_am335x_tscadc: Gather the ctrl register logic in one place Miquel Raynal
@ 2021-09-05 12:20   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 12:20 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:20 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Instead of deriving in the probe and in the resume path the value of the
> ctrl register, let's do it only once in the probe, save the value of
> this register in the driver's structure and use it from the resume
> callback.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/mfd/ti_am335x_tscadc.c       | 33 ++++++++--------------------
>  include/linux/mfd/ti_am335x_tscadc.h |  2 +-
>  2 files changed, 10 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index 61f878c7593b..a3ff3cc29318 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -121,7 +121,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	struct property *prop;
>  	const __be32 *cur;
>  	u32 val;
> -	int err, ctrl;
> +	int err;
>  	int tsc_wires = 0, adc_channels = 0, cell_idx = 0, total_channels;
>  	int readouts = 0;
>  
> @@ -220,21 +220,20 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
>  
>  	/* Set the control register bits */
> -	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
> +	tscadc->ctrl = CNTRLREG_STEPCONFIGWRT | CNTRLREG_STEPID;
>  	if (tsc_wires > 0) {
> -		tscadc->tsc_wires = tsc_wires;
> +		tscadc->ctrl |= CNTRLREG_TSCENB;
>  		if (tsc_wires == 5)
> -			ctrl |= CNTRLREG_5WIRE | CNTRLREG_TSCENB;
> +			tscadc->ctrl |= CNTRLREG_5WIRE;
>  		else
> -			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
> +			tscadc->ctrl |= CNTRLREG_4WIRE;
>  	}
> -	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
> +	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
>  
>  	tscadc_idle_config(tscadc);
>  
>  	/* Enable the TSC module enable bit */
> -	ctrl |= CNTRLREG_TSCSSENB;
> -	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
> +	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl | CNTRLREG_TSCSSENB);
>  
>  	/* TSC Cell */
>  	if (tsc_wires > 0) {
> @@ -309,27 +308,13 @@ static int __maybe_unused tscadc_suspend(struct device *dev)
>  static int __maybe_unused tscadc_resume(struct device *dev)
>  {
>  	struct ti_tscadc_dev *tscadc = dev_get_drvdata(dev);
> -	u32 ctrl;
>  
>  	pm_runtime_get_sync(dev);
>  
> -	/* context restore */
>  	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
> -
> -	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
> -	if (tscadc->tsc_wires > 0) {
> -		if (tscadc->tsc_wires == 5)
> -			ctrl |= CNTRLREG_5WIRE | CNTRLREG_TSCENB;
> -		else
> -			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
> -	}
> -
> -	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
> -
> +	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
>  	tscadc_idle_config(tscadc);
> -
> -	ctrl |= CNTRLREG_TSCSSENB;
> -	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
> +	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl | CNTRLREG_TSCSSENB);
>  
>  	return 0;
>  }
> diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
> index e734fb97dff8..02963b6ebbac 100644
> --- a/include/linux/mfd/ti_am335x_tscadc.h
> +++ b/include/linux/mfd/ti_am335x_tscadc.h
> @@ -177,8 +177,8 @@ struct ti_tscadc_dev {
>  	phys_addr_t tscadc_phys_base;
>  	const struct ti_tscadc_data *data;
>  	int irq;
> -	int tsc_wires;
>  	struct mfd_cell cells[TSCADC_CELLS];
> +	u32 ctrl;
>  	u32 reg_se_cache;
>  	bool adc_waiting;
>  	bool adc_in_use;


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 23/46] mfd: ti_am335x_tscadc: Replace the header license text with SPDX tag
  2021-09-02 21:51 ` [PATCH v2 23/46] mfd: ti_am335x_tscadc: Replace the header license text with SPDX tag Miquel Raynal
@ 2021-09-05 12:21   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 12:21 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:21 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Drop the text license and replace it with an equivalent SPDX license tag
> identifier.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  include/linux/mfd/ti_am335x_tscadc.h | 16 ++++------------
>  1 file changed, 4 insertions(+), 12 deletions(-)
> 
> diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
> index 02963b6ebbac..334ce1a879df 100644
> --- a/include/linux/mfd/ti_am335x_tscadc.h
> +++ b/include/linux/mfd/ti_am335x_tscadc.h
> @@ -1,21 +1,13 @@
> -#ifndef __LINUX_TI_AM335X_TSCADC_MFD_H
> -#define __LINUX_TI_AM335X_TSCADC_MFD_H
> -
> +/* SPDX-License-Identifier: GPL-2.0-only */
>  /*
>   * TI Touch Screen / ADC MFD driver
>   *
>   * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License as
> - * published by the Free Software Foundation version 2.
> - *
> - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> - * kind, whether express or implied; without even the implied warranty
> - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
>   */
>  
> +#ifndef __LINUX_TI_AM335X_TSCADC_MFD_H
> +#define __LINUX_TI_AM335X_TSCADC_MFD_H
> +
>  #include <linux/mfd/core.h>
>  
>  #define REG_RAWIRQSTATUS	0x024


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 24/46] mfd: ti_am335x_tscadc: Fix header spacing
  2021-09-02 21:51 ` [PATCH v2 24/46] mfd: ti_am335x_tscadc: Fix header spacing Miquel Raynal
@ 2021-09-05 12:22   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 12:22 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:22 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Harmonize the spacing within macro definitions.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
LGTM
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  include/linux/mfd/ti_am335x_tscadc.h | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
> index 334ce1a879df..efafecfc87a7 100644
> --- a/include/linux/mfd/ti_am335x_tscadc.h
> +++ b/include/linux/mfd/ti_am335x_tscadc.h
> @@ -41,7 +41,7 @@
>  /* Step Enable */
>  #define STEPENB_MASK		(0x1FFFF << 0)
>  #define STEPENB(val)		((val) << 0)
> -#define ENB(val)			(1 << (val))
> +#define ENB(val)		(1 << (val))
>  #define STPENB_STEPENB		STEPENB(0x1FFFF)
>  #define STPENB_STEPENB_TC	STEPENB(0x1FFF)
>  
> @@ -122,15 +122,15 @@
>  #define CNTRLREG_TSCENB		BIT(7)
>  
>  /* FIFO READ Register */
> -#define FIFOREAD_DATA_MASK (0xfff << 0)
> -#define FIFOREAD_CHNLID_MASK (0xf << 16)
> +#define FIFOREAD_DATA_MASK	(0xfff << 0)
> +#define FIFOREAD_CHNLID_MASK	(0xf << 16)
>  
>  /* DMA ENABLE/CLEAR Register */
>  #define DMA_FIFO0		BIT(0)
>  #define DMA_FIFO1		BIT(1)
>  
>  /* Sequencer Status */
> -#define SEQ_STATUS BIT(5)
> +#define SEQ_STATUS		BIT(5)
>  #define CHARGE_STEP		0x11
>  
>  #define ADC_CLK			3000000
> @@ -150,7 +150,7 @@
>   *
>   * max processing time: 266431 * 308ns = 83ms(approx)
>   */
> -#define IDLE_TIMEOUT 83 /* milliseconds */
> +#define IDLE_TIMEOUT		83 /* milliseconds */
>  
>  #define TSCADC_CELLS		2
>  


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 25/46] mfd: ti_am335x_tscadc: Use BIT() and GENMASK() when relevant in the header
  2021-09-02 21:51 ` [PATCH v2 25/46] mfd: ti_am335x_tscadc: Use BIT() and GENMASK() when relevant in the header Miquel Raynal
@ 2021-09-05 13:09   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 13:09 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Jonathan Cameron

On Thu,  2 Sep 2021 23:51:23 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Convert masks to GENMASK() and regular shifts to BIT() in
> ti_am335x_tscadc.h header.
> 
> Suggested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>

Might be better two squash this and next patch together. I wrote a bunch
of 'use FIELD_PREP() here' comments before realising you've done that separately.

Still, for what is here looks good.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>


> ---
>  include/linux/mfd/ti_am335x_tscadc.h | 40 ++++++++++++++--------------
>  1 file changed, 20 insertions(+), 20 deletions(-)
> 
> diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
> index efafecfc87a7..4de16fc3d74f 100644
> --- a/include/linux/mfd/ti_am335x_tscadc.h
> +++ b/include/linux/mfd/ti_am335x_tscadc.h
> @@ -39,11 +39,11 @@
>  #define IRQWKUP_ENB		BIT(0)
>  
>  /* Step Enable */
> -#define STEPENB_MASK		(0x1FFFF << 0)
> +#define STEPENB_MASK		GENMASK(16, 0)
>  #define STEPENB(val)		((val) << 0)
> -#define ENB(val)		(1 << (val))
> -#define STPENB_STEPENB		STEPENB(0x1FFFF)
> -#define STPENB_STEPENB_TC	STEPENB(0x1FFF)
> +#define ENB(val)		BIT(val)
> +#define STPENB_STEPENB		STEPENB(GENMASK(16, 0))
> +#define STPENB_STEPENB_TC	STEPENB(GENMASK(12, 0))
>  
>  /* IRQ enable */
>  #define IRQENB_HW_PEN		BIT(0)
> @@ -57,11 +57,11 @@
>  #define IRQENB_PENUP		BIT(9)
>  
>  /* Step Configuration */
> -#define STEPCONFIG_MODE_MASK	(3 << 0)
> +#define STEPCONFIG_MODE_MASK	GENMASK(1, 0)
>  #define STEPCONFIG_MODE(val)	((val) << 0)
>  #define STEPCONFIG_MODE_SWCNT	STEPCONFIG_MODE(1)
>  #define STEPCONFIG_MODE_HWSYNC	STEPCONFIG_MODE(2)
> -#define STEPCONFIG_AVG_MASK	(7 << 2)
> +#define STEPCONFIG_AVG_MASK	GENMASK(4, 2)
>  #define STEPCONFIG_AVG(val)	((val) << 2)
>  #define STEPCONFIG_AVG_16	STEPCONFIG_AVG(4)
>  #define STEPCONFIG_XPP		BIT(5)
> @@ -71,41 +71,41 @@
>  #define STEPCONFIG_XNP		BIT(9)
>  #define STEPCONFIG_YPN		BIT(10)
>  #define STEPCONFIG_RFP(val)	((val) << 12)
> -#define STEPCONFIG_RFP_VREFP	(0x3 << 12)
> -#define STEPCONFIG_INM_MASK	(0xF << 15)
> +#define STEPCONFIG_RFP_VREFP	GENMASK(13, 12)
> +#define STEPCONFIG_INM_MASK	GENMASK(18, 15)
>  #define STEPCONFIG_INM(val)	((val) << 15)
>  #define STEPCONFIG_INM_ADCREFM	STEPCONFIG_INM(8)
> -#define STEPCONFIG_INP_MASK	(0xF << 19)
> +#define STEPCONFIG_INP_MASK	GENMASK(22, 19)
>  #define STEPCONFIG_INP(val)	((val) << 19)
>  #define STEPCONFIG_INP_AN4	STEPCONFIG_INP(4)
>  #define STEPCONFIG_INP_ADCREFM	STEPCONFIG_INP(8)
>  #define STEPCONFIG_FIFO1	BIT(26)
>  #define STEPCONFIG_RFM(val)	((val) << 23)
> -#define STEPCONFIG_RFM_VREFN	(0x3 << 23)
> +#define STEPCONFIG_RFM_VREFN	GENMASK(24, 23)
>  
>  /* Delay register */
> -#define STEPDELAY_OPEN_MASK	(0x3FFFF << 0)
> +#define STEPDELAY_OPEN_MASK	GENMASK(17, 0)
>  #define STEPDELAY_OPEN(val)	((val) << 0)
>  #define STEPCONFIG_OPENDLY	STEPDELAY_OPEN(0x098)
> -#define STEPDELAY_SAMPLE_MASK	(0xFF << 24)
> +#define STEPDELAY_SAMPLE_MASK	GENMASK(31, 24)
>  #define STEPDELAY_SAMPLE(val)	((val) << 24)
>  #define STEPCONFIG_SAMPLEDLY	STEPDELAY_SAMPLE(0)
>  
>  /* Charge Config */
> -#define STEPCHARGE_RFP_MASK	(7 << 12)
> +#define STEPCHARGE_RFP_MASK	GENMASK(14, 12)
>  #define STEPCHARGE_RFP(val)	((val) << 12)
>  #define STEPCHARGE_RFP_XPUL	STEPCHARGE_RFP(1)
> -#define STEPCHARGE_INM_MASK	(0xF << 15)
> +#define STEPCHARGE_INM_MASK	GENMASK(18, 15)
>  #define STEPCHARGE_INM(val)	((val) << 15)
>  #define STEPCHARGE_INM_AN1	STEPCHARGE_INM(1)
> -#define STEPCHARGE_INP_MASK	(0xF << 19)
> +#define STEPCHARGE_INP_MASK	GENMASK(22, 19)
>  #define STEPCHARGE_INP(val)	((val) << 19)
> -#define STEPCHARGE_RFM_MASK	(3 << 23)
> +#define STEPCHARGE_RFM_MASK	GENMASK(24, 23)
>  #define STEPCHARGE_RFM(val)	((val) << 23)
>  #define STEPCHARGE_RFM_XNUR	STEPCHARGE_RFM(1)
>  
>  /* Charge delay */
> -#define CHARGEDLY_OPEN_MASK	(0x3FFFF << 0)
> +#define CHARGEDLY_OPEN_MASK	GENMASK(17, 0)
>  #define CHARGEDLY_OPEN(val)	((val) << 0)
>  #define CHARGEDLY_OPENDLY	CHARGEDLY_OPEN(0x400)
>  
> @@ -114,7 +114,7 @@
>  #define CNTRLREG_STEPID		BIT(1)
>  #define CNTRLREG_STEPCONFIGWRT	BIT(2)
>  #define CNTRLREG_POWERDOWN	BIT(4)
> -#define CNTRLREG_AFE_CTRL_MASK	(3 << 5)
> +#define CNTRLREG_AFE_CTRL_MASK	GENMASK(6, 5)
>  #define CNTRLREG_AFE_CTRL(val)	((val) << 5)
>  #define CNTRLREG_4WIRE		CNTRLREG_AFE_CTRL(1)
>  #define CNTRLREG_5WIRE		CNTRLREG_AFE_CTRL(2)
> @@ -122,8 +122,8 @@
>  #define CNTRLREG_TSCENB		BIT(7)
>  
>  /* FIFO READ Register */
> -#define FIFOREAD_DATA_MASK	(0xfff << 0)
> -#define FIFOREAD_CHNLID_MASK	(0xf << 16)
> +#define FIFOREAD_DATA_MASK	GENMASK(11, 0)
> +#define FIFOREAD_CHNLID_MASK	GENMASK(19, 16)
>  
>  /* DMA ENABLE/CLEAR Register */
>  #define DMA_FIFO0		BIT(0)


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 26/46] mfd: ti_am335x_tscadc: Use FIELD_PREP() when relevant in the header
  2021-09-02 21:51 ` [PATCH v2 26/46] mfd: ti_am335x_tscadc: Use FIELD_PREP() " Miquel Raynal
@ 2021-09-05 13:13   ` Jonathan Cameron
  2021-09-15  7:48     ` Miquel Raynal
  0 siblings, 1 reply; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 13:13 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Jonathan Cameron

On Thu,  2 Sep 2021 23:51:24 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Use the FIELD_PREP() macro when relevant. Sometimes reorder the lines to
> be able to use the relevant bitmask.
> 
> Mind the s/%d/%ld/ change in a log due to the type change following the
> use of FIELD_PREP() in the header.
> 
> Suggested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
What you have here is fine, but I would take it a step further and push the
FIELD_PREP() calls directly inline in the code.  There is little advantage
beyond saving a few characters in

STEPENB(3)

rather than

FIELD_PREP(STEPENB_MASK, 3)

If you don't want to go that far this is still an improvement so
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/iio/adc/ti_am335x_adc.c      |  2 +-
>  include/linux/mfd/ti_am335x_tscadc.h | 31 ++++++++++++++--------------
>  2 files changed, 17 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
> index e946903b0993..54c410b6ca07 100644
> --- a/drivers/iio/adc/ti_am335x_adc.c
> +++ b/drivers/iio/adc/ti_am335x_adc.c
> @@ -126,7 +126,7 @@ static void tiadc_step_config(struct iio_dev *indio_dev)
>  		chan = adc_dev->channel_line[i];
>  
>  		if (adc_dev->step_avg[i] > STEPCONFIG_AVG_16) {
> -			dev_warn(dev, "chan %d step_avg truncating to %d\n",
> +			dev_warn(dev, "chan %d step_avg truncating to %ld\n",
>  				 chan, STEPCONFIG_AVG_16);
>  			adc_dev->step_avg[i] = STEPCONFIG_AVG_16;
>  		}
> diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
> index 4de16fc3d74f..29095c0dc6d8 100644
> --- a/include/linux/mfd/ti_am335x_tscadc.h
> +++ b/include/linux/mfd/ti_am335x_tscadc.h
> @@ -8,6 +8,7 @@
>  #ifndef __LINUX_TI_AM335X_TSCADC_MFD_H
>  #define __LINUX_TI_AM335X_TSCADC_MFD_H
>  
> +#include <linux/bitfield.h>
>  #include <linux/mfd/core.h>
>  
>  #define REG_RAWIRQSTATUS	0x024
> @@ -40,7 +41,7 @@
>  
>  /* Step Enable */
>  #define STEPENB_MASK		GENMASK(16, 0)
> -#define STEPENB(val)		((val) << 0)
> +#define STEPENB(val)		FIELD_PREP(STEPENB_MASK, (val))

My inclination with these is to drop the macro entirely and
just use FIELD_PREP(STEPENB_MASK, xxx) inline directly.
There is no loss of clarity in doing so and it gets you to a state
where you only have one macro per field which is nice for checking
purposes.

>  #define ENB(val)		BIT(val)
>  #define STPENB_STEPENB		STEPENB(GENMASK(16, 0))
>  #define STPENB_STEPENB_TC	STEPENB(GENMASK(12, 0))
> @@ -58,11 +59,11 @@
>  
>  /* Step Configuration */
>  #define STEPCONFIG_MODE_MASK	GENMASK(1, 0)
> -#define STEPCONFIG_MODE(val)	((val) << 0)
> +#define STEPCONFIG_MODE(val)	FIELD_PREP(STEPCONFIG_MODE_MASK, (val))
>  #define STEPCONFIG_MODE_SWCNT	STEPCONFIG_MODE(1)
>  #define STEPCONFIG_MODE_HWSYNC	STEPCONFIG_MODE(2)
>  #define STEPCONFIG_AVG_MASK	GENMASK(4, 2)
> -#define STEPCONFIG_AVG(val)	((val) << 2)
> +#define STEPCONFIG_AVG(val)	FIELD_PREP(STEPCONFIG_AVG_MASK, (val))
>  #define STEPCONFIG_AVG_16	STEPCONFIG_AVG(4)
>  #define STEPCONFIG_XPP		BIT(5)
>  #define STEPCONFIG_XNN		BIT(6)
> @@ -70,43 +71,43 @@
>  #define STEPCONFIG_YNN		BIT(8)
>  #define STEPCONFIG_XNP		BIT(9)
>  #define STEPCONFIG_YPN		BIT(10)
> -#define STEPCONFIG_RFP(val)	((val) << 12)
>  #define STEPCONFIG_RFP_VREFP	GENMASK(13, 12)
> +#define STEPCONFIG_RFP(val)	FIELD_PREP(STEPCONFIG_RFP_VREFP, (val))
>  #define STEPCONFIG_INM_MASK	GENMASK(18, 15)
> -#define STEPCONFIG_INM(val)	((val) << 15)
> +#define STEPCONFIG_INM(val)	FIELD_PREP(STEPCONFIG_INM_MASK, (val))
>  #define STEPCONFIG_INM_ADCREFM	STEPCONFIG_INM(8)
>  #define STEPCONFIG_INP_MASK	GENMASK(22, 19)
> -#define STEPCONFIG_INP(val)	((val) << 19)
> +#define STEPCONFIG_INP(val)	FIELD_PREP(STEPCONFIG_INP_MASK, (val))
>  #define STEPCONFIG_INP_AN4	STEPCONFIG_INP(4)
>  #define STEPCONFIG_INP_ADCREFM	STEPCONFIG_INP(8)
>  #define STEPCONFIG_FIFO1	BIT(26)
> -#define STEPCONFIG_RFM(val)	((val) << 23)
>  #define STEPCONFIG_RFM_VREFN	GENMASK(24, 23)
> +#define STEPCONFIG_RFM(val)	FIELD_PREP(STEPCONFIG_RFM_VREFN, (val))
>  
>  /* Delay register */
>  #define STEPDELAY_OPEN_MASK	GENMASK(17, 0)
> -#define STEPDELAY_OPEN(val)	((val) << 0)
> +#define STEPDELAY_OPEN(val)	FIELD_PREP(STEPDELAY_OPEN_MASK, (val))
>  #define STEPCONFIG_OPENDLY	STEPDELAY_OPEN(0x098)
>  #define STEPDELAY_SAMPLE_MASK	GENMASK(31, 24)
> -#define STEPDELAY_SAMPLE(val)	((val) << 24)
> +#define STEPDELAY_SAMPLE(val)	FIELD_PREP(STEPDELAY_SAMPLE_MASK, (val))
>  #define STEPCONFIG_SAMPLEDLY	STEPDELAY_SAMPLE(0)
>  
>  /* Charge Config */
>  #define STEPCHARGE_RFP_MASK	GENMASK(14, 12)
> -#define STEPCHARGE_RFP(val)	((val) << 12)
> +#define STEPCHARGE_RFP(val)	FIELD_PREP(STEPCHARGE_RFP_MASK, (val))
>  #define STEPCHARGE_RFP_XPUL	STEPCHARGE_RFP(1)
>  #define STEPCHARGE_INM_MASK	GENMASK(18, 15)
> -#define STEPCHARGE_INM(val)	((val) << 15)
> +#define STEPCHARGE_INM(val)	FIELD_PREP(STEPCHARGE_INM_MASK, (val))
>  #define STEPCHARGE_INM_AN1	STEPCHARGE_INM(1)
>  #define STEPCHARGE_INP_MASK	GENMASK(22, 19)
> -#define STEPCHARGE_INP(val)	((val) << 19)
> +#define STEPCHARGE_INP(val)	FIELD_PREP(STEPCHARGE_INP_MASK, (val))
>  #define STEPCHARGE_RFM_MASK	GENMASK(24, 23)
> -#define STEPCHARGE_RFM(val)	((val) << 23)
> +#define STEPCHARGE_RFM(val)	FIELD_PREP(STEPCHARGE_RFM_MASK, (val))
>  #define STEPCHARGE_RFM_XNUR	STEPCHARGE_RFM(1)
>  
>  /* Charge delay */
>  #define CHARGEDLY_OPEN_MASK	GENMASK(17, 0)
> -#define CHARGEDLY_OPEN(val)	((val) << 0)
> +#define CHARGEDLY_OPEN(val)	FIELD_PREP(CHARGEDLY_OPEN_MASK, (val))
>  #define CHARGEDLY_OPENDLY	CHARGEDLY_OPEN(0x400)
>  
>  /* Control register */
> @@ -115,7 +116,7 @@
>  #define CNTRLREG_STEPCONFIGWRT	BIT(2)
>  #define CNTRLREG_POWERDOWN	BIT(4)
>  #define CNTRLREG_AFE_CTRL_MASK	GENMASK(6, 5)
> -#define CNTRLREG_AFE_CTRL(val)	((val) << 5)
> +#define CNTRLREG_AFE_CTRL(val)	FIELD_PREP(CNTRLREG_AFE_CTRL_MASK, (val))
>  #define CNTRLREG_4WIRE		CNTRLREG_AFE_CTRL(1)
>  #define CNTRLREG_5WIRE		CNTRLREG_AFE_CTRL(2)
>  #define CNTRLREG_8WIRE		CNTRLREG_AFE_CTRL(3)


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 28/46] mfd: ti_am335x_tscadc: Add TSC prefix in certain macros
  2021-09-02 21:51 ` [PATCH v2 28/46] mfd: ti_am335x_tscadc: Add TSC prefix in certain macros Miquel Raynal
@ 2021-09-05 13:15   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 13:15 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:26 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> While the register list (and names) between ADC0 and ADC1 are pretty
> close, the bits inside changed a little bit. To avoid any future
> confusion, let's add the TSC prefix when some bits are in a register
> that is common to both revisions of the ADC, but are specific to the
> am33xx hardware.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Given all I suggested last time was things you've done in earlier patches now
this LGTM

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/mfd/ti_am335x_tscadc.c       | 10 +++++-----
>  include/linux/mfd/ti_am335x_tscadc.h | 16 ++++++++--------
>  2 files changed, 13 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index eba5fba8cf78..2fdee0f4814f 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -220,13 +220,13 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
>  
>  	/* Set the control register bits */
> -	tscadc->ctrl = CNTRLREG_STEPCONFIGWRT | CNTRLREG_STEPID;
> +	tscadc->ctrl = CNTRLREG_TSC_STEPCONFIGWRT | CNTRLREG_STEPID;
>  	if (tsc_wires > 0) {
> -		tscadc->ctrl |= CNTRLREG_TSCENB;
> +		tscadc->ctrl |= CNTRLREG_TSC_ENB;
>  		if (tsc_wires == 5)
> -			tscadc->ctrl |= CNTRLREG_5WIRE;
> +			tscadc->ctrl |= CNTRLREG_TSC_5WIRE;
>  		else
> -			tscadc->ctrl |= CNTRLREG_4WIRE;
> +			tscadc->ctrl |= CNTRLREG_TSC_4WIRE;
>  	}
>  	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
>  
> @@ -326,7 +326,7 @@ static const struct ti_tscadc_data tscdata = {
>  	.compat_tscmag = "ti,am3359-tsc",
>  	.name_adc = "TI-am335x-adc",
>  	.compat_adc = "ti,am3359-adc",
> -	.target_clk_rate = ADC_CLK,
> +	.target_clk_rate = TSC_ADC_CLK,
>  };
>  
>  static const struct of_device_id ti_tscadc_dt_ids[] = {
> diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
> index 271b5aefc474..29d3195b0193 100644
> --- a/include/linux/mfd/ti_am335x_tscadc.h
> +++ b/include/linux/mfd/ti_am335x_tscadc.h
> @@ -113,14 +113,14 @@
>  /* Control register */
>  #define CNTRLREG_SSENB		BIT(0)
>  #define CNTRLREG_STEPID		BIT(1)
> -#define CNTRLREG_STEPCONFIGWRT	BIT(2)
> +#define CNTRLREG_TSC_STEPCONFIGWRT BIT(2)
>  #define CNTRLREG_POWERDOWN	BIT(4)
> -#define CNTRLREG_AFE_CTRL_MASK	GENMASK(6, 5)
> -#define CNTRLREG_AFE_CTRL(val)	FIELD_PREP(CNTRLREG_AFE_CTRL_MASK, (val))
> -#define CNTRLREG_4WIRE		CNTRLREG_AFE_CTRL(1)
> -#define CNTRLREG_5WIRE		CNTRLREG_AFE_CTRL(2)
> -#define CNTRLREG_8WIRE		CNTRLREG_AFE_CTRL(3)
> -#define CNTRLREG_TSCENB		BIT(7)
> +#define CNTRLREG_TSC_AFE_CTRL_MASK GENMASK(6, 5)
> +#define CNTRLREG_TSC_AFE_CTRL(val) FIELD_PREP(CNTRLREG_TSC_AFE_CTRL_MASK, (val))
> +#define CNTRLREG_TSC_4WIRE	CNTRLREG_TSC_AFE_CTRL(1)
> +#define CNTRLREG_TSC_5WIRE	CNTRLREG_TSC_AFE_CTRL(2)
> +#define CNTRLREG_TSC_8WIRE	CNTRLREG_TSC_AFE_CTRL(3)
> +#define CNTRLREG_TSC_ENB	BIT(7)
>  
>  /* FIFO READ Register */
>  #define FIFOREAD_DATA_MASK	GENMASK(11, 0)
> @@ -134,7 +134,7 @@
>  #define SEQ_STATUS		BIT(5)
>  #define CHARGE_STEP		0x11
>  
> -#define ADC_CLK			3000000
> +#define TSC_ADC_CLK		3000000
>  #define TOTAL_STEPS		16
>  #define TOTAL_CHANNELS		8
>  #define FIFO1_THRESHOLD		19


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 31/46] mfd: ti_am335x_tscadc: Add a boolean to clarify the presence of a touchscreen
  2021-09-02 21:51 ` [PATCH v2 31/46] mfd: ti_am335x_tscadc: Add a boolean to clarify the presence of a touchscreen Miquel Raynal
@ 2021-09-05 13:17   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 13:17 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:29 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Just checking the number of wires will soon not be enough, add a boolean
> to indicated the actual use or not of the touchscreen.
> 
> Certain checks only make sense when there is a touchscreen wired. Make
> this checks explicitly depend on the presence of the touchscreen.
Good.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/mfd/ti_am335x_tscadc.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index f30bcdf600fb..cfdef833dffb 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -120,6 +120,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	struct mfd_cell *cell;
>  	struct property *prop;
>  	const __be32 *cur;
> +	bool use_tsc = false;
>  	u32 val;
>  	int err;
>  	int tscmag_wires = 0, adc_channels = 0, cell_idx = 0, total_channels;
> @@ -143,6 +144,8 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	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) {
> @@ -168,7 +171,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  		return -EINVAL;
>  	}
>  
> -	if (readouts * 2 + 2 + adc_channels > 16) {
> +	if (use_tsc && (readouts * 2 + 2 + adc_channels > 16)) {
>  		dev_err(&pdev->dev, "Too many step configurations requested\n");
>  		return -EINVAL;
>  	}
> @@ -221,7 +224,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  
>  	/* Set the control register bits */
>  	tscadc->ctrl = CNTRLREG_TSC_STEPCONFIGWRT | CNTRLREG_STEPID;
> -	if (tscmag_wires > 0) {
> +	if (use_tsc) {
>  		tscadc->ctrl |= CNTRLREG_TSC_ENB;
>  		if (tscmag_wires == 5)
>  			tscadc->ctrl |= CNTRLREG_TSC_5WIRE;


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 33/46] mfd: ti_am335x_tscadc: Move control register configuration
  2021-09-03 13:24   ` Grygorii Strashko
@ 2021-09-05 13:18     ` Jonathan Cameron
  2021-09-05 13:22       ` Miquel Raynal
  0 siblings, 1 reply; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 13:18 UTC (permalink / raw)
  To: Grygorii Strashko
  Cc: Miquel Raynal, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren,
	linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Jason Reeder

On Fri, 3 Sep 2021 16:24:22 +0300
Grygorii Strashko <grygorii.strashko@ti.com> wrote:

> On 03/09/2021 00:51, Miquel Raynal wrote:
> > The datasheet states that most of the configuration should be set in the
> > control register in the first place, before actually enabling the
> > hardware. So far only half of the configuration was made in the first
> > step, which does not make really sense and would complicating the code
> > when introducing support for the am437x hardware.
> > 
> > Let's move that register write a bit below to enclose more configuration.
> > 
> > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > ---
> >   drivers/mfd/ti_am335x_tscadc.c | 2 ++
> >   1 file changed, 2 insertions(+)
> > 
> > diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> > index 29ada9da8826..a0db3e4ff265 100644
> > --- a/drivers/mfd/ti_am335x_tscadc.c
> > +++ b/drivers/mfd/ti_am335x_tscadc.c
> > @@ -239,6 +239,8 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
> >   	}
> >   	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
> >   
> > +	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
> > +  
> 
> Strange change - above 2 lines a the same !?

Yup, Looks like this one got handled earlier and the rebase went wrong.
So drop it.

> 
> >   	tscadc_idle_config(tscadc);
> >   
> >   	/* Enable the TSC module enable bit */
> >   
> 


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 33/46] mfd: ti_am335x_tscadc: Move control register configuration
  2021-09-05 13:18     ` Jonathan Cameron
@ 2021-09-05 13:22       ` Miquel Raynal
  0 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-05 13:22 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Grygorii Strashko, Lars-Peter Clausen, Peter Meerwald-Stadler,
	Rob Herring, Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren,
	linux-iio, devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Jason Reeder

Hi Jonathan,

jic23@kernel.org wrote on Sun, 5 Sep 2021 14:18:52 +0100:

> On Fri, 3 Sep 2021 16:24:22 +0300
> Grygorii Strashko <grygorii.strashko@ti.com> wrote:
> 
> > On 03/09/2021 00:51, Miquel Raynal wrote:  
> > > The datasheet states that most of the configuration should be set in the
> > > control register in the first place, before actually enabling the
> > > hardware. So far only half of the configuration was made in the first
> > > step, which does not make really sense and would complicating the code
> > > when introducing support for the am437x hardware.
> > > 
> > > Let's move that register write a bit below to enclose more configuration.
> > > 
> > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > > ---
> > >   drivers/mfd/ti_am335x_tscadc.c | 2 ++
> > >   1 file changed, 2 insertions(+)
> > > 
> > > diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> > > index 29ada9da8826..a0db3e4ff265 100644
> > > --- a/drivers/mfd/ti_am335x_tscadc.c
> > > +++ b/drivers/mfd/ti_am335x_tscadc.c
> > > @@ -239,6 +239,8 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
> > >   	}
> > >   	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
> > >   
> > > +	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
> > > +    
> > 
> > Strange change - above 2 lines a the same !?  
> 
> Yup, Looks like this one got handled earlier and the rebase went wrong.
> So drop it.

Exactly. That's a rebase issue I didn't notice.

Thanks,
Miquèl

^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 34/46] mfd: ti_am335x_tscadc: Add ADC1/magnetic reader support
  2021-09-02 21:51 ` [PATCH v2 34/46] mfd: ti_am335x_tscadc: Add ADC1/magnetic reader support Miquel Raynal
@ 2021-09-05 13:23   ` Jonathan Cameron
  2021-09-14 18:25     ` Miquel Raynal
  0 siblings, 1 reply; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 13:23 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:32 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Introduce a new compatible that has another set of driver data,
> targeting am437x SoCs with a magnetic reader instead of the
> touchscreen and a more featureful set of registers.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
I'm being lazy and not datasheet diving but otherwise looks good.
The HZ unit patch is in mm, but Linus hasn't merged it yet.  May well be
in whatever tree this goes into post merge window though.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/mfd/ti_am335x_tscadc.c       | 41 ++++++++++++++++++++++++----
>  include/linux/mfd/ti_am335x_tscadc.h |  9 +++++-
>  2 files changed, 43 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index a0db3e4ff265..a3347f9fc388 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -121,11 +121,11 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	struct mfd_cell *cell;
>  	struct property *prop;
>  	const __be32 *cur;
> -	bool use_tsc = false;
> +	bool use_tsc = false, use_mag = false;
>  	u32 val;
>  	int err;
>  	int tscmag_wires = 0, adc_channels = 0, cell_idx = 0, total_channels;
> -	int readouts = 0;
> +	int readouts = 0, mag_tracks = 0;
>  
>  	/* Allocate memory for device */
>  	tscadc = devm_kzalloc(&pdev->dev, sizeof(*tscadc), GFP_KERNEL);
> @@ -148,6 +148,16 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  		of_node_put(node);
>  		if (tscmag_wires)
>  			use_tsc = true;
> +	} else {
> +		/*
> +		 * When adding support for the magnetic reader, here is the
> +		 * place to look for the number of tracks used from device tree.
> +		 * Let's default to 0 for now.
> +		 */
> +		mag_tracks = 0;
> +		tscmag_wires = mag_tracks * 2;
> +		if (tscmag_wires)
> +			use_mag = true;
>  	}
>  
>  	node = of_get_child_by_name(pdev->dev.of_node, "adc");
> @@ -211,8 +221,9 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	 * The TSC_ADC_Subsystem has 2 clock domains: OCP_CLK and ADC_CLK.
>  	 * ADCs produce a 12-bit sample every 15 ADC_CLK cycles.
>  	 * am33xx ADCs expect to capture 200ksps.
> -	 * We need the ADC clocks to run at 3MHz.
> -	 * This frequency is valid since TSC_ADC_SS controller design
> +	 * am47xx ADCs expect to capture 867ksps.
> +	 * We need ADC clocks respectively running at 3MHz and 13MHz.
> +	 * These frequencies are valid since TSC_ADC_SS controller design
>  	 * assumes the OCP clock is at least 6x faster than the ADC clock.
>  	 */
>  	clk = devm_clk_get(&pdev->dev, NULL);
> @@ -236,6 +247,9 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  			else
>  				tscadc->ctrl |= CNTRLREG_TSC_4WIRE;
>  		}
> +	} else {
> +		tscadc->ctrl |= CNTRLREG_MAG_PREAMP_PWRDOWN |
> +				CNTRLREG_MAG_PREAMP_BYPASS;
>  	}
>  	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl);
>  
> @@ -246,7 +260,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	/* Enable the TSC module enable bit */
>  	regmap_write(tscadc->regmap, REG_CTRL, tscadc->ctrl | CNTRLREG_SSENB);
>  
> -	/* TSC Cell */
> +	/* TSC or MAG Cell */
>  	if (tscmag_wires > 0) {
>  		cell = &tscadc->cells[cell_idx++];
>  		cell->name = tscadc->data->name_tscmag;
> @@ -334,6 +348,7 @@ static SIMPLE_DEV_PM_OPS(tscadc_pm_ops, tscadc_suspend, tscadc_resume);
>  
>  static const struct ti_tscadc_data tscdata = {
>  	.has_tsc = true,
> +	.has_mag = false,
>  	.name_tscmag = "TI-am335x-tsc",
>  	.compat_tscmag = "ti,am3359-tsc",
>  	.name_adc = "TI-am335x-adc",
> @@ -341,11 +356,25 @@ static const struct ti_tscadc_data tscdata = {
>  	.target_clk_rate = TSC_ADC_CLK,
>  };
>  
> +static const struct ti_tscadc_data magdata = {
> +	.has_tsc = false,
> +	.has_mag = true,
> +	.name_tscmag = "TI-am43xx-mag",
> +	.compat_tscmag = "ti,am4372-mag",
> +	.name_adc = "TI-am43xx-adc",
> +	.compat_adc = "ti,am4372-adc",
> +	.target_clk_rate = MAG_ADC_CLK,
> +};
> +
>  static const struct of_device_id ti_tscadc_dt_ids[] = {
>  	{
>  		.compatible = "ti,am3359-tscadc",
>  		.data = &tscdata,
>  	},
> +	{
> +		.compatible = "ti,am4372-magadc",
> +		.data = &magdata,
> +	},
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(of, ti_tscadc_dt_ids);
> @@ -363,6 +392,6 @@ static struct platform_driver ti_tscadc_driver = {
>  
>  module_platform_driver(ti_tscadc_driver);
>  
> -MODULE_DESCRIPTION("TI touchscreen / ADC MFD controller driver");
> +MODULE_DESCRIPTION("TI touchscreen/magnetic reader/ADC MFD controller driver");
>  MODULE_AUTHOR("Rachna Patil <rachna@ti.com>");
>  MODULE_LICENSE("GPL");
> diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
> index 3dbdb827566c..1f29bcdf51c7 100644
> --- a/include/linux/mfd/ti_am335x_tscadc.h
> +++ b/include/linux/mfd/ti_am335x_tscadc.h
> @@ -122,6 +122,11 @@
>  #define CNTRLREG_TSC_8WIRE	CNTRLREG_TSC_AFE_CTRL(3)
>  #define CNTRLREG_TSC_ENB	BIT(7)
>  
> +/*Control registers bitfields  for MAGADC IP */
> +#define CNTRLREG_MAGADCENB      BIT(0)
> +#define CNTRLREG_MAG_PREAMP_PWRDOWN BIT(5)
> +#define CNTRLREG_MAG_PREAMP_BYPASS  BIT(6)
> +
>  /* FIFO READ Register */
>  #define FIFOREAD_DATA_MASK	GENMASK(11, 0)
>  #define FIFOREAD_CHNLID_MASK	GENMASK(19, 16)
> @@ -134,7 +139,8 @@
>  #define SEQ_STATUS		BIT(5)
>  #define CHARGE_STEP		0x11
>  
> -#define TSC_ADC_CLK		3000000
> +#define TSC_ADC_CLK		3000000 /* 3 MHz */
> +#define MAG_ADC_CLK		13000000 /* 13 MHz */
>  #define TOTAL_STEPS		16
>  #define TOTAL_CHANNELS		8
>  #define FIFO1_THRESHOLD		19
> @@ -157,6 +163,7 @@
>  
>  struct ti_tscadc_data {
>  	bool has_tsc;
> +	bool has_mag;
>  	char *name_tscmag;
>  	char *compat_tscmag;
>  	char *name_adc;


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 35/46] mfd: ti_am335x_tscadc: Support the correctly spelled DT property
  2021-09-02 21:51 ` [PATCH v2 35/46] mfd: ti_am335x_tscadc: Support the correctly spelled DT property Miquel Raynal
@ 2021-09-05 13:24   ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-05 13:24 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

On Thu,  2 Sep 2021 23:51:33 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> There was in the past a typo in the coordinate readouts property. The
> bindings have been updated, the touchscreen driver as well and now
> supports both. However, the MFD driver that is in charge of verifying
> the validity of the property only checks the bogus one. Add support for
> the correctly spelled DT property.
> 
> Fixes: c9aeb249bf72 ("Input: ti_am335x_tsc - fix spelling mistake in TSC/ADC DT binding")
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Looks good now.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/mfd/ti_am335x_tscadc.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index a3347f9fc388..4c2fe9910400 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -144,8 +144,14 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	if (tscadc->data->has_tsc) {
>  		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);
> +		err = of_property_read_u32(node, "ti,coordinate-readouts",
> +					   &readouts);
> +		if (err < 0)
> +			of_property_read_u32(node, "ti,coordiante-readouts",
> +					     &readouts);
> +
>  		of_node_put(node);
> +
>  		if (tscmag_wires)
>  			use_tsc = true;
>  	} else {


^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 06/46] dt-bindings: mfd: ti,am3359-tscadc: Describe am4372 MFD compatible
  2021-09-02 21:51 ` [PATCH v2 06/46] dt-bindings: mfd: ti,am3359-tscadc: Describe am4372 MFD compatible Miquel Raynal
  2021-09-05 12:01   ` Jonathan Cameron
@ 2021-09-07 19:04   ` Rob Herring
  1 sibling, 0 replies; 77+ messages in thread
From: Rob Herring @ 2021-09-07 19:04 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Dmitry Torokhov, Jonathan Cameron, Grygorii Strashko, linux-omap,
	Rob Herring, devicetree, Lars-Peter Clausen, bcousson,
	Vignesh Raghavendra, linux-input, Lee Jones, Tony Lindgren,
	Peter Meerwald-Stadler, Ryan Barnett, Lokesh Vutla, linux-iio,
	Thomas Petazzoni, Tero Kristo, Jason Reeder

On Thu, 02 Sep 2021 23:51:04 +0200, Miquel Raynal wrote:
> A more recent version of the am3359 ADC/Touchscreen controller is
> available on certain SoCs of the am437x family. This IP has evolved a
> little bit and deserves its own compatible.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
>  Documentation/devicetree/bindings/mfd/ti,am3359-tscadc.yaml | 5 +++++
>  1 file changed, 5 insertions(+)
> 

Acked-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 07/46] dt-bindings: iio: adc: ti,am3359-adc: Describe am4372 ADC compatible
  2021-09-02 21:51 ` [PATCH v2 07/46] dt-bindings: iio: adc: ti,am3359-adc: Describe am4372 ADC compatible Miquel Raynal
@ 2021-09-07 19:05   ` Rob Herring
  0 siblings, 0 replies; 77+ messages in thread
From: Rob Herring @ 2021-09-07 19:05 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Rob Herring, devicetree, Tony Lindgren, Lars-Peter Clausen,
	Lee Jones, bcousson, linux-input, Jonathan Cameron, Lokesh Vutla,
	Tero Kristo, Ryan Barnett, linux-iio, Jason Reeder,
	Peter Meerwald-Stadler, linux-omap, Dmitry Torokhov,
	Jonathan Cameron, Grygorii Strashko, Thomas Petazzoni,
	Vignesh Raghavendra

On Thu, 02 Sep 2021 23:51:05 +0200, Miquel Raynal wrote:
> A more recent version of the am3359 ADC is available on certain SoCs of
> the am437x family. This IP has evolved a little bit and deserves its own
> compatible.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
>  Documentation/devicetree/bindings/iio/adc/ti,am3359-adc.yaml | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 

Acked-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 34/46] mfd: ti_am335x_tscadc: Add ADC1/magnetic reader support
  2021-09-05 13:23   ` Jonathan Cameron
@ 2021-09-14 18:25     ` Miquel Raynal
  0 siblings, 0 replies; 77+ messages in thread
From: Miquel Raynal @ 2021-09-14 18:25 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder

Hi Jonathan,

jic23@kernel.org wrote on Sun, 5 Sep 2021 14:23:24 +0100:

> On Thu,  2 Sep 2021 23:51:32 +0200
> Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> 
> > Introduce a new compatible that has another set of driver data,
> > targeting am437x SoCs with a magnetic reader instead of the
> > touchscreen and a more featureful set of registers.
> > 
> > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>  
> I'm being lazy and not datasheet diving but otherwise looks good.
> The HZ unit patch is in mm, but Linus hasn't merged it yet.  May well be
> in whatever tree this goes into post merge window though.
> 

I'll rebase the series and add the use of the HZ_PER_MHZ macro :)

Thanks,
Miquèl

^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 26/46] mfd: ti_am335x_tscadc: Use FIELD_PREP() when relevant in the header
  2021-09-05 13:13   ` Jonathan Cameron
@ 2021-09-15  7:48     ` Miquel Raynal
  2021-09-19 15:49       ` Jonathan Cameron
  0 siblings, 1 reply; 77+ messages in thread
From: Miquel Raynal @ 2021-09-15  7:48 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Jonathan Cameron

Hi Jonathan,

jic23@kernel.org wrote on Sun, 5 Sep 2021 14:13:32 +0100:

> On Thu,  2 Sep 2021 23:51:24 +0200
> Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> 
> > Use the FIELD_PREP() macro when relevant. Sometimes reorder the lines to
> > be able to use the relevant bitmask.
> > 
> > Mind the s/%d/%ld/ change in a log due to the type change following the
> > use of FIELD_PREP() in the header.
> > 
> > Suggested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>  
> What you have here is fine, but I would take it a step further and push the
> FIELD_PREP() calls directly inline in the code.  There is little advantage
> beyond saving a few characters in
> 
> STEPENB(3)
> 
> rather than
> 
> FIELD_PREP(STEPENB_MASK, 3)
> 
> If you don't want to go that far this is still an improvement so
> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> > ---
> >  drivers/iio/adc/ti_am335x_adc.c      |  2 +-
> >  include/linux/mfd/ti_am335x_tscadc.h | 31 ++++++++++++++--------------
> >  2 files changed, 17 insertions(+), 16 deletions(-)
> > 
> > diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
> > index e946903b0993..54c410b6ca07 100644
> > --- a/drivers/iio/adc/ti_am335x_adc.c
> > +++ b/drivers/iio/adc/ti_am335x_adc.c
> > @@ -126,7 +126,7 @@ static void tiadc_step_config(struct iio_dev *indio_dev)
> >  		chan = adc_dev->channel_line[i];
> >  
> >  		if (adc_dev->step_avg[i] > STEPCONFIG_AVG_16) {
> > -			dev_warn(dev, "chan %d step_avg truncating to %d\n",
> > +			dev_warn(dev, "chan %d step_avg truncating to %ld\n",
> >  				 chan, STEPCONFIG_AVG_16);
> >  			adc_dev->step_avg[i] = STEPCONFIG_AVG_16;
> >  		}
> > diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
> > index 4de16fc3d74f..29095c0dc6d8 100644
> > --- a/include/linux/mfd/ti_am335x_tscadc.h
> > +++ b/include/linux/mfd/ti_am335x_tscadc.h
> > @@ -8,6 +8,7 @@
> >  #ifndef __LINUX_TI_AM335X_TSCADC_MFD_H
> >  #define __LINUX_TI_AM335X_TSCADC_MFD_H
> >  
> > +#include <linux/bitfield.h>
> >  #include <linux/mfd/core.h>
> >  
> >  #define REG_RAWIRQSTATUS	0x024
> > @@ -40,7 +41,7 @@
> >  
> >  /* Step Enable */
> >  #define STEPENB_MASK		GENMASK(16, 0)
> > -#define STEPENB(val)		((val) << 0)
> > +#define STEPENB(val)		FIELD_PREP(STEPENB_MASK, (val))  
> 
> My inclination with these is to drop the macro entirely and
> just use FIELD_PREP(STEPENB_MASK, xxx) inline directly.
> There is no loss of clarity in doing so and it gets you to a state
> where you only have one macro per field which is nice for checking
> purposes.

Actually I don't like too much leaking FIELD_PREP()s directly in the
code because (and this is really a personal feeling) I found them
rather less straightforward to understand than a good old BIT() for
example. Moreover, I've already hacked in a lot of different
places and moving these definitions in the code directly would
produce a big diff, overall hardening possible future git-blames.

However, I rather agree on the fact that there is no point in defining
a mask and then using that mask in another macro unless that mask is
reused somewhere else. So if it's fine for you, I'll provide a new
version with a reduced number of defines in this file. Would this work
for you?
 
> 
> >  #define ENB(val)		BIT(val)
> >  #define STPENB_STEPENB		STEPENB(GENMASK(16, 0))
> >  #define STPENB_STEPENB_TC	STEPENB(GENMASK(12, 0))
> > @@ -58,11 +59,11 @@
> >  
> >  /* Step Configuration */
> >  #define STEPCONFIG_MODE_MASK	GENMASK(1, 0)
> > -#define STEPCONFIG_MODE(val)	((val) << 0)
> > +#define STEPCONFIG_MODE(val)	FIELD_PREP(STEPCONFIG_MODE_MASK, (val))
> >  #define STEPCONFIG_MODE_SWCNT	STEPCONFIG_MODE(1)
> >  #define STEPCONFIG_MODE_HWSYNC	STEPCONFIG_MODE(2)
> >  #define STEPCONFIG_AVG_MASK	GENMASK(4, 2)
> > -#define STEPCONFIG_AVG(val)	((val) << 2)
> > +#define STEPCONFIG_AVG(val)	FIELD_PREP(STEPCONFIG_AVG_MASK, (val))
> >  #define STEPCONFIG_AVG_16	STEPCONFIG_AVG(4)
> >  #define STEPCONFIG_XPP		BIT(5)
> >  #define STEPCONFIG_XNN		BIT(6)
> > @@ -70,43 +71,43 @@
> >  #define STEPCONFIG_YNN		BIT(8)
> >  #define STEPCONFIG_XNP		BIT(9)
> >  #define STEPCONFIG_YPN		BIT(10)
> > -#define STEPCONFIG_RFP(val)	((val) << 12)
> >  #define STEPCONFIG_RFP_VREFP	GENMASK(13, 12)
> > +#define STEPCONFIG_RFP(val)	FIELD_PREP(STEPCONFIG_RFP_VREFP, (val))
> >  #define STEPCONFIG_INM_MASK	GENMASK(18, 15)
> > -#define STEPCONFIG_INM(val)	((val) << 15)
> > +#define STEPCONFIG_INM(val)	FIELD_PREP(STEPCONFIG_INM_MASK, (val))
> >  #define STEPCONFIG_INM_ADCREFM	STEPCONFIG_INM(8)
> >  #define STEPCONFIG_INP_MASK	GENMASK(22, 19)
> > -#define STEPCONFIG_INP(val)	((val) << 19)
> > +#define STEPCONFIG_INP(val)	FIELD_PREP(STEPCONFIG_INP_MASK, (val))
> >  #define STEPCONFIG_INP_AN4	STEPCONFIG_INP(4)
> >  #define STEPCONFIG_INP_ADCREFM	STEPCONFIG_INP(8)
> >  #define STEPCONFIG_FIFO1	BIT(26)
> > -#define STEPCONFIG_RFM(val)	((val) << 23)
> >  #define STEPCONFIG_RFM_VREFN	GENMASK(24, 23)
> > +#define STEPCONFIG_RFM(val)	FIELD_PREP(STEPCONFIG_RFM_VREFN, (val))
> >  
> >  /* Delay register */
> >  #define STEPDELAY_OPEN_MASK	GENMASK(17, 0)
> > -#define STEPDELAY_OPEN(val)	((val) << 0)
> > +#define STEPDELAY_OPEN(val)	FIELD_PREP(STEPDELAY_OPEN_MASK, (val))
> >  #define STEPCONFIG_OPENDLY	STEPDELAY_OPEN(0x098)
> >  #define STEPDELAY_SAMPLE_MASK	GENMASK(31, 24)
> > -#define STEPDELAY_SAMPLE(val)	((val) << 24)
> > +#define STEPDELAY_SAMPLE(val)	FIELD_PREP(STEPDELAY_SAMPLE_MASK, (val))
> >  #define STEPCONFIG_SAMPLEDLY	STEPDELAY_SAMPLE(0)
> >  
> >  /* Charge Config */
> >  #define STEPCHARGE_RFP_MASK	GENMASK(14, 12)
> > -#define STEPCHARGE_RFP(val)	((val) << 12)
> > +#define STEPCHARGE_RFP(val)	FIELD_PREP(STEPCHARGE_RFP_MASK, (val))
> >  #define STEPCHARGE_RFP_XPUL	STEPCHARGE_RFP(1)
> >  #define STEPCHARGE_INM_MASK	GENMASK(18, 15)
> > -#define STEPCHARGE_INM(val)	((val) << 15)
> > +#define STEPCHARGE_INM(val)	FIELD_PREP(STEPCHARGE_INM_MASK, (val))
> >  #define STEPCHARGE_INM_AN1	STEPCHARGE_INM(1)
> >  #define STEPCHARGE_INP_MASK	GENMASK(22, 19)
> > -#define STEPCHARGE_INP(val)	((val) << 19)
> > +#define STEPCHARGE_INP(val)	FIELD_PREP(STEPCHARGE_INP_MASK, (val))
> >  #define STEPCHARGE_RFM_MASK	GENMASK(24, 23)
> > -#define STEPCHARGE_RFM(val)	((val) << 23)
> > +#define STEPCHARGE_RFM(val)	FIELD_PREP(STEPCHARGE_RFM_MASK, (val))
> >  #define STEPCHARGE_RFM_XNUR	STEPCHARGE_RFM(1)
> >  
> >  /* Charge delay */
> >  #define CHARGEDLY_OPEN_MASK	GENMASK(17, 0)
> > -#define CHARGEDLY_OPEN(val)	((val) << 0)
> > +#define CHARGEDLY_OPEN(val)	FIELD_PREP(CHARGEDLY_OPEN_MASK, (val))
> >  #define CHARGEDLY_OPENDLY	CHARGEDLY_OPEN(0x400)
> >  
> >  /* Control register */
> > @@ -115,7 +116,7 @@
> >  #define CNTRLREG_STEPCONFIGWRT	BIT(2)
> >  #define CNTRLREG_POWERDOWN	BIT(4)
> >  #define CNTRLREG_AFE_CTRL_MASK	GENMASK(6, 5)
> > -#define CNTRLREG_AFE_CTRL(val)	((val) << 5)
> > +#define CNTRLREG_AFE_CTRL(val)	FIELD_PREP(CNTRLREG_AFE_CTRL_MASK, (val))
> >  #define CNTRLREG_4WIRE		CNTRLREG_AFE_CTRL(1)
> >  #define CNTRLREG_5WIRE		CNTRLREG_AFE_CTRL(2)
> >  #define CNTRLREG_8WIRE		CNTRLREG_AFE_CTRL(3)  
> 

Thanks,
Miquèl

^ permalink raw reply	[flat|nested] 77+ messages in thread

* Re: [PATCH v2 26/46] mfd: ti_am335x_tscadc: Use FIELD_PREP() when relevant in the header
  2021-09-15  7:48     ` Miquel Raynal
@ 2021-09-19 15:49       ` Jonathan Cameron
  0 siblings, 0 replies; 77+ messages in thread
From: Jonathan Cameron @ 2021-09-19 15:49 UTC (permalink / raw)
  To: Miquel Raynal
  Cc: Lars-Peter Clausen, Peter Meerwald-Stadler, Rob Herring,
	Dmitry Torokhov, Lee Jones, bcousson, Tony Lindgren, linux-iio,
	devicetree, linux-input, linux-omap, Thomas Petazzoni,
	Vignesh Raghavendra, Lokesh Vutla, Tero Kristo, Ryan Barnett,
	Grygorii Strashko, Jason Reeder, Jonathan Cameron

On Wed, 15 Sep 2021 09:48:47 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Hi Jonathan,
> 
> jic23@kernel.org wrote on Sun, 5 Sep 2021 14:13:32 +0100:
> 
> > On Thu,  2 Sep 2021 23:51:24 +0200
> > Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> >   
> > > Use the FIELD_PREP() macro when relevant. Sometimes reorder the lines to
> > > be able to use the relevant bitmask.
> > > 
> > > Mind the s/%d/%ld/ change in a log due to the type change following the
> > > use of FIELD_PREP() in the header.
> > > 
> > > Suggested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>    
> > What you have here is fine, but I would take it a step further and push the
> > FIELD_PREP() calls directly inline in the code.  There is little advantage
> > beyond saving a few characters in
> > 
> > STEPENB(3)
> > 
> > rather than
> > 
> > FIELD_PREP(STEPENB_MASK, 3)
> > 
> > If you don't want to go that far this is still an improvement so
> > Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> >   
> > > ---
> > >  drivers/iio/adc/ti_am335x_adc.c      |  2 +-
> > >  include/linux/mfd/ti_am335x_tscadc.h | 31 ++++++++++++++--------------
> > >  2 files changed, 17 insertions(+), 16 deletions(-)
> > > 
> > > diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
> > > index e946903b0993..54c410b6ca07 100644
> > > --- a/drivers/iio/adc/ti_am335x_adc.c
> > > +++ b/drivers/iio/adc/ti_am335x_adc.c
> > > @@ -126,7 +126,7 @@ static void tiadc_step_config(struct iio_dev *indio_dev)
> > >  		chan = adc_dev->channel_line[i];
> > >  
> > >  		if (adc_dev->step_avg[i] > STEPCONFIG_AVG_16) {
> > > -			dev_warn(dev, "chan %d step_avg truncating to %d\n",
> > > +			dev_warn(dev, "chan %d step_avg truncating to %ld\n",
> > >  				 chan, STEPCONFIG_AVG_16);
> > >  			adc_dev->step_avg[i] = STEPCONFIG_AVG_16;
> > >  		}
> > > diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
> > > index 4de16fc3d74f..29095c0dc6d8 100644
> > > --- a/include/linux/mfd/ti_am335x_tscadc.h
> > > +++ b/include/linux/mfd/ti_am335x_tscadc.h
> > > @@ -8,6 +8,7 @@
> > >  #ifndef __LINUX_TI_AM335X_TSCADC_MFD_H
> > >  #define __LINUX_TI_AM335X_TSCADC_MFD_H
> > >  
> > > +#include <linux/bitfield.h>
> > >  #include <linux/mfd/core.h>
> > >  
> > >  #define REG_RAWIRQSTATUS	0x024
> > > @@ -40,7 +41,7 @@
> > >  
> > >  /* Step Enable */
> > >  #define STEPENB_MASK		GENMASK(16, 0)
> > > -#define STEPENB(val)		((val) << 0)
> > > +#define STEPENB(val)		FIELD_PREP(STEPENB_MASK, (val))    
> > 
> > My inclination with these is to drop the macro entirely and
> > just use FIELD_PREP(STEPENB_MASK, xxx) inline directly.
> > There is no loss of clarity in doing so and it gets you to a state
> > where you only have one macro per field which is nice for checking
> > purposes.  
> 
> Actually I don't like too much leaking FIELD_PREP()s directly in the
> code because (and this is really a personal feeling) I found them
> rather less straightforward to understand than a good old BIT() for
> example. Moreover, I've already hacked in a lot of different
> places and moving these definitions in the code directly would
> produce a big diff, overall hardening possible future git-blames.
> 
> However, I rather agree on the fact that there is no point in defining
> a mask and then using that mask in another macro unless that mask is
> reused somewhere else. So if it's fine for you, I'll provide a new
> version with a reduced number of defines in this file. Would this work
> for you?

That will be fine.

Thanks,

Jonathan

>  
> >   
> > >  #define ENB(val)		BIT(val)
> > >  #define STPENB_STEPENB		STEPENB(GENMASK(16, 0))
> > >  #define STPENB_STEPENB_TC	STEPENB(GENMASK(12, 0))
> > > @@ -58,11 +59,11 @@
> > >  
> > >  /* Step Configuration */
> > >  #define STEPCONFIG_MODE_MASK	GENMASK(1, 0)
> > > -#define STEPCONFIG_MODE(val)	((val) << 0)
> > > +#define STEPCONFIG_MODE(val)	FIELD_PREP(STEPCONFIG_MODE_MASK, (val))
> > >  #define STEPCONFIG_MODE_SWCNT	STEPCONFIG_MODE(1)
> > >  #define STEPCONFIG_MODE_HWSYNC	STEPCONFIG_MODE(2)
> > >  #define STEPCONFIG_AVG_MASK	GENMASK(4, 2)
> > > -#define STEPCONFIG_AVG(val)	((val) << 2)
> > > +#define STEPCONFIG_AVG(val)	FIELD_PREP(STEPCONFIG_AVG_MASK, (val))
> > >  #define STEPCONFIG_AVG_16	STEPCONFIG_AVG(4)
> > >  #define STEPCONFIG_XPP		BIT(5)
> > >  #define STEPCONFIG_XNN		BIT(6)
> > > @@ -70,43 +71,43 @@
> > >  #define STEPCONFIG_YNN		BIT(8)
> > >  #define STEPCONFIG_XNP		BIT(9)
> > >  #define STEPCONFIG_YPN		BIT(10)
> > > -#define STEPCONFIG_RFP(val)	((val) << 12)
> > >  #define STEPCONFIG_RFP_VREFP	GENMASK(13, 12)
> > > +#define STEPCONFIG_RFP(val)	FIELD_PREP(STEPCONFIG_RFP_VREFP, (val))
> > >  #define STEPCONFIG_INM_MASK	GENMASK(18, 15)
> > > -#define STEPCONFIG_INM(val)	((val) << 15)
> > > +#define STEPCONFIG_INM(val)	FIELD_PREP(STEPCONFIG_INM_MASK, (val))
> > >  #define STEPCONFIG_INM_ADCREFM	STEPCONFIG_INM(8)
> > >  #define STEPCONFIG_INP_MASK	GENMASK(22, 19)
> > > -#define STEPCONFIG_INP(val)	((val) << 19)
> > > +#define STEPCONFIG_INP(val)	FIELD_PREP(STEPCONFIG_INP_MASK, (val))
> > >  #define STEPCONFIG_INP_AN4	STEPCONFIG_INP(4)
> > >  #define STEPCONFIG_INP_ADCREFM	STEPCONFIG_INP(8)
> > >  #define STEPCONFIG_FIFO1	BIT(26)
> > > -#define STEPCONFIG_RFM(val)	((val) << 23)
> > >  #define STEPCONFIG_RFM_VREFN	GENMASK(24, 23)
> > > +#define STEPCONFIG_RFM(val)	FIELD_PREP(STEPCONFIG_RFM_VREFN, (val))
> > >  
> > >  /* Delay register */
> > >  #define STEPDELAY_OPEN_MASK	GENMASK(17, 0)
> > > -#define STEPDELAY_OPEN(val)	((val) << 0)
> > > +#define STEPDELAY_OPEN(val)	FIELD_PREP(STEPDELAY_OPEN_MASK, (val))
> > >  #define STEPCONFIG_OPENDLY	STEPDELAY_OPEN(0x098)
> > >  #define STEPDELAY_SAMPLE_MASK	GENMASK(31, 24)
> > > -#define STEPDELAY_SAMPLE(val)	((val) << 24)
> > > +#define STEPDELAY_SAMPLE(val)	FIELD_PREP(STEPDELAY_SAMPLE_MASK, (val))
> > >  #define STEPCONFIG_SAMPLEDLY	STEPDELAY_SAMPLE(0)
> > >  
> > >  /* Charge Config */
> > >  #define STEPCHARGE_RFP_MASK	GENMASK(14, 12)
> > > -#define STEPCHARGE_RFP(val)	((val) << 12)
> > > +#define STEPCHARGE_RFP(val)	FIELD_PREP(STEPCHARGE_RFP_MASK, (val))
> > >  #define STEPCHARGE_RFP_XPUL	STEPCHARGE_RFP(1)
> > >  #define STEPCHARGE_INM_MASK	GENMASK(18, 15)
> > > -#define STEPCHARGE_INM(val)	((val) << 15)
> > > +#define STEPCHARGE_INM(val)	FIELD_PREP(STEPCHARGE_INM_MASK, (val))
> > >  #define STEPCHARGE_INM_AN1	STEPCHARGE_INM(1)
> > >  #define STEPCHARGE_INP_MASK	GENMASK(22, 19)
> > > -#define STEPCHARGE_INP(val)	((val) << 19)
> > > +#define STEPCHARGE_INP(val)	FIELD_PREP(STEPCHARGE_INP_MASK, (val))
> > >  #define STEPCHARGE_RFM_MASK	GENMASK(24, 23)
> > > -#define STEPCHARGE_RFM(val)	((val) << 23)
> > > +#define STEPCHARGE_RFM(val)	FIELD_PREP(STEPCHARGE_RFM_MASK, (val))
> > >  #define STEPCHARGE_RFM_XNUR	STEPCHARGE_RFM(1)
> > >  
> > >  /* Charge delay */
> > >  #define CHARGEDLY_OPEN_MASK	GENMASK(17, 0)
> > > -#define CHARGEDLY_OPEN(val)	((val) << 0)
> > > +#define CHARGEDLY_OPEN(val)	FIELD_PREP(CHARGEDLY_OPEN_MASK, (val))
> > >  #define CHARGEDLY_OPENDLY	CHARGEDLY_OPEN(0x400)
> > >  
> > >  /* Control register */
> > > @@ -115,7 +116,7 @@
> > >  #define CNTRLREG_STEPCONFIGWRT	BIT(2)
> > >  #define CNTRLREG_POWERDOWN	BIT(4)
> > >  #define CNTRLREG_AFE_CTRL_MASK	GENMASK(6, 5)
> > > -#define CNTRLREG_AFE_CTRL(val)	((val) << 5)
> > > +#define CNTRLREG_AFE_CTRL(val)	FIELD_PREP(CNTRLREG_AFE_CTRL_MASK, (val))
> > >  #define CNTRLREG_4WIRE		CNTRLREG_AFE_CTRL(1)
> > >  #define CNTRLREG_5WIRE		CNTRLREG_AFE_CTRL(2)
> > >  #define CNTRLREG_8WIRE		CNTRLREG_AFE_CTRL(3)    
> >   
> 
> Thanks,
> Miquèl


^ permalink raw reply	[flat|nested] 77+ messages in thread

end of thread, other threads:[~2021-09-19 15:45 UTC | newest]

Thread overview: 77+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-02 21:50 [PATCH v2 00/46] TI AM437X ADC1 Miquel Raynal
2021-09-02 21:50 ` [PATCH v2 01/46] clk: ti: am43xx: Add clkctrl data for am43xx ADC1 Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 02/46] dt-bindings: mfd: ti,am3359-tscadc: Add a yaml description for this MFD Miquel Raynal
2021-09-03 16:05   ` Rob Herring
2021-09-05 11:57   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 03/46] dt-bindings: touchscreen: ti,am3359-tsc: New yaml description Miquel Raynal
2021-09-03 16:06   ` Rob Herring
2021-09-05 11:59   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 04/46] dt-bindings: iio: adc: ti,am3359-adc: " Miquel Raynal
2021-09-03 16:07   ` Rob Herring
2021-09-02 21:51 ` [PATCH v2 05/46] dt-bindings: touchscreen: ti,am3359-tsc: Remove deprecated text file Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 06/46] dt-bindings: mfd: ti,am3359-tscadc: Describe am4372 MFD compatible Miquel Raynal
2021-09-05 12:01   ` Jonathan Cameron
2021-09-07 19:04   ` Rob Herring
2021-09-02 21:51 ` [PATCH v2 07/46] dt-bindings: iio: adc: ti,am3359-adc: Describe am4372 ADC compatible Miquel Raynal
2021-09-07 19:05   ` Rob Herring
2021-09-02 21:51 ` [PATCH v2 08/46] mfd: ti_am335x_tscadc: Replace license text with SPDX tag Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 09/46] mfd: ti_am335x_tscadc: Fix style Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 10/46] mfd: ti_am335x_tscadc: Drop extra spacing when declaring stack variables Miquel Raynal
2021-09-05 12:03   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 11/46] mfd: ti_am335x_tscadc: Ensure a balanced number of node get/put Miquel Raynal
2021-09-05 12:06   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 12/46] mfd: ti_am335x_tscadc: Get rid of useless gotos Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 13/46] mfd: ti_am335x_tscadc: Reword the comment explaining the dividers Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 14/46] mfd: ti_am335x_tscadc: Don't search the tree for our clock Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 15/46] mfd: ti_am335x_tscadc: Simplify divisor calculation Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 16/46] mfd: ti_am335x_tscadc: Move the driver structure allocation earlier Miquel Raynal
2021-09-05 12:09   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 17/46] mfd: ti_am335x_tscadc: Use driver data Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 18/46] mfd: ti_am335x_tscadc: Mimic the probe from resume() Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 19/46] mfd: ti_am335x_tscadc: Drop useless variables from the driver structure Miquel Raynal
2021-09-05 12:11   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 20/46] mfd: ti_am335x_tscadc: Always provide an idle configuration Miquel Raynal
2021-09-05 12:13   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 21/46] mfd: ti_am335x_tscadc: Reorder the initialization steps Miquel Raynal
2021-09-05 12:18   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 22/46] mfd: ti_am335x_tscadc: Gather the ctrl register logic in one place Miquel Raynal
2021-09-05 12:20   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 23/46] mfd: ti_am335x_tscadc: Replace the header license text with SPDX tag Miquel Raynal
2021-09-05 12:21   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 24/46] mfd: ti_am335x_tscadc: Fix header spacing Miquel Raynal
2021-09-05 12:22   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 25/46] mfd: ti_am335x_tscadc: Use BIT() and GENMASK() when relevant in the header Miquel Raynal
2021-09-05 13:09   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 26/46] mfd: ti_am335x_tscadc: Use FIELD_PREP() " Miquel Raynal
2021-09-05 13:13   ` Jonathan Cameron
2021-09-15  7:48     ` Miquel Raynal
2021-09-19 15:49       ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 27/46] mfd: ti_am335x_tscadc: Rename the subsystem enable macro Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 28/46] mfd: ti_am335x_tscadc: Add TSC prefix in certain macros Miquel Raynal
2021-09-05 13:15   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 29/46] mfd: ti_am335x_tscadc: Rename a variable Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 30/46] mfd: ti_am335x_tscadc: Fix an error message Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 31/46] mfd: ti_am335x_tscadc: Add a boolean to clarify the presence of a touchscreen Miquel Raynal
2021-09-05 13:17   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 32/46] mfd: ti_am335x_tscadc: Introduce has_tsc Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 33/46] mfd: ti_am335x_tscadc: Move control register configuration Miquel Raynal
2021-09-03 13:24   ` Grygorii Strashko
2021-09-05 13:18     ` Jonathan Cameron
2021-09-05 13:22       ` Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 34/46] mfd: ti_am335x_tscadc: Add ADC1/magnetic reader support Miquel Raynal
2021-09-05 13:23   ` Jonathan Cameron
2021-09-14 18:25     ` Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 35/46] mfd: ti_am335x_tscadc: Support the correctly spelled DT property Miquel Raynal
2021-09-05 13:24   ` Jonathan Cameron
2021-09-02 21:51 ` [PATCH v2 36/46] iio: adc: ti_am335x_adc: Wait the idle state to avoid stalls Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 37/46] iio: adc: ti_am335x_adc: Replace license text with SPDX tag Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 38/46] iio: adc: ti_am335x_adc: Fix style Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 39/46] iio: adc: ti_am335x_adc: Get rid of useless gotos Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 40/46] iio: adc: ti_am335x_adc: Gather the checks on the delays Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 41/46] iio: adc: ti_am335x_adc: Add a unit to the timeout delay Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 42/46] iio: adc: ti_am335x_adc: Add the scale information Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 43/46] iio: adc: ti_am335x_adc: Add the am437x compatible Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 44/46] ARM: dts: am437x-cm-t43: Use a correctly spelled DT property Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 45/46] ARM: dts: am43xx: Describe the magnetic reader/ADC1 hardware module Miquel Raynal
2021-09-02 22:17   ` Miquel Raynal
2021-09-02 21:51 ` [PATCH v2 46/46] ARM: dts: am437x-gp-evm: enable ADC1 Miquel Raynal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).