* [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
[parent not found: <866c9edccdd89805f6a0c0aa92f8a78ae616ed61.1465908072.git.Adam.Thomson.Opensource-WBD+wuPFNBhBDgjK7y7TUQ@public.gmane.org>]
* 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
* [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
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.