ASoC: Add TAS675x quad-channel Class-D amplifier driver
Subsystems (5)
Sen Wang
maintainerv2 cover ASoC: Add TAS675x quad-channel Class-D amplifier driver
This series adds support for the TI TAS675x (TAS6754, TAS67524) quad-channel automotive Class-D amplifiers. The devices have an integrated DSP and load diagnostics, and are controlled over I2C.
Patch 1 adds the dt-binding, patch 2 the codec driver, patch 3 the ALSA mixer controls documentation, and patch 4 adds the MAINTAINERS entry.
Tested on AM62D-EVM with a TAS67CD-AEC daughter card, on setups & test procedures, refer to the Github repository.
GitHub: https://github.com/SenWang125/tas67-linux
Changes in v2:
- Remove redundant DAPM event function (2/4)
- Move IRQ request past power_on, so regs can be set in a clean state (2/4)
- Add delayed_work at probe time to accomdate no PM configs (2/4)
- Change .set_fmt and .dapm_routes callbacks to the same tas675x_set_fmt name (1/3)
- Links to v1: https://lore.kernel.org/all/[email protected]/
Sen Wang (4):
dt-bindings: sound: Add ti,tas675x
ASoC: codecs: Add TAS675x quad-channel audio amplifier driver
Documentation: sound: Add TAS675x codec mixer controls documentation
MAINTAINERS: add entry for TAS675x audio amplifier
.../devicetree/bindings/sound/ti,tas675x.yaml | 278 +++ Documentation/sound/codecs/index.rst | 1 + Documentation/sound/codecs/tas675x.rst | 618 +++++ MAINTAINERS | 4 + sound/soc/codecs/Kconfig | 12 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/tas675x.c | 2158 +++++++++++++++++ sound/soc/codecs/tas675x.h | 367 +++ 8 files changed, 3440 insertions(+) create mode 100644 Documentation/devicetree/bindings/sound/ti,tas675x.yaml create mode 100644 Documentation/sound/codecs/tas675x.rst create mode 100644 sound/soc/codecs/tas675x.c create mode 100644 sound/soc/codecs/tas675x.h
Signature · 1 line
2.43.0
Sen Wang
maintainerPATCH v2 1/4 dt-bindings: sound: Add ti,tas675x
Add device tree binding for the Texas Instruments TAS675x family of four-channel Class-D audio amplifiers with integrated DSP.
--- .../devicetree/bindings/sound/ti,tas675x.yaml | 278 ++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 Documentation/devicetree/bindings/sound/ti,tas675x.yaml
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +278 -0
@@ -0,0 +1,278 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/sound/ti,tas675x.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Texas Instruments TAS675x Audio Amplifier + +maintainers: + - Sen Wang <[email protected]> + +description: | + The TAS675x family (TAS6754, TAS67524) are four-channel, digital-input, + automotive Class-D audio amplifiers with load diagnostics and an integrated + DSP for audio processing. + +allOf: + - $ref: dai-common.yaml# + +properties: + compatible: + enum: + - ti,tas6754 + - ti,tas67524 + + reg: + maxItems: 1 + + '#sound-dai-cells': + const: 1 + description: | + The device exposes three DAIs, selected by index. + 0 - Standard Audio Path (Playback) + 1 - Low-Latency Playback Path (Playback) + 2 - Sensory Feedback (Capture - Vpredict and Isense) + By default, all four channels of each DAI are active. Runtime + reconfiguration is available through DAPM widgets. + + interrupts: + maxItems: 1 + description: + Active-low falling-edge interrupt from the FAULT pin. When provided, + the driver uses IRQ-driven fault reporting instead of polling. + + pd-gpios: + maxItems: 1 + description: + GPIO connected to the power-down (PD#) pin, active low. Controls the + internal digital circuitry power state. When asserted the device enters + full power-down mode and all register state is lost. Can be omitted if + PD pin is hardwired or externally controlled. + + stby-gpios: + maxItems: 1 + description: + GPIO connected to the standby (STBY#) pin, active low. Controls the + analog power stage. When asserted the device enters Deep Sleep mode + but remains I2C-accessible with registers retained. Can be omitted if + STBY pin is tied to PD or hardwired. + + dvdd-supply: + description: + Digital logic supply (1.62 V to 3.6 V). All three supply rails must + be within their recommended operating ranges before the PD pin is + released. + + pvdd-supply: + description: + Output FET power supply (4.5 V to 19 V). All three supply rails must + be within their recommended operating ranges before the PD pin is + released. + + vbat-supply: + description: + Battery supply for the Class-D output stage (4.5 V to 19 V). Optional + when PVDD and VBAT are connected to the same supply rail. When absent, + VBAT is assumed hardwired to PVDD. + + ti,fast-boot: + type: boolean + description: + Skip DC load diagnostic sweep at power-on to reduce boot latency. + Automatic diagnostics after fault conditions remain enabled. Hardware + overcurrent protection is always active. + + ti,audio-slot-no: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + TDM slot offset for the standard audio playback path via SDIN1. A value + of 4 maps to slot 4. If omitted, slot assignment is derived from the + tx_mask provided via set_tdm_slot(). Without either property, no slot + mapping is configured. + + ti,llp-slot-no: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + TDM slot offset for the low-latency playback path via SDIN1. If omitted, + slot assignment is derived from the tx_mask provided via set_tdm_slot(). + Without either property, no slot mapping is configured. Disabled outside + of LLP mode, and only relevant for TDM formats. + + ti,vpredict-slot-no: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + In TDM mode, enables Vpredict output and assigns its starting slot; + four consecutive slots carry Vpredict Ch1-4 on SDOUT1. May coexist + with ti,isense-slot-no using separate non-overlapping slots. + + In I2S mode, enables Vpredict output on SDOUT1 (Ch1/Ch2) and SDOUT2 + (Ch3/Ch4). The slot value is unused. Requires a GPIO configured as + sdout2 for Ch3/Ch4; without it only Ch1/Ch2 are output. Mutually + exclusive with ti,isense-slot-no; if both are set, Vpredict takes + priority. + + Irrelevant in Left-J and Right-J modes. + + ti,isense-slot-no: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + In TDM mode, enables Isense output and assigns its starting slot; + four consecutive slots carry Isense Ch1-4 on SDOUT1. May coexist + with ti,vpredict-slot-no using separate non-overlapping slots. + + In I2S mode, enables Isense output on SDOUT1 (Ch1/Ch2) and SDOUT2 + (Ch3/Ch4). The slot value is unused. Requires a GPIO configured as + sdout2 for Ch3/Ch4; without it only Ch1/Ch2 are output. Mutually + exclusive with ti,vpredict-slot-no; Vpredict takes priority if both + are set. + + Irrelevant in Left-J and Right-J modes. + + ti,gpio1-function: + $ref: /schemas/types.yaml#/definitions/string + description: | + Function for the GPIO_1 pin. When omitted, GPIO_1 remains in its + power-on default state. + enum: + - low # Output: driven low + - auto-mute # Output: high when all channels are auto-muted + - auto-mute-ch4 # Output: high when channel 4 is auto-muted + - auto-mute-ch3 # Output: high when channel 3 is auto-muted + - auto-mute-ch2 # Output: high when channel 2 is auto-muted + - auto-mute-ch1 # Output: high when channel 1 is auto-muted + - sdout2 # Output: Routes secondary serial data output 2 + - sdout1 # Output: Re-routes secondary serial data output 1 + - warn # Output: warning signal (OTW, CBC) + - fault # Output: fault signal (OTSD, OC, DC) + - clock-sync # Output: clock synchronisation + - invalid-clock # Output: high when clock is invalid + - high # Output: driven high + - mute # Input: external mute control + - phase-sync # Input: phase synchronisation + - sdin2 # Input: secondary SDIN2 for I2S/LJ/RJ ch3/ch4 + - deep-sleep # Input: asserted transitions device to Deep Sleep + - hiz # Input: asserted transitions device to Hi-Z + - play # Input: asserted transitions device to Play + - sleep # Input: asserted transitions device to Sleep + + ti,gpio2-function: + $ref: /schemas/types.yaml#/definitions/string + description: | + Function for the GPIO_2 pin. When omitted, GPIO_2 remains in its + power-on default state. + enum: + - low # Output: driven low + - auto-mute # Output: high when all channels are auto-muted + - auto-mute-ch4 # Output: high when channel 4 is auto-muted + - auto-mute-ch3 # Output: high when channel 3 is auto-muted + - auto-mute-ch2 # Output: high when channel 2 is auto-muted + - auto-mute-ch1 # Output: high when channel 1 is auto-muted + - sdout2 # Output: Routes secondary serial data output 2 + - sdout1 # Output: Re-routes secondary serial data output 1 + - warn # Output: warning signal (OTW, CBC) + - fault # Output: fault signal (OTSD, OC, DC) + - clock-sync # Output: clock synchronisation + - invalid-clock # Output: high when clock is invalid + - high # Output: driven high + - mute # Input: external mute control + - phase-sync # Input: phase synchronisation + - sdin2 # Input: secondary SDIN2 for I2S/LJ/RJ ch3/ch4 + - deep-sleep # Input: asserted transitions device to Deep Sleep + - hiz # Input: asserted transitions device to Hi-Z + - play # Input: asserted transitions device to Play + - sleep # Input: asserted transitions device to Sleep + + ports: + $ref: /schemas/graph.yaml#/properties/ports + properties: + port@0: + $ref: audio-graph-port.yaml# + unevaluatedProperties: false + description: Standard audio playback port (DAI 0). + + port@1: + $ref: audio-graph-port.yaml# + unevaluatedProperties: false + description: Low-latency playback port (LLP) (DAI 1). + + port@2: + $ref: audio-graph-port.yaml# + unevaluatedProperties: false + description: Sensory feedback capture port (DAI 2). + + port: + $ref: audio-graph-port.yaml# + unevaluatedProperties: false + +required: + - compatible + - reg + - '#sound-dai-cells' + - dvdd-supply + - pvdd-supply + +anyOf: + - required: [pd-gpios] + - required: [stby-gpios] + +unevaluatedProperties: false + +examples: + - | + #include <dt-bindings/gpio/gpio.h> + + i2c { + #address-cells = <1>; + #size-cells = <0>; + + amplifier@70 { + compatible = "ti,tas67524"; + reg = <0x70>; + #sound-dai-cells = <1>; + sound-name-prefix = "TAS0"; + + stby-gpios = <&main_gpio0 33 GPIO_ACTIVE_LOW>; + + dvdd-supply = <&dvdd_1v8>; + pvdd-supply = <&pvdd_12v>; + vbat-supply = <&vbat_12v>; + + ti,audio-slot-no = <0>; + ti,llp-slot-no = <4>; + ti,vpredict-slot-no = <0>; + ti,isense-slot-no = <4>; + + ti,gpio2-function = "warn"; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + tas0_audio_ep: endpoint { + dai-format = "dsp_b"; + remote-endpoint = <&be_tas0_audio_ep>; + }; + }; + + port@1 { + reg = <1>; + + tas0_anc_ep: endpoint { + remote-endpoint = <&be_tas0_anc_ep>; + }; + }; + + port@2 { + reg = <2>; + + tas0_fb_ep: endpoint { + remote-endpoint = <&be_tas0_fb_ep>; + }; + }; + }; + }; + };
Signature · 1 line
2.43.0
Re: [PATCH v2 1/4] dt-bindings: sound: Add ti,tas675x
Quoted 4 lines · Sen Wang
Add device tree binding for the Texas Instruments TAS675x family of four-channel Class-D audio amplifiers with integrated DSP.
Signed-off-by Sen Wang <[email protected]>
Please use subject prefixes matching the subsystem. You can get them for example with 'git log --oneline -- DIRECTORY_OR_FILE' on the directory your patch is touching. For bindings, the preferred subjects are explained here:
https://www.kernel.org/doc/html/latest/devicetree/bindings/submitting-patches.html#i-for-patch-submitters
Quoted 2 lines
--- .../devicetree/bindings/sound/ti,tas675x.yaml | 278 ++++++++++++++++++
Filename matching compatible, one of them.
Quoted 11 lines
1 file changed, 278 insertions(+) create mode 100644 Documentation/devicetree/bindings/sound/ti,tas675x.yamlDocumentation/devicetree/bindings/sound/ti,tas675x.yaml new file +2
-0@@ -0,0 +1,278 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 12
Quoted 10 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +10
-0+--- +$id: http://devicetree.org/schemas/sound/ti,tas675x.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Texas Instruments TAS675x Audio Amplifier + +maintainers: + - Sen Wang <[email protected]> + +description: |
Do not need '|' unless you need to preserve formatting.
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 13
Quoted 1 line
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +1
-0+ The TAS675x family (TAS6754, TAS67524) are four-channel, digital-input,
And devices are not compatible?
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 24
Quoted 11 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +11
-0+ automotive Class-D audio amplifiers with load diagnostics and an integrated + DSP for audio processing. + +allOf: + - $ref: dai-common.yaml# + +properties: + compatible: + enum: + - ti,tas6754 + - ti,tas67524
Keep alphanumerical order (not natural).
Quoted 11 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +11
-0+ + reg: + maxItems: 1 + + '#sound-dai-cells': + const: 1 + description: | + The device exposes three DAIs, selected by index. + 0 - Standard Audio Path (Playback) + 1 - Low-Latency Playback Path (Playback) + 2 - Sensory Feedback (Capture - Vpredict and Isense)
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 45
Quoted 10 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +10
-0+ By default, all four channels of each DAI are active. Runtime + reconfiguration is available through DAPM widgets. + + interrupts: + maxItems: 1 + description: + Active-low falling-edge interrupt from the FAULT pin. When provided, + the driver uses IRQ-driven fault reporting instead of polling. + + pd-gpios:
Use names from gpio-consumer-common
Quoted 79 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +79
-0+ maxItems: 1 + description: + GPIO connected to the power-down (PD#) pin, active low. Controls the + internal digital circuitry power state. When asserted the device enters + full power-down mode and all register state is lost. Can be omitted if + PD pin is hardwired or externally controlled. + + stby-gpios: + maxItems: 1 + description: + GPIO connected to the standby (STBY#) pin, active low. Controls the + analog power stage. When asserted the device enters Deep Sleep mode + but remains I2C-accessible with registers retained. Can be omitted if + STBY pin is tied to PD or hardwired. + + dvdd-supply: + description: + Digital logic supply (1.62 V to 3.6 V). All three supply rails must + be within their recommended operating ranges before the PD pin is + released. + + pvdd-supply: + description: + Output FET power supply (4.5 V to 19 V). All three supply rails must + be within their recommended operating ranges before the PD pin is + released. + + vbat-supply: + description: + Battery supply for the Class-D output stage (4.5 V to 19 V). Optional + when PVDD and VBAT are connected to the same supply rail. When absent, + VBAT is assumed hardwired to PVDD. + + ti,fast-boot: + type: boolean + description: + Skip DC load diagnostic sweep at power-on to reduce boot latency. + Automatic diagnostics after fault conditions remain enabled. Hardware + overcurrent protection is always active. + + ti,audio-slot-no: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + TDM slot offset for the standard audio playback path via SDIN1. A value + of 4 maps to slot 4. If omitted, slot assignment is derived from the + tx_mask provided via set_tdm_slot(). Without either property, no slot + mapping is configured. + + ti,llp-slot-no: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + TDM slot offset for the low-latency playback path via SDIN1. If omitted, + slot assignment is derived from the tx_mask provided via set_tdm_slot(). + Without either property, no slot mapping is configured. Disabled outside + of LLP mode, and only relevant for TDM formats. + + ti,vpredict-slot-no: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + In TDM mode, enables Vpredict output and assigns its starting slot; + four consecutive slots carry Vpredict Ch1-4 on SDOUT1. May coexist + with ti,isense-slot-no using separate non-overlapping slots. + + In I2S mode, enables Vpredict output on SDOUT1 (Ch1/Ch2) and SDOUT2 + (Ch3/Ch4). The slot value is unused. Requires a GPIO configured as + sdout2 for Ch3/Ch4; without it only Ch1/Ch2 are output. Mutually + exclusive with ti,isense-slot-no; if both are set, Vpredict takes + priority. + + Irrelevant in Left-J and Right-J modes. + + ti,isense-slot-no: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + In TDM mode, enables Isense output and assigns its starting slot; + four consecutive slots carry Isense Ch1-4 on SDOUT1. May coexist + with ti,vpredict-slot-no using separate non-overlapping slots. + + In I2S mode, enables Isense output on SDOUT1 (Ch1/Ch2) and SDOUT2
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 134
Quoted 10 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +10
-0+ (Ch3/Ch4). The slot value is unused. Requires a GPIO configured as + sdout2 for Ch3/Ch4; without it only Ch1/Ch2 are output. Mutually + exclusive with ti,vpredict-slot-no; Vpredict takes priority if both + are set. + + Irrelevant in Left-J and Right-J modes. + + ti,gpio1-function: + $ref: /schemas/types.yaml#/definitions/string + description: |
Do not need '|' unless you need to preserve formatting.
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 136
Quoted 2 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +2
-0+ Function for the GPIO_1 pin. When omitted, GPIO_1 remains in its + power-on default state.
Best regards,
Krzysztof
Sen Wang
maintainerRe: [PATCH v2 1/4] dt-bindings: sound: Add ti,tas675x
Quoted 6 lines · Krzysztof Kozlowski
Quoted 4 lines · Sen Wang
Add device tree binding for the Texas Instruments TAS675x family of four-channel Class-D audio amplifiers with integrated DSP.
Signed-off-by Sen Wang <[email protected]>
Hi Krzysztof, Thank you for your review.
Quoted 5 lines
Please use subject prefixes matching the subsystem. You can get them for example with 'git log --oneline --
DIRECTORY_OR_FILE' on the directory your patch is touching. For bindings, the preferred subjects are explained here:
https://www.kernel.org/doc/html/latest/devicetree/bindings/submitting-patches.html#i-for-patch-submitters
Understood, ASoC: dt-bindings: Add ti,tas67524. Apologies for the oversight.
Quoted 30 lines
Quoted 3 lines
--- .../devicetree/bindings/sound/ti,tas675x.yaml | 278 ++++++++++++++++++Filename matching compatible, one of them.
Quoted 11 lines
1 file changed, 278 insertions(+)create mode 100644
Documentation/devicetree/bindings/sound/ti,tas675x.yamlDocumentation/devicetree/bindings/sound/ti,tas675x.yaml new file +2
-0@@ -0,0 +1,278 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 12
Quoted 10 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +10
-0+--- +$id: http://devicetree.org/schemas/sound/ti,tas675x.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Texas Instruments TAS675x Audio Amplifier + +maintainers: + - Sen Wang <[email protected]> + +description: |Do not need '|' unless you need to preserve formatting.
Quoted 4 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 13
Quoted 1 line
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +1
-0+ The TAS675x family (TAS6754, TAS67524) are four-channel, digital-input,And devices are not compatible?
They're compatible, and I didn't have any differentiators for this initial driver. So I should only keep one. And also rename ti,tas675x.yaml to ti,tas67524.yaml.
Quoted 29 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 24
Quoted 11 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +11
-0+ automotive Class-D audio amplifiers with load diagnostics and an integrated + DSP for audio processing. + +allOf: + - $ref: dai-common.yaml# + +properties: + compatible: + enum: + - ti,tas6754 + - ti,tas67524Keep alphanumerical order (not natural).
Quoted 15 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +15
-0+ + reg: + maxItems: 1 + + '#sound-dai-cells': + const: 1 + description: | + The device exposes three DAIs, selected by index. + 0 - Standard Audio Path (Playback) + 1 - Low-Latency Playback Path (Playback) + 2 - Sensory Feedback (Capture - Vpredict and Isense) + By default, all four channels of each DAI are active. Runtime + reconfiguration is available through DAPM widgets. + + interrupts:
Quoted 9 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 45
Quoted 6 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +6
-0+ maxItems: 1 + description: + Active-low falling-edge interrupt from the FAULT pin. When provided, + the driver uses IRQ-driven fault reporting instead of polling. + + pd-gpios:Use names from gpio-consumer-common
Okay
Quoted 83 lines
Quoted 83 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +83
-0+ maxItems: 1 + description: + GPIO connected to the power-down (PD#) pin, active low. Controls the + internal digital circuitry power state. When asserted the device enters + full power-down mode and all register state is lost. Can be omitted if + PD pin is hardwired or externally controlled. + + stby-gpios: + maxItems: 1 + description: + GPIO connected to the standby (STBY#) pin, active low. Controls the + analog power stage. When asserted the device enters Deep Sleep mode + but remains I2C-accessible with registers retained. Can be omitted if + STBY pin is tied to PD or hardwired. + + dvdd-supply: + description: + Digital logic supply (1.62 V to 3.6 V). All three supply rails must + be within their recommended operating ranges before the PD pin is + released. + + pvdd-supply: + description: + Output FET power supply (4.5 V to 19 V). All three supply rails must + be within their recommended operating ranges before the PD pin is + released. + + vbat-supply: + description: + Battery supply for the Class-D output stage (4.5 V to 19 V). Optional + when PVDD and VBAT are connected to the same supply rail. When absent, + VBAT is assumed hardwired to PVDD. + + ti,fast-boot: + type: boolean + description: + Skip DC load diagnostic sweep at power-on to reduce boot latency. + Automatic diagnostics after fault conditions remain enabled. Hardware + overcurrent protection is always active. + + ti,audio-slot-no: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + TDM slot offset for the standard audio playback path via SDIN1. A value + of 4 maps to slot 4. If omitted, slot assignment is derived from the + tx_mask provided via set_tdm_slot(). Without either property, no slot + mapping is configured. + + ti,llp-slot-no: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + TDM slot offset for the low-latency playback path via SDIN1. If omitted, + slot assignment is derived from the tx_mask provided via set_tdm_slot(). + Without either property, no slot mapping is configured. Disabled outside + of LLP mode, and only relevant for TDM formats. + + ti,vpredict-slot-no: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + In TDM mode, enables Vpredict output and assigns its starting slot; + four consecutive slots carry Vpredict Ch1-4 on SDOUT1. May coexist + with ti,isense-slot-no using separate non-overlapping slots. + + In I2S mode, enables Vpredict output on SDOUT1 (Ch1/Ch2) and SDOUT2 + (Ch3/Ch4). The slot value is unused. Requires a GPIO configured as + sdout2 for Ch3/Ch4; without it only Ch1/Ch2 are output. Mutually + exclusive with ti,isense-slot-no; if both are set, Vpredict takes + priority. + + Irrelevant in Left-J and Right-J modes. + + ti,isense-slot-no: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + In TDM mode, enables Isense output and assigns its starting slot; + four consecutive slots carry Isense Ch1-4 on SDOUT1. May coexist + with ti,vpredict-slot-no using separate non-overlapping slots. + + In I2S mode, enables Isense output on SDOUT1 (Ch1/Ch2) and SDOUT2 + (Ch3/Ch4). The slot value is unused. Requires a GPIO configured as + sdout2 for Ch3/Ch4; without it only Ch1/Ch2 are output. Mutually + exclusive with ti,vpredict-slot-no; Vpredict takes priority if both + are set.
Quoted 9 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 134
Quoted 6 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +6
-0+ + Irrelevant in Left-J and Right-J modes. + + ti,gpio1-function: + $ref: /schemas/types.yaml#/definitions/string + description: |Do not need '|' unless you need to preserve formatting.
Understood, thanks a lot for your review and the tip. Will post a V3.
Quoted 6 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 136
Quoted 2 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +2
-0+ Function for the GPIO_1 pin. When omitted, GPIO_1 remains in its + power-on default state.Best regards,
Krzysztof
Re: [PATCH v2 1/4] dt-bindings: sound: Add ti,tas675x
Quoted 21 lines · Sen Wang
Quoted 21 lines
Quoted 8 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +2
-0@@ -0,0 +1,278 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 12
Quoted 10 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +10
-0+--- +$id: http://devicetree.org/schemas/sound/ti,tas675x.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Texas Instruments TAS675x Audio Amplifier + +maintainers: + - Sen Wang <[email protected]> + +description: |Do not need '|' unless you need to preserve formatting.
Quoted 8 lines
Quoted 4 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 13
Quoted 1 line
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +1
-0+ The TAS675x family (TAS6754, TAS67524) are four-channel, digital-input,And devices are not compatible?
They're compatible, and I didn't have any differentiators for this initial driver. So I should only keep one.
And also rename ti,tas675x.yaml to ti,tas67524.yaml.
No, you should express compatibility. See writing bindings, writing schema, example schema docs or DTS101 talk.
Best regards,
Krzysztof
Sen Wang
maintainerRe: [PATCH v2 1/4] dt-bindings: sound: Add ti,tas675x
Quoted 27 lines · Krzysztof Kozlowski
Quoted 26 lines · Sen Wang
Quoted 25 lines
Quoted 8 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +2
-0@@ -0,0 +1,278 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 12
Quoted 10 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +10
-0+--- +$id: http://devicetree.org/schemas/sound/ti,tas675x.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Texas Instruments TAS675x Audio Amplifier + +maintainers: + - Sen Wang <[email protected]> + +description: |Do not need '|' unless you need to preserve formatting.
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 13
Quoted 1 line
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +1
-0+ The TAS675x family (TAS6754, TAS67524) are four-channel, digital-input,And devices are not compatible?
Quoted 7 lines
Quoted 3 lines
They're compatible, and I didn't have any differentiators for this initial driver. So I should only keep one.
And also rename ti,tas675x.yaml to ti,tas67524.yaml.No, you should express compatibility. See writing bindings, writing schema, example schema docs or DTS101 talk.
Thank you for clarifying Krzysztof, DTS101 talk is immensely helpful.
Regarding the compatibles, if I use ti,tas67524 as a fallback:
compatible:
oneOf:
- items:
- enum:
- ti,tas6754
- const: ti,tas67524
- const: ti,tas67524
Does this look correct? I've also seen some bindings use 'enum' even for single values under oneOf, but I'm assuming 'const' is preferred for single entries as advocated in the example schema?
Also, my apologies for the premature v3 series; Sorry for the noise. Lesson learned and will only send a proper v4 once all discussions are settled.
Best Regards,
Sen Wang
Quoted 3 lines
Best regards,
Krzysztof
Re: [PATCH v2 1/4] dt-bindings: sound: Add ti,tas675x
Quoted 48 lines · Sen Wang
Quoted 27 lines · Krzysztof Kozlowski
Quoted 26 lines · Sen Wang
Quoted 25 lines
Quoted 8 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +2
-0@@ -0,0 +1,278 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 12
Quoted 10 lines
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +10
-0+--- +$id: http://devicetree.org/schemas/sound/ti,tas675x.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Texas Instruments TAS675x Audio Amplifier + +maintainers: + - Sen Wang <[email protected]> + +description: |Do not need '|' unless you need to preserve formatting.
Documentation/devicetree/bindings/sound/ti,tas675x.yaml line 13
Quoted 1 line
Documentation/devicetree/bindings/sound/ti,tas675x.yaml new file +1
-0+ The TAS675x family (TAS6754, TAS67524) are four-channel, digital-input,And devices are not compatible?
Quoted 7 lines
Quoted 3 lines
They're compatible, and I didn't have any differentiators for this initial driver. So I should only keep one.
And also rename ti,tas675x.yaml to ti,tas67524.yaml.No, you should express compatibility. See writing bindings, writing schema, example schema docs or DTS101 talk.
Thank you for clarifying Krzysztof, DTS101 talk is immensely helpful.
Regarding the compatibles, if I use ti,tas67524 as a fallback:
compatible:
oneOf:
- items:
- enum:
- ti,tas6754
- const: ti,tas67524
- const: ti,tas67524
Quoted 3 lines
Does this look correct? I've also seen some bindings use 'enum' even for single values under oneOf, but I'm assuming 'const' is preferred for single entries as advocated in the example schema?
Concept is correct. You have incomplete indentation, but this will be pointed out by yamllint during dt_binding_check, so be sure that yamlling and dtschema Python packages are installed.
Best regards,
Krzysztof
Sen Wang
maintainerPATCH v2 2/4 ASoC: codecs: Add TAS675x quad-channel audio amplifier driver
In reply to Sen WangThe TAS675x (TAS6754, TAS67524) are quad-channel, digital-input Class-D amplifiers with an integrated DSP, controlled over I2C. They support I2S and TDM serial audio interfaces.
The driver exposes three DAI endpoints: standard playback, a low-latency DSP bypass path, and a sense capture DAI for real-time voltage and current feedback. DC, AC and real-time load diagnostics and hardware fault monitoring are supported.
--- sound/soc/codecs/Kconfig | 12 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/tas675x.c | 2158 ++++++++++++++++++++++++++++++++++++ sound/soc/codecs/tas675x.h | 367 ++++++ 4 files changed, 2539 insertions(+) create mode 100644 sound/soc/codecs/tas675x.c create mode 100644 sound/soc/codecs/tas675x.h
sound/soc/codecs/Kconfig +12 -0
@@ -275,6 +275,7 @@ config SND_SOC_ALL_CODECS imply SND_SOC_TAS571X imply SND_SOC_TAS5720 imply SND_SOC_TAS6424 + imply SND_SOC_TAS675X imply SND_SOC_TDA7419 imply SND_SOC_TFA9879 imply SND_SOC_TFA989X
@@ -2240,6 +2241,17 @@ config SND_SOC_TAS6424 Enable support for Texas Instruments TAS6424 high-efficiency digital input quad-channel Class-D audio power amplifiers. +config SND_SOC_TAS675X + tristate "Texas Instruments TAS675x Quad-Channel Audio Amplifier" + depends on I2C + select REGMAP_I2C + help + Enable support for Texas Instruments TAS675x quad-channel Class-D + audio power amplifiers (TAS6754, TAS67524). The devices support I2S + and TDM interfaces with real-time voltage and current sense feedback + via SDOUT, and provide DC/AC/real-time load diagnostics for speaker + monitoring. + config SND_SOC_TDA7419 tristate "ST TDA7419 audio processor" depends on I2C
sound/soc/codecs/Makefile +2 -0
@@ -318,6 +318,7 @@ snd-soc-tas571x-y := tas571x.o snd-soc-tas5720-y := tas5720.o snd-soc-tas5805m-y := tas5805m.o snd-soc-tas6424-y := tas6424.o +snd-soc-tas675x-y := tas675x.o snd-soc-tda7419-y := tda7419.o snd-soc-tas2770-y := tas2770.o snd-soc-tas2781-comlib-y := tas2781-comlib.o
@@ -760,6 +761,7 @@ obj-$(CONFIG_SND_SOC_TAS571X) += snd-soc-tas571x.o obj-$(CONFIG_SND_SOC_TAS5720) += snd-soc-tas5720.o obj-$(CONFIG_SND_SOC_TAS5805M) += snd-soc-tas5805m.o obj-$(CONFIG_SND_SOC_TAS6424) += snd-soc-tas6424.o +obj-$(CONFIG_SND_SOC_TAS675X) += snd-soc-tas675x.o obj-$(CONFIG_SND_SOC_TDA7419) += snd-soc-tda7419.o obj-$(CONFIG_SND_SOC_TAS2770) += snd-soc-tas2770.o obj-$(CONFIG_SND_SOC_TFA9879) += snd-soc-tfa9879.o
sound/soc/codecs/tas675x.c new file +2158 -0
2,158 lines not on this page · raw message
sound/soc/codecs/tas675x.h new file +367 -0
367 lines not on this page · raw message
Signature · 1 line
2.43.0
Re: [PATCH v2 2/4] ASoC: codecs: Add TAS675x quad-channel audio amplifier driver
sound/soc/codecs/tas675x.c line 2131
Quoted 9 lines · Sen Wang
sound/soc/codecs/tas675x.c new file +9
-0+ +static const struct dev_pm_ops tas675x_pm_ops = { + SYSTEM_SLEEP_PM_OPS(tas675x_system_suspend, tas675x_system_resume) +RUNTIME_PM_OPS (tas675x_runtime_suspend, tas675x_runtime_resume,NULL ) +}; + +static const struct of_device_id tas675x_of_match[] = { + { .compatible ="ti,tas6754" , .data = (void *)TAS6754 }, + { .compatible ="ti,tas67524" , .data = (void *)TAS6754 },
I did not look detailed, but this ^^^
sound/soc/codecs/tas675x.c line 2138
Quoted 7 lines
sound/soc/codecs/tas675x.c new file +7
-0+ { } +}; +MODULE_DEVICE_TABLE (of, tas675x_of_match); + +static const struct i2c_device_id tas675x_i2c_id[] = { + {"tas6754" ,TAS6754 }, + {"tas67524" ,TAS6754 },
... and this ^^^ clearly states devices are compatible, unlike your binding is stating
Review
Quoted 1 line
(quoted diff) +1
-0+ { }
Best regards,
Krzysztof
Mark Brown
maintainerRe: [PATCH v2 2/4] ASoC: codecs: Add TAS675x quad-channel audio amplifier driver
In reply to Sen WangQuoted 3 lines · Sen Wang
The TAS675x (TAS6754, TAS67524) are quad-channel, digital-input Class-D amplifiers with an integrated DSP, controlled over I2C. They support I2S and TDM serial audio interfaces.
One issue that didn't get noticed last time, sorry:
sound/soc/codecs/tas675x.c line 1686
Quoted 9 lines
sound/soc/codecs/tas675x.c new file +9
-0+static int tas675x_runtime_suspend (struct device *dev) +{ +struct tas675x_priv *tas =dev_get_drvdata (dev); + +cancel_delayed_work_sync (&tas->fault_check_work); +tas675x_set_state_all (tas,TAS675X_STATE_SLEEP_BOTH ); + +return 0 ; +}
This cancels the work, completing any that's already running, but...
sound/soc/codecs/tas675x.c line 1830
Quoted 11 lines
sound/soc/codecs/tas675x.c new file +11
-0+static void tas675x_fault_check_work (struct work_struct *work) +{ + struct tas675x_priv *tas = container_of(work, struct tas675x_priv, + fault_check_work.work); + +if (tas675x_check_faults (tas)) +regmap_write (tas->regmap,TAS675X_RESET_REG ,TAS675X_FAULT_CLEAR ); + +schedule_delayed_work (&tas->fault_check_work, +msecs_to_jiffies (TAS675X_FAULT_CHECK_INTERVAL_MS )); +}
...the work unconditionally rearms itself so we might race and requeue (we cancel *then* wait) with the device powered off. There's the disable_delayed_work_sync() API which should be a better fit.
sound/soc/codecs/tas675x.c line 1842
Quoted 11 lines
sound/soc/codecs/tas675x.c new file +11
-0+static irqreturn_t tas675x_irq_handler (int irq,void *data) +{ +struct tas675x_priv *tas = data; + +tas675x_check_faults (tas); + +/* Clear the FAULT pin latch as something latched */ +regmap_write (tas->regmap,TAS675X_RESET_REG ,TAS675X_FAULT_CLEAR ); + +return IRQ_HANDLED ; +}
Also, this should return IRQ_NONE if no faults were seen (to allow for interrupt sharing and the genirq core's handling of hardware faults).
Sen Wang
maintainerRe: [PATCH v2 2/4] ASoC: codecs: Add TAS675x quad-channel audio amplifier driver
Quoted 7 lines · Mark Brown
Quoted 3 lines · Sen Wang
The TAS675x (TAS6754, TAS67524) are quad-channel, digital-input Class-D amplifiers with an integrated DSP, controlled over I2C. They support I2S and TDM serial audio interfaces.
One issue that didn't get noticed last time, sorry:
The more the merrier :)
Quoted 12 lines
sound/soc/codecs/tas675x.c line 1686
Quoted 9 lines
sound/soc/codecs/tas675x.c new file +9
-0+static int tas675x_runtime_suspend (struct device *dev) +{ +struct tas675x_priv *tas =dev_get_drvdata (dev); + +cancel_delayed_work_sync (&tas->fault_check_work); +tas675x_set_state_all (tas,TAS675X_STATE_SLEEP_BOTH ); + +return 0 ; +}This cancels the work, completing any that's already running, but...
Quoted 16 lines
sound/soc/codecs/tas675x.c line 1830
Quoted 11 lines
sound/soc/codecs/tas675x.c new file +11
-0+static void tas675x_fault_check_work (struct work_struct *work) +{ + struct tas675x_priv *tas = container_of(work, struct tas675x_priv, + fault_check_work.work); + +if (tas675x_check_faults (tas)) +regmap_write (tas->regmap,TAS675X_RESET_REG ,TAS675X_FAULT_CLEAR ); + +schedule_delayed_work (&tas->fault_check_work, +msecs_to_jiffies (TAS675X_FAULT_CHECK_INTERVAL_MS )); +}...the work unconditionally rearms itself so we might race and requeue (we cancel *then* wait) with the device powered off. There's the
disable_delayed_work_sync()API which should be a better fit.
Right the APIs themselves aren't atomic, disable would be a much less error-prone approach. Looks like TAS5720 & TAS6424 has a similar issue too, where they have cancel work at DAPM events instead of runtime suspend. I can test and send these changes in a separate patch.
Quoted 6 lines
Quoted 6 lines
sound/soc/codecs/tas675x.c new file +6
-0+static irqreturn_t tas675x_irq_handler (int irq,void *data) +{ +struct tas675x_priv *tas = data; + +tas675x_check_faults (tas); +
Quoted 8 lines
sound/soc/codecs/tas675x.c line 1842
Quoted 5 lines
sound/soc/codecs/tas675x.c new file +5
-0+/* Clear the FAULT pin latch as something latched */ +regmap_write (tas->regmap,TAS675X_RESET_REG ,TAS675X_FAULT_CLEAR ); + +return IRQ_HANDLED ; +}Also, this should return
IRQ_NONEif no faults were seen (to allow for interrupt sharing and the genirq core's handling of hardware faults).
Understood, thank you for the context, didn't know IRQ_NONE provides additional heuristics to irq core. Will post a follow-up V3 addressing the issues.
Best,
Sen Wang
Sen Wang
maintainerPATCH v2 3/4 Documentation: sound: Add TAS675x codec mixer controls documentation
In reply to Sen WangAdd ALSA mixer controls documentation for the TAS675x driver, covering DSP signal path modes, volume controls, load diagnostics, and fault monitoring.
--- Documentation/sound/codecs/index.rst | 1 + Documentation/sound/codecs/tas675x.rst | 618 +++++++++++++++++++++++++ 2 files changed, 619 insertions(+) create mode 100644 Documentation/sound/codecs/tas675x.rst
Documentation/sound/codecs/index.rst +1 -0
@@ -7,3 +7,4 @@ Codec-Specific Information :maxdepth: 2 cs35l56 + tas675x
Documentation/sound/codecs/tas675x.rst new file +618 -0
618 lines not on this page · raw message
Signature · 1 line
2.43.0
Sen Wang
maintainerPATCH v2 4/4 MAINTAINERS: add entry for TAS675x audio amplifier
In reply to Sen WangAdd Sen Wang as maintainer and register file patterns for the newly added TAS675x quad-channel amplifier driver.
--- MAINTAINERS | 4 ++++ 1 file changed, 4 insertions(+)
MAINTAINERS +4 -0
@@ -26191,17 +26191,20 @@ TEXAS INSTRUMENTS AUDIO (ASoC/HDA) DRIVERS M: Shenghao Ding <[email protected]> M: Kevin Lu <[email protected]> M: Baojun Xu <[email protected]> +M: Sen Wang <[email protected]> L: [email protected] S: Maintained F: Documentation/devicetree/bindings/sound/ti,tas2552.yaml F: Documentation/devicetree/bindings/sound/ti,tas2562.yaml F: Documentation/devicetree/bindings/sound/ti,tas2770.yaml F: Documentation/devicetree/bindings/sound/ti,tas27xx.yaml +F: Documentation/devicetree/bindings/sound/ti,tas675x.yaml F: Documentation/devicetree/bindings/sound/ti,tpa6130a2.yaml F: Documentation/devicetree/bindings/sound/ti,pcm1681.yaml F: Documentation/devicetree/bindings/sound/ti,pcm3168a.yaml F: Documentation/devicetree/bindings/sound/ti,tlv320*.yaml F: Documentation/devicetree/bindings/sound/ti,tlv320adcx140.yaml +F: Documentation/sound/codecs/tas675* F: include/sound/tas2*.h F: include/sound/tlv320*.h F: sound/hda/codecs/side-codecs/tas2781_hda_i2c.c
@@ -26215,6 +26218,7 @@ F: sound/soc/codecs/pcm3168a*.* F: sound/soc/codecs/pcm5102a.c F: sound/soc/codecs/pcm512x*.* F: sound/soc/codecs/tas2*.* +F: sound/soc/codecs/tas675*.* F: sound/soc/codecs/tlv320*.* F: sound/soc/codecs/tpa6130a2.*
Signature · 1 line
2.43.0