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@xxxxxxxxx> Reported-by: kernel test robot <lkp@xxxxxxxxx> --- drivers/media/i2c/ov8856.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/media/i2c/ov8856.c b/drivers/media/i2c/ov8856.c index 8785764b7a74..f1bb7d882183 100644 --- a/drivers/media/i2c/ov8856.c +++ b/drivers/media/i2c/ov8856.c @@ -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); -- 2.17.1