|
@@ -189,8 +189,6 @@ static struct fdt_usb_controller fdt_usb_controllers[USB_CTRL_COUNT] = {
|
|
|
},
|
|
|
};
|
|
|
|
|
|
-static struct fdt_usb_controller *controller;
|
|
|
-
|
|
|
/*
|
|
|
* A known hardware issue where Connect Status Change bit of PORTSC register
|
|
|
* of USB1 controller will be set after Port Reset.
|
|
@@ -201,6 +199,10 @@ static struct fdt_usb_controller *controller;
|
|
|
void ehci_powerup_fixup(struct ehci_ctrl *ctrl, uint32_t *status_reg,
|
|
|
uint32_t *reg)
|
|
|
{
|
|
|
+ struct fdt_usb *config = ctrl->priv;
|
|
|
+ struct fdt_usb_controller *controller;
|
|
|
+
|
|
|
+ controller = &fdt_usb_controllers[config->type];
|
|
|
mdelay(50);
|
|
|
/* This is to avoid PORT_ENABLE bit to be cleared in "ehci-hcd.c". */
|
|
|
if (controller->has_hostpc)
|
|
@@ -237,9 +239,12 @@ void ehci_set_usbmode(int index)
|
|
|
*/
|
|
|
int ehci_get_port_speed(struct ehci_ctrl *ctrl, uint32_t reg)
|
|
|
{
|
|
|
+ struct fdt_usb *config = ctrl->priv;
|
|
|
+ struct fdt_usb_controller *controller;
|
|
|
uint32_t tmp;
|
|
|
uint32_t *reg_ptr;
|
|
|
|
|
|
+ controller = &fdt_usb_controllers[config->type];
|
|
|
if (controller->has_hostpc) {
|
|
|
reg_ptr = (uint32_t *)((u8 *)&ctrl->hcor->or_usbcmd +
|
|
|
HOSTPC1_DEVLC);
|
|
@@ -766,10 +771,9 @@ int usb_process_devicetree(const void *blob)
|
|
|
int i;
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(fdt_usb_controllers); i++) {
|
|
|
- controller = &fdt_usb_controllers[i];
|
|
|
-
|
|
|
count = fdtdec_find_aliases_for_id(blob, "usb",
|
|
|
- controller->compat, node_list, USB_PORTS_MAX);
|
|
|
+ fdt_usb_controllers[i].compat, node_list,
|
|
|
+ USB_PORTS_MAX);
|
|
|
if (count) {
|
|
|
err = process_usb_nodes(blob, node_list, count, i);
|
|
|
if (err)
|
|
@@ -778,8 +782,6 @@ int usb_process_devicetree(const void *blob)
|
|
|
return err;
|
|
|
}
|
|
|
}
|
|
|
- if (i == ARRAY_SIZE(fdt_usb_controllers))
|
|
|
- controller = NULL;
|
|
|
|
|
|
return err;
|
|
|
}
|