@@ -190,7 +190,6 @@ static int rt721_sdca_update_status(struct sdw_slave *slave,
190190 enum sdw_slave_status status )
191191{
192192 struct rt721_sdca_priv * rt721 = dev_get_drvdata (& slave -> dev );
193- int ret ;
194193
195194 if (status == SDW_SLAVE_UNATTACHED )
196195 rt721 -> hw_init = false;
@@ -218,20 +217,7 @@ static int rt721_sdca_update_status(struct sdw_slave *slave,
218217 return 0 ;
219218
220219 /* perform I/O transfers required for Slave initialization */
221- ret = rt721_sdca_io_init (& slave -> dev , slave );
222- if (ret < 0 ) {
223- dev_err (& slave -> dev , "IO init failed: %d\n" , ret );
224- return ret ;
225- }
226-
227- if (slave -> unattach_request ) {
228- regcache_cache_only (rt721 -> regmap , false);
229- regcache_sync (rt721 -> regmap );
230- regcache_cache_only (rt721 -> mbq_regmap , false);
231- regcache_sync (rt721 -> mbq_regmap );
232- }
233-
234- return ret ;
220+ return rt721_sdca_io_init (& slave -> dev , slave );
235221}
236222
237223static int rt721_sdca_read_prop (struct sdw_slave * slave )
@@ -497,10 +483,13 @@ static int rt721_sdca_dev_system_suspend(struct device *dev)
497483 return rt721_sdca_dev_suspend (dev );
498484}
499485
486+ #define RT721_PROBE_TIMEOUT 5000
487+
500488static int rt721_sdca_dev_resume (struct device * dev )
501489{
502490 struct sdw_slave * slave = dev_to_sdw_dev (dev );
503491 struct rt721_sdca_priv * rt721 = dev_get_drvdata (dev );
492+ unsigned long time ;
504493
505494 if (!rt721 -> first_hw_init )
506495 return 0 ;
@@ -515,7 +504,15 @@ static int rt721_sdca_dev_resume(struct device *dev)
515504 mutex_unlock (& rt721 -> disable_irq_lock );
516505 goto regmap_sync ;
517506 }
518- return 0 ;
507+
508+ time = wait_for_completion_timeout (& slave -> initialization_complete ,
509+ msecs_to_jiffies (RT721_PROBE_TIMEOUT ));
510+ if (!time ) {
511+ dev_err (& slave -> dev , "Initialization not complete, timed out\n" );
512+ sdw_show_ping_status (slave -> bus , true);
513+
514+ return - ETIMEDOUT ;
515+ }
519516
520517regmap_sync :
521518 slave -> unattach_request = 0 ;
0 commit comments