diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index 8a35fc705f67..9f08da6ad679 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c @@ -3428,7 +3428,7 @@ static int mxt_check_dt(struct device_node *np) return 0; } - return -ENODEV; + return PTR_ERR(panel); } #endif @@ -3528,7 +3528,11 @@ static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id) #ifdef CONFIG_OF #ifdef CONFIG_DRM - if (mxt_check_dt(dt)) { + error = mxt_check_dt(dt); + if (error == -EPROBE_DEFER) + return error; + + if (error) { if (!(mxt_check_dedicated_touch(dt, "compatible", "qcom,i2c-touch-active"))) return -EPROBE_DEFER; diff --git a/drivers/input/touchscreen/focaltech_touch/focaltech_core.c b/drivers/input/touchscreen/focaltech_touch/focaltech_core.c index e7d6a0fb0405..edc000748342 100644 --- a/drivers/input/touchscreen/focaltech_touch/focaltech_core.c +++ b/drivers/input/touchscreen/focaltech_touch/focaltech_core.c @@ -1704,7 +1704,7 @@ static int fts_ts_check_dt(struct device_node *np) } } - return -ENODEV; + return PTR_ERR(panel); } static int fts_ts_check_default_tp(struct device_node *dt, const char *prop) @@ -1764,7 +1764,11 @@ static int fts_ts_probe(struct i2c_client *client, const struct i2c_device_id *i return -ENODEV; } - if (fts_ts_check_dt(dp)) { + ret = fts_ts_check_dt(dp); + if (ret == -EPROBE_DEFER) + return ret; + + if (ret) { if (!fts_ts_check_default_tp(dp, "qcom,i2c-touch-active")) ret = -EPROBE_DEFER; else diff --git a/drivers/input/touchscreen/st/fts.c b/drivers/input/touchscreen/st/fts.c index 8cf227fc9769..46efbcaad9db 100644 --- a/drivers/input/touchscreen/st/fts.c +++ b/drivers/input/touchscreen/st/fts.c @@ -4512,7 +4512,7 @@ static int check_dt(struct device_node *np) } } - return -ENODEV; + return PTR_ERR(panel); } static int check_default_tp(struct device_node *dt, const char *prop) @@ -4939,7 +4939,11 @@ static int fts_probe(struct i2c_client *client, const struct i2c_device_id *idp) int error = 0; struct device_node *dp = client->dev.of_node; - if (check_dt(dp)) { + error = check_dt(dp); + if (error == -EPROBE_DEFER) + return error; + + if (error) { if (!check_default_tp(dp, "qcom,i2c-touch-active")) error = -EPROBE_DEFER; else