mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 11:37:06 +02:00
usb: dwc3: Enable u1u2 functionality with USB Gen1 speed
Enable u1u2 functionality in USB device mode when USB is operating in super speed (gen1 speed). Change-Id: I14056274b68c3ed395ee3673312606ded68afcd6 Signed-off-by: Mayank Rana <quic_mrana@quicinc.com>
This commit is contained in:
parent
85ca34183b
commit
4977a05f93
|
|
@ -587,6 +587,8 @@ struct dwc3_msm {
|
|||
bool dis_sending_cm_l1_quirk;
|
||||
bool use_eusb2_phy;
|
||||
bool force_gen1;
|
||||
bool cached_dis_u1_entry_quirk;
|
||||
bool cached_dis_u2_entry_quirk;
|
||||
};
|
||||
|
||||
#define USB_HSPHY_3P3_VOL_MIN 3050000 /* uV */
|
||||
|
|
@ -3217,6 +3219,34 @@ static void mdwc3_usb2_phy_soft_reset(struct dwc3_msm *mdwc)
|
|||
dwc3_msm_write_reg(mdwc->base, DWC3_GUSB2PHYCFG(0), val);
|
||||
}
|
||||
|
||||
static void mdwc3_update_u1u2_value(struct dwc3 *dwc)
|
||||
{
|
||||
struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
|
||||
static bool read_u1u2;
|
||||
|
||||
/* cache DT based initial value once */
|
||||
if (!read_u1u2) {
|
||||
mdwc->cached_dis_u1_entry_quirk = dwc->dis_u1_entry_quirk;
|
||||
mdwc->cached_dis_u2_entry_quirk = dwc->dis_u2_entry_quirk;
|
||||
read_u1u2 = true;
|
||||
dbg_log_string("cached_dt_param: u1_disable:%d u2_disable:%d\n",
|
||||
mdwc->cached_dis_u1_entry_quirk, mdwc->cached_dis_u2_entry_quirk);
|
||||
}
|
||||
|
||||
/* Enable u1u2 for USB super speed (gen1) only with quirks enable it */
|
||||
if (dwc->speed == DWC3_DSTS_SUPERSPEED) {
|
||||
dwc->dis_u1_entry_quirk = mdwc->cached_dis_u1_entry_quirk;
|
||||
dwc->dis_u2_entry_quirk = mdwc->cached_dis_u2_entry_quirk;
|
||||
} else {
|
||||
dwc->dis_u1_entry_quirk = true;
|
||||
dwc->dis_u2_entry_quirk = true;
|
||||
}
|
||||
|
||||
dbg_log_string("speed:%d u1:%s u2:%s\n",
|
||||
dwc->speed, dwc->dis_u1_entry_quirk ? "disabled" : "enabled",
|
||||
dwc->dis_u2_entry_quirk ? "disabled" : "enabled");
|
||||
}
|
||||
|
||||
void dwc3_msm_notify_event(struct dwc3 *dwc,
|
||||
enum dwc3_notify_event event, unsigned int value)
|
||||
{
|
||||
|
|
@ -3271,6 +3301,7 @@ void dwc3_msm_notify_event(struct dwc3 *dwc,
|
|||
PWR_EVNT_LPM_OUT_L1_MASK, 1);
|
||||
|
||||
atomic_set(&mdwc->in_lpm, 0);
|
||||
mdwc3_update_u1u2_value(dwc);
|
||||
break;
|
||||
case DWC3_GSI_EVT_BUF_ALLOC:
|
||||
dev_dbg(mdwc->dev, "DWC3_GSI_EVT_BUF_ALLOC\n");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user