]> www.infradead.org Git - users/willy/xarray.git/commitdiff
usb: typec: ps883x: fix missing accessibility check
authorJohan Hovold <johan+linaro@kernel.org>
Tue, 18 Feb 2025 15:29:32 +0000 (16:29 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Feb 2025 14:16:09 +0000 (15:16 +0100)
Make sure that the retimer is accessible before registering to avoid
having later consumer calls fail to configure it, something which, for
example, can lead to a hotplugged display not being recognised:

[drm:msm_dp_panel_read_sink_caps [msm]] *ERROR* read dpcd failed -110

Fixes: 257a087c8b52 ("usb: typec: Add support for Parade PS8830 Type-C Retimer")
Cc: Abel Vesa <abel.vesa@linaro.org>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Link: https://lore.kernel.org/r/20250218152933.22992-3-johan+linaro@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/mux/ps883x.c

index 274de7abe5855dcc39017a5df4e9b6e9d8f190dd..f8b47187f4cf762bc14cf92fd2d304ca784e2515 100644 (file)
@@ -291,6 +291,7 @@ static int ps883x_retimer_probe(struct i2c_client *client)
        struct typec_switch_desc sw_desc = { };
        struct typec_retimer_desc rtmr_desc = { };
        struct ps883x_retimer *retimer;
+       unsigned int val;
        int ret;
 
        retimer = devm_kzalloc(dev, sizeof(*retimer), GFP_KERNEL);
@@ -360,6 +361,16 @@ static int ps883x_retimer_probe(struct i2c_client *client)
 
                /* firmware initialization delay */
                msleep(60);
+
+               /* make sure device is accessible */
+               ret = regmap_read(retimer->regmap, REG_USB_PORT_CONN_STATUS_0,
+                                 &val);
+               if (ret) {
+                       dev_err(dev, "failed to read conn_status_0: %d\n", ret);
+                       if (ret == -ENXIO)
+                               ret = -EIO;
+                       goto err_clk_disable;
+               }
        }
 
        sw_desc.drvdata = retimer;