mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
Add new compatible string 'fsl,imx952-asrc' for i.MX952 platform, below are the differences that make this ASRC not fallback compatible with other platforms. 1) There is a power domain on i.MX952 for the wakeupmix system where ASRC is in. But it is enabled by default, ASRC device don't need to enable it, so it is optional for i.MX952. 2) The clock sources of ASRC are different on i.MX952. 3) There is a limitation on i.MX952 that DMA request is not cleared at the end of conversion with dma slave mode. Which causes sample is dropped from the input fifo on the second time if DMA is triggered before the client device and DMA may copy wrong data from output fifo as the output fifo is not ready in the beginning. So there is specially handling in the driver. Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com> Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com> Link: https://patch.msgid.link/20260206014805.3897764-2-shengjiu.wang@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
191 lines
4.8 KiB
YAML
191 lines
4.8 KiB
YAML
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
|
%YAML 1.2
|
|
---
|
|
$id: http://devicetree.org/schemas/sound/fsl,imx-asrc.yaml#
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
title: Freescale Asynchronous Sample Rate Converter (ASRC) Controller
|
|
|
|
description:
|
|
The Asynchronous Sample Rate Converter (ASRC) converts the sampling rate of
|
|
a signal associated with an input clock into a signal associated with a
|
|
different output clock. The driver currently works as a Front End of DPCM
|
|
with other Back Ends Audio controller such as ESAI, SSI and SAI. It has
|
|
three pairs to support three substreams within totally 10 channels.
|
|
|
|
maintainers:
|
|
- Shawn Guo <shawnguo@kernel.org>
|
|
- Sascha Hauer <s.hauer@pengutronix.de>
|
|
|
|
properties:
|
|
compatible:
|
|
oneOf:
|
|
- enum:
|
|
- fsl,imx35-asrc
|
|
- fsl,imx53-asrc
|
|
- fsl,imx8qm-asrc
|
|
- fsl,imx8qxp-asrc
|
|
- fsl,imx952-asrc
|
|
- items:
|
|
- enum:
|
|
- fsl,imx6sx-asrc
|
|
- fsl,imx6ul-asrc
|
|
- const: fsl,imx53-asrc
|
|
|
|
reg:
|
|
maxItems: 1
|
|
|
|
interrupts:
|
|
maxItems: 1
|
|
|
|
dmas:
|
|
maxItems: 6
|
|
|
|
dma-names:
|
|
items:
|
|
- const: rxa
|
|
- const: rxb
|
|
- const: rxc
|
|
- const: txa
|
|
- const: txb
|
|
- const: txc
|
|
|
|
clocks:
|
|
maxItems: 19
|
|
|
|
clock-names:
|
|
items:
|
|
- const: mem
|
|
- const: ipg
|
|
- const: asrck_0
|
|
- const: asrck_1
|
|
- const: asrck_2
|
|
- const: asrck_3
|
|
- const: asrck_4
|
|
- const: asrck_5
|
|
- const: asrck_6
|
|
- const: asrck_7
|
|
- const: asrck_8
|
|
- const: asrck_9
|
|
- const: asrck_a
|
|
- const: asrck_b
|
|
- const: asrck_c
|
|
- const: asrck_d
|
|
- const: asrck_e
|
|
- const: asrck_f
|
|
- const: spba
|
|
|
|
power-domains:
|
|
maxItems: 1
|
|
|
|
port:
|
|
$ref: audio-graph-port.yaml#
|
|
unevaluatedProperties: false
|
|
|
|
fsl,asrc-rate:
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
description: The mutual sample rate used by DPCM Back Ends
|
|
|
|
fsl,asrc-width:
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
description: The mutual sample width used by DPCM Back Ends
|
|
enum: [16, 24]
|
|
|
|
fsl,asrc-clk-map:
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
description:
|
|
Defines clock map used in driver
|
|
<0> - select the map for asrc0 in imx8qm/imx8qxp
|
|
<1> - select the map for asrc1 in imx8qm/imx8qxp
|
|
enum: [0, 1]
|
|
|
|
big-endian:
|
|
type: boolean
|
|
description:
|
|
If this property is absent, the little endian mode will be in use as
|
|
default. Otherwise, the big endian mode will be in use for all the
|
|
device registers.
|
|
|
|
fsl,asrc-format:
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
description:
|
|
Defines a mutual sample format used by DPCM Back Ends, which can
|
|
replace the fsl,asrc-width. The value is 2 (S16_LE), or 6 (S24_LE).
|
|
enum: [2, 6]
|
|
|
|
required:
|
|
- compatible
|
|
- reg
|
|
- interrupts
|
|
- dmas
|
|
- dma-names
|
|
- clocks
|
|
- clock-names
|
|
- fsl,asrc-rate
|
|
- fsl,asrc-width
|
|
|
|
allOf:
|
|
- $ref: dai-common.yaml#
|
|
- if:
|
|
properties:
|
|
compatible:
|
|
contains:
|
|
enum:
|
|
- fsl,imx8qm-asrc
|
|
- fsl,imx8qxp-asrc
|
|
then:
|
|
required:
|
|
- fsl,asrc-clk-map
|
|
else:
|
|
properties:
|
|
fsl,asrc-clk-map: false
|
|
|
|
- if:
|
|
properties:
|
|
compatible:
|
|
contains:
|
|
enum:
|
|
- fsl,imx8qm-asrc
|
|
- fsl,imx8qxp-asrc
|
|
then:
|
|
required:
|
|
- power-domains
|
|
|
|
unevaluatedProperties: false
|
|
|
|
examples:
|
|
- |
|
|
#include <dt-bindings/interrupt-controller/irq.h>
|
|
#include <dt-bindings/clock/imx6qdl-clock.h>
|
|
asrc: asrc@2034000 {
|
|
compatible = "fsl,imx53-asrc";
|
|
reg = <0x02034000 0x4000>;
|
|
interrupts = <0 50 IRQ_TYPE_LEVEL_HIGH>;
|
|
clocks = <&clks IMX6QDL_CLK_ASRC_IPG>,
|
|
<&clks IMX6QDL_CLK_ASRC_MEM>, <&clks 0>,
|
|
<&clks 0>, <&clks 0>, <&clks 0>, <&clks 0>,
|
|
<&clks 0>, <&clks 0>, <&clks 0>, <&clks 0>,
|
|
<&clks 0>, <&clks 0>, <&clks 0>, <&clks 0>,
|
|
<&clks IMX6QDL_CLK_ASRC>, <&clks 0>, <&clks 0>,
|
|
<&clks IMX6QDL_CLK_SPBA>;
|
|
clock-names = "mem", "ipg", "asrck_0",
|
|
"asrck_1", "asrck_2", "asrck_3", "asrck_4",
|
|
"asrck_5", "asrck_6", "asrck_7", "asrck_8",
|
|
"asrck_9", "asrck_a", "asrck_b", "asrck_c",
|
|
"asrck_d", "asrck_e", "asrck_f", "spba";
|
|
dmas = <&sdma 17 23 1>, <&sdma 18 23 1>, <&sdma 19 23 1>,
|
|
<&sdma 20 23 1>, <&sdma 21 23 1>, <&sdma 22 23 1>;
|
|
dma-names = "rxa", "rxb", "rxc",
|
|
"txa", "txb", "txc";
|
|
fsl,asrc-rate = <48000>;
|
|
fsl,asrc-width = <16>;
|
|
|
|
port {
|
|
playback-only;
|
|
|
|
asrc_endpoint: endpoint {
|
|
remote-endpoint = <&fe00_ep>;
|
|
};
|
|
};
|
|
};
|