if (dev->driver == &usb_generic_driver) return usb_suspend_device (to_usb_device(dev), message); 
/* USB devices enter SUSPEND state through their hubs, but can be * marked for FREEZE as soon as their children are already idled. */ if (dev->driver == &usb_generic_driver) { if (dev->power.power_state.event == message.event) return 0; /* we need to rule out bogus requests through sysfs */ status = device_for_each_child(dev, NULL, verify_suspended); if (status) return status; if (message.event == PM_EVENT_FREEZE) { dev->power.power_state = message; return 0; } return usb_suspend_device (to_usb_device(dev)); } 
static int usb_generic_suspend(struct device *dev, pm_message_t message){	struct usb_interface	*intf;	struct usb_driver	*driver;	int			status;	if (dev->driver == &usb_generic_driver)		return usb_suspend_device (to_usb_device(dev), message);	if ((dev->driver == NULL) ||	    (dev->driver_data == &usb_generic_driver_data))		return 0;	intf = to_usb_interface(dev);	driver = to_usb_driver(dev->driver);	/* with no hardware, USB interfaces only use FREEZE and ON states */	if (!is_active(intf))		return 0;	if (driver->suspend && driver->resume) {		status = driver->suspend(intf, message);		if (status)			dev_err(dev, "%s error %d\n", "suspend", status);		else			mark_quiesced(intf);	} else {		// FIXME else if there's no suspend method, disconnect...		dev_warn(dev, "no %s?\n", "suspend");		status = 0;	}	return status;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/390a8c345e6415cbf811232feedac70b56c9fc8d/usb.c/clean/drivers/usb/core/usb.c