Skip to content

Commit e2cda46

Browse files
Venkata-Prasad-Potturubroonie
authored andcommitted
ASoC: amd: acp: Refactor dmic-codec platform device creation
Refactor dmic-codec platform driver creation using helper function. Signed-off-by: Venkata Prasad Potturu <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent 8ae746f commit e2cda46

File tree

2 files changed

+35
-15
lines changed

2 files changed

+35
-15
lines changed

sound/soc/amd/acp/acp-pci.c

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
#define ACP3x_REG_START 0x1240000
2727
#define ACP3x_REG_END 0x125C000
2828

29-
static struct platform_device *dmic_dev;
3029
static struct platform_device *pdev;
3130

3231
static const struct resource acp_res[] = {
@@ -44,6 +43,26 @@ static const struct resource acp_res[] = {
4443
},
4544
};
4645

46+
static int create_acp_platform_devs(struct pci_dev *pci, struct acp_chip_info *chip)
47+
{
48+
int ret;
49+
50+
if (chip->is_pdm_dev && chip->is_pdm_config) {
51+
chip->dmic_codec_dev = platform_device_register_data(&pci->dev,
52+
"dmic-codec",
53+
PLATFORM_DEVID_NONE,
54+
NULL, 0);
55+
if (IS_ERR(chip->dmic_codec_dev)) {
56+
dev_err(&pci->dev, "failed to create DMIC device\n");
57+
ret = PTR_ERR(chip->dmic_codec_dev);
58+
goto err;
59+
}
60+
}
61+
return 0;
62+
err:
63+
return ret;
64+
}
65+
4766
static int acp_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
4867
{
4968
struct platform_device_info pdevinfo;
@@ -102,33 +121,33 @@ static int acp_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id
102121
goto release_regions;
103122
}
104123
chip->flag = flag;
105-
dmic_dev = platform_device_register_data(dev, "dmic-codec", PLATFORM_DEVID_NONE, NULL, 0);
106-
if (IS_ERR(dmic_dev)) {
107-
dev_err(dev, "failed to create DMIC device\n");
108-
ret = PTR_ERR(dmic_dev);
109-
goto release_regions;
110-
}
111124

112125
addr = pci_resource_start(pci, 0);
113126
chip->base = devm_ioremap(&pci->dev, addr, pci_resource_len(pci, 0));
114127
if (!chip->base) {
115128
ret = -ENOMEM;
116-
goto unregister_dmic_dev;
129+
goto release_regions;
117130
}
118131

119132
chip->acp_hw_ops_init(chip);
120133
ret = acp_hw_init(chip);
121134
if (ret)
122-
goto unregister_dmic_dev;
135+
goto release_regions;
123136

124137
check_acp_config(pci, chip);
125138
if (!chip->is_pdm_dev && !chip->is_i2s_config)
126139
goto skip_pdev_creation;
127140

141+
ret = create_acp_platform_devs(pci, chip);
142+
if (ret < 0) {
143+
dev_err(&pci->dev, "ACP platform devices creation failed\n");
144+
goto de_init;
145+
}
146+
128147
res = devm_kcalloc(&pci->dev, num_res, sizeof(struct resource), GFP_KERNEL);
129148
if (!res) {
130149
ret = -ENOMEM;
131-
goto unregister_dmic_dev;
150+
goto de_init;
132151
}
133152

134153
for (i = 0; i < num_res; i++, res_acp++) {
@@ -156,7 +175,7 @@ static int acp_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id
156175
if (IS_ERR(pdev)) {
157176
dev_err(&pci->dev, "cannot register %s device\n", pdevinfo.name);
158177
ret = PTR_ERR(pdev);
159-
goto unregister_dmic_dev;
178+
goto de_init;
160179
}
161180

162181
skip_pdev_creation:
@@ -168,8 +187,8 @@ static int acp_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id
168187
pm_runtime_allow(&pci->dev);
169188
return ret;
170189

171-
unregister_dmic_dev:
172-
platform_device_unregister(dmic_dev);
190+
de_init:
191+
acp_hw_deinit(chip);
173192
release_regions:
174193
pci_release_regions(pci);
175194
disable_pci:
@@ -223,8 +242,8 @@ static void acp_pci_remove(struct pci_dev *pci)
223242
chip = pci_get_drvdata(pci);
224243
pm_runtime_forbid(&pci->dev);
225244
pm_runtime_get_noresume(&pci->dev);
226-
if (dmic_dev)
227-
platform_device_unregister(dmic_dev);
245+
if (chip->dmic_codec_dev)
246+
platform_device_unregister(chip->dmic_codec_dev);
228247
if (pdev)
229248
platform_device_unregister(pdev);
230249
ret = acp_hw_deinit(chip);

sound/soc/amd/acp/amd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ struct acp_chip_info {
145145
struct snd_acp_hw_ops *acp_hw_ops;
146146
int (*acp_hw_ops_init)(struct acp_chip_info *chip);
147147
struct platform_device *chip_pdev;
148+
struct platform_device *dmic_codec_dev;
148149
unsigned int flag; /* Distinguish b/w Legacy or Only PDM */
149150
bool is_pdm_dev; /* flag set to true when ACP PDM controller exists */
150151
bool is_pdm_config; /* flag set to true when PDM configuration is selected from BIOS */

0 commit comments

Comments
 (0)