staticint keembay_usb_clocks_on(struct keembay_usb_phy *priv)
{ int ret;
ret = regmap_update_bits(priv->regmap_cpr, USS_CPR_CLK_SET,
USS_CPR_MASK, USS_CPR_MASK); if (ret) {
dev_err(priv->dev, "error clock set: %d\n", ret); return ret;
}
ret = regmap_update_bits(priv->regmap_cpr, USS_CPR_RST_SET,
USS_CPR_MASK, USS_CPR_MASK); if (ret) {
dev_err(priv->dev, "error reset set: %d\n", ret); return ret;
}
ret = regmap_update_bits(priv->regmap_slv,
USS_USB_TIEOFFS_CONSTANTS_REG1,
IDDQ_ENABLE_MASK,
FIELD_PREP(IDDQ_ENABLE_MASK, 0)); if (ret) {
dev_err(priv->dev, "error iddq disable: %d\n", ret); return ret;
}
/* Wait 30us to ensure all analog blocks are powered up. */
usleep_range(30, 60);
ret = regmap_update_bits(priv->regmap_slv, USS_USB_PHY_CFG0,
PHY_REF_USE_PAD_MASK,
FIELD_PREP(PHY_REF_USE_PAD_MASK, 1)); if (ret)
dev_err(priv->dev, "error ref clock select: %d\n", ret);
return ret;
}
staticint keembay_usb_core_off(struct keembay_usb_phy *priv)
{ int ret;
ret = regmap_update_bits(priv->regmap_slv, USS_USB_CTRL_CFG0,
VCC_RESET_N_MASK,
FIELD_PREP(VCC_RESET_N_MASK, 0)); if (ret)
dev_err(priv->dev, "error core reset: %d\n", ret);
return ret;
}
staticint keembay_usb_core_on(struct keembay_usb_phy *priv)
{ int ret;
ret = regmap_update_bits(priv->regmap_slv, USS_USB_CTRL_CFG0,
VCC_RESET_N_MASK,
FIELD_PREP(VCC_RESET_N_MASK, 1)); if (ret)
dev_err(priv->dev, "error core on: %d\n", ret);
return ret;
}
staticint keembay_usb_phys_on(struct keembay_usb_phy *priv)
{ int ret;
ret = regmap_update_bits(priv->regmap_slv, USS_USB_PHY_CFG0,
POR_MASK | PHY_RESET_MASK,
FIELD_PREP(POR_MASK | PHY_RESET_MASK, 0)); if (ret)
dev_err(priv->dev, "error phys on: %d\n", ret);
/* * According to Keem Bay datasheet, wait 20us after setting the * SRAM load done bit, before releasing the controller reset.
*/
usleep_range(20, 40);
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.