/* This function must be called only after pm_runtime_resume_and_get() has been called */ staticvoid rzv2h_usbphy_assert_helper(struct rzv2h_usb2phy_reset_priv *priv)
{ conststruct rzv2h_usb2phy_reset_of_data *data = priv->data;
staticint rzv2h_usb2phy_reset_of_xlate(struct reset_controller_dev *rcdev, conststruct of_phandle_args *reset_spec)
{ /* No special handling needed, we have only one reset line per device */ return 0;
}
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM;
data = of_device_get_match_data(dev);
priv->data = data;
priv->dev = dev;
priv->base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(priv->base)) return PTR_ERR(priv->base);
rstc = devm_reset_control_get_shared_deasserted(dev, NULL); if (IS_ERR(rstc)) return dev_err_probe(dev, PTR_ERR(rstc), "failed to get deasserted reset\n");
spin_lock_init(&priv->lock);
error = devm_pm_runtime_enable(dev); if (error) return dev_err_probe(dev, error, "Failed to enable pm_runtime\n");
error = pm_runtime_resume_and_get(dev); if (error) return dev_err_probe(dev, error, "pm_runtime_resume_and_get failed\n");
for (unsignedint i = 0; i < data->init_val_count; i++)
writel(data->init_vals[i].val, priv->base + data->init_vals[i].reg);
/* keep usb2phy in asserted state */
rzv2h_usbphy_assert_helper(priv);
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.