Exemplo n.º 1
0
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;
}
Exemplo n.º 3
0
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;
}