@@ -68,46 +68,53 @@ static struct snd_soc_dai_link loongson_dai_links[] = {
6868 },
6969};
7070
71- static int loongson_card_parse_acpi (struct loongson_card_data * data )
71+ static struct acpi_device * loongson_card_acpi_find_device (struct snd_soc_card * card ,
72+ const char * name )
7273{
73- struct snd_soc_card * card = & data -> snd_card ;
7474 struct fwnode_handle * fwnode = card -> dev -> fwnode ;
7575 struct fwnode_reference_args args ;
76+ int status ;
77+
78+ memset (& args , 0 , sizeof (args ));
79+ status = acpi_node_get_property_reference (fwnode , name , 0 , & args );
80+ if (status || !is_acpi_device_node (args .fwnode )) {
81+ dev_err (card -> dev , "No matching phy in ACPI table\n" );
82+ return NULL ;
83+ }
84+
85+ return to_acpi_device_node (args .fwnode );
86+ }
87+
88+ static int loongson_card_parse_acpi (struct loongson_card_data * data )
89+ {
90+ struct snd_soc_card * card = & data -> snd_card ;
7691 const char * codec_dai_name ;
7792 struct acpi_device * adev ;
7893 struct device * phy_dev ;
79- int ret , i ;
94+ int i ;
8095
8196 /* fixup platform name based on reference node */
82- memset (& args , 0 , sizeof (args ));
83- ret = acpi_node_get_property_reference (fwnode , "cpu" , 0 , & args );
84- if (ret || !is_acpi_device_node (args .fwnode )) {
85- dev_err (card -> dev , "No matching phy in ACPI table\n" );
86- return ret ?: - ENOENT ;
87- }
88- adev = to_acpi_device_node (args .fwnode );
97+ adev = loongson_card_acpi_find_device (card , "cpu" );
98+ if (!adev )
99+ return - ENOENT ;
100+
89101 phy_dev = acpi_get_first_physical_node (adev );
90102 if (!phy_dev )
91103 return - EPROBE_DEFER ;
92- for (i = 0 ; i < card -> num_links ; i ++ )
93- loongson_dai_links [i ].platforms -> name = dev_name (phy_dev );
94104
95105 /* fixup codec name based on reference node */
96- memset (& args , 0 , sizeof (args ));
97- ret = acpi_node_get_property_reference (fwnode , "codec" , 0 , & args );
98- if (ret || !is_acpi_device_node (args .fwnode )) {
99- dev_err (card -> dev , "No matching phy in ACPI table\n" );
100- return ret ?: - ENOENT ;
101- }
102- adev = to_acpi_device_node (args .fwnode );
106+ adev = loongson_card_acpi_find_device (card , "codec" );
107+ if (!adev )
108+ return - ENOENT ;
103109 snprintf (codec_name , sizeof (codec_name ), "i2c-%s" , acpi_dev_name (adev ));
104- for (i = 0 ; i < card -> num_links ; i ++ )
105- loongson_dai_links [i ].codecs -> name = codec_name ;
106110
107- device_property_read_string (card -> dev , "codec-dai-name" ,
108- & codec_dai_name );
109- for (i = 0 ; i < card -> num_links ; i ++ )
111+ device_property_read_string (card -> dev , "codec-dai-name" , & codec_dai_name );
112+
113+ for (i = 0 ; i < card -> num_links ; i ++ ) {
114+ loongson_dai_links [i ].platforms -> name = dev_name (phy_dev );
115+ loongson_dai_links [i ].codecs -> name = codec_name ;
110116 loongson_dai_links [i ].codecs -> dai_name = codec_dai_name ;
117+ }
111118
112119 return 0 ;
113120}
0 commit comments