Example #1
0
static int lm3554_g_flash_status(struct v4l2_subdev *sd, s32 *val)
{
	u8 value;

	get_reg_field(sd, &flags, &value);

	/*
	 * do not take TX1/TX2 signal as an error.
	 * because MSIC will not turn off flash, but turn to
	 * torch mode according to gsm modem signal by hardware.
	 */
	if (value & LM3554_FLAG_TIMEOUT)
		*val = ATOMISP_FLASH_STATUS_TIMEOUT;
	else if (value & LM3554_FLAG_THERMAL_SHUTDOWN ||
			value & LM3554_FLAG_LED_FAULT ||
			value & LM3554_FLAG_LED_THERMAL_FAULT ||
			value & LM3554_FLAG_INPUT_VOLTAGE_LOW) {
		*val = ATOMISP_FLASH_STATUS_HW_ERROR;
	} else
		*val = ATOMISP_FLASH_STATUS_OK;

	if (*val == ATOMISP_FLASH_STATUS_HW_ERROR) {
		struct i2c_client *client = v4l2_get_subdevdata(sd);
		dev_dbg(&client->dev, "LM3554 flag status: %d\n", value);
	}
	return 0;
}
Example #2
0
static int lm3556_g_indicator_intensity(struct v4l2_subdev *sd, u32 *val)
{
	u8 value;

	get_reg_field(sd, &indicator_current, &value);
	*val = LM3556_VALUE_TO_PERCENT((u32)value, LM3556_INDICATOR_STEP);

	return 0;
}
Example #3
0
static int lm3556_g_torch_intensity(struct v4l2_subdev *sd, u32 *val)
{
	u8 value;

	get_reg_field(sd, &torch_current, &value);
	*val = LM3556_VALUE_TO_PERCENT((u32)value, LM3556_TORCH_STEP);

	return 0;
}
Example #4
0
static int lm3556_g_flash_timeout(struct v4l2_subdev *sd, u32 *val)
{
	u8 value;

	get_reg_field(sd, &flash_timeout, &value);
	*val = (u32)(value + 1) * LM3556_TIMEOUT_STEPSIZE;

	return 0;
}
Example #5
0
static int lm3554_g_flash_intensity(struct v4l2_subdev *sd, s32 *val)
{
	u8 value;

	get_reg_field(sd, &flash_current, &value);
	*val = LM3554_VALUE_TO_PERCENT((u32)value, LM3554_FLASH_STEP);

	return 0;
}
Example #6
0
static int lm3556_g_flash_status(struct v4l2_subdev *sd, u32 *val)
{
	u8 value;
	struct i2c_client *client = v4l2_get_subdevdata(sd);

	get_reg_field(sd, &flags, &value);

	if (value & LM3556_FLAG_TIMEOUT)
		*val = ATOMISP_FLASH_STATUS_TIMEOUT;
	else if (value & LM3556_FLAG_TX_EVENT) {
		*val = ATOMISP_FLASH_STATUS_INTERRUPTED;
	} else if (value & LM3556_FLAG_THERMAL_SHUTDOWN ||
			value & LM3556_FLAG_LED_FAULT ||
			value & LM3556_FLAG_OVP ||
			value & LM3556_FLAG_UVLO) {
		*val = ATOMISP_FLASH_STATUS_HW_ERROR;
	} else
		*val = ATOMISP_FLASH_STATUS_OK;

	if (*val == ATOMISP_FLASH_STATUS_HW_ERROR)
		dev_err(&client->dev, "LM3556 flag status: %d\n", value);
	return 0;
}