This update allows for parsing of ACPI, in addition to existing DT
support.

Signed-off-by: Adam Thomson <adam.thomson.opensou...@diasemi.com>
Tested-by: Sathyanarayana Nujella <sathyanarayana.nuje...@intel.com>
---
 sound/soc/codecs/da7219-aad.c | 32 ++++++++++++++++++++++++++++----
 sound/soc/codecs/da7219.c     |  7 ++++---
 2 files changed, 32 insertions(+), 7 deletions(-)

diff --git a/sound/soc/codecs/da7219-aad.c b/sound/soc/codecs/da7219-aad.c
index c4853a8..e04ee4f 100644
--- a/sound/soc/codecs/da7219-aad.c
+++ b/sound/soc/codecs/da7219-aad.c
@@ -15,6 +15,7 @@
 #include <linux/platform_device.h>
 #include <linux/i2c.h>
 #include <linux/of_device.h>
+#include <linux/acpi.h>
 #include <linux/property.h>
 #include <linux/pm_wakeirq.h>
 #include <linux/slab.h>
@@ -27,7 +28,6 @@
 #include "da7219.h"
 #include "da7219-aad.h"

-
 /*
  * Detection control
  */
@@ -383,7 +383,7 @@ static irqreturn_t da7219_aad_irq_thread(int irq, void 
*data)
 }

 /*
- * DT to pdata conversion
+ * DT/ACPI to pdata conversion
  */

 static enum da7219_aad_micbias_pulse_lvl
@@ -539,6 +539,26 @@ static enum da7219_aad_adc_1bit_rpt
        }
 }

+#ifdef CONFIG_ACPI
+static inline bool da7219_aad_of_acpi_node_matched(struct fwnode_handle *child,
+                                                  const char *name)
+{
+       struct acpi_data_node *acpi_node = to_acpi_data_node(child);
+
+       if (strcmp(acpi_node->name, name) == 0)
+               return true;
+       else
+               return false;
+}
+#else
+static inline bool da7219_aad_of_acpi_node_matched(struct fwnode_handle *child,
+                                                  const char *name)
+{
+       return false;
+}
+
+#endif /* CONFIG_ACPI */
+
 static struct fwnode_handle *da7219_aad_of_named_fwhandle(struct device *dev,
                                                          const char *name)
 {
@@ -551,6 +571,9 @@ static struct fwnode_handle 
*da7219_aad_of_named_fwhandle(struct device *dev,
                        of_node = to_of_node(child);
                        if (of_node_cmp(of_node->name, name) == 0)
                                return child;
+               } else if (is_acpi_data_node(child)) {
+                       if (da7219_aad_of_acpi_node_matched(child, name))
+                               return child;
                }
        }

@@ -787,8 +810,9 @@ int da7219_aad_init(struct snd_soc_codec *codec)
        da7219->aad = da7219_aad;
        da7219_aad->codec = codec;

-       /* Handle any DT/platform data */
-       if ((codec->dev->of_node) && (da7219->pdata))
+       /* Handle any DT/ACPI/platform data */
+       if (((codec->dev->of_node) || is_acpi_node(codec->dev->fwnode)) &&
+           (da7219->pdata))
                da7219->pdata->aad_pdata = da7219_aad_of_to_pdata(codec);

        da7219_aad_handle_pdata(codec);
diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c
index 6c6c8db..bc32322 100644
--- a/sound/soc/codecs/da7219.c
+++ b/sound/soc/codecs/da7219.c
@@ -14,6 +14,7 @@
 #include <linux/clk.h>
 #include <linux/i2c.h>
 #include <linux/of_device.h>
+#include <linux/acpi.h>
 #include <linux/property.h>
 #include <linux/regmap.h>
 #include <linux/slab.h>
@@ -1418,7 +1419,7 @@ static struct snd_soc_dai_driver da7219_dai = {


 /*
- * DT
+ * DT/ACPI
  */

 static const struct of_device_id da7219_of_match[] = {
@@ -1656,8 +1657,8 @@ static int da7219_probe(struct snd_soc_codec *codec)
                break;
        }

-       /* Handle DT/Platform data */
-       if (codec->dev->of_node)
+       /* Handle DT/ACPI/Platform data */
+       if (codec->dev->of_node || is_acpi_node(codec->dev->fwnode))
                da7219->pdata = da7219_of_to_pdata(codec);
        else
                da7219->pdata = dev_get_platdata(codec->dev);
--
1.9.3

Reply via email to