staticint qcom_usb_hs_phy_set_mode(struct phy *phy, enum phy_mode mode, int submode)
{ struct qcom_usb_hs_phy *uphy = phy_get_drvdata(phy);
u8 addr; int ret;
if (!uphy->vbus_edev) {
u8 val = 0;
switch (mode) { case PHY_MODE_USB_OTG: case PHY_MODE_USB_HOST:
val |= ULPI_INT_IDGRD;
fallthrough; case PHY_MODE_USB_DEVICE:
val |= ULPI_INT_SESS_VALID; break; default: break;
}
ret = ulpi_write(uphy->ulpi, ULPI_USB_INT_EN_RISE, val); if (ret) return ret;
ret = ulpi_write(uphy->ulpi, ULPI_USB_INT_EN_FALL, val);
} else { switch (mode) { case PHY_MODE_USB_OTG: case PHY_MODE_USB_DEVICE:
addr = ULPI_SET(ULPI_MISC_A); break; case PHY_MODE_USB_HOST:
addr = ULPI_CLR(ULPI_MISC_A); break; default: return -EINVAL;
}
ret = ulpi_write(uphy->ulpi, ULPI_SET(ULPI_PWR_CLK_MNG_REG),
ULPI_PWR_OTG_COMP_DISABLE); if (ret) return ret;
ret = ulpi_write(uphy->ulpi, addr, ULPI_MISC_A_VBUSVLDEXTSEL);
}
ret = clk_prepare_enable(uphy->ref_clk); if (ret) return ret;
ret = clk_prepare_enable(uphy->sleep_clk); if (ret) goto err_sleep;
ret = regulator_set_load(uphy->v1p8, 50000); if (ret < 0) goto err_1p8;
ret = regulator_enable(uphy->v1p8); if (ret) goto err_1p8;
ret = regulator_set_voltage_triplet(uphy->v3p3, 3050000, 3300000,
3300000); if (ret) goto err_3p3;
ret = regulator_set_load(uphy->v3p3, 50000); if (ret < 0) goto err_3p3;
ret = regulator_enable(uphy->v3p3); if (ret) goto err_3p3;
for (seq = uphy->init_seq; seq->addr; seq++) {
ret = ulpi_write(ulpi, ULPI_EXT_VENDOR_SPECIFIC + seq->addr,
seq->val); if (ret) goto err_ulpi;
}
if (uphy->reset) {
ret = reset_control_reset(uphy->reset); if (ret) goto err_ulpi;
}
if (uphy->vbus_edev) {
state = extcon_get_state(uphy->vbus_edev, EXTCON_USB); /* setup initial state */
qcom_usb_hs_phy_vbus_notifier(&uphy->vbus_notify, state,
uphy->vbus_edev);
ret = extcon_register_notifier(uphy->vbus_edev, EXTCON_USB,
&uphy->vbus_notify); if (ret) goto err_ulpi;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.