@@ -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