
Hi Tom,
On 17 April 2015 at 14:31, Tom Rini trini@konsulko.com wrote:
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@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 {
Do we need to remove this? I think this will break when driver model is used, if NULL is passed in to select the default ops.
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;
OK what I missed is that lots of things call ehci_hcd_init(). I only changed a few to call ehci_set_controller_priv().
rc = ehci_hcd_init(index, init, &ctrl->hccr, &ctrl->hcor); if (rc) return rc;
-- 1.7.9.5
Regards, Simon