diff --git a/drivers/staging/mei/init.c b/drivers/staging/mei/init.c index 0fa8216fd0eb..69a57e77a09d 100644 --- a/drivers/staging/mei/init.c +++ b/drivers/staging/mei/init.c @@ -521,7 +521,13 @@ void mei_host_client_properties(struct mei_device *dev) bitmap_set(dev->host_clients_map, 0, 3); dev->mei_state = MEI_ENABLED; - mei_wd_host_init(dev); + /* if wd initialization fails, initialization the AMTHI client, + * otherwise the AMTHI client will be initialized after the WD client connect response + * will be received + */ + if (mei_wd_host_init(dev)) + mei_host_init_iamthif(dev); + return; } diff --git a/drivers/staging/mei/interface.h b/drivers/staging/mei/interface.h index d0bf5cf4f3ec..7bcf0966030a 100644 --- a/drivers/staging/mei/interface.h +++ b/drivers/staging/mei/interface.h @@ -48,7 +48,7 @@ int mei_flow_ctrl_creds(struct mei_device *dev, struct mei_cl *cl); int mei_wd_send(struct mei_device *dev); int mei_wd_stop(struct mei_device *dev, bool preserve); -void mei_wd_host_init(struct mei_device *dev); +bool mei_wd_host_init(struct mei_device *dev); void mei_wd_start_setup(struct mei_device *dev); int mei_flow_ctrl_reduce(struct mei_device *dev, struct mei_cl *cl); diff --git a/drivers/staging/mei/wd.c b/drivers/staging/mei/wd.c index 42f04efc90e4..721487d05ba8 100644 --- a/drivers/staging/mei/wd.c +++ b/drivers/staging/mei/wd.c @@ -63,8 +63,10 @@ void mei_wd_start_setup(struct mei_device *dev) * * @dev: the device structure */ -void mei_wd_host_init(struct mei_device *dev) +bool mei_wd_host_init(struct mei_device *dev) { + bool ret = false; + mei_cl_init(&dev->wd_cl, dev); /* look for WD client and connect to it */ @@ -83,19 +85,25 @@ void mei_wd_host_init(struct mei_device *dev) dev_dbg(&dev->pdev->dev, "Failed to connect to WD client\n"); dev->wd_cl.state = MEI_FILE_DISCONNECTED; dev->wd_cl.host_client_id = 0; - mei_host_init_iamthif(dev) ; + ret = false; + goto end; } else { dev->wd_cl.timer_count = CONNECT_TIMEOUT; } } else { dev_dbg(&dev->pdev->dev, "Failed to find WD client\n"); - mei_host_init_iamthif(dev) ; + ret = false; + goto end; } } else { dev->wd_bypass = true; dev_dbg(&dev->pdev->dev, "WD requested to be disabled\n"); - mei_host_init_iamthif(dev) ; + ret = false; + goto end; } + +end: + return ret; } /**