From b22da3d8526a935aa31e086e63f60ff3246cb61c Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Sat, 09 Dec 2023 07:24:11 +0000
Subject: [PATCH] add stmac read mac form eeprom
---
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