Skip to content

Commit ddb538a

Browse files
AaronDotbroonie
authored andcommitted
ASoC: loongson: Factor out loongson_card_acpi_find_device() function
The operations for reading the cpu and codec nodes in loongson_card_parse_acpi() are similar, so we convert them into a simple helper function called loongson_card_acpi_find_device(). Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn> Link: https://patch.msgid.link/3b7da05e5fd4326e7944aa749bf06dd44e964f6c.1725844530.git.zhoubinbin@loongson.cn Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent c7b626a commit ddb538a

1 file changed

Lines changed: 31 additions & 24 deletions

File tree

sound/soc/loongson/loongson_card.c

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)