* [PATCH v3 0/2] ASoC: da7219: Convert driver to use generic FW functions
@ 2016-06-14 13:56 Adam Thomson
2016-06-14 13:56 ` [PATCH v3 1/2] device property: Add function to search for named child of device Adam Thomson
2016-06-14 13:56 ` [PATCH v3 2/2] ASoC: da7219: Convert driver to use generic device/fwnode functions Adam Thomson
0 siblings, 2 replies; 7+ messages in thread
From: Adam Thomson @ 2016-06-14 13:56 UTC (permalink / raw)
To: Robert Moore, Lv Zheng, Rafael J.Wysocki, Heikki Krogerus,
Mika Westerberg, Len Brown, Andy Shevchenko, Rob Herring,
Frank Rowand, Mark Brown, Liam Girdwood, Jaroslav Kysela,
Takashi Iwai, Greg Kroah-Hartman
Cc: devicetree, alsa-devel, Support Opensource, linux-kernel,
linux-acpi, Sathyanarayana Nujella, devel
This patch set converts the da7219 codec driver to use device/fwnode functions
to access properties, instead of the DT only of_* functions, allowing ACPI
to be used as well.
The DT bindings for da7219 have a device node for the main codec properties,
and a named child node (da7219_aad), which contains all of the accessory
detection related properties for the device. ACPI also supports this kind of
FW hierarchy (data only sub-nodes), but some support in the kernel needs to be
added to take make use of this in driver code.
The first patch adds functions to allow searching for a named child node of a
device, for both DT and ACPI, and the second patch updates the codec driver to
use the standard device/fwnode calls, including this new function.
These changes are based on the v4.7-rc3 kernel.
Changes in v3:
- Use of_node_cmp() in device_get_named_child_node() to match DT node.
Changes in v2:
- Rebase to v4.7-rc1
- Small updates to codec patch based on previous reviewer comments
Adam Thomson (2):
device property: Add function to search for named child of device
ASoC: da7219: Convert driver to use generic device/fwnode functions
drivers/base/property.c | 28 ++++++++++++
include/acpi/acpi_bus.h | 7 +++
include/linux/acpi.h | 6 +++
include/linux/of.h | 14 +++---
include/linux/property.h | 3 ++
sound/soc/codecs/da7219-aad.c | 103 +++++++++++++++++++++---------------------
sound/soc/codecs/da7219.c | 34 +++++++-------
7 files changed, 119 insertions(+), 76 deletions(-)
--
1.9.3
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 1/2] device property: Add function to search for named child of device
2016-06-14 13:56 [PATCH v3 0/2] ASoC: da7219: Convert driver to use generic FW functions Adam Thomson
@ 2016-06-14 13:56 ` Adam Thomson
[not found] ` <866c9edccdd89805f6a0c0aa92f8a78ae616ed61.1465908072.git.Adam.Thomson.Opensource-WBD+wuPFNBhBDgjK7y7TUQ@public.gmane.org>
2016-06-14 13:56 ` [PATCH v3 2/2] ASoC: da7219: Convert driver to use generic device/fwnode functions Adam Thomson
1 sibling, 1 reply; 7+ messages in thread
From: Adam Thomson @ 2016-06-14 13:56 UTC (permalink / raw)
To: Robert Moore, Lv Zheng, Rafael J.Wysocki, Heikki Krogerus,
Mika Westerberg, Len Brown, Andy Shevchenko, Rob Herring,
Frank Rowand, Mark Brown, Liam Girdwood, Jaroslav Kysela,
Takashi Iwai, Greg Kroah-Hartman
Cc: devicetree, alsa-devel, Support Opensource, linux-kernel,
linux-acpi, Sathyanarayana Nujella, devel
For device nodes in both DT and ACPI, it possible to have named
child nodes which contain properties (an existing example being
gpio-leds). This adds a function to find a named child node for
a device which can be used by drivers for property retrieval.
For DT data node name matching, of_node_cmp() and similar functions are made
available outside of CONFIG_OF block so the new function can reference these
for DT and non-DT builds.
For ACPI data node name matching, a helper function is also added
which returns false if CONFIG_ACPI is not set, otherwise it
performs a string comparison on the data node name. This avoids
using the acpi_data_node struct for non CONFIG_ACPI builds,
which would otherwise cause a build failure.
Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
Tested-by: Sathyanarayana Nujella <sathyanarayana.nujella@intel.com>
---
Changes in v3:
- Move of_*_cmp() functions in of.h outside of CONFIG_OF block so they are
available for non-DT builds
- In device_get_named_child_node(), use of_node_cmp() helper macro instead of
strcasecmp() (node names not alway case insensitive, depending on platform).
Changes in v2:
- Rebase to v4.7-rc1
drivers/base/property.c | 28 ++++++++++++++++++++++++++++
include/acpi/acpi_bus.h | 7 +++++++
include/linux/acpi.h | 6 ++++++
include/linux/of.h | 14 +++++++-------
include/linux/property.h | 3 +++
5 files changed, 51 insertions(+), 7 deletions(-)
diff --git a/drivers/base/property.c b/drivers/base/property.c
index f38c21d..43a36d6 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -888,6 +888,34 @@ struct fwnode_handle *device_get_next_child_node(struct device *dev,
EXPORT_SYMBOL_GPL(device_get_next_child_node);
/**
+ * device_get_named_child_node - Return first matching named child node handle
+ * @dev: Device to find the named child node for.
+ * @childname: String to match child node name against.
+ */
+struct fwnode_handle *device_get_named_child_node(struct device *dev,
+ const char *childname)
+{
+ struct fwnode_handle *child;
+
+ /*
+ * Find first matching named child node of this device.
+ * For ACPI this will be a data only sub-node.
+ */
+ device_for_each_child_node(dev, child) {
+ if (is_of_node(child)) {
+ if (!of_node_cmp(to_of_node(child)->name, childname))
+ return child;
+ } else if (is_acpi_data_node(child)) {
+ if (acpi_data_node_match(child, childname))
+ return child;
+ }
+ }
+
+ return NULL;
+}
+EXPORT_SYMBOL_GPL(device_get_named_child_node);
+
+/**
* fwnode_handle_put - Drop reference to a device node
* @fwnode: Pointer to the device node to drop the reference to.
*
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index 788c6c3..993bdd0 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -420,6 +420,13 @@ static inline struct acpi_data_node *to_acpi_data_node(struct fwnode_handle *fwn
container_of(fwnode, struct acpi_data_node, fwnode) : NULL;
}
+static inline bool acpi_data_node_match(struct fwnode_handle *fwnode,
+ const char *name)
+{
+ return is_acpi_data_node(fwnode) ?
+ (!strcasecmp(to_acpi_data_node(fwnode)->name, name)) : false;
+}
+
static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev)
{
return &adev->fwnode;
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 288fac5..03039c4 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -568,6 +568,12 @@ static inline struct acpi_data_node *to_acpi_data_node(struct fwnode_handle *fwn
return NULL;
}
+static inline bool acpi_data_node_match(struct fwnode_handle *fwnode,
+ const char *name)
+{
+ return false;
+}
+
static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev)
{
return NULL;
diff --git a/include/linux/of.h b/include/linux/of.h
index 74eb28c..310e32f 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -238,13 +238,6 @@ static inline unsigned long of_read_ulong(const __be32 *cell, int size)
#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1
#endif
-/* Default string compare functions, Allow arch asm/prom.h to override */
-#if !defined(of_compat_cmp)
-#define of_compat_cmp(s1, s2, l) strcasecmp((s1), (s2))
-#define of_prop_cmp(s1, s2) strcmp((s1), (s2))
-#define of_node_cmp(s1, s2) strcasecmp((s1), (s2))
-#endif
-
#define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags)
#define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags)
@@ -726,6 +719,13 @@ static inline void of_property_clear_flag(struct property *p, unsigned long flag
#define of_match_node(_matches, _node) NULL
#endif /* CONFIG_OF */
+/* Default string compare functions, Allow arch asm/prom.h to override */
+#if !defined(of_compat_cmp)
+#define of_compat_cmp(s1, s2, l) strcasecmp((s1), (s2))
+#define of_prop_cmp(s1, s2) strcmp((s1), (s2))
+#define of_node_cmp(s1, s2) strcasecmp((s1), (s2))
+#endif
+
#if defined(CONFIG_OF) && defined(CONFIG_NUMA)
extern int of_node_to_nid(struct device_node *np);
#else
diff --git a/include/linux/property.h b/include/linux/property.h
index ecab11e..3a2f9ae 100644
--- a/include/linux/property.h
+++ b/include/linux/property.h
@@ -77,6 +77,9 @@ struct fwnode_handle *device_get_next_child_node(struct device *dev,
for (child = device_get_next_child_node(dev, NULL); child; \
child = device_get_next_child_node(dev, child))
+struct fwnode_handle *device_get_named_child_node(struct device *dev,
+ const char *childname);
+
void fwnode_handle_put(struct fwnode_handle *fwnode);
unsigned int device_get_child_node_count(struct device *dev);
--
1.9.3
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 2/2] ASoC: da7219: Convert driver to use generic device/fwnode functions
2016-06-14 13:56 [PATCH v3 0/2] ASoC: da7219: Convert driver to use generic FW functions Adam Thomson
2016-06-14 13:56 ` [PATCH v3 1/2] device property: Add function to search for named child of device Adam Thomson
@ 2016-06-14 13:56 ` Adam Thomson
2016-06-14 14:14 ` Andy Shevchenko
1 sibling, 1 reply; 7+ messages in thread
From: Adam Thomson @ 2016-06-14 13:56 UTC (permalink / raw)
To: Robert Moore, Lv Zheng, Rafael J.Wysocki, Heikki Krogerus,
Mika Westerberg, Len Brown, Andy Shevchenko, Rob Herring,
Frank Rowand, Mark Brown, Liam Girdwood, Jaroslav Kysela,
Takashi Iwai, Greg Kroah-Hartman
Cc: devicetree, alsa-devel, Support Opensource, linux-kernel,
linux-acpi, Sathyanarayana Nujella, devel
This change converts the driver from using the of_* functions to using
the device_* and fwnode_* functions for accssing FW related data.
Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
Tested-by: Sathyanarayana Nujella <sathyanarayana.nujella@intel.com>
---
Changes in v3:
- Rebase to v4.7-rc1
- Remove unnecesary brackets in if statement for AAD pdata checking.
- Move assignment of add_np to be immediately prior to NULL check, for ease of
reading.
Changes in v2:
- Rename functions to use _fw_ instead of _of_, to align with generic access.
- Use new device property function to find named child, rather than local
function.
- Remove checking for DT/ACPI fwnode types, and perform FW reading if platform
data not already provided.
- Remove ACPI and OF includes for AAD code, as no longer needed.
- Restore accidentally removed blank line.
sound/soc/codecs/da7219-aad.c | 103 +++++++++++++++++++++---------------------
sound/soc/codecs/da7219.c | 34 +++++++-------
2 files changed, 68 insertions(+), 69 deletions(-)
diff --git a/sound/soc/codecs/da7219-aad.c b/sound/soc/codecs/da7219-aad.c
index 9459593..f0057cd 100644
--- a/sound/soc/codecs/da7219-aad.c
+++ b/sound/soc/codecs/da7219-aad.c
@@ -13,8 +13,8 @@
#include <linux/module.h>
#include <linux/platform_device.h>
-#include <linux/of_device.h>
-#include <linux/of_irq.h>
+#include <linux/i2c.h>
+#include <linux/property.h>
#include <linux/pm_wakeirq.h>
#include <linux/slab.h>
#include <linux/delay.h>
@@ -382,11 +382,11 @@ 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
- da7219_aad_of_micbias_pulse_lvl(struct snd_soc_codec *codec, u32 val)
+ da7219_aad_fw_micbias_pulse_lvl(struct snd_soc_codec *codec, u32 val)
{
switch (val) {
case 2800:
@@ -400,7 +400,7 @@ static enum da7219_aad_micbias_pulse_lvl
}
static enum da7219_aad_btn_cfg
- da7219_aad_of_btn_cfg(struct snd_soc_codec *codec, u32 val)
+ da7219_aad_fw_btn_cfg(struct snd_soc_codec *codec, u32 val)
{
switch (val) {
case 2:
@@ -424,7 +424,7 @@ static enum da7219_aad_btn_cfg
}
static enum da7219_aad_mic_det_thr
- da7219_aad_of_mic_det_thr(struct snd_soc_codec *codec, u32 val)
+ da7219_aad_fw_mic_det_thr(struct snd_soc_codec *codec, u32 val)
{
switch (val) {
case 200:
@@ -442,7 +442,7 @@ static enum da7219_aad_mic_det_thr
}
static enum da7219_aad_jack_ins_deb
- da7219_aad_of_jack_ins_deb(struct snd_soc_codec *codec, u32 val)
+ da7219_aad_fw_jack_ins_deb(struct snd_soc_codec *codec, u32 val)
{
switch (val) {
case 5:
@@ -468,7 +468,7 @@ static enum da7219_aad_jack_ins_deb
}
static enum da7219_aad_jack_det_rate
- da7219_aad_of_jack_det_rate(struct snd_soc_codec *codec, const char *str)
+ da7219_aad_fw_jack_det_rate(struct snd_soc_codec *codec, const char *str)
{
if (!strcmp(str, "32ms_64ms")) {
return DA7219_AAD_JACK_DET_RATE_32_64MS;
@@ -485,7 +485,7 @@ static enum da7219_aad_jack_det_rate
}
static enum da7219_aad_jack_rem_deb
- da7219_aad_of_jack_rem_deb(struct snd_soc_codec *codec, u32 val)
+ da7219_aad_fw_jack_rem_deb(struct snd_soc_codec *codec, u32 val)
{
switch (val) {
case 1:
@@ -503,7 +503,7 @@ static enum da7219_aad_jack_rem_deb
}
static enum da7219_aad_btn_avg
- da7219_aad_of_btn_avg(struct snd_soc_codec *codec, u32 val)
+ da7219_aad_fw_btn_avg(struct snd_soc_codec *codec, u32 val)
{
switch (val) {
case 1:
@@ -521,7 +521,7 @@ static enum da7219_aad_btn_avg
}
static enum da7219_aad_adc_1bit_rpt
- da7219_aad_of_adc_1bit_rpt(struct snd_soc_codec *codec, u32 val)
+ da7219_aad_fw_adc_1bit_rpt(struct snd_soc_codec *codec, u32 val)
{
switch (val) {
case 1:
@@ -538,97 +538,96 @@ static enum da7219_aad_adc_1bit_rpt
}
}
-static struct da7219_aad_pdata *da7219_aad_of_to_pdata(struct snd_soc_codec *codec)
+static struct da7219_aad_pdata *da7219_aad_fw_to_pdata(struct snd_soc_codec *codec)
{
- struct device_node *np = codec->dev->of_node;
- struct device_node *aad_np = of_find_node_by_name(np, "da7219_aad");
+ struct device *dev = codec->dev;
+ struct i2c_client *i2c = to_i2c_client(dev);
+ struct fwnode_handle *aad_np;
struct da7219_aad_pdata *aad_pdata;
- const char *of_str;
- u32 of_val32;
+ const char *fw_str;
+ u32 fw_val32;
+ aad_np = device_get_named_child_node(dev, "da7219_aad");
if (!aad_np)
return NULL;
aad_pdata = devm_kzalloc(codec->dev, sizeof(*aad_pdata), GFP_KERNEL);
if (!aad_pdata)
- goto out;
+ return NULL;
- aad_pdata->irq = irq_of_parse_and_map(np, 0);
+ aad_pdata->irq = i2c->irq;
- if (of_property_read_u32(aad_np, "dlg,micbias-pulse-lvl",
- &of_val32) >= 0)
+ if (fwnode_property_read_u32(aad_np, "dlg,micbias-pulse-lvl",
+ &fw_val32) >= 0)
aad_pdata->micbias_pulse_lvl =
- da7219_aad_of_micbias_pulse_lvl(codec, of_val32);
+ da7219_aad_fw_micbias_pulse_lvl(codec, fw_val32);
else
aad_pdata->micbias_pulse_lvl = DA7219_AAD_MICBIAS_PULSE_LVL_OFF;
- if (of_property_read_u32(aad_np, "dlg,micbias-pulse-time",
- &of_val32) >= 0)
- aad_pdata->micbias_pulse_time = of_val32;
+ if (fwnode_property_read_u32(aad_np, "dlg,micbias-pulse-time",
+ &fw_val32) >= 0)
+ aad_pdata->micbias_pulse_time = fw_val32;
- if (of_property_read_u32(aad_np, "dlg,btn-cfg", &of_val32) >= 0)
- aad_pdata->btn_cfg = da7219_aad_of_btn_cfg(codec, of_val32);
+ if (fwnode_property_read_u32(aad_np, "dlg,btn-cfg", &fw_val32) >= 0)
+ aad_pdata->btn_cfg = da7219_aad_fw_btn_cfg(codec, fw_val32);
else
aad_pdata->btn_cfg = DA7219_AAD_BTN_CFG_10MS;
- if (of_property_read_u32(aad_np, "dlg,mic-det-thr", &of_val32) >= 0)
+ if (fwnode_property_read_u32(aad_np, "dlg,mic-det-thr", &fw_val32) >= 0)
aad_pdata->mic_det_thr =
- da7219_aad_of_mic_det_thr(codec, of_val32);
+ da7219_aad_fw_mic_det_thr(codec, fw_val32);
else
aad_pdata->mic_det_thr = DA7219_AAD_MIC_DET_THR_500_OHMS;
- if (of_property_read_u32(aad_np, "dlg,jack-ins-deb", &of_val32) >= 0)
+ if (fwnode_property_read_u32(aad_np, "dlg,jack-ins-deb", &fw_val32) >= 0)
aad_pdata->jack_ins_deb =
- da7219_aad_of_jack_ins_deb(codec, of_val32);
+ da7219_aad_fw_jack_ins_deb(codec, fw_val32);
else
aad_pdata->jack_ins_deb = DA7219_AAD_JACK_INS_DEB_20MS;
- if (!of_property_read_string(aad_np, "dlg,jack-det-rate", &of_str))
+ if (!fwnode_property_read_string(aad_np, "dlg,jack-det-rate", &fw_str))
aad_pdata->jack_det_rate =
- da7219_aad_of_jack_det_rate(codec, of_str);
+ da7219_aad_fw_jack_det_rate(codec, fw_str);
else
aad_pdata->jack_det_rate = DA7219_AAD_JACK_DET_RATE_256_512MS;
- if (of_property_read_u32(aad_np, "dlg,jack-rem-deb", &of_val32) >= 0)
+ if (fwnode_property_read_u32(aad_np, "dlg,jack-rem-deb", &fw_val32) >= 0)
aad_pdata->jack_rem_deb =
- da7219_aad_of_jack_rem_deb(codec, of_val32);
+ da7219_aad_fw_jack_rem_deb(codec, fw_val32);
else
aad_pdata->jack_rem_deb = DA7219_AAD_JACK_REM_DEB_1MS;
- if (of_property_read_u32(aad_np, "dlg,a-d-btn-thr", &of_val32) >= 0)
- aad_pdata->a_d_btn_thr = (u8) of_val32;
+ if (fwnode_property_read_u32(aad_np, "dlg,a-d-btn-thr", &fw_val32) >= 0)
+ aad_pdata->a_d_btn_thr = (u8) fw_val32;
else
aad_pdata->a_d_btn_thr = 0xA;
- if (of_property_read_u32(aad_np, "dlg,d-b-btn-thr", &of_val32) >= 0)
- aad_pdata->d_b_btn_thr = (u8) of_val32;
+ if (fwnode_property_read_u32(aad_np, "dlg,d-b-btn-thr", &fw_val32) >= 0)
+ aad_pdata->d_b_btn_thr = (u8) fw_val32;
else
aad_pdata->d_b_btn_thr = 0x16;
- if (of_property_read_u32(aad_np, "dlg,b-c-btn-thr", &of_val32) >= 0)
- aad_pdata->b_c_btn_thr = (u8) of_val32;
+ if (fwnode_property_read_u32(aad_np, "dlg,b-c-btn-thr", &fw_val32) >= 0)
+ aad_pdata->b_c_btn_thr = (u8) fw_val32;
else
aad_pdata->b_c_btn_thr = 0x21;
- if (of_property_read_u32(aad_np, "dlg,c-mic-btn-thr", &of_val32) >= 0)
- aad_pdata->c_mic_btn_thr = (u8) of_val32;
+ if (fwnode_property_read_u32(aad_np, "dlg,c-mic-btn-thr", &fw_val32) >= 0)
+ aad_pdata->c_mic_btn_thr = (u8) fw_val32;
else
aad_pdata->c_mic_btn_thr = 0x3E;
- if (of_property_read_u32(aad_np, "dlg,btn-avg", &of_val32) >= 0)
- aad_pdata->btn_avg = da7219_aad_of_btn_avg(codec, of_val32);
+ if (fwnode_property_read_u32(aad_np, "dlg,btn-avg", &fw_val32) >= 0)
+ aad_pdata->btn_avg = da7219_aad_fw_btn_avg(codec, fw_val32);
else
aad_pdata->btn_avg = DA7219_AAD_BTN_AVG_2;
- if (of_property_read_u32(aad_np, "dlg,adc-1bit-rpt", &of_val32) >= 0)
+ if (fwnode_property_read_u32(aad_np, "dlg,adc-1bit-rpt", &fw_val32) >= 0)
aad_pdata->adc_1bit_rpt =
- da7219_aad_of_adc_1bit_rpt(codec, of_val32);
+ da7219_aad_fw_adc_1bit_rpt(codec, fw_val32);
else
aad_pdata->adc_1bit_rpt = DA7219_AAD_ADC_1BIT_RPT_1;
-out:
- of_node_put(aad_np);
-
return aad_pdata;
}
@@ -769,9 +768,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))
- da7219->pdata->aad_pdata = da7219_aad_of_to_pdata(codec);
+ /* Handle any DT/ACPI/platform data */
+ if (da7219->pdata && !da7219->pdata->aad_pdata)
+ da7219->pdata->aad_pdata = da7219_aad_fw_to_pdata(codec);
da7219_aad_handle_pdata(codec);
diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c
index 5c93899..50ea943 100644
--- a/sound/soc/codecs/da7219.c
+++ b/sound/soc/codecs/da7219.c
@@ -15,6 +15,7 @@
#include <linux/clk.h>
#include <linux/i2c.h>
#include <linux/of_device.h>
+#include <linux/property.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#include <linux/pm.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[] = {
@@ -1434,7 +1435,7 @@ static const struct acpi_device_id da7219_acpi_match[] = {
MODULE_DEVICE_TABLE(acpi, da7219_acpi_match);
static enum da7219_micbias_voltage
- da7219_of_micbias_lvl(struct snd_soc_codec *codec, u32 val)
+ da7219_fw_micbias_lvl(struct device *dev, u32 val)
{
switch (val) {
case 1600:
@@ -1450,13 +1451,13 @@ static enum da7219_micbias_voltage
case 2600:
return DA7219_MICBIAS_2_6V;
default:
- dev_warn(codec->dev, "Invalid micbias level");
+ dev_warn(dev, "Invalid micbias level");
return DA7219_MICBIAS_2_2V;
}
}
static enum da7219_mic_amp_in_sel
- da7219_of_mic_amp_in_sel(struct snd_soc_codec *codec, const char *str)
+ da7219_fw_mic_amp_in_sel(struct device *dev, const char *str)
{
if (!strcmp(str, "diff")) {
return DA7219_MIC_AMP_IN_SEL_DIFF;
@@ -1465,29 +1466,29 @@ static enum da7219_mic_amp_in_sel
} else if (!strcmp(str, "se_n")) {
return DA7219_MIC_AMP_IN_SEL_SE_N;
} else {
- dev_warn(codec->dev, "Invalid mic input type selection");
+ dev_warn(dev, "Invalid mic input type selection");
return DA7219_MIC_AMP_IN_SEL_DIFF;
}
}
-static struct da7219_pdata *da7219_of_to_pdata(struct snd_soc_codec *codec)
+static struct da7219_pdata *da7219_fw_to_pdata(struct snd_soc_codec *codec)
{
- struct device_node *np = codec->dev->of_node;
+ struct device *dev = codec->dev;
struct da7219_pdata *pdata;
const char *of_str;
u32 of_val32;
- pdata = devm_kzalloc(codec->dev, sizeof(*pdata), GFP_KERNEL);
+ pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
if (!pdata)
return NULL;
- if (of_property_read_u32(np, "dlg,micbias-lvl", &of_val32) >= 0)
- pdata->micbias_lvl = da7219_of_micbias_lvl(codec, of_val32);
+ if (device_property_read_u32(dev, "dlg,micbias-lvl", &of_val32) >= 0)
+ pdata->micbias_lvl = da7219_fw_micbias_lvl(dev, of_val32);
else
pdata->micbias_lvl = DA7219_MICBIAS_2_2V;
- if (!of_property_read_string(np, "dlg,mic-amp-in-sel", &of_str))
- pdata->mic_amp_in_sel = da7219_of_mic_amp_in_sel(codec, of_str);
+ if (!device_property_read_string(dev, "dlg,mic-amp-in-sel", &of_str))
+ pdata->mic_amp_in_sel = da7219_fw_mic_amp_in_sel(dev, of_str);
else
pdata->mic_amp_in_sel = DA7219_MIC_AMP_IN_SEL_DIFF;
@@ -1662,11 +1663,10 @@ static int da7219_probe(struct snd_soc_codec *codec)
break;
}
- /* Handle DT/Platform data */
- if (codec->dev->of_node)
- da7219->pdata = da7219_of_to_pdata(codec);
- else
- da7219->pdata = dev_get_platdata(codec->dev);
+ /* Handle DT/ACPI/Platform data */
+ da7219->pdata = dev_get_platdata(codec->dev);
+ if (!da7219->pdata)
+ da7219->pdata = da7219_fw_to_pdata(codec);
da7219_handle_pdata(codec);
--
1.9.3
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3 2/2] ASoC: da7219: Convert driver to use generic device/fwnode functions
2016-06-14 13:56 ` [PATCH v3 2/2] ASoC: da7219: Convert driver to use generic device/fwnode functions Adam Thomson
@ 2016-06-14 14:14 ` Andy Shevchenko
0 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2016-06-14 14:14 UTC (permalink / raw)
To: Adam Thomson, Robert Moore, Lv Zheng, Rafael J.Wysocki,
Heikki Krogerus, Mika Westerberg, Len Brown, Rob Herring,
Frank Rowand, Mark Brown, Liam Girdwood, Jaroslav Kysela,
Takashi Iwai, Greg Kroah-Hartman
Cc: linux-acpi, devel, devicetree, alsa-devel, linux-kernel,
Support Opensource, Sathyanarayana Nujella
On Tue, 2016-06-14 at 14:56 +0100, Adam Thomson wrote:
> This change converts the driver from using the of_* functions to using
> the device_* and fwnode_* functions for accssing FW related data.
>
> Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
> Tested-by: Sathyanarayana Nujella <sathyanarayana.nujella@intel.com>
FWIW:
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>
> Changes in v3:
> - Rebase to v4.7-rc1
> - Remove unnecesary brackets in if statement for AAD pdata checking.
> - Move assignment of add_np to be immediately prior to NULL check,
> for ease of
> reading.
>
> Changes in v2:
> - Rename functions to use _fw_ instead of _of_, to align with generic
> access.
> - Use new device property function to find named child, rather than
> local
> function.
> - Remove checking for DT/ACPI fwnode types, and perform FW reading if
> platform
> data not already provided.
> - Remove ACPI and OF includes for AAD code, as no longer needed.
> - Restore accidentally removed blank line.
>
> sound/soc/codecs/da7219-aad.c | 103 +++++++++++++++++++++----------
> -----------
> sound/soc/codecs/da7219.c | 34 +++++++-------
> 2 files changed, 68 insertions(+), 69 deletions(-)
>
> diff --git a/sound/soc/codecs/da7219-aad.c b/sound/soc/codecs/da7219-
> aad.c
> index 9459593..f0057cd 100644
> --- a/sound/soc/codecs/da7219-aad.c
> +++ b/sound/soc/codecs/da7219-aad.c
> @@ -13,8 +13,8 @@
>
> #include <linux/module.h>
> #include <linux/platform_device.h>
> -#include <linux/of_device.h>
> -#include <linux/of_irq.h>
> +#include <linux/i2c.h>
> +#include <linux/property.h>
> #include <linux/pm_wakeirq.h>
> #include <linux/slab.h>
> #include <linux/delay.h>
> @@ -382,11 +382,11 @@ 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
> - da7219_aad_of_micbias_pulse_lvl(struct snd_soc_codec *codec,
> u32 val)
> + da7219_aad_fw_micbias_pulse_lvl(struct snd_soc_codec *codec,
> u32 val)
> {
> switch (val) {
> case 2800:
> @@ -400,7 +400,7 @@ static enum da7219_aad_micbias_pulse_lvl
> }
>
> static enum da7219_aad_btn_cfg
> - da7219_aad_of_btn_cfg(struct snd_soc_codec *codec, u32 val)
> + da7219_aad_fw_btn_cfg(struct snd_soc_codec *codec, u32 val)
> {
> switch (val) {
> case 2:
> @@ -424,7 +424,7 @@ static enum da7219_aad_btn_cfg
> }
>
> static enum da7219_aad_mic_det_thr
> - da7219_aad_of_mic_det_thr(struct snd_soc_codec *codec, u32
> val)
> + da7219_aad_fw_mic_det_thr(struct snd_soc_codec *codec, u32
> val)
> {
> switch (val) {
> case 200:
> @@ -442,7 +442,7 @@ static enum da7219_aad_mic_det_thr
> }
>
> static enum da7219_aad_jack_ins_deb
> - da7219_aad_of_jack_ins_deb(struct snd_soc_codec *codec, u32
> val)
> + da7219_aad_fw_jack_ins_deb(struct snd_soc_codec *codec, u32
> val)
> {
> switch (val) {
> case 5:
> @@ -468,7 +468,7 @@ static enum da7219_aad_jack_ins_deb
> }
>
> static enum da7219_aad_jack_det_rate
> - da7219_aad_of_jack_det_rate(struct snd_soc_codec *codec,
> const char *str)
> + da7219_aad_fw_jack_det_rate(struct snd_soc_codec *codec,
> const char *str)
> {
> if (!strcmp(str, "32ms_64ms")) {
> return DA7219_AAD_JACK_DET_RATE_32_64MS;
> @@ -485,7 +485,7 @@ static enum da7219_aad_jack_det_rate
> }
>
> static enum da7219_aad_jack_rem_deb
> - da7219_aad_of_jack_rem_deb(struct snd_soc_codec *codec, u32
> val)
> + da7219_aad_fw_jack_rem_deb(struct snd_soc_codec *codec, u32
> val)
> {
> switch (val) {
> case 1:
> @@ -503,7 +503,7 @@ static enum da7219_aad_jack_rem_deb
> }
>
> static enum da7219_aad_btn_avg
> - da7219_aad_of_btn_avg(struct snd_soc_codec *codec, u32 val)
> + da7219_aad_fw_btn_avg(struct snd_soc_codec *codec, u32 val)
> {
> switch (val) {
> case 1:
> @@ -521,7 +521,7 @@ static enum da7219_aad_btn_avg
> }
>
> static enum da7219_aad_adc_1bit_rpt
> - da7219_aad_of_adc_1bit_rpt(struct snd_soc_codec *codec, u32
> val)
> + da7219_aad_fw_adc_1bit_rpt(struct snd_soc_codec *codec, u32
> val)
> {
> switch (val) {
> case 1:
> @@ -538,97 +538,96 @@ static enum da7219_aad_adc_1bit_rpt
> }
> }
>
> -static struct da7219_aad_pdata *da7219_aad_of_to_pdata(struct
> snd_soc_codec *codec)
> +static struct da7219_aad_pdata *da7219_aad_fw_to_pdata(struct
> snd_soc_codec *codec)
> {
> - struct device_node *np = codec->dev->of_node;
> - struct device_node *aad_np = of_find_node_by_name(np,
> "da7219_aad");
> + struct device *dev = codec->dev;
> + struct i2c_client *i2c = to_i2c_client(dev);
> + struct fwnode_handle *aad_np;
> struct da7219_aad_pdata *aad_pdata;
> - const char *of_str;
> - u32 of_val32;
> + const char *fw_str;
> + u32 fw_val32;
>
> + aad_np = device_get_named_child_node(dev, "da7219_aad");
> if (!aad_np)
> return NULL;
>
> aad_pdata = devm_kzalloc(codec->dev, sizeof(*aad_pdata),
> GFP_KERNEL);
> if (!aad_pdata)
> - goto out;
> + return NULL;
>
> - aad_pdata->irq = irq_of_parse_and_map(np, 0);
> + aad_pdata->irq = i2c->irq;
>
> - if (of_property_read_u32(aad_np, "dlg,micbias-pulse-lvl",
> - &of_val32) >= 0)
> + if (fwnode_property_read_u32(aad_np, "dlg,micbias-pulse-lvl",
> + &fw_val32) >= 0)
> aad_pdata->micbias_pulse_lvl =
> - da7219_aad_of_micbias_pulse_lvl(codec,
> of_val32);
> + da7219_aad_fw_micbias_pulse_lvl(codec,
> fw_val32);
> else
> aad_pdata->micbias_pulse_lvl =
> DA7219_AAD_MICBIAS_PULSE_LVL_OFF;
>
> - if (of_property_read_u32(aad_np, "dlg,micbias-pulse-time",
> - &of_val32) >= 0)
> - aad_pdata->micbias_pulse_time = of_val32;
> + if (fwnode_property_read_u32(aad_np, "dlg,micbias-pulse-
> time",
> + &fw_val32) >= 0)
> + aad_pdata->micbias_pulse_time = fw_val32;
>
> - if (of_property_read_u32(aad_np, "dlg,btn-cfg", &of_val32) >=
> 0)
> - aad_pdata->btn_cfg = da7219_aad_of_btn_cfg(codec,
> of_val32);
> + if (fwnode_property_read_u32(aad_np, "dlg,btn-cfg",
> &fw_val32) >= 0)
> + aad_pdata->btn_cfg = da7219_aad_fw_btn_cfg(codec,
> fw_val32);
> else
> aad_pdata->btn_cfg = DA7219_AAD_BTN_CFG_10MS;
>
> - if (of_property_read_u32(aad_np, "dlg,mic-det-thr",
> &of_val32) >= 0)
> + if (fwnode_property_read_u32(aad_np, "dlg,mic-det-thr",
> &fw_val32) >= 0)
> aad_pdata->mic_det_thr =
> - da7219_aad_of_mic_det_thr(codec, of_val32);
> + da7219_aad_fw_mic_det_thr(codec, fw_val32);
> else
> aad_pdata->mic_det_thr =
> DA7219_AAD_MIC_DET_THR_500_OHMS;
>
> - if (of_property_read_u32(aad_np, "dlg,jack-ins-deb",
> &of_val32) >= 0)
> + if (fwnode_property_read_u32(aad_np, "dlg,jack-ins-deb",
> &fw_val32) >= 0)
> aad_pdata->jack_ins_deb =
> - da7219_aad_of_jack_ins_deb(codec, of_val32);
> + da7219_aad_fw_jack_ins_deb(codec, fw_val32);
> else
> aad_pdata->jack_ins_deb =
> DA7219_AAD_JACK_INS_DEB_20MS;
>
> - if (!of_property_read_string(aad_np, "dlg,jack-det-rate",
> &of_str))
> + if (!fwnode_property_read_string(aad_np, "dlg,jack-det-rate",
> &fw_str))
> aad_pdata->jack_det_rate =
> - da7219_aad_of_jack_det_rate(codec, of_str);
> + da7219_aad_fw_jack_det_rate(codec, fw_str);
> else
> aad_pdata->jack_det_rate =
> DA7219_AAD_JACK_DET_RATE_256_512MS;
>
> - if (of_property_read_u32(aad_np, "dlg,jack-rem-deb",
> &of_val32) >= 0)
> + if (fwnode_property_read_u32(aad_np, "dlg,jack-rem-deb",
> &fw_val32) >= 0)
> aad_pdata->jack_rem_deb =
> - da7219_aad_of_jack_rem_deb(codec, of_val32);
> + da7219_aad_fw_jack_rem_deb(codec, fw_val32);
> else
> aad_pdata->jack_rem_deb =
> DA7219_AAD_JACK_REM_DEB_1MS;
>
> - if (of_property_read_u32(aad_np, "dlg,a-d-btn-thr",
> &of_val32) >= 0)
> - aad_pdata->a_d_btn_thr = (u8) of_val32;
> + if (fwnode_property_read_u32(aad_np, "dlg,a-d-btn-thr",
> &fw_val32) >= 0)
> + aad_pdata->a_d_btn_thr = (u8) fw_val32;
> else
> aad_pdata->a_d_btn_thr = 0xA;
>
> - if (of_property_read_u32(aad_np, "dlg,d-b-btn-thr",
> &of_val32) >= 0)
> - aad_pdata->d_b_btn_thr = (u8) of_val32;
> + if (fwnode_property_read_u32(aad_np, "dlg,d-b-btn-thr",
> &fw_val32) >= 0)
> + aad_pdata->d_b_btn_thr = (u8) fw_val32;
> else
> aad_pdata->d_b_btn_thr = 0x16;
>
> - if (of_property_read_u32(aad_np, "dlg,b-c-btn-thr",
> &of_val32) >= 0)
> - aad_pdata->b_c_btn_thr = (u8) of_val32;
> + if (fwnode_property_read_u32(aad_np, "dlg,b-c-btn-thr",
> &fw_val32) >= 0)
> + aad_pdata->b_c_btn_thr = (u8) fw_val32;
> else
> aad_pdata->b_c_btn_thr = 0x21;
>
> - if (of_property_read_u32(aad_np, "dlg,c-mic-btn-thr",
> &of_val32) >= 0)
> - aad_pdata->c_mic_btn_thr = (u8) of_val32;
> + if (fwnode_property_read_u32(aad_np, "dlg,c-mic-btn-thr",
> &fw_val32) >= 0)
> + aad_pdata->c_mic_btn_thr = (u8) fw_val32;
> else
> aad_pdata->c_mic_btn_thr = 0x3E;
>
> - if (of_property_read_u32(aad_np, "dlg,btn-avg", &of_val32) >=
> 0)
> - aad_pdata->btn_avg = da7219_aad_of_btn_avg(codec,
> of_val32);
> + if (fwnode_property_read_u32(aad_np, "dlg,btn-avg",
> &fw_val32) >= 0)
> + aad_pdata->btn_avg = da7219_aad_fw_btn_avg(codec,
> fw_val32);
> else
> aad_pdata->btn_avg = DA7219_AAD_BTN_AVG_2;
>
> - if (of_property_read_u32(aad_np, "dlg,adc-1bit-rpt",
> &of_val32) >= 0)
> + if (fwnode_property_read_u32(aad_np, "dlg,adc-1bit-rpt",
> &fw_val32) >= 0)
> aad_pdata->adc_1bit_rpt =
> - da7219_aad_of_adc_1bit_rpt(codec, of_val32);
> + da7219_aad_fw_adc_1bit_rpt(codec, fw_val32);
> else
> aad_pdata->adc_1bit_rpt = DA7219_AAD_ADC_1BIT_RPT_1;
>
> -out:
> - of_node_put(aad_np);
> -
> return aad_pdata;
> }
>
> @@ -769,9 +768,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))
> - da7219->pdata->aad_pdata =
> da7219_aad_of_to_pdata(codec);
> + /* Handle any DT/ACPI/platform data */
> + if (da7219->pdata && !da7219->pdata->aad_pdata)
> + da7219->pdata->aad_pdata =
> da7219_aad_fw_to_pdata(codec);
>
> da7219_aad_handle_pdata(codec);
>
> diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c
> index 5c93899..50ea943 100644
> --- a/sound/soc/codecs/da7219.c
> +++ b/sound/soc/codecs/da7219.c
> @@ -15,6 +15,7 @@
> #include <linux/clk.h>
> #include <linux/i2c.h>
> #include <linux/of_device.h>
> +#include <linux/property.h>
> #include <linux/regmap.h>
> #include <linux/slab.h>
> #include <linux/pm.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[] = {
> @@ -1434,7 +1435,7 @@ static const struct acpi_device_id
> da7219_acpi_match[] = {
> MODULE_DEVICE_TABLE(acpi, da7219_acpi_match);
>
> static enum da7219_micbias_voltage
> - da7219_of_micbias_lvl(struct snd_soc_codec *codec, u32 val)
> + da7219_fw_micbias_lvl(struct device *dev, u32 val)
> {
> switch (val) {
> case 1600:
> @@ -1450,13 +1451,13 @@ static enum da7219_micbias_voltage
> case 2600:
> return DA7219_MICBIAS_2_6V;
> default:
> - dev_warn(codec->dev, "Invalid micbias level");
> + dev_warn(dev, "Invalid micbias level");
> return DA7219_MICBIAS_2_2V;
> }
> }
>
> static enum da7219_mic_amp_in_sel
> - da7219_of_mic_amp_in_sel(struct snd_soc_codec *codec, const
> char *str)
> + da7219_fw_mic_amp_in_sel(struct device *dev, const char *str)
> {
> if (!strcmp(str, "diff")) {
> return DA7219_MIC_AMP_IN_SEL_DIFF;
> @@ -1465,29 +1466,29 @@ static enum da7219_mic_amp_in_sel
> } else if (!strcmp(str, "se_n")) {
> return DA7219_MIC_AMP_IN_SEL_SE_N;
> } else {
> - dev_warn(codec->dev, "Invalid mic input type
> selection");
> + dev_warn(dev, "Invalid mic input type selection");
> return DA7219_MIC_AMP_IN_SEL_DIFF;
> }
> }
>
> -static struct da7219_pdata *da7219_of_to_pdata(struct snd_soc_codec
> *codec)
> +static struct da7219_pdata *da7219_fw_to_pdata(struct snd_soc_codec
> *codec)
> {
> - struct device_node *np = codec->dev->of_node;
> + struct device *dev = codec->dev;
> struct da7219_pdata *pdata;
> const char *of_str;
> u32 of_val32;
>
> - pdata = devm_kzalloc(codec->dev, sizeof(*pdata), GFP_KERNEL);
> + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> if (!pdata)
> return NULL;
>
> - if (of_property_read_u32(np, "dlg,micbias-lvl", &of_val32) >=
> 0)
> - pdata->micbias_lvl = da7219_of_micbias_lvl(codec,
> of_val32);
> + if (device_property_read_u32(dev, "dlg,micbias-lvl",
> &of_val32) >= 0)
> + pdata->micbias_lvl = da7219_fw_micbias_lvl(dev,
> of_val32);
> else
> pdata->micbias_lvl = DA7219_MICBIAS_2_2V;
>
> - if (!of_property_read_string(np, "dlg,mic-amp-in-sel",
> &of_str))
> - pdata->mic_amp_in_sel =
> da7219_of_mic_amp_in_sel(codec, of_str);
> + if (!device_property_read_string(dev, "dlg,mic-amp-in-sel",
> &of_str))
> + pdata->mic_amp_in_sel = da7219_fw_mic_amp_in_sel(dev,
> of_str);
> else
> pdata->mic_amp_in_sel = DA7219_MIC_AMP_IN_SEL_DIFF;
>
> @@ -1662,11 +1663,10 @@ static int da7219_probe(struct snd_soc_codec
> *codec)
> break;
> }
>
> - /* Handle DT/Platform data */
> - if (codec->dev->of_node)
> - da7219->pdata = da7219_of_to_pdata(codec);
> - else
> - da7219->pdata = dev_get_platdata(codec->dev);
> + /* Handle DT/ACPI/Platform data */
> + da7219->pdata = dev_get_platdata(codec->dev);
> + if (!da7219->pdata)
> + da7219->pdata = da7219_fw_to_pdata(codec);
>
> da7219_handle_pdata(codec);
>
> --
> 1.9.3
>
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 2/2] ASoC: da7219: Convert driver to use generic device/fwnode functions
@ 2016-06-14 14:14 ` Andy Shevchenko
0 siblings, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2016-06-14 14:14 UTC (permalink / raw)
To: Adam Thomson, Robert Moore, Lv Zheng, Rafael J.Wysocki,
Heikki Krogerus, Mika Westerberg, Len Brown, Rob Herring,
Frank Rowand, Mark Brown, Liam Girdwood, Jaroslav Kysela,
Takashi Iwai, Greg Kroah-Hartman
Cc: linux-acpi, devel, devicetree, alsa-devel, linux-kernel,
Support Opensource, Sathyanarayana Nujella
On Tue, 2016-06-14 at 14:56 +0100, Adam Thomson wrote:
> This change converts the driver from using the of_* functions to using
> the device_* and fwnode_* functions for accssing FW related data.
>
> Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
> Tested-by: Sathyanarayana Nujella <sathyanarayana.nujella@intel.com>
FWIW:
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>
> Changes in v3:
> - Rebase to v4.7-rc1
> - Remove unnecesary brackets in if statement for AAD pdata checking.
> - Move assignment of add_np to be immediately prior to NULL check,
> for ease of
> reading.
>
> Changes in v2:
> - Rename functions to use _fw_ instead of _of_, to align with generic
> access.
> - Use new device property function to find named child, rather than
> local
> function.
> - Remove checking for DT/ACPI fwnode types, and perform FW reading if
> platform
> data not already provided.
> - Remove ACPI and OF includes for AAD code, as no longer needed.
> - Restore accidentally removed blank line.
>
> sound/soc/codecs/da7219-aad.c | 103 +++++++++++++++++++++----------
> -----------
> sound/soc/codecs/da7219.c | 34 +++++++-------
> 2 files changed, 68 insertions(+), 69 deletions(-)
>
> diff --git a/sound/soc/codecs/da7219-aad.c b/sound/soc/codecs/da7219-
> aad.c
> index 9459593..f0057cd 100644
> --- a/sound/soc/codecs/da7219-aad.c
> +++ b/sound/soc/codecs/da7219-aad.c
> @@ -13,8 +13,8 @@
>
> #include <linux/module.h>
> #include <linux/platform_device.h>
> -#include <linux/of_device.h>
> -#include <linux/of_irq.h>
> +#include <linux/i2c.h>
> +#include <linux/property.h>
> #include <linux/pm_wakeirq.h>
> #include <linux/slab.h>
> #include <linux/delay.h>
> @@ -382,11 +382,11 @@ 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
> - da7219_aad_of_micbias_pulse_lvl(struct snd_soc_codec *codec,
> u32 val)
> + da7219_aad_fw_micbias_pulse_lvl(struct snd_soc_codec *codec,
> u32 val)
> {
> switch (val) {
> case 2800:
> @@ -400,7 +400,7 @@ static enum da7219_aad_micbias_pulse_lvl
> }
>
> static enum da7219_aad_btn_cfg
> - da7219_aad_of_btn_cfg(struct snd_soc_codec *codec, u32 val)
> + da7219_aad_fw_btn_cfg(struct snd_soc_codec *codec, u32 val)
> {
> switch (val) {
> case 2:
> @@ -424,7 +424,7 @@ static enum da7219_aad_btn_cfg
> }
>
> static enum da7219_aad_mic_det_thr
> - da7219_aad_of_mic_det_thr(struct snd_soc_codec *codec, u32
> val)
> + da7219_aad_fw_mic_det_thr(struct snd_soc_codec *codec, u32
> val)
> {
> switch (val) {
> case 200:
> @@ -442,7 +442,7 @@ static enum da7219_aad_mic_det_thr
> }
>
> static enum da7219_aad_jack_ins_deb
> - da7219_aad_of_jack_ins_deb(struct snd_soc_codec *codec, u32
> val)
> + da7219_aad_fw_jack_ins_deb(struct snd_soc_codec *codec, u32
> val)
> {
> switch (val) {
> case 5:
> @@ -468,7 +468,7 @@ static enum da7219_aad_jack_ins_deb
> }
>
> static enum da7219_aad_jack_det_rate
> - da7219_aad_of_jack_det_rate(struct snd_soc_codec *codec,
> const char *str)
> + da7219_aad_fw_jack_det_rate(struct snd_soc_codec *codec,
> const char *str)
> {
> if (!strcmp(str, "32ms_64ms")) {
> return DA7219_AAD_JACK_DET_RATE_32_64MS;
> @@ -485,7 +485,7 @@ static enum da7219_aad_jack_det_rate
> }
>
> static enum da7219_aad_jack_rem_deb
> - da7219_aad_of_jack_rem_deb(struct snd_soc_codec *codec, u32
> val)
> + da7219_aad_fw_jack_rem_deb(struct snd_soc_codec *codec, u32
> val)
> {
> switch (val) {
> case 1:
> @@ -503,7 +503,7 @@ static enum da7219_aad_jack_rem_deb
> }
>
> static enum da7219_aad_btn_avg
> - da7219_aad_of_btn_avg(struct snd_soc_codec *codec, u32 val)
> + da7219_aad_fw_btn_avg(struct snd_soc_codec *codec, u32 val)
> {
> switch (val) {
> case 1:
> @@ -521,7 +521,7 @@ static enum da7219_aad_btn_avg
> }
>
> static enum da7219_aad_adc_1bit_rpt
> - da7219_aad_of_adc_1bit_rpt(struct snd_soc_codec *codec, u32
> val)
> + da7219_aad_fw_adc_1bit_rpt(struct snd_soc_codec *codec, u32
> val)
> {
> switch (val) {
> case 1:
> @@ -538,97 +538,96 @@ static enum da7219_aad_adc_1bit_rpt
> }
> }
>
> -static struct da7219_aad_pdata *da7219_aad_of_to_pdata(struct
> snd_soc_codec *codec)
> +static struct da7219_aad_pdata *da7219_aad_fw_to_pdata(struct
> snd_soc_codec *codec)
> {
> - struct device_node *np = codec->dev->of_node;
> - struct device_node *aad_np = of_find_node_by_name(np,
> "da7219_aad");
> + struct device *dev = codec->dev;
> + struct i2c_client *i2c = to_i2c_client(dev);
> + struct fwnode_handle *aad_np;
> struct da7219_aad_pdata *aad_pdata;
> - const char *of_str;
> - u32 of_val32;
> + const char *fw_str;
> + u32 fw_val32;
>
> + aad_np = device_get_named_child_node(dev, "da7219_aad");
> if (!aad_np)
> return NULL;
>
> aad_pdata = devm_kzalloc(codec->dev, sizeof(*aad_pdata),
> GFP_KERNEL);
> if (!aad_pdata)
> - goto out;
> + return NULL;
>
> - aad_pdata->irq = irq_of_parse_and_map(np, 0);
> + aad_pdata->irq = i2c->irq;
>
> - if (of_property_read_u32(aad_np, "dlg,micbias-pulse-lvl",
> - &of_val32) >= 0)
> + if (fwnode_property_read_u32(aad_np, "dlg,micbias-pulse-lvl",
> + &fw_val32) >= 0)
> aad_pdata->micbias_pulse_lvl =
> - da7219_aad_of_micbias_pulse_lvl(codec,
> of_val32);
> + da7219_aad_fw_micbias_pulse_lvl(codec,
> fw_val32);
> else
> aad_pdata->micbias_pulse_lvl =
> DA7219_AAD_MICBIAS_PULSE_LVL_OFF;
>
> - if (of_property_read_u32(aad_np, "dlg,micbias-pulse-time",
> - &of_val32) >= 0)
> - aad_pdata->micbias_pulse_time = of_val32;
> + if (fwnode_property_read_u32(aad_np, "dlg,micbias-pulse-
> time",
> + &fw_val32) >= 0)
> + aad_pdata->micbias_pulse_time = fw_val32;
>
> - if (of_property_read_u32(aad_np, "dlg,btn-cfg", &of_val32) >=
> 0)
> - aad_pdata->btn_cfg = da7219_aad_of_btn_cfg(codec,
> of_val32);
> + if (fwnode_property_read_u32(aad_np, "dlg,btn-cfg",
> &fw_val32) >= 0)
> + aad_pdata->btn_cfg = da7219_aad_fw_btn_cfg(codec,
> fw_val32);
> else
> aad_pdata->btn_cfg = DA7219_AAD_BTN_CFG_10MS;
>
> - if (of_property_read_u32(aad_np, "dlg,mic-det-thr",
> &of_val32) >= 0)
> + if (fwnode_property_read_u32(aad_np, "dlg,mic-det-thr",
> &fw_val32) >= 0)
> aad_pdata->mic_det_thr =
> - da7219_aad_of_mic_det_thr(codec, of_val32);
> + da7219_aad_fw_mic_det_thr(codec, fw_val32);
> else
> aad_pdata->mic_det_thr =
> DA7219_AAD_MIC_DET_THR_500_OHMS;
>
> - if (of_property_read_u32(aad_np, "dlg,jack-ins-deb",
> &of_val32) >= 0)
> + if (fwnode_property_read_u32(aad_np, "dlg,jack-ins-deb",
> &fw_val32) >= 0)
> aad_pdata->jack_ins_deb =
> - da7219_aad_of_jack_ins_deb(codec, of_val32);
> + da7219_aad_fw_jack_ins_deb(codec, fw_val32);
> else
> aad_pdata->jack_ins_deb =
> DA7219_AAD_JACK_INS_DEB_20MS;
>
> - if (!of_property_read_string(aad_np, "dlg,jack-det-rate",
> &of_str))
> + if (!fwnode_property_read_string(aad_np, "dlg,jack-det-rate",
> &fw_str))
> aad_pdata->jack_det_rate =
> - da7219_aad_of_jack_det_rate(codec, of_str);
> + da7219_aad_fw_jack_det_rate(codec, fw_str);
> else
> aad_pdata->jack_det_rate =
> DA7219_AAD_JACK_DET_RATE_256_512MS;
>
> - if (of_property_read_u32(aad_np, "dlg,jack-rem-deb",
> &of_val32) >= 0)
> + if (fwnode_property_read_u32(aad_np, "dlg,jack-rem-deb",
> &fw_val32) >= 0)
> aad_pdata->jack_rem_deb =
> - da7219_aad_of_jack_rem_deb(codec, of_val32);
> + da7219_aad_fw_jack_rem_deb(codec, fw_val32);
> else
> aad_pdata->jack_rem_deb =
> DA7219_AAD_JACK_REM_DEB_1MS;
>
> - if (of_property_read_u32(aad_np, "dlg,a-d-btn-thr",
> &of_val32) >= 0)
> - aad_pdata->a_d_btn_thr = (u8) of_val32;
> + if (fwnode_property_read_u32(aad_np, "dlg,a-d-btn-thr",
> &fw_val32) >= 0)
> + aad_pdata->a_d_btn_thr = (u8) fw_val32;
> else
> aad_pdata->a_d_btn_thr = 0xA;
>
> - if (of_property_read_u32(aad_np, "dlg,d-b-btn-thr",
> &of_val32) >= 0)
> - aad_pdata->d_b_btn_thr = (u8) of_val32;
> + if (fwnode_property_read_u32(aad_np, "dlg,d-b-btn-thr",
> &fw_val32) >= 0)
> + aad_pdata->d_b_btn_thr = (u8) fw_val32;
> else
> aad_pdata->d_b_btn_thr = 0x16;
>
> - if (of_property_read_u32(aad_np, "dlg,b-c-btn-thr",
> &of_val32) >= 0)
> - aad_pdata->b_c_btn_thr = (u8) of_val32;
> + if (fwnode_property_read_u32(aad_np, "dlg,b-c-btn-thr",
> &fw_val32) >= 0)
> + aad_pdata->b_c_btn_thr = (u8) fw_val32;
> else
> aad_pdata->b_c_btn_thr = 0x21;
>
> - if (of_property_read_u32(aad_np, "dlg,c-mic-btn-thr",
> &of_val32) >= 0)
> - aad_pdata->c_mic_btn_thr = (u8) of_val32;
> + if (fwnode_property_read_u32(aad_np, "dlg,c-mic-btn-thr",
> &fw_val32) >= 0)
> + aad_pdata->c_mic_btn_thr = (u8) fw_val32;
> else
> aad_pdata->c_mic_btn_thr = 0x3E;
>
> - if (of_property_read_u32(aad_np, "dlg,btn-avg", &of_val32) >=
> 0)
> - aad_pdata->btn_avg = da7219_aad_of_btn_avg(codec,
> of_val32);
> + if (fwnode_property_read_u32(aad_np, "dlg,btn-avg",
> &fw_val32) >= 0)
> + aad_pdata->btn_avg = da7219_aad_fw_btn_avg(codec,
> fw_val32);
> else
> aad_pdata->btn_avg = DA7219_AAD_BTN_AVG_2;
>
> - if (of_property_read_u32(aad_np, "dlg,adc-1bit-rpt",
> &of_val32) >= 0)
> + if (fwnode_property_read_u32(aad_np, "dlg,adc-1bit-rpt",
> &fw_val32) >= 0)
> aad_pdata->adc_1bit_rpt =
> - da7219_aad_of_adc_1bit_rpt(codec, of_val32);
> + da7219_aad_fw_adc_1bit_rpt(codec, fw_val32);
> else
> aad_pdata->adc_1bit_rpt = DA7219_AAD_ADC_1BIT_RPT_1;
>
> -out:
> - of_node_put(aad_np);
> -
> return aad_pdata;
> }
>
> @@ -769,9 +768,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))
> - da7219->pdata->aad_pdata =
> da7219_aad_of_to_pdata(codec);
> + /* Handle any DT/ACPI/platform data */
> + if (da7219->pdata && !da7219->pdata->aad_pdata)
> + da7219->pdata->aad_pdata =
> da7219_aad_fw_to_pdata(codec);
>
> da7219_aad_handle_pdata(codec);
>
> diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c
> index 5c93899..50ea943 100644
> --- a/sound/soc/codecs/da7219.c
> +++ b/sound/soc/codecs/da7219.c
> @@ -15,6 +15,7 @@
> #include <linux/clk.h>
> #include <linux/i2c.h>
> #include <linux/of_device.h>
> +#include <linux/property.h>
> #include <linux/regmap.h>
> #include <linux/slab.h>
> #include <linux/pm.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[] = {
> @@ -1434,7 +1435,7 @@ static const struct acpi_device_id
> da7219_acpi_match[] = {
> MODULE_DEVICE_TABLE(acpi, da7219_acpi_match);
>
> static enum da7219_micbias_voltage
> - da7219_of_micbias_lvl(struct snd_soc_codec *codec, u32 val)
> + da7219_fw_micbias_lvl(struct device *dev, u32 val)
> {
> switch (val) {
> case 1600:
> @@ -1450,13 +1451,13 @@ static enum da7219_micbias_voltage
> case 2600:
> return DA7219_MICBIAS_2_6V;
> default:
> - dev_warn(codec->dev, "Invalid micbias level");
> + dev_warn(dev, "Invalid micbias level");
> return DA7219_MICBIAS_2_2V;
> }
> }
>
> static enum da7219_mic_amp_in_sel
> - da7219_of_mic_amp_in_sel(struct snd_soc_codec *codec, const
> char *str)
> + da7219_fw_mic_amp_in_sel(struct device *dev, const char *str)
> {
> if (!strcmp(str, "diff")) {
> return DA7219_MIC_AMP_IN_SEL_DIFF;
> @@ -1465,29 +1466,29 @@ static enum da7219_mic_amp_in_sel
> } else if (!strcmp(str, "se_n")) {
> return DA7219_MIC_AMP_IN_SEL_SE_N;
> } else {
> - dev_warn(codec->dev, "Invalid mic input type
> selection");
> + dev_warn(dev, "Invalid mic input type selection");
> return DA7219_MIC_AMP_IN_SEL_DIFF;
> }
> }
>
> -static struct da7219_pdata *da7219_of_to_pdata(struct snd_soc_codec
> *codec)
> +static struct da7219_pdata *da7219_fw_to_pdata(struct snd_soc_codec
> *codec)
> {
> - struct device_node *np = codec->dev->of_node;
> + struct device *dev = codec->dev;
> struct da7219_pdata *pdata;
> const char *of_str;
> u32 of_val32;
>
> - pdata = devm_kzalloc(codec->dev, sizeof(*pdata), GFP_KERNEL);
> + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> if (!pdata)
> return NULL;
>
> - if (of_property_read_u32(np, "dlg,micbias-lvl", &of_val32) >=
> 0)
> - pdata->micbias_lvl = da7219_of_micbias_lvl(codec,
> of_val32);
> + if (device_property_read_u32(dev, "dlg,micbias-lvl",
> &of_val32) >= 0)
> + pdata->micbias_lvl = da7219_fw_micbias_lvl(dev,
> of_val32);
> else
> pdata->micbias_lvl = DA7219_MICBIAS_2_2V;
>
> - if (!of_property_read_string(np, "dlg,mic-amp-in-sel",
> &of_str))
> - pdata->mic_amp_in_sel =
> da7219_of_mic_amp_in_sel(codec, of_str);
> + if (!device_property_read_string(dev, "dlg,mic-amp-in-sel",
> &of_str))
> + pdata->mic_amp_in_sel = da7219_fw_mic_amp_in_sel(dev,
> of_str);
> else
> pdata->mic_amp_in_sel = DA7219_MIC_AMP_IN_SEL_DIFF;
>
> @@ -1662,11 +1663,10 @@ static int da7219_probe(struct snd_soc_codec
> *codec)
> break;
> }
>
> - /* Handle DT/Platform data */
> - if (codec->dev->of_node)
> - da7219->pdata = da7219_of_to_pdata(codec);
> - else
> - da7219->pdata = dev_get_platdata(codec->dev);
> + /* Handle DT/ACPI/Platform data */
> + da7219->pdata = dev_get_platdata(codec->dev);
> + if (!da7219->pdata)
> + da7219->pdata = da7219_fw_to_pdata(codec);
>
> da7219_handle_pdata(codec);
>
> --
> 1.9.3
>
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 1/2] device property: Add function to search for named child of device
2016-06-14 13:56 ` [PATCH v3 1/2] device property: Add function to search for named child of device Adam Thomson
@ 2016-06-14 15:49 ` Rob Herring
0 siblings, 0 replies; 7+ messages in thread
From: Rob Herring @ 2016-06-14 15:49 UTC (permalink / raw)
To: Adam Thomson
Cc: Robert Moore, Lv Zheng, Rafael J.Wysocki, Heikki Krogerus,
Mika Westerberg, Len Brown, Andy Shevchenko, Frank Rowand,
Mark Brown, Liam Girdwood, Jaroslav Kysela, Takashi Iwai,
Greg Kroah-Hartman, linux-acpi-u79uwXL29TY76Z2rM5mHXA,
devel-E0kO6a4B6psdnm+yROfE0A, devicetree-u79uwXL29TY76Z2rM5mHXA,
Linux-ALSA, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
Support Opensource, Sathyanarayana Nujella
On Tue, Jun 14, 2016 at 8:56 AM, Adam Thomson
<Adam.Thomson.Opensource-WBD+wuPFNBhBDgjK7y7TUQ@public.gmane.org> wrote:
> For device nodes in both DT and ACPI, it possible to have named
> child nodes which contain properties (an existing example being
> gpio-leds). This adds a function to find a named child node for
> a device which can be used by drivers for property retrieval.
>
> For DT data node name matching, of_node_cmp() and similar functions are made
> available outside of CONFIG_OF block so the new function can reference these
> for DT and non-DT builds.
>
> For ACPI data node name matching, a helper function is also added
> which returns false if CONFIG_ACPI is not set, otherwise it
> performs a string comparison on the data node name. This avoids
> using the acpi_data_node struct for non CONFIG_ACPI builds,
> which would otherwise cause a build failure.
>
> Signed-off-by: Adam Thomson <Adam.Thomson.Opensource-WBD+wuPFNBhBDgjK7y7TUQ@public.gmane.org>
> Tested-by: Sathyanarayana Nujella <sathyanarayana.nujella-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> ---
>
> Changes in v3:
> - Move of_*_cmp() functions in of.h outside of CONFIG_OF block so they are
> available for non-DT builds
> - In device_get_named_child_node(), use of_node_cmp() helper macro instead of
> strcasecmp() (node names not alway case insensitive, depending on platform).
>
> Changes in v2:
> - Rebase to v4.7-rc1
>
> drivers/base/property.c | 28 ++++++++++++++++++++++++++++
> include/acpi/acpi_bus.h | 7 +++++++
> include/linux/acpi.h | 6 ++++++
> include/linux/of.h | 14 +++++++-------
> include/linux/property.h | 3 +++
> 5 files changed, 51 insertions(+), 7 deletions(-)
Acked-by: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 1/2] device property: Add function to search for named child of device
@ 2016-06-14 15:49 ` Rob Herring
0 siblings, 0 replies; 7+ messages in thread
From: Rob Herring @ 2016-06-14 15:49 UTC (permalink / raw)
To: Adam Thomson
Cc: Robert Moore, Lv Zheng, Rafael J.Wysocki, Heikki Krogerus,
Mika Westerberg, Len Brown, Andy Shevchenko, Frank Rowand,
Mark Brown, Liam Girdwood, Jaroslav Kysela, Takashi Iwai,
Greg Kroah-Hartman, linux-acpi, devel, devicetree, Linux-ALSA,
linux-kernel, Support Opensource, Sathyanarayana Nujella
On Tue, Jun 14, 2016 at 8:56 AM, Adam Thomson
<Adam.Thomson.Opensource@diasemi.com> wrote:
> For device nodes in both DT and ACPI, it possible to have named
> child nodes which contain properties (an existing example being
> gpio-leds). This adds a function to find a named child node for
> a device which can be used by drivers for property retrieval.
>
> For DT data node name matching, of_node_cmp() and similar functions are made
> available outside of CONFIG_OF block so the new function can reference these
> for DT and non-DT builds.
>
> For ACPI data node name matching, a helper function is also added
> which returns false if CONFIG_ACPI is not set, otherwise it
> performs a string comparison on the data node name. This avoids
> using the acpi_data_node struct for non CONFIG_ACPI builds,
> which would otherwise cause a build failure.
>
> Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
> Tested-by: Sathyanarayana Nujella <sathyanarayana.nujella@intel.com>
> ---
>
> Changes in v3:
> - Move of_*_cmp() functions in of.h outside of CONFIG_OF block so they are
> available for non-DT builds
> - In device_get_named_child_node(), use of_node_cmp() helper macro instead of
> strcasecmp() (node names not alway case insensitive, depending on platform).
>
> Changes in v2:
> - Rebase to v4.7-rc1
>
> drivers/base/property.c | 28 ++++++++++++++++++++++++++++
> include/acpi/acpi_bus.h | 7 +++++++
> include/linux/acpi.h | 6 ++++++
> include/linux/of.h | 14 +++++++-------
> include/linux/property.h | 3 +++
> 5 files changed, 51 insertions(+), 7 deletions(-)
Acked-by: Rob Herring <robh@kernel.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-06-14 15:50 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-14 13:56 [PATCH v3 0/2] ASoC: da7219: Convert driver to use generic FW functions Adam Thomson
2016-06-14 13:56 ` [PATCH v3 1/2] device property: Add function to search for named child of device Adam Thomson
[not found] ` <866c9edccdd89805f6a0c0aa92f8a78ae616ed61.1465908072.git.Adam.Thomson.Opensource-WBD+wuPFNBhBDgjK7y7TUQ@public.gmane.org>
2016-06-14 15:49 ` Rob Herring
2016-06-14 15:49 ` Rob Herring
2016-06-14 13:56 ` [PATCH v3 2/2] ASoC: da7219: Convert driver to use generic device/fwnode functions Adam Thomson
2016-06-14 14:14 ` Andy Shevchenko
2016-06-14 14:14 ` Andy Shevchenko
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.