@@ -1448,6 +1448,9 @@ struct ov8856 {
/* True if the device has been identified */
bool identified;
+
+ /* True for skipping otp read */
+ bool acpi_skip_otp;
};
struct ov8856_lane_cfg {
@@ -1692,7 +1695,7 @@ static int ov8856_identify_module(struct ov8856 *ov8856)
{
struct i2c_client *client = v4l2_get_subdevdata(&ov8856->sd);
int ret;
- u32 val;
+ u32 val, width;
if (ov8856->identified)
return 0;
@@ -1708,6 +1711,10 @@ static int ov8856_identify_module(struct ov8856 *ov8856)
return -ENXIO;
}
+ width = ov8856->cur_mode->width;
+ if (ov8856->acpi_skip_otp & (width == 3280 | width == 1640))
+ goto otp_skip;
+
ret = ov8856_write_reg(ov8856, OV8856_REG_MODE_SELECT,
OV8856_REG_VALUE_08BIT, OV8856_MODE_STREAMING);
if (ret)
@@ -1750,6 +1757,11 @@ static int ov8856_identify_module(struct ov8856 *ov8856)
ov8856->identified = true;
+ return 0;
+
+otp_skip:
+ ov8856->identified = true;
+
return 0;
}
@@ -2499,6 +2511,8 @@ static int ov8856_probe(struct i2c_client *client)
dev_err(&client->dev, "failed to find sensor: %d", ret);
goto probe_power_off;
}
+ } else {
+ ov8856->acpi_skip_otp = true;
}
mutex_init(&ov8856->mutex);
To skip OTP read function while enable non-zero ACPI D state. This OTP read only influences streaming output with 3280x2464 & 1640x1232 resolution. Signed-off-by: Jimmy Su <jimmy.su@intel.com> --- drivers/media/i2c/ov8856.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)