static int __adp1653_set_power(struct adp1653_flash *flash, int on) { int ret; if (flash->platform_data->power) { ret = flash->platform_data->power(&flash->subdev, on); if (ret < 0) return ret; } else { gpiod_set_value(flash->platform_data->enable_gpio, on); if (on) /* Some delay is apparently required. */ udelay(20); } if (!on) return 0; ret = adp1653_init_device(flash); if (ret >= 0) return ret; if (flash->platform_data->power) flash->platform_data->power(&flash->subdev, 0); else gpiod_set_value(flash->platform_data->enable_gpio, 0); return ret; }
static int __adp1653_set_power(struct adp1653_flash *flash, int on) { int ret; ret = flash->platform_data->power(&flash->subdev, on); if (ret < 0) return ret; if (!on) return 0; ret = adp1653_init_device(flash); if (ret < 0) flash->platform_data->power(&flash->subdev, 0); return ret; }
static int adp1653_ioctl_s_power(struct v4l2_int_device *s, enum v4l2_power state) { struct adp1653_flash *flash = s->priv; int rval = 0; if (state == V4L2_POWER_STANDBY) state = V4L2_POWER_ON; if (state == flash->power) return 0; switch (state) { case V4L2_POWER_STANDBY: case V4L2_POWER_ON: rval = flash->platform_data->power_on(s); if (rval) return rval; flash->power = V4L2_POWER_ON; rval = adp1653_init_device(s); if (rval) goto fail; break; case V4L2_POWER_OFF: rval = flash->platform_data->power_off(s); flash->power = V4L2_POWER_OFF; break; } return 0; fail: flash->platform_data->power_off(s); flash->power = V4L2_POWER_OFF; return rval; }