static int ux500_pd_bus_notify(struct notifier_block *nb, unsigned long action, void *data) { struct ux500_regulator *regulator = NULL; struct ux500_pins *pins = NULL; struct device *dev = data; const char *onoff = NULL; dev_dbg(dev, "%s() %ld !\n", __func__, action); switch (action) { case BUS_NOTIFY_BIND_DRIVER: pins = ux500_pins_get(dev_name(dev)); if (pins) { ux500_pins_enable(pins); ux500_pins_put(pins); } regulator = ux500_regulator_get(dev); if (IS_ERR(regulator)) regulator = NULL; else { ux500_regulator_atomic_enable(regulator); ux500_regulator_put(regulator); } onoff = "on"; break; case BUS_NOTIFY_UNBOUND_DRIVER: pins = ux500_pins_get(dev_name(dev)); if (pins) { ux500_pins_disable(pins); ux500_pins_put(pins); } regulator = ux500_regulator_get(dev); if (IS_ERR(regulator)) regulator = NULL; else { ux500_regulator_atomic_disable(regulator); ux500_regulator_put(regulator); } onoff = "off"; break; } if (pins || regulator) { dev_info(dev, "runtime pm disabled, forced %s: %s%s\n", onoff, pins ? "pins " : "", regulator ? "regulator " : ""); } return 0; }
static void __devres_release(struct device *dev, void *res) { struct pm_runtime_data *prd = res; dev_dbg(dev, "__devres_release()\n"); if (test_bit(BIT_ENABLED, &prd->flags)) { if (prd->pins) ux500_pins_disable(prd->pins); if (prd->regulator) ux500_regulator_atomic_disable(prd->regulator); } if (test_bit(BIT_ACTIVE, &prd->flags)) { if (prd->pins) ux500_pins_put(prd->pins); if (prd->regulator) ux500_regulator_put(prd->regulator); } }
static void put_gpio(void) { ux500_pins_put(usb_gpio_pins); }