|
@@ -895,12 +895,17 @@ static struct snd_soc_dai *snd_soc_find_dai(
|
|
|
{
|
|
|
struct snd_soc_component *component;
|
|
|
struct snd_soc_dai *dai;
|
|
|
+ struct device_node *component_of_node;
|
|
|
|
|
|
lockdep_assert_held(&client_mutex);
|
|
|
|
|
|
/* Find CPU DAI from registered DAIs*/
|
|
|
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;
|
|
|
if (dlc->name && strcmp(component->name, dlc->name))
|
|
|
continue;
|
|
@@ -3480,11 +3485,16 @@ static int snd_soc_get_dai_name(struct of_phandle_args *args,
|
|
|
const char **dai_name)
|
|
|
{
|
|
|
struct snd_soc_component *pos;
|
|
|
+ struct device_node *component_of_node;
|
|
|
int ret = -EPROBE_DEFER;
|
|
|
|
|
|
mutex_lock(&client_mutex);
|
|
|
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;
|
|
|
|
|
|
if (pos->driver->of_xlate_dai_name) {
|