ret = regulator_bulk_enable(rptr->cfg->num_vregs, rptr->vregs); if (ret) return ret;
regmap_write(regmap, base + EUSB2_EN_CTL1, EUSB2_RPTR_EN);
/* Write registers from init table */ for (int i = 0; i < rptr->cfg->init_tbl_num; i++)
regmap_write(regmap, base + rptr->cfg->init_tbl[i].reg,
rptr->cfg->init_tbl[i].value);
/* Override registers from devicetree values */ if (!of_property_read_u8(np, "qcom,tune-usb2-preem", &val))
regmap_write(regmap, base + EUSB2_TUNE_USB2_PREEM, val);
if (!of_property_read_u8(np, "qcom,tune-usb2-disc-thres", &val))
regmap_write(regmap, base + EUSB2_TUNE_HSDISC, val);
if (!of_property_read_u8(np, "qcom,tune-usb2-amplitude", &val))
regmap_write(regmap, base + EUSB2_TUNE_IUSB2, val);
/* Wait for status OK */
ret = regmap_read_poll_timeout(regmap, base + EUSB2_RPTR_STATUS, poll_val,
poll_val & RPTR_OK, 10, 5); if (ret)
dev_err(rptr->dev, "initialization timed-out\n");
switch (mode) { case PHY_MODE_USB_HOST: /* * CM.Lx is prohibited when repeater is already into Lx state as * per eUSB 1.2 Spec. Below implement software workaround until * PHY and controller is fixing seen observation.
*/
regmap_write(regmap, base + EUSB2_FORCE_EN_5, F_CLK_19P2M_EN);
regmap_write(regmap, base + EUSB2_FORCE_VAL_5, V_CLK_19P2M_EN); break; case PHY_MODE_USB_DEVICE: /* * In device mode clear host mode related workaround as there * is no repeater reset available, and enable/disable of * repeater doesn't clear previous value due to shared * regulators (say host <-> device mode switch).
*/
regmap_write(regmap, base + EUSB2_FORCE_EN_5, 0);
regmap_write(regmap, base + EUSB2_FORCE_VAL_5, 0); break; default: return -EINVAL;
}
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.