@@ -759,6 +759,7 @@ static int rt1320_update_status(struct sdw_slave *slave,
759
759
enum sdw_slave_status status )
760
760
{
761
761
struct rt1320_sdw_priv * rt1320 = dev_get_drvdata (& slave -> dev );
762
+ int ret ;
762
763
763
764
if (status == SDW_SLAVE_UNATTACHED )
764
765
rt1320 -> hw_init = false;
@@ -771,7 +772,16 @@ static int rt1320_update_status(struct sdw_slave *slave,
771
772
return 0 ;
772
773
773
774
/* perform I/O transfers required for Slave initialization */
774
- return rt1320_io_init (& slave -> dev , slave );
775
+ ret = rt1320_io_init (& slave -> dev , slave );
776
+
777
+ if (slave -> unattach_request ) {
778
+ regcache_cache_only (rt1320 -> regmap , false);
779
+ regcache_sync (rt1320 -> regmap );
780
+ regcache_cache_only (rt1320 -> mbq_regmap , false);
781
+ regcache_sync (rt1320 -> mbq_regmap );
782
+ }
783
+
784
+ return ret ;
775
785
}
776
786
777
787
static int rt1320_pde11_event (struct snd_soc_dapm_widget * w ,
@@ -1168,6 +1178,8 @@ static void rt1320_sdw_shutdown(struct snd_pcm_substream *substream,
1168
1178
snd_soc_dai_set_dma_data (dai , substream , NULL );
1169
1179
}
1170
1180
1181
+ #define RT1320_PROBE_TIMEOUT 5000
1182
+
1171
1183
static int rt1320_sdw_hw_params (struct snd_pcm_substream * substream ,
1172
1184
struct snd_pcm_hw_params * params , struct snd_soc_dai * dai )
1173
1185
{
@@ -1210,6 +1222,10 @@ static int rt1320_sdw_hw_params(struct snd_pcm_substream *substream,
1210
1222
return - EINVAL ;
1211
1223
}
1212
1224
1225
+ retval = sdw_slave_wait_for_initialization (rt1320 -> sdw_slave , RT1320_PROBE_TIMEOUT );
1226
+ if (retval < 0 )
1227
+ return retval ;
1228
+
1213
1229
if (dai -> id == RT1320_AIF1 )
1214
1230
retval = sdw_stream_add_slave (rt1320 -> sdw_slave , & stream_config ,
1215
1231
& port_config , 1 , sdw_stream );
@@ -1470,26 +1486,18 @@ static int rt1320_dev_suspend(struct device *dev)
1470
1486
return 0 ;
1471
1487
}
1472
1488
1473
- #define RT1320_PROBE_TIMEOUT 5000
1474
-
1475
1489
static int rt1320_dev_resume (struct device * dev )
1476
1490
{
1477
1491
struct sdw_slave * slave = dev_to_sdw_dev (dev );
1478
1492
struct rt1320_sdw_priv * rt1320 = dev_get_drvdata (dev );
1479
- unsigned long time ;
1480
1493
1481
1494
if (!rt1320 -> first_hw_init )
1482
1495
return 0 ;
1483
1496
1484
1497
if (!slave -> unattach_request )
1485
1498
goto regmap_sync ;
1486
1499
1487
- time = wait_for_completion_timeout (& slave -> initialization_complete ,
1488
- msecs_to_jiffies (RT1320_PROBE_TIMEOUT ));
1489
- if (!time ) {
1490
- dev_err (& slave -> dev , "%s: Initialization not complete, timed out\n" , __func__ );
1491
- return - ETIMEDOUT ;
1492
- }
1500
+ return 0 ;
1493
1501
1494
1502
regmap_sync :
1495
1503
slave -> unattach_request = 0 ;
0 commit comments