Loading drivers/gpu/drm/msm/dp/dp_usbpd.c +39 −11 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include <linux/slab.h> #include <linux/device.h> #include <linux/delay.h> #include "dp_usbpd.h" Loading Loading @@ -314,11 +315,44 @@ static int dp_usbpd_validate_callback(u8 cmd, return ret; } static int dp_usbpd_get_ss_lanes(struct dp_usbpd_private *pd) { int rc = 0; int timeout = 250; /* * By default, USB reserves two lanes for Super Speed. * Which means DP has remaining two lanes to operate on. * If multi-function is not supported, request USB to * release the Super Speed lanes so that DP can use * all four lanes in case DPCD indicates support for * four lanes. */ if (!pd->dp_usbpd.multi_func) { while (timeout) { rc = pd->svid_handler.request_usb_ss_lane( pd->pd, &pd->svid_handler); if (rc != -EBUSY) break; pr_warn("USB busy, retry\n"); /* wait for hw recommended delay for usb */ msleep(20); timeout--; } } return rc; } static void dp_usbpd_response_cb(struct usbpd_svid_handler *hdlr, u8 cmd, enum usbpd_svdm_cmd_type cmd_type, const u32 *vdos, int num_vdos) { struct dp_usbpd_private *pd; int rc = 0; pd = container_of(hdlr, struct dp_usbpd_private, svid_handler); Loading Loading @@ -380,17 +414,11 @@ static void dp_usbpd_response_cb(struct usbpd_svid_handler *hdlr, u8 cmd, pd->dp_usbpd.orientation = usbpd_get_plug_orientation(pd->pd); /* * By default, USB reserves two lanes for Super Speed. * Which means DP has remaining two lanes to operate on. * If multi-function is not supported, request USB to * release the Super Speed lanes so that DP can use * all four lanes in case DPCD indicates support for * four lanes. */ if (!pd->dp_usbpd.multi_func) pd->svid_handler.request_usb_ss_lane(pd->pd, &pd->svid_handler); rc = dp_usbpd_get_ss_lanes(pd); if (rc) { pr_err("failed to get SuperSpeed lanes\n"); break; } if (pd->dp_cb && pd->dp_cb->configure) pd->dp_cb->configure(pd->dev); Loading Loading
drivers/gpu/drm/msm/dp/dp_usbpd.c +39 −11 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include <linux/slab.h> #include <linux/device.h> #include <linux/delay.h> #include "dp_usbpd.h" Loading Loading @@ -314,11 +315,44 @@ static int dp_usbpd_validate_callback(u8 cmd, return ret; } static int dp_usbpd_get_ss_lanes(struct dp_usbpd_private *pd) { int rc = 0; int timeout = 250; /* * By default, USB reserves two lanes for Super Speed. * Which means DP has remaining two lanes to operate on. * If multi-function is not supported, request USB to * release the Super Speed lanes so that DP can use * all four lanes in case DPCD indicates support for * four lanes. */ if (!pd->dp_usbpd.multi_func) { while (timeout) { rc = pd->svid_handler.request_usb_ss_lane( pd->pd, &pd->svid_handler); if (rc != -EBUSY) break; pr_warn("USB busy, retry\n"); /* wait for hw recommended delay for usb */ msleep(20); timeout--; } } return rc; } static void dp_usbpd_response_cb(struct usbpd_svid_handler *hdlr, u8 cmd, enum usbpd_svdm_cmd_type cmd_type, const u32 *vdos, int num_vdos) { struct dp_usbpd_private *pd; int rc = 0; pd = container_of(hdlr, struct dp_usbpd_private, svid_handler); Loading Loading @@ -380,17 +414,11 @@ static void dp_usbpd_response_cb(struct usbpd_svid_handler *hdlr, u8 cmd, pd->dp_usbpd.orientation = usbpd_get_plug_orientation(pd->pd); /* * By default, USB reserves two lanes for Super Speed. * Which means DP has remaining two lanes to operate on. * If multi-function is not supported, request USB to * release the Super Speed lanes so that DP can use * all four lanes in case DPCD indicates support for * four lanes. */ if (!pd->dp_usbpd.multi_func) pd->svid_handler.request_usb_ss_lane(pd->pd, &pd->svid_handler); rc = dp_usbpd_get_ss_lanes(pd); if (rc) { pr_err("failed to get SuperSpeed lanes\n"); break; } if (pd->dp_cb && pd->dp_cb->configure) pd->dp_cb->configure(pd->dev); Loading