mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
- DWC2, DWC3 fixes
This commit is contained in:
commit
d361eafe82
4 changed files with 44 additions and 24 deletions
|
@ -74,7 +74,7 @@ static int dwc3_generic_probe(struct udevice *dev,
|
|||
}
|
||||
|
||||
rc = dwc3_setup_phy(dev, &priv->phys);
|
||||
if (rc)
|
||||
if (rc && rc != -ENOTSUPP)
|
||||
return rc;
|
||||
|
||||
if (device_is_compatible(dev->parent, "rockchip,rk3399-dwc3"))
|
||||
|
|
|
@ -1014,6 +1014,9 @@ static int dwc2_udc_otg_ofdata_to_platdata(struct udevice *dev)
|
|||
platdata->force_b_session_valid =
|
||||
dev_read_bool(dev, "u-boot,force-b-session-valid");
|
||||
|
||||
platdata->force_vbus_detection =
|
||||
dev_read_bool(dev, "u-boot,force-vbus-detection");
|
||||
|
||||
/* force platdata according compatible */
|
||||
drvdata = dev_get_driver_data(dev);
|
||||
if (drvdata) {
|
||||
|
@ -1045,7 +1048,7 @@ static int dwc2_udc_otg_reset_init(struct udevice *dev,
|
|||
int ret;
|
||||
|
||||
ret = reset_get_bulk(dev, resets);
|
||||
if (ret == -ENOTSUPP)
|
||||
if (ret == -ENOTSUPP || ret == -ENOENT)
|
||||
return 0;
|
||||
|
||||
if (ret)
|
||||
|
@ -1106,30 +1109,44 @@ static int dwc2_udc_otg_probe(struct udevice *dev)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (CONFIG_IS_ENABLED(DM_REGULATOR) &&
|
||||
platdata->activate_stm_id_vb_detection &&
|
||||
!platdata->force_b_session_valid) {
|
||||
ret = device_get_supply_regulator(dev, "usb33d-supply",
|
||||
&priv->usb33d_supply);
|
||||
if (ret) {
|
||||
dev_err(dev, "can't get voltage level detector supply\n");
|
||||
return ret;
|
||||
if (platdata->activate_stm_id_vb_detection) {
|
||||
if (CONFIG_IS_ENABLED(DM_REGULATOR) &&
|
||||
(!platdata->force_b_session_valid ||
|
||||
platdata->force_vbus_detection)) {
|
||||
ret = device_get_supply_regulator(dev, "usb33d-supply",
|
||||
&priv->usb33d_supply);
|
||||
if (ret) {
|
||||
dev_err(dev, "can't get voltage level detector supply\n");
|
||||
return ret;
|
||||
}
|
||||
ret = regulator_set_enable(priv->usb33d_supply, true);
|
||||
if (ret) {
|
||||
dev_err(dev, "can't enable voltage level detector supply\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
ret = regulator_set_enable(priv->usb33d_supply, true);
|
||||
if (ret) {
|
||||
dev_err(dev, "can't enable voltage level detector supply\n");
|
||||
return ret;
|
||||
}
|
||||
/* Enable vbus sensing */
|
||||
setbits_le32(&usbotg_reg->ggpio,
|
||||
GGPIO_STM32_OTG_GCCFG_VBDEN |
|
||||
GGPIO_STM32_OTG_GCCFG_IDEN);
|
||||
}
|
||||
|
||||
if (platdata->force_b_session_valid)
|
||||
/* Override B session bits : value and enable */
|
||||
setbits_le32(&usbotg_reg->gotgctl,
|
||||
A_VALOEN | A_VALOVAL | B_VALOEN | B_VALOVAL);
|
||||
if (platdata->force_b_session_valid &&
|
||||
!platdata->force_vbus_detection) {
|
||||
/* Override VBUS detection: enable then value*/
|
||||
setbits_le32(&usbotg_reg->gotgctl, VB_VALOEN);
|
||||
setbits_le32(&usbotg_reg->gotgctl, VB_VALOVAL);
|
||||
} else {
|
||||
/* Enable VBUS sensing */
|
||||
setbits_le32(&usbotg_reg->ggpio,
|
||||
GGPIO_STM32_OTG_GCCFG_VBDEN);
|
||||
}
|
||||
if (platdata->force_b_session_valid) {
|
||||
/* Override B session bits: enable then value */
|
||||
setbits_le32(&usbotg_reg->gotgctl, A_VALOEN | B_VALOEN);
|
||||
setbits_le32(&usbotg_reg->gotgctl,
|
||||
A_VALOVAL | B_VALOVAL);
|
||||
} else {
|
||||
/* Enable ID detection */
|
||||
setbits_le32(&usbotg_reg->ggpio,
|
||||
GGPIO_STM32_OTG_GCCFG_IDEN);
|
||||
}
|
||||
}
|
||||
|
||||
ret = dwc2_udc_probe(platdata);
|
||||
if (ret)
|
||||
|
|
|
@ -94,6 +94,8 @@ struct dwc2_usbotg_reg {
|
|||
#define B_VALOEN BIT(6)
|
||||
#define A_VALOVAL BIT(5)
|
||||
#define A_VALOEN BIT(4)
|
||||
#define VB_VALOVAL BIT(3)
|
||||
#define VB_VALOEN BIT(2)
|
||||
|
||||
/* DWC2_UDC_OTG_GOTINT */
|
||||
#define GOTGINT_SES_END_DET (1<<2)
|
||||
|
|
|
@ -28,6 +28,7 @@ struct dwc2_plat_otg_data {
|
|||
unsigned int tx_fifo_sz_array[DWC2_MAX_HW_ENDPOINTS];
|
||||
unsigned char tx_fifo_sz_nb;
|
||||
bool force_b_session_valid;
|
||||
bool force_vbus_detection;
|
||||
bool activate_stm_id_vb_detection;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue