schedule_work (&ohci->rh_resume); 
usb_hcd_resume_root_hub(hcd); 
static int ohci_hub_control (	struct usb_hcd	*hcd,	u16		typeReq,	u16		wValue,	u16		wIndex,	char		*buf,	u16		wLength) {	struct ohci_hcd	*ohci = hcd_to_ohci (hcd);	int		ports = hcd_to_bus (hcd)->root_hub->maxchild;	u32		temp;	int		retval = 0;	switch (typeReq) {	case ClearHubFeature:		switch (wValue) {		case C_HUB_OVER_CURRENT:			ohci_writel (ohci, RH_HS_OCIC,					&ohci->regs->roothub.status);		case C_HUB_LOCAL_POWER:			break;		default:			goto error;		}		break;	case ClearPortFeature:		if (!wIndex || wIndex > ports)			goto error;		wIndex--;		switch (wValue) {		case USB_PORT_FEAT_ENABLE:			temp = RH_PS_CCS;			break;		case USB_PORT_FEAT_C_ENABLE:			temp = RH_PS_PESC;			break;		case USB_PORT_FEAT_SUSPEND:			temp = RH_PS_POCI;			if ((ohci->hc_control & OHCI_CTRL_HCFS)					!= OHCI_USB_OPER)				schedule_work (&ohci->rh_resume);			break;		case USB_PORT_FEAT_C_SUSPEND:			temp = RH_PS_PSSC;			break;		case USB_PORT_FEAT_POWER:			temp = RH_PS_LSDA;			break;		case USB_PORT_FEAT_C_CONNECTION:			temp = RH_PS_CSC;			break;		case USB_PORT_FEAT_C_OVER_CURRENT:			temp = RH_PS_OCIC;			break;		case USB_PORT_FEAT_C_RESET:			temp = RH_PS_PRSC;			break;		default:			goto error;		}		ohci_writel (ohci, temp,				&ohci->regs->roothub.portstatus [wIndex]);		// ohci_readl (ohci, &ohci->regs->roothub.portstatus [wIndex]);		break;	case GetHubDescriptor:		ohci_hub_descriptor (ohci, (struct usb_hub_descriptor *) buf);		break;	case GetHubStatus:		temp = roothub_status (ohci) & ~(RH_HS_CRWE | RH_HS_DRWE);		*(__le32 *) buf = cpu_to_le32 (temp);		break;	case GetPortStatus:		if (!wIndex || wIndex > ports)			goto error;		wIndex--;		temp = roothub_portstatus (ohci, wIndex);		*(__le32 *) buf = cpu_to_le32 (temp);#ifndef	OHCI_VERBOSE_DEBUG	if (*(u16*)(buf+2))	/* only if wPortChange is interesting */#endif		dbg_port (ohci, "GetStatus", wIndex, temp);		break;	case SetHubFeature:		switch (wValue) {		case C_HUB_OVER_CURRENT:			// FIXME:  this can be cleared, yes?		case C_HUB_LOCAL_POWER:			break;		default:			goto error;		}		break;	case SetPortFeature:		if (!wIndex || wIndex > ports)			goto error;		wIndex--;		switch (wValue) {		case USB_PORT_FEAT_SUSPEND:#ifdef	CONFIG_USB_OTG			if (hcd->self.otg_port == (wIndex + 1)					&& hcd->self.b_hnp_enable)				start_hnp(ohci);			else#endif			ohci_writel (ohci, RH_PS_PSS,				&ohci->regs->roothub.portstatus [wIndex]);			break;		case USB_PORT_FEAT_POWER:			ohci_writel (ohci, RH_PS_PPS,				&ohci->regs->roothub.portstatus [wIndex]);			break;		case USB_PORT_FEAT_RESET:			root_port_reset (ohci, wIndex);			break;		default:			goto error;		}		break;	default:error:		/* "protocol stall" on error */		retval = -EPIPE;	}	return retval;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/f197b2c54b9d9a133a9a8ff92f35cadf8945ea14/ohci-hub.c/buggy/drivers/usb/host/ohci-hub.c