@@ -157,7 +157,6 @@ static int rt712_sdca_update_status(struct sdw_slave *slave,
157157 enum sdw_slave_status status )
158158{
159159 struct rt712_sdca_priv * rt712 = dev_get_drvdata (& slave -> dev );
160- int ret ;
161160
162161 if (status == SDW_SLAVE_UNATTACHED )
163162 rt712 -> hw_init = false;
@@ -185,20 +184,7 @@ static int rt712_sdca_update_status(struct sdw_slave *slave,
185184 return 0 ;
186185
187186 /* perform I/O transfers required for Slave initialization */
188- ret = rt712_sdca_io_init (& slave -> dev , slave );
189- if (ret < 0 ) {
190- dev_err (& slave -> dev , "IO init failed: %d\n" , ret );
191- return ret ;
192- }
193-
194- if (slave -> unattach_request ) {
195- regcache_cache_only (rt712 -> regmap , false);
196- regcache_sync (rt712 -> regmap );
197- regcache_cache_only (rt712 -> mbq_regmap , false);
198- regcache_sync (rt712 -> mbq_regmap );
199- }
200-
201- return ret ;
187+ return rt712_sdca_io_init (& slave -> dev , slave );
202188}
203189
204190static int rt712_sdca_read_prop (struct sdw_slave * slave )
@@ -460,10 +446,13 @@ static int rt712_sdca_dev_system_suspend(struct device *dev)
460446 return rt712_sdca_dev_suspend (dev );
461447}
462448
449+ #define RT712_PROBE_TIMEOUT 5000
450+
463451static int rt712_sdca_dev_resume (struct device * dev )
464452{
465453 struct sdw_slave * slave = dev_to_sdw_dev (dev );
466454 struct rt712_sdca_priv * rt712 = dev_get_drvdata (dev );
455+ unsigned long time ;
467456
468457 if (!rt712 -> first_hw_init )
469458 return 0 ;
@@ -480,7 +469,14 @@ static int rt712_sdca_dev_resume(struct device *dev)
480469 goto regmap_sync ;
481470 }
482471
483- return 0 ;
472+ time = wait_for_completion_timeout (& slave -> initialization_complete ,
473+ msecs_to_jiffies (RT712_PROBE_TIMEOUT ));
474+ if (!time ) {
475+ dev_err (& slave -> dev , "%s: Initialization not complete, timed out\n" , __func__ );
476+ sdw_show_ping_status (slave -> bus , true);
477+
478+ return - ETIMEDOUT ;
479+ }
484480
485481regmap_sync :
486482 slave -> unattach_request = 0 ;
0 commit comments