110 lines
3.4 KiB
Diff
110 lines
3.4 KiB
Diff
|
From 1a48b7f06ef2d83a87ff372eaaf8208bb71562a6 Mon Sep 17 00:00:00 2001
|
||
|
From: The-going <48602507+The-going@users.noreply.github.com>
|
||
|
Date: Tue, 27 Sep 2022 21:35:05 +0300
|
||
|
Subject: [PATCH] sound: soc: sun4i-codec: add compatible sun8i_r40_codec
|
||
|
|
||
|
---
|
||
|
sound/soc/sunxi/sun4i-codec.c | 65 +++++++++++++++++++++++++++++++++++
|
||
|
1 file changed, 65 insertions(+)
|
||
|
|
||
|
diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
|
||
|
index f7de88f93..e9e17c740 100644
|
||
|
--- a/sound/soc/sunxi/sun4i-codec.c
|
||
|
+++ b/sound/soc/sunxi/sun4i-codec.c
|
||
|
@@ -1550,6 +1550,45 @@ static struct snd_soc_card *sun8i_h3_codec_create_card(struct device *dev)
|
||
|
return card;
|
||
|
};
|
||
|
|
||
|
+static struct snd_soc_card *sun8i_r40_codec_create_card(struct device *dev)
|
||
|
+{
|
||
|
+ struct snd_soc_card *card;
|
||
|
+ int ret;
|
||
|
+
|
||
|
+ card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
|
||
|
+ if (!card)
|
||
|
+ return ERR_PTR(-ENOMEM);
|
||
|
+
|
||
|
+ aux_dev.dlc.of_node = of_parse_phandle(dev->of_node,
|
||
|
+ "allwinner,codec-analog-controls",
|
||
|
+ 0);
|
||
|
+ if (!aux_dev.dlc.of_node) {
|
||
|
+ dev_err(dev, "Can't find analog controls for codec.\n");
|
||
|
+ return ERR_PTR(-EINVAL);
|
||
|
+ }
|
||
|
+
|
||
|
+ card->dai_link = sun4i_codec_create_link(dev, &card->num_links);
|
||
|
+ if (!card->dai_link)
|
||
|
+ return ERR_PTR(-ENOMEM);
|
||
|
+
|
||
|
+ card->dev = dev;
|
||
|
+ card->owner = THIS_MODULE;
|
||
|
+ card->name = "R40 Audio Codec";
|
||
|
+ card->dapm_widgets = sun6i_codec_card_dapm_widgets;
|
||
|
+ card->num_dapm_widgets = ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
|
||
|
+ card->dapm_routes = sun8i_codec_card_routes;
|
||
|
+ card->num_dapm_routes = ARRAY_SIZE(sun8i_codec_card_routes);
|
||
|
+ card->aux_dev = &aux_dev;
|
||
|
+ card->num_aux_devs = 1;
|
||
|
+ card->fully_routed = true;
|
||
|
+
|
||
|
+ ret = snd_soc_of_parse_audio_routing(card, "allwinner,audio-routing");
|
||
|
+ if (ret)
|
||
|
+ dev_warn(dev, "failed to parse audio-routing: %d\n", ret);
|
||
|
+
|
||
|
+ return card;
|
||
|
+};
|
||
|
+
|
||
|
static struct snd_soc_card *sun8i_v3s_codec_create_card(struct device *dev)
|
||
|
{
|
||
|
struct snd_soc_card *card;
|
||
|
@@ -1624,6 +1663,13 @@ static const struct regmap_config sun8i_h3_codec_regmap_config = {
|
||
|
.max_register = SUN8I_H3_CODEC_ADC_DBG,
|
||
|
};
|
||
|
|
||
|
+static const struct regmap_config sun8i_r40_codec_regmap_config = {
|
||
|
+ .reg_bits = 32,
|
||
|
+ .reg_stride = 4,
|
||
|
+ .val_bits = 32,
|
||
|
+ .max_register = SUN8I_H3_CODEC_ADC_DBG,
|
||
|
+};
|
||
|
+
|
||
|
static const struct regmap_config sun8i_v3s_codec_regmap_config = {
|
||
|
.reg_bits = 32,
|
||
|
.reg_stride = 4,
|
||
|
@@ -1694,6 +1740,21 @@ static const struct sun4i_codec_quirks sun8i_h3_codec_quirks = {
|
||
|
.has_reset = true,
|
||
|
};
|
||
|
|
||
|
+static const struct sun4i_codec_quirks sun8i_r40_codec_quirks = {
|
||
|
+ .regmap_config = &sun8i_r40_codec_regmap_config,
|
||
|
+ /*
|
||
|
+ * TODO Share the codec structure with A23 for now.
|
||
|
+ * This should be split out when adding digital audio
|
||
|
+ * processing support for the H3.
|
||
|
+ */
|
||
|
+ .codec = &sun8i_a23_codec_codec,
|
||
|
+ .create_card = sun8i_r40_codec_create_card,
|
||
|
+ .reg_adc_fifoc = REG_FIELD(SUN6I_CODEC_ADC_FIFOC, 0, 31),
|
||
|
+ .reg_dac_txdata = SUN8I_H3_CODEC_DAC_TXDATA,
|
||
|
+ .reg_adc_rxdata = SUN6I_CODEC_ADC_RXDATA,
|
||
|
+ .has_reset = true,
|
||
|
+};
|
||
|
+
|
||
|
static const struct sun4i_codec_quirks sun8i_v3s_codec_quirks = {
|
||
|
.regmap_config = &sun8i_v3s_codec_regmap_config,
|
||
|
/*
|
||
|
@@ -1729,6 +1790,10 @@ static const struct of_device_id sun4i_codec_of_match[] = {
|
||
|
.compatible = "allwinner,sun8i-h3-codec",
|
||
|
.data = &sun8i_h3_codec_quirks,
|
||
|
},
|
||
|
+ {
|
||
|
+ .compatible = "allwinner,sun8i-r40-codec",
|
||
|
+ .data = &sun8i_r40_codec_quirks,
|
||
|
+ },
|
||
|
{
|
||
|
.compatible = "allwinner,sun8i-v3s-codec",
|
||
|
.data = &sun8i_v3s_codec_quirks,
|
||
|
--
|
||
|
2.35.3
|
||
|
|