/* Probe number of ports if not already provided by DT */ if (!uhci->rh_numports)
uhci->rh_numports = uhci_count_ports(hcd);
/* Set up pointers to to generic functions */
uhci->reset_hc = uhci_generic_reset_hc;
uhci->check_and_reset_hc = uhci_generic_check_and_reset_hc;
/* No special actions need to be taken for the functions below */
uhci->configure_hc = NULL;
uhci->resume_detect_interrupts_are_broken = NULL;
uhci->global_suspend_mode_is_broken = NULL;
/* Reset if the controller isn't already safely quiescent. */
check_and_reset_hc(uhci); return0;
}
/* Get and enable clock if any specified */
uhci->clk = devm_clk_get_optional(&pdev->dev, NULL); if (IS_ERR(uhci->clk)) {
ret = PTR_ERR(uhci->clk); goto err_rmr;
}
ret = clk_prepare_enable(uhci->clk); if (ret) {
dev_err(&pdev->dev, "Error couldn't enable clock (%d)\n", ret); goto err_rmr;
}
ret = platform_get_irq(pdev, 0); if (ret < 0) goto err_clk;
ret = usb_add_hcd(hcd, ret, IRQF_SHARED); if (ret) goto err_clk;
/* Make sure the controller is quiescent and that we're not using it *anymore.Thisismainlyforthebenefitofprogramswhich,likekexec, *expectthehardwaretobeidle:notdoingDMAorgeneratingIRQs. * *Thisroutinemaybecalledinadamagedorfailingkernel.Hencewe *donotacquirethespinlockbeforeshuttingdownthecontroller.
*/ staticvoid uhci_hcd_platform_shutdown(struct platform_device *op)
{ struct usb_hcd *hcd = platform_get_drvdata(op);
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.