diff mbox

[v2] ASoC: rt286: Set cbj_en for ACPI devices

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

Commit Message

Bard Liao Sept. 11, 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 | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

Comments

Mark Brown Sept. 12, 2014, 1:55 p.m. UTC | #1
On Thu, Sep 11, 2014 at 09:40:54AM +0800, bardliao@realtek.com wrote:

> +/* the default platform data for acpi devices */
> +static struct rt286_platform_data rt286_acpi_data = {
> +	.cbj_en = true,
> +	.gpio2_en = false,
> +};
> +
>  static const struct acpi_device_id rt286_acpi_match[] = {
> -	{ "INT343A", 0 },
> +	{ "INT343A", (unsigned long)&rt286_acpi_data },
>  	{},
>  };

Why does this platform data apply to all boards using this ACPI ID?
Shouldn't this be _DSD data instead, or should we be doing quirks based
on DMI data?
Girdwood, Liam R Sept. 16, 2014, 7:31 a.m. UTC | #2
On Fri, 2014-09-12 at 14:55 +0100, Mark Brown wrote:
> On Thu, Sep 11, 2014 at 09:40:54AM +0800, bardliao@realtek.com wrote:
> 
> > +/* the default platform data for acpi devices */
> > +static struct rt286_platform_data rt286_acpi_data = {
> > +	.cbj_en = true,
> > +	.gpio2_en = false,
> > +};
> > +
> >  static const struct acpi_device_id rt286_acpi_match[] = {
> > -	{ "INT343A", 0 },
> > +	{ "INT343A", (unsigned long)&rt286_acpi_data },
> >  	{},
> >  };
> 
> Why does this platform data apply to all boards using this ACPI ID?
> Shouldn't this be _DSD data instead, or should we be doing quirks based
> on DMI data?

Sadly there is no data within most/all current BIOSes that have this
ACPI id for the RT286. The BIOSes are a little behind in the development
here compared to the codec driver. So it's probably we will have to
support this and _DSD with this particular driver.

Liam

---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
Mark Brown Sept. 16, 2014, 4:14 p.m. UTC | #3
On Tue, Sep 16, 2014 at 08:31:54AM +0100, Liam Girdwood wrote:
> On Fri, 2014-09-12 at 14:55 +0100, Mark Brown wrote:

> > Why does this platform data apply to all boards using this ACPI ID?
> > Shouldn't this be _DSD data instead, or should we be doing quirks based
> > on DMI data?

> Sadly there is no data within most/all current BIOSes that have this
> ACPI id for the RT286. The BIOSes are a little behind in the development
> here compared to the codec driver. So it's probably we will have to
> support this and _DSD with this particular driver.

They should all have DMI data (ie, board level identification), I can
see them not having _DSD but DMI has been there since forever.
diff mbox

Patch

diff --git a/sound/soc/codecs/rt286.c b/sound/soc/codecs/rt286.c
index e4f6102..7dfca82 100644
--- a/sound/soc/codecs/rt286.c
+++ b/sound/soc/codecs/rt286.c
@@ -1100,8 +1100,14 @@  static const struct i2c_device_id rt286_i2c_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, rt286_i2c_id);
 
+/* the default platform data for acpi devices */
+static struct rt286_platform_data rt286_acpi_data = {
+	.cbj_en = true,
+	.gpio2_en = false,
+};
+
 static const struct acpi_device_id rt286_acpi_match[] = {
-	{ "INT343A", 0 },
+	{ "INT343A", (unsigned long)&rt286_acpi_data },
 	{},
 };
 MODULE_DEVICE_TABLE(acpi, rt286_acpi_match);
@@ -1111,6 +1117,8 @@  static int rt286_i2c_probe(struct i2c_client *i2c,
 {
 	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;
 	int i, ret;
 
 	rt286 = devm_kzalloc(&i2c->dev,	sizeof(*rt286),
@@ -1141,6 +1149,13 @@  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) {
+		rt286->pdata = *(struct rt286_platform_data *)
+				acpiid->driver_data;
+	}
+
 	regmap_write(rt286->regmap, RT286_SET_AUDIO_POWER, AC_PWRST_D3);
 
 	for (i = 0; i < RT286_POWER_REG_LEN; i++)