[U-Boot] [PATCH] dm: usb: Make usb_lowlevel_init set the default ops pointer

Tom Rini trini at konsulko.com
Fri Apr 17 22:31:03 CEST 2015


In order to switch to a set of function pointers for certain operations
we need to ensure that the defaults are first set so that they can be
overriden as needed by SoC/board specific code.

Signed-off-by: Tom Rini <trini at konsulko.com>
---
 drivers/usb/host/ehci-hcd.c |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 79cf3b3..e7c438c 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -945,9 +945,7 @@ const struct ehci_ops default_ehci_ops = {
 
 static void ehci_setup_ops(struct ehci_ctrl *ctrl, const struct ehci_ops *ops)
 {
-	if (!ops) {
-		ctrl->ops = default_ehci_ops;
-	} else {
+	if (ops) {
 		ctrl->ops = *ops;
 		if (!ctrl->ops.set_usb_mode)
 			ctrl->ops.set_usb_mode = ehci_set_usbmode;
@@ -1095,6 +1093,12 @@ int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
 	uint tweaks = 0;
 	int rc;
 
+	/**
+	 * Set ops to default_ehci_ops, ehci_hcd_init should call
+	 * ehci_set_controller_priv to change any of these function pointers.
+	 */
+	ctrl->ops = default_ehci_ops;
+
 	rc = ehci_hcd_init(index, init, &ctrl->hccr, &ctrl->hcor);
 	if (rc)
 		return rc;
-- 
1.7.9.5



More information about the U-Boot mailing list