Skip to content

Commit 1fb40a8

Browse files
marcanjannau
authored andcommitted
ASoC: macaudio: Fix PD link double-frees?
Signed-off-by: Hector Martin <marcan@marcan.st>
1 parent bdec724 commit 1fb40a8

1 file changed

Lines changed: 13 additions & 3 deletions

File tree

sound/soc/apple/mca.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ static int mca_fe_enable_clocks(struct mca_cluster *cl)
296296
* the power state driver would error out on seeing the device
297297
* as clock-gated.
298298
*/
299+
WARN_ON(cl->pd_link);
299300
cl->pd_link = device_link_add(mca->dev, cl->pd_dev,
300301
DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME |
301302
DL_FLAG_RPM_ACTIVE);
@@ -319,7 +320,11 @@ static void mca_fe_disable_clocks(struct mca_cluster *cl)
319320
mca_modify(cl, REG_SYNCGEN_STATUS, SYNCGEN_STATUS_EN, 0);
320321
mca_modify(cl, REG_STATUS, STATUS_MCLK_EN, 0);
321322

322-
device_link_del(cl->pd_link);
323+
if (cl->pd_link) {
324+
device_link_del(cl->pd_link);
325+
cl->pd_link = NULL;
326+
}
327+
323328
clk_disable_unprepare(cl->clk_parent);
324329
}
325330

@@ -389,6 +394,7 @@ static int mca_fe_prepare(struct snd_pcm_substream *substream,
389394
if (!cl->syncgen_in_use) {
390395
int port = ffs(mca_fe_get_portmask(substream)) - 1;
391396

397+
WARN_ON(cl->pd_link);
392398
cl->pd_link = device_link_add(mca->dev, cl->pd_dev,
393399
DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME |
394400
DL_FLAG_RPM_ACTIVE);
@@ -421,8 +427,10 @@ static int mca_fe_hw_free(struct snd_pcm_substream *substream,
421427
return 0;
422428

423429
mca_modify(cl, REG_SYNCGEN_STATUS, SYNCGEN_STATUS_EN, 0);
424-
if (cl->pd_link)
430+
if (cl->pd_link) {
425431
device_link_del(cl->pd_link);
432+
cl->pd_link = NULL;
433+
}
426434

427435
return 0;
428436
}
@@ -1108,8 +1116,10 @@ static void apple_mca_release(struct mca_data *mca)
11081116
dev_pm_domain_detach(cl->pd_dev, true);
11091117
}
11101118

1111-
if (mca->pd_link)
1119+
if (mca->pd_link) {
11121120
device_link_del(mca->pd_link);
1121+
mca->pd_link = NULL;
1122+
}
11131123

11141124
if (!IS_ERR_OR_NULL(mca->pd_dev))
11151125
dev_pm_domain_detach(mca->pd_dev, true);

0 commit comments

Comments
 (0)