From 01573e231f18eb2d99162747186f59511f56b64d Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 08 Dec 2023 10:40:48 +0000
Subject: [PATCH] 移去rt

---
 kernel/sound/soc/codecs/rk_codec_digital.c |   95 ++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 81 insertions(+), 14 deletions(-)

diff --git a/kernel/sound/soc/codecs/rk_codec_digital.c b/kernel/sound/soc/codecs/rk_codec_digital.c
index d46ea62..2c84419 100644
--- a/kernel/sound/soc/codecs/rk_codec_digital.c
+++ b/kernel/sound/soc/codecs/rk_codec_digital.c
@@ -24,6 +24,8 @@
 #include "rk_codec_digital.h"
 
 #define RK3568_GRF_SOC_CON2 (0x0508)
+#define RK3588_GRF_SOC_CON6 (0x0318)
+#define RV1106_GRF_SOC_CON1 (0x0004)
 #define RV1126_GRF_SOC_CON2 (0x0008)
 
 struct rk_codec_digital_soc_data {
@@ -80,8 +82,8 @@
 	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
 	struct soc_mixer_control *mc =
 		(struct soc_mixer_control *)kcontrol->private_value;
-	unsigned int val = snd_soc_component_read32(component, mc->reg);
-	unsigned int sign = snd_soc_component_read32(component, ADCVOGP);
+	unsigned int val = snd_soc_component_read(component, mc->reg);
+	unsigned int sign = snd_soc_component_read(component, ADCVOGP);
 	unsigned int mask = (1 << fls(mc->max)) - 1;
 	unsigned int shift = mc->shift;
 	int mid = mc->max / 2;
@@ -162,8 +164,8 @@
 	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
 	struct soc_mixer_control *mc =
 		(struct soc_mixer_control *)kcontrol->private_value;
-	unsigned int val = snd_soc_component_read32(component, mc->reg);
-	unsigned int sign = snd_soc_component_read32(component, DACVOGP);
+	unsigned int val = snd_soc_component_read(component, mc->reg);
+	unsigned int sign = snd_soc_component_read(component, DACVOGP);
 	unsigned int mask = (1 << fls(mc->max)) - 1;
 	unsigned int shift = mc->shift;
 	int mid = mc->max / 2;
@@ -221,7 +223,7 @@
 	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
 	struct rk_codec_digital_priv *rcd = snd_soc_component_get_drvdata(component);
 
-	if (!rcd || !rcd->pa_ctl)
+	if (!rcd->pa_ctl)
 		return -EINVAL;
 
 	ucontrol->value.enumerated.item[0] = gpiod_get_value(rcd->pa_ctl);
@@ -235,7 +237,7 @@
 	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
 	struct rk_codec_digital_priv *rcd = snd_soc_component_get_drvdata(component);
 
-	if (!rcd || !rcd->pa_ctl)
+	if (!rcd->pa_ctl)
 		return -EINVAL;
 
 	gpiod_set_value(rcd->pa_ctl, ucontrol->value.enumerated.item[0]);
@@ -405,13 +407,13 @@
 			   ACDCDIG_DACSCLKRXINT_DIV_SCKRXDIV(div_bclk));
 	regmap_update_bits(rcd->regmap, I2S_CKR0,
 			   ACDCDIG_I2S_CKR0_RSD_MASK,
-			   ACDCDIG_I2S_CKR0_RSD(64));
+			   ACDCDIG_I2S_CKR0_RSD_64);
 	regmap_update_bits(rcd->regmap, ADCSCLKTXINT_DIV,
 			   ACDCDIG_ADCSCLKTXINT_DIV_SCKTXDIV_MASK,
 			   ACDCDIG_ADCSCLKTXINT_DIV_SCKTXDIV(div_bclk));
 	regmap_update_bits(rcd->regmap, I2S_CKR0,
 			   ACDCDIG_I2S_CKR0_TSD_MASK,
-			   ACDCDIG_I2S_CKR0_TSD(64));
+			   ACDCDIG_I2S_CKR0_TSD_64);
 
 	return 0;
 }
@@ -448,7 +450,7 @@
 				   ACDCDIG_DACSCLKRXINT_DIV_SCKRXDIV(div_bclk));
 		regmap_update_bits(rcd->regmap, I2S_CKR0,
 				   ACDCDIG_I2S_CKR0_RSD_MASK,
-				   ACDCDIG_I2S_CKR0_RSD(64));
+				   ACDCDIG_I2S_CKR0_RSD_64);
 	} else {
 		clk_set_rate(rcd->clk_adc, mclk);
 
@@ -462,7 +464,7 @@
 				   ACDCDIG_ADCSCLKTXINT_DIV_SCKTXDIV(div_bclk));
 		regmap_update_bits(rcd->regmap, I2S_CKR0,
 				   ACDCDIG_I2S_CKR0_TSD_MASK,
-				   ACDCDIG_I2S_CKR0_TSD(64));
+				   ACDCDIG_I2S_CKR0_TSD_64);
 	}
 
 	return 0;
@@ -746,7 +748,7 @@
 	struct rk_codec_digital_priv *rcd =
 		snd_soc_component_get_drvdata(dai->component);
 
-	if (rcd && rcd->pa_ctl) {
+	if (rcd->pa_ctl) {
 		gpiod_set_value_cansleep(rcd->pa_ctl, 1);
 		if (rcd->pa_ctl_delay_ms)
 			msleep(rcd->pa_ctl_delay_ms);
@@ -761,11 +763,11 @@
 	struct rk_codec_digital_priv *rcd =
 		snd_soc_component_get_drvdata(dai->component);
 
-	if (rcd && rcd->pa_ctl)
+	if (rcd->pa_ctl)
 		gpiod_set_value_cansleep(rcd->pa_ctl, 0);
 
 	if (rcd->sync) {
-		if (!snd_soc_component_is_active(dai->component)) {
+		if (!snd_soc_component_active(dai->component)) {
 			rk_codec_digital_disable_sync(rcd);
 			rk_codec_digital_reset(rcd);
 		}
@@ -882,6 +884,60 @@
 	.deinit = rk3568_soc_deinit,
 };
 
+static int rk3588_soc_init(struct device *dev)
+{
+	struct rk_codec_digital_priv *rcd = dev_get_drvdata(dev);
+
+	if (IS_ERR(rcd->grf))
+		return PTR_ERR(rcd->grf);
+
+	/* enable internal codec to i2s3 */
+	return regmap_write(rcd->grf, RK3588_GRF_SOC_CON6,
+			    (BIT(11) << 16 | BIT(11)));
+}
+
+static void rk3588_soc_deinit(struct device *dev)
+{
+	struct rk_codec_digital_priv *rcd = dev_get_drvdata(dev);
+
+	if (IS_ERR(rcd->grf))
+		return;
+
+	regmap_write(rcd->grf, RK3588_GRF_SOC_CON6, (BIT(11) << 16));
+}
+
+static const struct rk_codec_digital_soc_data rk3588_data = {
+	.init = rk3588_soc_init,
+	.deinit = rk3588_soc_deinit,
+};
+
+static int rv1106_soc_init(struct device *dev)
+{
+	struct rk_codec_digital_priv *rcd = dev_get_drvdata(dev);
+
+	if (IS_ERR(rcd->grf))
+		return PTR_ERR(rcd->grf);
+
+	/* enable internal codec to i2s0 */
+	return regmap_write(rcd->grf, RV1106_GRF_SOC_CON1,
+			    (BIT(8) << 16 | BIT(8)));
+}
+
+static void rv1106_soc_deinit(struct device *dev)
+{
+	struct rk_codec_digital_priv *rcd = dev_get_drvdata(dev);
+
+	if (IS_ERR(rcd->grf))
+		return;
+
+	regmap_write(rcd->grf, RV1106_GRF_SOC_CON1, (BIT(8) << 16));
+}
+
+static const struct rk_codec_digital_soc_data rv1106_data = {
+	.init = rv1106_soc_init,
+	.deinit = rv1106_soc_deinit,
+};
+
 static int rv1126_soc_init(struct device *dev)
 {
 	struct rk_codec_digital_priv *rcd = dev_get_drvdata(dev);
@@ -912,8 +968,18 @@
 #ifdef CONFIG_OF
 static const struct of_device_id rcd_of_match[] = {
 	{ .compatible = "rockchip,codec-digital-v1", },
+#ifdef CONFIG_CPU_RK3568
 	{ .compatible = "rockchip,rk3568-codec-digital", .data = &rk3568_data },
+#endif
+#ifdef CONFIG_CPU_RK3588
+	{ .compatible = "rockchip,rk3588-codec-digital", .data = &rk3588_data },
+#endif
+#ifdef CONFIG_CPU_RV1106
+	{ .compatible = "rockchip,rv1106-codec-digital", .data = &rv1106_data },
+#endif
+#ifdef CONFIG_CPU_RV1126
 	{ .compatible = "rockchip,rv1126-codec-digital", .data = &rv1126_data },
+#endif
 	{},
 };
 MODULE_DEVICE_TABLE(of, rcd_of_match);
@@ -995,7 +1061,8 @@
 
 	rcd->rc = devm_reset_control_get(&pdev->dev, "reset");
 
-	rcd->clk_adc = devm_clk_get(&pdev->dev, "adc");
+	/* optional on some platform */
+	rcd->clk_adc = devm_clk_get_optional(&pdev->dev, "adc");
 	if (IS_ERR(rcd->clk_adc))
 		return PTR_ERR(rcd->clk_adc);
 

--
Gitblit v1.6.2