static int pnp_bus_suspend(struct device *dev, pm_message_t state) { struct pnp_dev *pnp_dev = to_pnp_dev(dev); struct pnp_driver *pnp_drv = pnp_dev->driver; int error; if (!pnp_drv) return 0; if (pnp_drv->suspend) { error = pnp_drv->suspend(pnp_dev, state); if (error) return error; } if (pnp_can_disable(pnp_dev)) { error = pnp_stop_dev(pnp_dev); if (error) return error; } if (pnp_dev->protocol->suspend) pnp_dev->protocol->suspend(pnp_dev, state); return 0; }
/** * pnp_disable_dev - disables device * @dev: pointer to the desired device * * inform the correct pnp protocol so that resources can be used by other devices */ int pnp_disable_dev(struct pnp_dev *dev) { int error; if (!dev->active) return 0; error = pnp_stop_dev(dev); if (error) return error; dev->active = 0; /* release the resources so that other devices can use them */ mutex_lock(&pnp_res_mutex); pnp_clean_resource_table(dev); mutex_unlock(&pnp_res_mutex); return 0; }
/** * pnp_disable_dev - disables device * @dev: pointer to the desired device * * inform the correct pnp protocol so that resources can be used by other devices */ int pnp_disable_dev(struct pnp_dev *dev) { int error; if (!dev->active) return 0; /* the device is already disabled */ error = pnp_stop_dev(dev); if (error) return error; dev->active = 0; /* release the resources so that other devices can use them */ down(&pnp_res_mutex); pnp_clean_resource_table(&dev->res); up(&pnp_res_mutex); return 1; }
static int pnp_bus_suspend(struct device *dev, pm_message_t state) { struct pnp_dev * pnp_dev = to_pnp_dev(dev); struct pnp_driver * pnp_drv = pnp_dev->driver; int error; if (!pnp_drv) return 0; if (pnp_drv->suspend) { error = pnp_drv->suspend(pnp_dev, state); if (error) return error; } if (!(pnp_drv->flags & PNP_DRIVER_RES_DO_NOT_CHANGE) && pnp_can_disable(pnp_dev)) { error = pnp_stop_dev(pnp_dev); if (error) return error; } return 0; }