ASoC: dt-bindings: davinci-mcasp: Add properties for asynchronous mode

McASP supports the independent configuration of TX & RX clk and frame
sync registers. By default, the driver is configured in synchronous mode
where RX clock generator is disabled and it uses transmit clock signals as
bit clock and frame sync. Therefore add optional properties needed for
asynchronous mode.

Add ti,async-mode boolean binding to provide a way to decouple the default
behavior and allows for independent TX & RX clocking.

Add tdm-slots-rx uint32 binding to provide an alternative hardware
specifier stating the number of RX serializers.
The existing property tdm-slots will still dictate number of
TX serializers, and RX if tdm-slots-rx isn't given for backwards
compatibility.

Add auxclk-fs-ratio-rx which allows to specify the ratio just for RX.
The driver can be supplied with two different ratios
(auxclk-fs-ratio and auxclk-fs-ratio-rx in tandem) and achieve two
different sampling rates for tx & rx.

Signed-off-by: Sen Wang <sen@ti.com>
Acked-by: Peter Ujfalusi <peter.ujfalusi@gmail.com>
Tested-by: Paresh Bhagat <p-bhagat@ti.com>
Link: https://patch.msgid.link/20260203003703.2334443-2-sen@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Sen Wang 2026-02-02 18:37:00 -06:00 committed by Mark Brown
parent dcf0470aa3
commit f1ef70a4a3
No known key found for this signature in database
GPG key ID: 24D68B725D5487D0

View file

@ -40,11 +40,33 @@ properties:
tdm-slots:
$ref: /schemas/types.yaml#/definitions/uint32
description:
number of channels over one serializer
the property is ignored in DIT mode
Number of channels over one serializer. This property
specifies the TX playback TDM slot count, along with default RX slot count
if tdm-slots-rx is not specified.
The property is ignored in DIT mode.
minimum: 2
maximum: 32
tdm-slots-rx:
$ref: /schemas/types.yaml#/definitions/uint32
description:
Number of RX capture channels over one serializer. If specified,
allows independent RX TDM slot count separate from TX. Requires
ti,async-mode to be enabled for independent TX/RX clock rates.
The property is ignored in DIT mode.
minimum: 2
maximum: 32
ti,async-mode:
description:
Specify to allow independent TX & RX clocking,
to enable audio playback & record with different sampling rate,
and different number of bits per frame.
if property is omitted, TX and RX will share same bit clock and frame clock signals,
thus RX need to use same bits per frame and sampling rate as TX in synchronous mode.
the property is ignored in DIT mode (as DIT is TX-only)
type: boolean
serial-dir:
description:
A list of serializer configuration
@ -125,7 +147,21 @@ properties:
auxclk-fs-ratio:
$ref: /schemas/types.yaml#/definitions/uint32
description: ratio of AUCLK and FS rate if applicable
description:
Ratio of AUCLK and FS rate if applicable. This property specifies
the TX ratio, along with default RX ratio if auxclk-fs-ratio-rx
is not specified.
When not specified, the inputted system clock frequency via set_sysclk
callback by the machine driver is used for divider calculation.
auxclk-fs-ratio-rx:
$ref: /schemas/types.yaml#/definitions/uint32
description:
Ratio of AUCLK and FS rate for RX. If specified, allows
for a different RX ratio. Requires ti,async-mode to be
enabled when the ratio differs from auxclk-fs-ratio.
When not specified, it defaults to the value of auxclk-fs-ratio.
The property is ignored in DIT mode.
gpio-controller: true
@ -170,14 +206,38 @@ allOf:
- $ref: dai-common.yaml#
- if:
properties:
opmode:
op-mode:
enum:
- 0
then:
required:
- tdm-slots
- if:
properties:
op-mode:
const: 1
then:
properties:
tdm-slots: false
tdm-slots-rx: false
ti,async-mode: false
auxclk-fs-ratio-rx: false
- if:
required:
- tdm-slots-rx
then:
required:
- ti,async-mode
- if:
required:
- auxclk-fs-ratio-rx
then:
required:
- ti,async-mode
unevaluatedProperties: false
examples:
@ -190,6 +250,7 @@ examples:
interrupt-names = "tx", "rx";
op-mode = <0>; /* MCASP_IIS_MODE */
tdm-slots = <2>;
ti,async-mode;
dmas = <&main_udmap 0xc400>, <&main_udmap 0x4400>;
dma-names = "tx", "rx";
serial-dir = <