From f70575805708cabdedea7498aaa3f710fde4d920 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Wed, 31 Jan 2024 03:29:01 +0000
Subject: [PATCH] add lvds1024*800

---
 kernel/sound/soc/codecs/es7202.c |   96 ++++++++++++++++++++---------------------------
 1 files changed, 41 insertions(+), 55 deletions(-)

diff --git a/kernel/sound/soc/codecs/es7202.c b/kernel/sound/soc/codecs/es7202.c
index db1c2a8..7b7e3ea 100644
--- a/kernel/sound/soc/codecs/es7202.c
+++ b/kernel/sound/soc/codecs/es7202.c
@@ -21,6 +21,7 @@
 #include <linux/delay.h>
 #include <linux/pm.h>
 #include <linux/i2c.h>
+#include <linux/regulator/consumer.h>
 #include <linux/spi/spi.h>
 #include <linux/platform_device.h>
 #include <linux/slab.h>
@@ -50,6 +51,7 @@
 	struct i2c_client *i2c;
 
 	unsigned int pwr_vdd_voltage;
+	struct regulator *vdd;
 	int reset_gpio;
 	bool reset_active_level;
 };
@@ -72,8 +74,8 @@
 	read_cmd[0] = reg;
 	cmd_len = 1;
 
-	if (client->adapter == NULL)
-		printk("es7202_read client->adapter==NULL\n");
+	if (!client || !client->adapter)
+		return -1;
 
 	ret = i2c_master_send(client, read_cmd, cmd_len);
 	if (ret != cmd_len) {
@@ -94,6 +96,9 @@
 {
 	int ret = 0;
 	u8 write_cmd[2] = { 0 };
+
+	if (!client || !client->adapter)
+		return -1;
 
 	write_cmd[0] = reg;
 	write_cmd[1] = value;
@@ -533,20 +538,24 @@
 #endif
 };
 
-static int es7202_mute(struct snd_soc_dai *dai, int mute)
+static int es7202_mute(struct snd_soc_dai *dai, int mute, int stream)
 {
+	if (stream == SNDRV_PCM_STREAM_PLAYBACK)
+		return 0;
+
 	if (mute) {
 		es7202_multi_chips_update_bits(ES7202_PDM_INF_CTL_REG07, 0x03,0x03);
-	} else if (dai->playback_active) {
-		es7202_multi_chips_update_bits(ES7202_PDM_INF_CTL_REG07, 0x03,0x00);		
+	} else {
+		es7202_multi_chips_update_bits(ES7202_PDM_INF_CTL_REG07, 0x03,0x00);
 	}
+
 	return 0;
 }
 
 #define es7202_RATES SNDRV_PCM_RATE_8000_96000
 
 static struct snd_soc_dai_ops es7202_ops = {
-	.digital_mute = es7202_mute,
+	.mute_stream = es7202_mute,
 };
 #if ES7202_CHANNELS_MAX > 0
 static struct snd_soc_dai_driver es7202_dai0 = {
@@ -554,7 +563,7 @@
 	.capture = {
 		.stream_name = "Capture",
 		.channels_min = 1,
-		.channels_max = 2,
+		.channels_max = 8,
 		.rates = es7202_RATES,
 		.formats = SNDRV_PCM_FMTBIT_S16_LE,
 	},
@@ -568,7 +577,7 @@
 	.capture = {
 		.stream_name = "Capture",
 		.channels_min = 1,
-		.channels_max = 4,
+		.channels_max = 8,
 		.rates = es7202_RATES,
 		.formats = SNDRV_PCM_FMTBIT_S16_LE,
 	},
@@ -582,7 +591,7 @@
 	.capture = {
 		.stream_name = "Capture",
 		.channels_min = 1,
-		.channels_max = 6,
+		.channels_max = 8,
 		.rates = es7202_RATES,
 		.formats = SNDRV_PCM_FMTBIT_S16_LE,
 	},
@@ -835,66 +844,43 @@
 			    const struct i2c_device_id *id)
 {
 	struct es7202_priv *es7202;
+	int uV;
 	int ret = -1;
-	//enum of_gpio_flags flags;
-	//struct device_node *np = i2c->dev.of_node;
-	
-	printk("enter into %s()\n", __func__);
-	
+
+	dev_info(&i2c->dev, "probe\n");
 	es7202 = devm_kzalloc(&i2c->dev, sizeof(*es7202), GFP_KERNEL);
 	if (!es7202)
 		return -ENOMEM;
-
 	es7202->i2c = i2c;
-  	es7202->pwr_vdd_voltage = ES7202_VDD_VOLTAGE;
-  
+	es7202->vdd = devm_regulator_get_optional(&i2c->dev, "power");
+	if (IS_ERR(es7202->vdd)) {
+		if (PTR_ERR(es7202->vdd) == -EPROBE_DEFER)
+			return -EPROBE_DEFER;
+		dev_warn(&i2c->dev, "power-supply get fail, use 3v3 as default\n");
+		es7202->pwr_vdd_voltage = VDD_3V3;
+	} else {
+		uV = regulator_get_voltage(es7202->vdd);
+		dev_info(&i2c->dev, "probe power-supply %duV\n", uV);
+		if (uV <= MAX_VOLTAGE_1_8)
+			es7202->pwr_vdd_voltage = VDD_1V8;
+		else
+			es7202->pwr_vdd_voltage = VDD_3V3;
+	}
 	dev_set_drvdata(&i2c->dev, es7202);
 	if (id->driver_data < ADC_DEV_MAXNUM) {
 		i2c_ctl[id->driver_data] = i2c;
-   #if 0 
-    		if(id->driver_data == 0) {
-			es7202->reset_gpio = of_get_named_gpio_flags(np,
-						"es7202-reset-gpio",
-						0,
-						&flags);
-			if (es7202->reset_gpio < 0) {
-				dev_info(&i2c->dev, 
-					"Can not read property spk_ctl_gpio\n");
-				es7202->reset_gpio = -1;
-			} else {
-				es7202->reset_active_level = 
-						!(flags & OF_GPIO_ACTIVE_LOW);
-				ret = devm_gpio_request_one(&i2c->dev, 
-						es7202->reset_gpio,
-						GPIOF_DIR_OUT, 
-						NULL);
-				if (ret) {
-					dev_err(&i2c->dev, 
-						"Failed to request spk_ctl_gpio\n");
-					//return ret;
-				} else {
-					gpio_set_value(es7202->reset_gpio, 
-						es7202->reset_active_level);
-					msleep(50);
-					gpio_set_value(es7202->reset_gpio, 
-						!es7202->reset_active_level);
-				}
-			}
-		}
-#endif
-		printk("%s()-----1\n", __func__);
+		dev_info(&i2c->dev, "probe reigister es7202 dai(%s) component\n",
+			 es7202_dai[id->driver_data]->name);
 		ret = devm_snd_soc_register_component(&i2c->dev, &soc_codec_dev_es7202,
-					     es7202_dai[id->driver_data],
-					     1);
+						      es7202_dai[id->driver_data], 1);
 		if (ret < 0) {
 			return ret;
-		}				     
+		}
 	}
 	ret = sysfs_create_group(&i2c->dev.kobj, &es7202_debug_attr_group);
 	if (ret) {
-		pr_err("failed to create attr group\n");
-	}	
-
+		dev_err(&i2c->dev, "failed to create attr group\n");
+	}
 	return ret;
 }
 

--
Gitblit v1.6.2