On Thursday, 25 of September 2008, Alan Stern wrote: > This patch (as1141) adds code to use the device type's pm_op methods, > if they are defined. It fixes a regression in the USB PM code; the > various suspend and resume methods are defined in the device type > rather than in the bus, because USB devices have to be handled > differently from USB interfaces. Without the patch, those methods > never get called. > > The patch also fixes a couple of spelling errors. Hm, these changes are not needed in the current mainline, so there's a patch in -next that removes the code added by this patch. It might be better to find that patch and drop it instead, IMO. > Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > Tested-by: Jiri Slaby <jirislaby@xxxxxxxxx> > > --- > > This should be merged before 2.6.27 is released, if possible. > Otherwise people will find their systems refuse to suspend when any USB > devices are attached. > > > > Index: usb-2.6/drivers/base/power/main.c > =================================================================== > --- usb-2.6.orig/drivers/base/power/main.c > +++ usb-2.6/drivers/base/power/main.c > @@ -107,7 +107,7 @@ void device_pm_remove(struct device *dev > } > > /** > - * pm_op - execute the PM operation appropiate for given PM event > + * pm_op - execute the PM operation appropriate for given PM event > * @dev: Device. > * @ops: PM operations to choose from. > * @state: PM transition of the system being carried out. > @@ -166,7 +166,7 @@ static int pm_op(struct device *dev, str > } > > /** > - * pm_noirq_op - execute the PM operation appropiate for given PM event > + * pm_noirq_op - execute the PM operation appropriate for given PM event > * @dev: Device. > * @ops: PM operations to choose from. > * @state: PM transition of the system being carried out. > @@ -363,6 +363,13 @@ static int resume_device(struct device * > goto End; > } > > + if (dev->type && dev->type->pm) { > + pm_dev_dbg(dev, state, "type "); > + error = pm_op(dev, dev->type->pm, state); > + if (error) > + goto End; > + } > + > if (dev->class) { > if (dev->class->pm) { > pm_dev_dbg(dev, state, "class "); > @@ -596,6 +603,13 @@ static int suspend_device(struct device > goto End; > } > > + if (dev->type && dev->type->pm) { > + pm_dev_dbg(dev, state, "type "); > + error = pm_op(dev, dev->type->pm, state); > + if (error) > + goto End; > + } > + > if (dev->bus) { > if (dev->bus->pm) { > pm_dev_dbg(dev, state, ""); > > > _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm