| From 51df7b52c67b5a9415571ed3139908db6913d50c Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 13 Jan 2022 01:18:48 +0100 |
| Subject: media: ov2740: identify module after subdev initialisation |
| |
| From: Bingbu Cao <bingbu.cao@intel.com> |
| |
| [ Upstream commit 54ade663d4bb606e23dbc4e0d49e2e9837dbb33f ] |
| |
| The module identifying will try to get the sub device data which |
| will be ready after sub device initialisation, so if try to use the |
| subdev data to deference the client will cause NULL pointer |
| dereference, this patch move the module identification after |
| v4l2_i2c_subdev_init() to fix this issue, it also fixes duplicate |
| module idendification. |
| |
| Fixes: ada2c4f54d0a ("media: ov2740: support device probe in non-zero ACPI D state") |
| Signed-off-by: Bingbu Cao <bingbu.cao@intel.com> |
| Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/media/i2c/ov2740.c | 8 +------- |
| 1 file changed, 1 insertion(+), 7 deletions(-) |
| |
| diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c |
| index bab720c7c1de..d5f0eabf20c6 100644 |
| --- a/drivers/media/i2c/ov2740.c |
| +++ b/drivers/media/i2c/ov2740.c |
| @@ -1162,6 +1162,7 @@ static int ov2740_probe(struct i2c_client *client) |
| if (!ov2740) |
| return -ENOMEM; |
| |
| + v4l2_i2c_subdev_init(&ov2740->sd, client, &ov2740_subdev_ops); |
| full_power = acpi_dev_state_d0(&client->dev); |
| if (full_power) { |
| ret = ov2740_identify_module(ov2740); |
| @@ -1171,13 +1172,6 @@ static int ov2740_probe(struct i2c_client *client) |
| } |
| } |
| |
| - v4l2_i2c_subdev_init(&ov2740->sd, client, &ov2740_subdev_ops); |
| - ret = ov2740_identify_module(ov2740); |
| - if (ret) { |
| - dev_err(&client->dev, "failed to find sensor: %d", ret); |
| - return ret; |
| - } |
| - |
| mutex_init(&ov2740->mutex); |
| ov2740->cur_mode = &supported_modes[0]; |
| ret = ov2740_init_controls(ov2740); |
| -- |
| 2.34.1 |
| |