alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] ASoC: rt5677: Add ACPI device probing
@ 2014-11-15  6:56 Ben Zhang
  2014-11-15  6:56 ` [PATCH 2/2] ASoC: rt5677: add a platform config option for PDM clock divider Ben Zhang
                   ` (2 more replies)
  0 siblings, 3 replies; 36+ messages in thread
From: Ben Zhang @ 2014-11-15  6:56 UTC (permalink / raw)
  To: alsa-devel
  Cc: Oder Chiou, Liam Girdwood, linux-kernel, Ben Zhang, Mark Brown,
	Anatol Pomozov, Bard Liao, Dylan Reid, flove

The rt5677 codec driver looks for ACPI device ID "RT5677CE",
which is specified in coreboot. This patch allows platform
data to be obtained via ACPI

Signed-off-by: Ben Zhang <benzh@chromium.org>
---
 sound/soc/codecs/rt5677.c | 52 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 50 insertions(+), 2 deletions(-)

diff --git a/sound/soc/codecs/rt5677.c b/sound/soc/codecs/rt5677.c
index 5d317c68..384281d 100644
--- a/sound/soc/codecs/rt5677.c
+++ b/sound/soc/codecs/rt5677.c
@@ -20,6 +20,7 @@
 #include <linux/i2c.h>
 #include <linux/platform_device.h>
 #include <linux/spi/spi.h>
+#include <linux/acpi.h>
 #include <linux/firmware.h>
 #include <linux/gpio.h>
 #include <sound/core.h>
@@ -4525,6 +4526,43 @@ static int rt5677_parse_dt(struct rt5677_priv *rt5677, struct device_node *np)
 	return 0;
 }
 
+#ifdef CONFIG_ACPI
+
+static unsigned long long rt5677_parse_acpi_entry(struct device *dev,
+		acpi_string name)
+{
+	acpi_handle handle = ACPI_HANDLE(dev);
+	unsigned long long val;
+	acpi_status status;
+
+	status = acpi_evaluate_integer(handle, name, NULL, &val);
+	if (ACPI_FAILURE(status)) {
+		dev_err(dev, "Failed to parse ACPI entry %s, default to 0: %d\n",
+				name, status);
+		return 0;
+	}
+	return val;
+}
+
+static void rt5677_parse_acpi(struct rt5677_priv *rt5677, struct device *dev)
+{
+	rt5677->pdata.dmic2_clk_pin = (enum rt5677_dmic2_clk)
+		rt5677_parse_acpi_entry(dev, "DCLK");
+	rt5677->pdata.in1_diff = (bool)rt5677_parse_acpi_entry(dev, "IN1");
+	rt5677->pdata.in2_diff = (bool)rt5677_parse_acpi_entry(dev, "IN2");
+	rt5677->pdata.lout1_diff = (bool)rt5677_parse_acpi_entry(dev, "OUT1");
+	rt5677->pdata.lout2_diff = (bool)rt5677_parse_acpi_entry(dev, "OUT2");
+	rt5677->pdata.lout3_diff = (bool)rt5677_parse_acpi_entry(dev, "OUT3");
+	rt5677->pdata.jd1_gpio = rt5677_parse_acpi_entry(dev, "JD1");
+	rt5677->pdata.jd2_gpio = rt5677_parse_acpi_entry(dev, "JD2");
+	rt5677->pdata.jd3_gpio = rt5677_parse_acpi_entry(dev, "JD3");
+}
+#else
+static void rt5677_parse_acpi(struct rt5677_priv *rt5677, struct device *dev)
+{
+}
+#endif
+
 static struct regmap_irq rt5677_irqs[] = {
 	[RT5677_IRQ_JD1] = {
 		.reg_offset = 0,
@@ -4604,6 +4642,7 @@ static int rt5677_i2c_probe(struct i2c_client *i2c,
 	if (pdata)
 		rt5677->pdata = *pdata;
 
+	rt5677->pow_ldo2 = -EINVAL;
 	if (i2c->dev.of_node) {
 		ret = rt5677_parse_dt(rt5677, i2c->dev.of_node);
 		if (ret) {
@@ -4611,8 +4650,8 @@ static int rt5677_i2c_probe(struct i2c_client *i2c,
 				ret);
 			return ret;
 		}
-	} else {
-		rt5677->pow_ldo2 = -EINVAL;
+	} else if (ACPI_HANDLE(&i2c->dev)) {
+		rt5677_parse_acpi(rt5677, &i2c->dev);
 	}
 
 	if (gpio_is_valid(rt5677->pow_ldo2)) {
@@ -4708,10 +4747,19 @@ static int rt5677_i2c_remove(struct i2c_client *i2c)
 	return 0;
 }
 
+#ifdef CONFIG_ACPI
+static const struct acpi_device_id rt5677_acpi_id[] = {
+	{ "RT5677CE", 0 },
+	{ }
+};
+MODULE_DEVICE_TABLE(acpi, rt5677_acpi_id);
+#endif
+
 static struct i2c_driver rt5677_i2c_driver = {
 	.driver = {
 		.name = "rt5677",
 		.owner = THIS_MODULE,
+		.acpi_match_table = ACPI_PTR(rt5677_acpi_id),
 	},
 	.probe = rt5677_i2c_probe,
 	.remove   = rt5677_i2c_remove,
-- 
2.1.0.rc2.206.gedb03e5

^ permalink raw reply related	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2014-12-04 21:53 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-15  6:56 [PATCH 1/2] ASoC: rt5677: Add ACPI device probing Ben Zhang
2014-11-15  6:56 ` [PATCH 2/2] ASoC: rt5677: add a platform config option for PDM clock divider Ben Zhang
2014-11-25 12:07 ` [PATCH 1/2] ASoC: rt5677: Add ACPI device probing Mark Brown
2014-11-25 12:11 ` Grant Likely
2014-11-25 14:28   ` Liam Girdwood
2014-11-25 16:01     ` [alsa-devel] " Darren Hart
2014-11-25 18:37       ` Liam Girdwood
2014-11-25 16:00   ` Darren Hart
2014-11-25 17:21     ` Mark Brown
2014-11-25 18:33       ` Darren Hart
2014-11-25 18:43         ` Mark Brown
2014-11-25 19:07           ` Darren Hart
2014-11-25 19:36             ` Mark Brown
2014-11-25 20:32               ` Rafael J. Wysocki
2014-11-25 20:31             ` Rafael J. Wysocki
2014-11-25 20:27               ` Mark Brown
2014-11-25 21:40                 ` Rafael J. Wysocki
2014-11-25 22:15                   ` Mark Brown
2014-11-25 22:41                   ` Ben Zhang
2014-11-25 22:45                     ` Mark Brown
2014-12-04 10:48                   ` Grant Likely
2014-12-04 16:46                     ` Mark Brown
2014-12-04 21:53                     ` Rafael J. Wysocki
2014-11-26  1:48           ` Darren Hart
2014-11-26 11:17             ` Mark Brown
2014-11-26 23:09               ` Rafael J. Wysocki
2014-11-28 16:00                 ` Mark Brown
2014-11-28 23:51                   ` Rafael J. Wysocki
2014-11-29 11:52                     ` Mark Brown
2014-11-29 22:27                       ` Rafael J. Wysocki
2014-12-01 17:51                         ` Mark Brown
2014-12-01 22:16                           ` Rafael J. Wysocki
2014-12-01 22:19                             ` Mark Brown
2014-12-01 22:55                               ` Rafael J. Wysocki
2014-12-04 11:12                         ` Grant Likely
2014-12-04 11:51                           ` Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).