summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>2011-07-28 04:59:38 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-08-06 09:43:57 -0300
commit31ee95ec2d3dd3b6f68d7fa0f410045652895af2 (patch)
tree2464cc21d0290ec32fef93fdcdee98228353609f
parent572064280ecc9dc89227cf3797bc2144896a34f5 (diff)
[media] adp1653: check error code of adp1653_init_controls
Potentially the adp1653_init_controls could return an error. In our case the error was ignored, meanwhile it means incorrect initialization of V4L2 controls. Additionally we have to free control handler structures in case of apd1653_init_controls or media_entity_init failure. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Sakari Ailus <sakari.ailus@iki.fi> Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/adp1653.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/media/video/adp1653.c b/drivers/media/video/adp1653.c
index 8ad89ffe2cc3..279d75d38188 100644
--- a/drivers/media/video/adp1653.c
+++ b/drivers/media/video/adp1653.c
@@ -429,12 +429,19 @@ static int adp1653_probe(struct i2c_client *client,
flash->subdev.internal_ops = &adp1653_internal_ops;
flash->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
- adp1653_init_controls(flash);
+ ret = adp1653_init_controls(flash);
+ if (ret)
+ goto free_and_quit;
ret = media_entity_init(&flash->subdev.entity, 0, NULL, 0);
if (ret < 0)
- kfree(flash);
+ goto free_and_quit;
+ return 0;
+
+free_and_quit:
+ v4l2_ctrl_handler_free(&flash->ctrls);
+ kfree(flash);
return ret;
}