[PATCH v4 0/7] Patches to update for rockchip pdm
These patches fixup or update for rockchip pdm.
Changes in v4: - Acked by Rob Herring
Changes in v3: - Fix property 'path-map' suggested by Rob Herring.
Changes in v2: - Fix yamllint errors.
Sugar Zhang (7): ASoC: rockchip: Add support for rv1126 pdm ASoC: dt-bindings: rockchip: Add binding for rv1126 pdm ASoC: rockchip: pdm: Add support for rk3568 pdm ASoC: dt-bindings: rockchip: Add binding for rk3568 pdm ASoC: rockchip: pdm: Add support for path map ASoC: dt-bindings: rockchip: pdm: Document property 'rockchip,path-map' ASoC: dt-bindings: rockchip: Convert pdm bindings to yaml
.../devicetree/bindings/sound/rockchip,pdm.txt | 46 -------- .../devicetree/bindings/sound/rockchip,pdm.yaml | 120 +++++++++++++++++++++ sound/soc/rockchip/rockchip_pdm.c | 112 +++++++++++++++++-- sound/soc/rockchip/rockchip_pdm.h | 6 ++ 4 files changed, 232 insertions(+), 52 deletions(-) delete mode 100644 Documentation/devicetree/bindings/sound/rockchip,pdm.txt create mode 100644 Documentation/devicetree/bindings/sound/rockchip,pdm.yaml
This patch adds support for rv1126 pdm controller which redesign cic filiter for better performance.
Signed-off-by: Sugar Zhang sugar.zhang@rock-chips.com ---
Changes in v4: None Changes in v3: None Changes in v2: None
sound/soc/rockchip/rockchip_pdm.c | 76 +++++++++++++++++++++++++++++++++++---- sound/soc/rockchip/rockchip_pdm.h | 3 ++ 2 files changed, 73 insertions(+), 6 deletions(-)
diff --git a/sound/soc/rockchip/rockchip_pdm.c b/sound/soc/rockchip/rockchip_pdm.c index 38bd603..67634d1 100644 --- a/sound/soc/rockchip/rockchip_pdm.c +++ b/sound/soc/rockchip/rockchip_pdm.c @@ -24,6 +24,7 @@ enum rk_pdm_version { RK_PDM_RK3229, RK_PDM_RK3308, + RK_PDM_RV1126, };
struct rk_pdm_dev { @@ -121,6 +122,55 @@ static unsigned int get_pdm_ds_ratio(unsigned int sr) return ratio; }
+static unsigned int get_pdm_cic_ratio(unsigned int clk) +{ + switch (clk) { + case 4096000: + case 5644800: + case 6144000: + return 0; + case 2048000: + case 2822400: + case 3072000: + return 1; + case 1024000: + case 1411200: + case 1536000: + return 2; + default: + return 1; + } +} + +static unsigned int samplerate_to_bit(unsigned int samplerate) +{ + switch (samplerate) { + case 8000: + case 11025: + case 12000: + return 0; + case 16000: + case 22050: + case 24000: + return 1; + case 32000: + return 2; + case 44100: + case 48000: + return 3; + case 64000: + case 88200: + case 96000: + return 4; + case 128000: + case 176400: + case 192000: + return 5; + default: + return 1; + } +} + static inline struct rk_pdm_dev *to_info(struct snd_soc_dai *dai) { return snd_soc_dai_get_drvdata(dai); @@ -166,7 +216,8 @@ static int rockchip_pdm_hw_params(struct snd_pcm_substream *substream, if (ret) return -EINVAL;
- if (pdm->version == RK_PDM_RK3308) { + if (pdm->version == RK_PDM_RK3308 || + pdm->version == RK_PDM_RV1126) { rational_best_approximation(clk_out, clk_src, GENMASK(16 - 1, 0), GENMASK(16 - 1, 0), @@ -194,8 +245,18 @@ static int rockchip_pdm_hw_params(struct snd_pcm_substream *substream, PDM_CLK_FD_RATIO_MSK, val); } - val = get_pdm_ds_ratio(samplerate); - regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_DS_RATIO_MSK, val); + + if (pdm->version == RK_PDM_RV1126) { + val = get_pdm_cic_ratio(clk_out); + regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_CIC_RATIO_MSK, val); + val = samplerate_to_bit(samplerate); + regmap_update_bits(pdm->regmap, PDM_CTRL0, + PDM_SAMPLERATE_MSK, PDM_SAMPLERATE(val)); + } else { + val = get_pdm_ds_ratio(samplerate); + regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_DS_RATIO_MSK, val); + } + regmap_update_bits(pdm->regmap, PDM_HPF_CTRL, PDM_HPF_CF_MSK, PDM_HPF_60HZ); regmap_update_bits(pdm->regmap, PDM_HPF_CTRL, @@ -441,9 +502,10 @@ static bool rockchip_pdm_precious_reg(struct device *dev, unsigned int reg) }
static const struct reg_default rockchip_pdm_reg_defaults[] = { - {0x04, 0x78000017}, - {0x08, 0x0bb8ea60}, - {0x18, 0x0000001f}, + { PDM_CTRL0, 0x78000017 }, + { PDM_CTRL1, 0x0bb8ea60 }, + { PDM_CLK_CTRL, 0x0000e401 }, + { PDM_DMA_CTRL, 0x0000001f }, };
static const struct regmap_config rockchip_pdm_regmap_config = { @@ -469,6 +531,8 @@ static const struct of_device_id rockchip_pdm_match[] __maybe_unused = { .data = (void *)RK_PDM_RK3308 }, { .compatible = "rockchip,rk3308-pdm", .data = (void *)RK_PDM_RK3308 }, + { .compatible = "rockchip,rv1126-pdm", + .data = (void *)RK_PDM_RV1126 }, {}, }; MODULE_DEVICE_TABLE(of, rockchip_pdm_match); diff --git a/sound/soc/rockchip/rockchip_pdm.h b/sound/soc/rockchip/rockchip_pdm.h index 8e5bbaf..13bfbc2 100644 --- a/sound/soc/rockchip/rockchip_pdm.h +++ b/sound/soc/rockchip/rockchip_pdm.h @@ -41,6 +41,8 @@ #define PDM_PATH1_EN BIT(28) #define PDM_PATH0_EN BIT(27) #define PDM_HWT_EN BIT(26) +#define PDM_SAMPLERATE_MSK GENMASK(7, 5) +#define PDM_SAMPLERATE(x) ((x) << 5) #define PDM_VDW_MSK (0x1f << 0) #define PDM_VDW(X) ((X - 1) << 0)
@@ -66,6 +68,7 @@ #define PDM_CLK_1280FS (0x2 << 0) #define PDM_CLK_2560FS (0x3 << 0) #define PDM_CLK_5120FS (0x4 << 0) +#define PDM_CIC_RATIO_MSK (0x3 << 0)
/* PDM HPF CTRL */ #define PDM_HPF_LE BIT(3)
Hi Sugar Zhang,
Sorry to dig out this old thread, but I have two questions. Please see below:
On 9/3/21 15:23, Sugar Zhang wrote:
This patch adds support for rv1126 pdm controller which redesign cic filiter for better performance.
Signed-off-by: Sugar Zhang sugar.zhang@rock-chips.com
Changes in v4: None Changes in v3: None Changes in v2: None
sound/soc/rockchip/rockchip_pdm.c | 76 +++++++++++++++++++++++++++++++++++---- sound/soc/rockchip/rockchip_pdm.h | 3 ++ 2 files changed, 73 insertions(+), 6 deletions(-)
diff --git a/sound/soc/rockchip/rockchip_pdm.c b/sound/soc/rockchip/rockchip_pdm.c index 38bd603..67634d1 100644 --- a/sound/soc/rockchip/rockchip_pdm.c +++ b/sound/soc/rockchip/rockchip_pdm.c @@ -24,6 +24,7 @@ enum rk_pdm_version { RK_PDM_RK3229, RK_PDM_RK3308,
- RK_PDM_RV1126,
};
struct rk_pdm_dev { @@ -121,6 +122,55 @@ static unsigned int get_pdm_ds_ratio(unsigned int sr) return ratio; }
+static unsigned int get_pdm_cic_ratio(unsigned int clk) +{
- switch (clk) {
- case 4096000:
- case 5644800:
- case 6144000:
return 0;
- case 2048000:
- case 2822400:
- case 3072000:
return 1;
- case 1024000:
- case 1411200:
- case 1536000:
return 2;
- default:
return 1;
- }
+}
+static unsigned int samplerate_to_bit(unsigned int samplerate) +{
- switch (samplerate) {
- case 8000:
- case 11025:
- case 12000:
return 0;
- case 16000:
- case 22050:
- case 24000:
return 1;
- case 32000:
return 2;
- case 44100:
- case 48000:
return 3;
- case 64000:
- case 88200:
- case 96000:
return 4;
- case 128000:
- case 176400:
- case 192000:
return 5;
- default:
return 1;
- }
+}
static inline struct rk_pdm_dev *to_info(struct snd_soc_dai *dai) { return snd_soc_dai_get_drvdata(dai); @@ -166,7 +216,8 @@ static int rockchip_pdm_hw_params(struct snd_pcm_substream *substream, if (ret) return -EINVAL;
- if (pdm->version == RK_PDM_RK3308) {
- if (pdm->version == RK_PDM_RK3308 ||
rational_best_approximation(clk_out, clk_src, GENMASK(16 - 1, 0), GENMASK(16 - 1, 0),pdm->version == RK_PDM_RV1126) {
@@ -194,8 +245,18 @@ static int rockchip_pdm_hw_params(struct snd_pcm_substream *substream, PDM_CLK_FD_RATIO_MSK, val); }
- val = get_pdm_ds_ratio(samplerate);
- regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_DS_RATIO_MSK, val);
- if (pdm->version == RK_PDM_RV1126) {
val = get_pdm_cic_ratio(clk_out);
regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_CIC_RATIO_MSK, val);
val = samplerate_to_bit(samplerate);
regmap_update_bits(pdm->regmap, PDM_CTRL0,
PDM_SAMPLERATE_MSK, PDM_SAMPLERATE(val));
- } else {
val = get_pdm_ds_ratio(samplerate);
regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, PDM_DS_RATIO_MSK, val);
- }
- regmap_update_bits(pdm->regmap, PDM_HPF_CTRL, PDM_HPF_CF_MSK, PDM_HPF_60HZ); regmap_update_bits(pdm->regmap, PDM_HPF_CTRL,
@@ -441,9 +502,10 @@ static bool rockchip_pdm_precious_reg(struct device *dev, unsigned int reg) }
static const struct reg_default rockchip_pdm_reg_defaults[] = {
- {0x04, 0x78000017},
- {0x08, 0x0bb8ea60},
- {0x18, 0x0000001f},
- { PDM_CTRL0, 0x78000017 },
- { PDM_CTRL1, 0x0bb8ea60 },
- { PDM_CLK_CTRL, 0x0000e401 },
- { PDM_DMA_CTRL, 0x0000001f },
};
static const struct regmap_config rockchip_pdm_regmap_config = { @@ -469,6 +531,8 @@ static const struct of_device_id rockchip_pdm_match[] __maybe_unused = { .data = (void *)RK_PDM_RK3308 }, { .compatible = "rockchip,rk3308-pdm", .data = (void *)RK_PDM_RK3308 },
- { .compatible = "rockchip,rv1126-pdm",
{},.data = (void *)RK_PDM_RV1126 },
}; MODULE_DEVICE_TABLE(of, rockchip_pdm_match); diff --git a/sound/soc/rockchip/rockchip_pdm.h b/sound/soc/rockchip/rockchip_pdm.h index 8e5bbaf..13bfbc2 100644 --- a/sound/soc/rockchip/rockchip_pdm.h +++ b/sound/soc/rockchip/rockchip_pdm.h @@ -41,6 +41,8 @@ #define PDM_PATH1_EN BIT(28) #define PDM_PATH0_EN BIT(27) #define PDM_HWT_EN BIT(26) +#define PDM_SAMPLERATE_MSK GENMASK(7, 5) +#define PDM_SAMPLERATE(x) ((x) << 5) #define PDM_VDW_MSK (0x1f << 0) #define PDM_VDW(X) ((X - 1) << 0)
The TRM of RV1126 and RK3568 both state that sample resolutions from 16 up to 24 bits are supported. However, I don't see anything in this patch that restricts the capture formats accordingly. In fact, the driver offers SNDRV_PCM_FMTBIT_S32_LE in my setup and via this PDM_VDW macro 31 is written to PDM_CTRL0, which is undefined behavior according to the TRM.
Are 32 bit samples supported by the RK3568/RV1126 PDM block?
@@ -66,6 +68,7 @@ #define PDM_CLK_1280FS (0x2 << 0) #define PDM_CLK_2560FS (0x3 << 0) #define PDM_CLK_5120FS (0x4 << 0) +#define PDM_CIC_RATIO_MSK (0x3 << 0)
/* PDM HPF CTRL */ #define PDM_HPF_LE BIT(3)
Also, I noticed that the number of channels must be an even number. Shouldn't it be possible to use a single mono PDM microphone with this PDM block (i.e., having one channel)?
Thanks a lot and best regards, Michael
This patch documents for rv1126 pdm.
Signed-off-by: Sugar Zhang sugar.zhang@rock-chips.com Acked-by: Rob Herring robh@kernel.org ---
Changes in v4: None Changes in v3: None Changes in v2: None
Documentation/devicetree/bindings/sound/rockchip,pdm.txt | 1 + 1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/sound/rockchip,pdm.txt b/Documentation/devicetree/bindings/sound/rockchip,pdm.txt index 98572a2..60e8630 100644 --- a/Documentation/devicetree/bindings/sound/rockchip,pdm.txt +++ b/Documentation/devicetree/bindings/sound/rockchip,pdm.txt @@ -6,6 +6,7 @@ Required properties: - "rockchip,px30-pdm" - "rockchip,rk1808-pdm" - "rockchip,rk3308-pdm" + - "rockchip,rv1126-pdm" - reg: physical base address of the controller and length of memory mapped region. - dmas: DMA specifiers for rx dma. See the DMA client binding,
This patch adds compatible for rk3568 which is the same with rv1126.
Signed-off-by: Sugar Zhang sugar.zhang@rock-chips.com ---
Changes in v4: None Changes in v3: None Changes in v2: None
sound/soc/rockchip/rockchip_pdm.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/sound/soc/rockchip/rockchip_pdm.c b/sound/soc/rockchip/rockchip_pdm.c index 67634d1..f2bf023 100644 --- a/sound/soc/rockchip/rockchip_pdm.c +++ b/sound/soc/rockchip/rockchip_pdm.c @@ -531,6 +531,8 @@ static const struct of_device_id rockchip_pdm_match[] __maybe_unused = { .data = (void *)RK_PDM_RK3308 }, { .compatible = "rockchip,rk3308-pdm", .data = (void *)RK_PDM_RK3308 }, + { .compatible = "rockchip,rk3568-pdm", + .data = (void *)RK_PDM_RV1126 }, { .compatible = "rockchip,rv1126-pdm", .data = (void *)RK_PDM_RV1126 }, {},
This patch documents for rk3568 pdm.
Signed-off-by: Sugar Zhang sugar.zhang@rock-chips.com Acked-by: Rob Herring robh@kernel.org ---
Changes in v4: None Changes in v3: None Changes in v2: None
Documentation/devicetree/bindings/sound/rockchip,pdm.txt | 1 + 1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/sound/rockchip,pdm.txt b/Documentation/devicetree/bindings/sound/rockchip,pdm.txt index 60e8630..54d94438 100644 --- a/Documentation/devicetree/bindings/sound/rockchip,pdm.txt +++ b/Documentation/devicetree/bindings/sound/rockchip,pdm.txt @@ -6,6 +6,7 @@ Required properties: - "rockchip,px30-pdm" - "rockchip,rk1808-pdm" - "rockchip,rk3308-pdm" + - "rockchip,rk3568-pdm" - "rockchip,rv1126-pdm" - reg: physical base address of the controller and length of memory mapped region.
This patch adds property 'rockchip,path-map' for path mapping.
e.g.
"rockchip,path-map = <3 2 1 0>" means the mapping as follows:
path0 <-- sdi3 path1 <-- sdi2 path2 <-- sdi1 path3 <-- sdi0
Signed-off-by: Sugar Zhang sugar.zhang@rock-chips.com ---
Changes in v4: None Changes in v3: None Changes in v2: None
sound/soc/rockchip/rockchip_pdm.c | 34 ++++++++++++++++++++++++++++++++++ sound/soc/rockchip/rockchip_pdm.h | 3 +++ 2 files changed, 37 insertions(+)
diff --git a/sound/soc/rockchip/rockchip_pdm.c b/sound/soc/rockchip/rockchip_pdm.c index f2bf023..64d9891 100644 --- a/sound/soc/rockchip/rockchip_pdm.c +++ b/sound/soc/rockchip/rockchip_pdm.c @@ -20,6 +20,7 @@
#define PDM_DMA_BURST_SIZE (8) /* size * width: 8*4 = 32 bytes */ #define PDM_SIGNOFF_CLK_RATE (100000000) +#define PDM_PATH_MAX (4)
enum rk_pdm_version { RK_PDM_RK3229, @@ -539,8 +540,36 @@ static const struct of_device_id rockchip_pdm_match[] __maybe_unused = { }; MODULE_DEVICE_TABLE(of, rockchip_pdm_match);
+static int rockchip_pdm_path_parse(struct rk_pdm_dev *pdm, struct device_node *node) +{ + unsigned int path[PDM_PATH_MAX]; + int cnt = 0, ret = 0, i = 0, val = 0, msk = 0; + + cnt = of_count_phandle_with_args(node, "rockchip,path-map", + NULL); + if (cnt != PDM_PATH_MAX) + return cnt; + + ret = of_property_read_u32_array(node, "rockchip,path-map", + path, cnt); + if (ret) + return ret; + + for (i = 0; i < cnt; i++) { + if (path[i] >= PDM_PATH_MAX) + return -EINVAL; + msk |= PDM_PATH_MASK(i); + val |= PDM_PATH(i, path[i]); + } + + regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, msk, val); + + return 0; +} + static int rockchip_pdm_probe(struct platform_device *pdev) { + struct device_node *node = pdev->dev.of_node; const struct of_device_id *match; struct rk_pdm_dev *pdm; struct resource *res; @@ -606,6 +635,11 @@ static int rockchip_pdm_probe(struct platform_device *pdev) }
rockchip_pdm_rxctrl(pdm, 0); + + ret = rockchip_pdm_path_parse(pdm, node); + if (ret != 0 && ret != -ENOENT) + goto err_suspend; + ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0); if (ret) { dev_err(&pdev->dev, "could not register pcm: %d\n", ret); diff --git a/sound/soc/rockchip/rockchip_pdm.h b/sound/soc/rockchip/rockchip_pdm.h index 13bfbc2..cab9772 100644 --- a/sound/soc/rockchip/rockchip_pdm.h +++ b/sound/soc/rockchip/rockchip_pdm.h @@ -53,6 +53,9 @@ #define PDM_FD_DENOMINATOR_MSK GENMASK(15, 0)
/* PDM CLK CTRL */ +#define PDM_PATH_SHIFT(x) (8 + (x) * 2) +#define PDM_PATH_MASK(x) (0x3 << PDM_PATH_SHIFT(x)) +#define PDM_PATH(x, v) ((v) << PDM_PATH_SHIFT(x)) #define PDM_CLK_FD_RATIO_MSK BIT(6) #define PDM_CLK_FD_RATIO_40 (0X0 << 6) #define PDM_CLK_FD_RATIO_35 BIT(6)
This is an optional property to describe data path mapping.
Signed-off-by: Sugar Zhang sugar.zhang@rock-chips.com Acked-by: Rob Herring robh@kernel.org ---
Changes in v4: None Changes in v3: None Changes in v2: None
Documentation/devicetree/bindings/sound/rockchip,pdm.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
diff --git a/Documentation/devicetree/bindings/sound/rockchip,pdm.txt b/Documentation/devicetree/bindings/sound/rockchip,pdm.txt index 54d94438..b2d7e47 100644 --- a/Documentation/devicetree/bindings/sound/rockchip,pdm.txt +++ b/Documentation/devicetree/bindings/sound/rockchip,pdm.txt @@ -24,6 +24,22 @@ Required properties: pinctrl-names. See ../pinctrl/pinctrl-bindings.txt for details of the property values.
+Optional properties: +- rockchip,path-map: This is a variable length array, that shows the mapping + of SDIx to PATHx. By default, they are one-to-one mapping as follows: + + path0 <-- sdi0 + path1 <-- sdi1 + path2 <-- sdi2 + path3 <-- sdi3 + + e.g. "rockchip,path-map = <3 2 1 0>" means the mapping as follows: + + path0 <-- sdi3 + path1 <-- sdi2 + path2 <-- sdi1 + path3 <-- sdi0 + Example for rk3328 PDM controller:
pdm: pdm@ff040000 {
This patch converts pdm bindings to yaml.
Signed-off-by: Sugar Zhang sugar.zhang@rock-chips.com Reviewed-by: Rob Herring robh@kernel.org ---
Changes in v4: - Acked by Rob Herring
Changes in v3: - Fix property 'path-map' suggested by Rob Herring.
Changes in v2: - Fix yamllint errors.
.../devicetree/bindings/sound/rockchip,pdm.txt | 64 ----------- .../devicetree/bindings/sound/rockchip,pdm.yaml | 120 +++++++++++++++++++++ 2 files changed, 120 insertions(+), 64 deletions(-) delete mode 100644 Documentation/devicetree/bindings/sound/rockchip,pdm.txt create mode 100644 Documentation/devicetree/bindings/sound/rockchip,pdm.yaml
diff --git a/Documentation/devicetree/bindings/sound/rockchip,pdm.txt b/Documentation/devicetree/bindings/sound/rockchip,pdm.txt deleted file mode 100644 index b2d7e47..0000000 --- a/Documentation/devicetree/bindings/sound/rockchip,pdm.txt +++ /dev/null @@ -1,64 +0,0 @@ -* Rockchip PDM controller - -Required properties: - -- compatible: "rockchip,pdm" - - "rockchip,px30-pdm" - - "rockchip,rk1808-pdm" - - "rockchip,rk3308-pdm" - - "rockchip,rk3568-pdm" - - "rockchip,rv1126-pdm" -- reg: physical base address of the controller and length of memory mapped - region. -- dmas: DMA specifiers for rx dma. See the DMA client binding, - Documentation/devicetree/bindings/dma/dma.txt -- dma-names: should include "rx". -- clocks: a list of phandle + clock-specifer pairs, one for each entry in clock-names. -- clock-names: should contain following: - - "pdm_hclk": clock for PDM BUS - - "pdm_clk" : clock for PDM controller -- resets: a list of phandle + reset-specifer paris, one for each entry in reset-names. -- reset-names: reset names, should include "pdm-m". -- pinctrl-names: Must contain a "default" entry. -- pinctrl-N: One property must exist for each entry in - pinctrl-names. See ../pinctrl/pinctrl-bindings.txt - for details of the property values. - -Optional properties: -- rockchip,path-map: This is a variable length array, that shows the mapping - of SDIx to PATHx. By default, they are one-to-one mapping as follows: - - path0 <-- sdi0 - path1 <-- sdi1 - path2 <-- sdi2 - path3 <-- sdi3 - - e.g. "rockchip,path-map = <3 2 1 0>" means the mapping as follows: - - path0 <-- sdi3 - path1 <-- sdi2 - path2 <-- sdi1 - path3 <-- sdi0 - -Example for rk3328 PDM controller: - -pdm: pdm@ff040000 { - compatible = "rockchip,pdm"; - reg = <0x0 0xff040000 0x0 0x1000>; - clocks = <&clk_pdm>, <&clk_gates28 0>; - clock-names = "pdm_clk", "pdm_hclk"; - dmas = <&pdma 16>; - #dma-cells = <1>; - dma-names = "rx"; - pinctrl-names = "default", "sleep"; - pinctrl-0 = <&pdmm0_clk - &pdmm0_sdi0 - &pdmm0_sdi1 - &pdmm0_sdi2 - &pdmm0_sdi3>; - pinctrl-1 = <&pdmm0_clk_sleep - &pdmm0_sdi0_sleep - &pdmm0_sdi1_sleep - &pdmm0_sdi2_sleep - &pdmm0_sdi3_sleep>; -}; diff --git a/Documentation/devicetree/bindings/sound/rockchip,pdm.yaml b/Documentation/devicetree/bindings/sound/rockchip,pdm.yaml new file mode 100644 index 0000000..22e1cf6 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/rockchip,pdm.yaml @@ -0,0 +1,120 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/sound/rockchip,pdm.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Rockchip PDM controller + +description: + The Pulse Density Modulation Interface Controller (PDMC) is + a PDM interface controller and decoder that support PDM format. + It integrates a clock generator driving the PDM microphone + and embeds filters which decimate the incoming bit stream to + obtain most common audio rates. + +maintainers: + - Heiko Stuebner heiko@sntech.de + +properties: + compatible: + enum: + - rockchip,pdm + - rockchip,px30-pdm + - rockchip,rk1808-pdm + - rockchip,rk3308-pdm + - rockchip,rk3568-pdm + - rockchip,rv1126-pdm + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + clocks: + items: + - description: clock for PDM controller + - description: clock for PDM BUS + + clock-names: + items: + - const: pdm_clk + - const: pdm_hclk + + dmas: + maxItems: 1 + + dma-names: + items: + - const: rx + + power-domains: + maxItems: 1 + + resets: + items: + - description: reset for PDM controller + + reset-names: + items: + - const: pdm-m + + rockchip,path-map: + $ref: /schemas/types.yaml#/definitions/uint32-array + description: + Defines the mapping of PDM SDIx to PDM PATHx. + By default, they are mapped one-to-one. + maxItems: 4 + uniqueItems: true + items: + enum: [ 0, 1, 2, 3 ] + + "#sound-dai-cells": + const: 0 + +required: + - compatible + - reg + - interrupts + - clocks + - clock-names + - dmas + - dma-names + - "#sound-dai-cells" + +additionalProperties: false + +examples: + - | + #include <dt-bindings/clock/rk3328-cru.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + #include <dt-bindings/interrupt-controller/irq.h> + #include <dt-bindings/pinctrl/rockchip.h> + + bus { + #address-cells = <2>; + #size-cells = <2>; + + pdm@ff040000 { + compatible = "rockchip,pdm"; + reg = <0x0 0xff040000 0x0 0x1000>; + interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&cru SCLK_PDM>, <&cru HCLK_PDM>; + clock-names = "pdm_clk", "pdm_hclk"; + dmas = <&dmac 16>; + dma-names = "rx"; + #sound-dai-cells = <0>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&pdmm0_clk + &pdmm0_sdi0 + &pdmm0_sdi1 + &pdmm0_sdi2 + &pdmm0_sdi3>; + pinctrl-1 = <&pdmm0_clk_sleep + &pdmm0_sdi0_sleep + &pdmm0_sdi1_sleep + &pdmm0_sdi2_sleep + &pdmm0_sdi3_sleep>; + }; + };
On Fri, 3 Sep 2021 21:22:37 +0800, Sugar Zhang wrote:
These patches fixup or update for rockchip pdm.
Changes in v4:
- Acked by Rob Herring
Changes in v3:
- Fix property 'path-map' suggested by Rob Herring.
[...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
Thanks!
[1/7] ASoC: rockchip: Add support for rv1126 pdm commit: d269aa2ab975807764dc2509e4156bb9b6bd0d34 [2/7] ASoC: dt-bindings: rockchip: Add binding for rv1126 pdm commit: 49a7a625ad79e5b995be313472743b278c90c853 [3/7] ASoC: rockchip: pdm: Add support for rk3568 pdm commit: d00d1cd4ab42f92d4d871deb9cdea1d7c262a213 [4/7] ASoC: dt-bindings: rockchip: Add binding for rk3568 pdm commit: f80e5a14ac2730b441c71d191e6538a74706cab3 [5/7] ASoC: rockchip: pdm: Add support for path map commit: 13e6e042a6f9c2be676f421935e026308de3303c [6/7] ASoC: dt-bindings: rockchip: pdm: Document property 'rockchip,path-map' commit: b2527dcd65b3e141e9363af5b256aa484bd4c06f [7/7] ASoC: dt-bindings: rockchip: Convert pdm bindings to yaml commit: 8ece5ef67edca06e54460b244f4043c237c90a21
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks, Mark
participants (3)
-
Mark Brown
-
Michael Riesch
-
Sugar Zhang