diff mbox

ASoC: rt286: Set cbj_en for ACPI devices

Message ID 1410313233-585-1-git-send-email-bardliao@realtek.com (mailing list archive)
State New, archived
Headers show

Commit Message

Bard Liao Sept. 10, 2014, 1:40 a.m. UTC
From: Bard Liao <bardliao@realtek.com>

This patch set cbj_en value for ACPI devices.

Signed-off-by: Bard Liao <bardliao@realtek.com>
---
 sound/soc/codecs/rt286.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

Comments

Lars-Peter Clausen Sept. 10, 2014, 6:32 a.m. UTC | #1
On 09/10/2014 03:40 AM, bardliao@realtek.com wrote:
[...]
> +	/* enable jack combo mode on supported devices */
> +	acpiid = acpi_match_device(dev->driver->acpi_match_table, dev);
> +	if (acpiid) {
> +		for (mach = rt286_jack_combo; mach->acpi_id; mach++) {
> +			if (!strcmp(mach->acpi_id, acpiid->id))
> +				rt286->pdata.cbj_en =
> +					rt286_jack_combo->jack_combo;
> +
> +		}
> +	}

Don't invent your own mechanism for this. Use the driver_data field from the 
acpi_device_id table.

> +
>   	regmap_write(rt286->regmap, RT286_SET_AUDIO_POWER, AC_PWRST_D3);
>
>   	for (i = 0; i < RT286_POWER_REG_LEN; i++)
>
Mark Brown Sept. 10, 2014, 10 a.m. UTC | #2
On Wed, Sep 10, 2014 at 09:40:33AM +0800, bardliao@realtek.com wrote:
> From: Bard Liao <bardliao@realtek.com>
> 
> This patch set cbj_en value for ACPI devices.

> +/* list of devices using jack combo mode */
> +static struct rt286_acpi_jack rt286_jack_combo[] = {
> +	{ "INT343A", true },
> +	{},
> +};

I'm having a hard time believing that all devices ever used in an ACPI
system will have the board configured like this...
diff mbox

Patch

diff --git a/sound/soc/codecs/rt286.c b/sound/soc/codecs/rt286.c
index e4f6102..d04616b 100644
--- a/sound/soc/codecs/rt286.c
+++ b/sound/soc/codecs/rt286.c
@@ -1106,11 +1106,25 @@  static const struct acpi_device_id rt286_acpi_match[] = {
 };
 MODULE_DEVICE_TABLE(acpi, rt286_acpi_match);
 
+struct rt286_acpi_jack {
+	const char *acpi_id;
+	bool jack_combo;
+};
+
+/* list of devices using jack combo mode */
+static struct rt286_acpi_jack rt286_jack_combo[] = {
+	{ "INT343A", true },
+	{},
+};
+
 static int rt286_i2c_probe(struct i2c_client *i2c,
 			   const struct i2c_device_id *id)
 {
 	struct rt286_platform_data *pdata = dev_get_platdata(&i2c->dev);
 	struct rt286_priv *rt286;
+	struct device *dev = &i2c->dev;
+	const struct acpi_device_id *acpiid;
+	struct rt286_acpi_jack *mach;
 	int i, ret;
 
 	rt286 = devm_kzalloc(&i2c->dev,	sizeof(*rt286),
@@ -1141,6 +1155,17 @@  static int rt286_i2c_probe(struct i2c_client *i2c,
 	if (pdata)
 		rt286->pdata = *pdata;
 
+	/* enable jack combo mode on supported devices */
+	acpiid = acpi_match_device(dev->driver->acpi_match_table, dev);
+	if (acpiid) {
+		for (mach = rt286_jack_combo; mach->acpi_id; mach++) {
+			if (!strcmp(mach->acpi_id, acpiid->id))
+				rt286->pdata.cbj_en =
+					rt286_jack_combo->jack_combo;
+
+		}
+	}
+
 	regmap_write(rt286->regmap, RT286_SET_AUDIO_POWER, AC_PWRST_D3);
 
 	for (i = 0; i < RT286_POWER_REG_LEN; i++)