ASoC: core: If component doesn't have of_node use parent's node instead
If an ASoC component device does not have a device tree node, use its parent's node instead, when looking for a matching DAI based on a device tree reference. This allows video device drivers to register a separate child device for their ASoC side audio functionality. [And MFDs in general -- broonie] Signed-off-by: Jyri Sarha <jsarha@ti.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
d6b6c2ca6a
commit
3e0aa8d83b
@ -895,12 +895,17 @@ static struct snd_soc_dai *snd_soc_find_dai(
|
|||||||
{
|
{
|
||||||
struct snd_soc_component *component;
|
struct snd_soc_component *component;
|
||||||
struct snd_soc_dai *dai;
|
struct snd_soc_dai *dai;
|
||||||
|
struct device_node *component_of_node;
|
||||||
|
|
||||||
lockdep_assert_held(&client_mutex);
|
lockdep_assert_held(&client_mutex);
|
||||||
|
|
||||||
/* Find CPU DAI from registered DAIs*/
|
/* Find CPU DAI from registered DAIs*/
|
||||||
list_for_each_entry(component, &component_list, list) {
|
list_for_each_entry(component, &component_list, list) {
|
||||||
if (dlc->of_node && component->dev->of_node != dlc->of_node)
|
component_of_node = component->dev->of_node;
|
||||||
|
if (!component_of_node && component->dev->parent)
|
||||||
|
component_of_node = component->dev->parent->of_node;
|
||||||
|
|
||||||
|
if (dlc->of_node && component_of_node != dlc->of_node)
|
||||||
continue;
|
continue;
|
||||||
if (dlc->name && strcmp(component->name, dlc->name))
|
if (dlc->name && strcmp(component->name, dlc->name))
|
||||||
continue;
|
continue;
|
||||||
@ -3480,11 +3485,16 @@ static int snd_soc_get_dai_name(struct of_phandle_args *args,
|
|||||||
const char **dai_name)
|
const char **dai_name)
|
||||||
{
|
{
|
||||||
struct snd_soc_component *pos;
|
struct snd_soc_component *pos;
|
||||||
|
struct device_node *component_of_node;
|
||||||
int ret = -EPROBE_DEFER;
|
int ret = -EPROBE_DEFER;
|
||||||
|
|
||||||
mutex_lock(&client_mutex);
|
mutex_lock(&client_mutex);
|
||||||
list_for_each_entry(pos, &component_list, list) {
|
list_for_each_entry(pos, &component_list, list) {
|
||||||
if (pos->dev->of_node != args->np)
|
component_of_node = pos->dev->of_node;
|
||||||
|
if (!component_of_node && pos->dev->parent)
|
||||||
|
component_of_node = pos->dev->parent->of_node;
|
||||||
|
|
||||||
|
if (component_of_node != args->np)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (pos->driver->of_xlate_dai_name) {
|
if (pos->driver->of_xlate_dai_name) {
|
||||||
|
Loading…
Reference in New Issue
Block a user