diff --git a/drivers/media/i2c/it6625.c b/drivers/media/i2c/it6625.c index a270bfda9f83..5f118d7fbb59 100644 --- a/drivers/media/i2c/it6625.c +++ b/drivers/media/i2c/it6625.c @@ -2167,33 +2167,6 @@ static int it6625_parse_dt(struct it6625 *it6625) return it6625_parse_endpoint(it6625); } -static int it6625_init_v4l2_subdev(struct it6625 *it6625) -{ - struct v4l2_subdev *sd = &it6625->sd; - int err; - - sd->dev = it6625->dev; - - v4l2_i2c_subdev_init(sd, it6625->i2c_client, &it6625_ops); - sd->internal_ops = &it6625_internal_ops; - sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS; - if (it6625_v4l2_init_controls(sd)) { - dev_err(it6625->dev, "Failed to initialize v4l2 controls"); - return -ENOMEM; - } - - it6625->pad.flags = MEDIA_PAD_FL_SOURCE; - sd->entity.function = MEDIA_ENT_F_CAM_SENSOR; - err = media_entity_pads_init(&sd->entity, 1, &it6625->pad); - if (err < 0) { - dev_err(it6625->dev, "%s %d err=%d", __func__, __LINE__, err); - v4l2_ctrl_handler_free(sd->ctrl_handler); - return err; - } - - return 0; -} - static int it6625_check_device(struct it6625 *it6625) { static const u8 chip_ids[][2] = { @@ -2279,9 +2252,23 @@ static int it6625_probe(struct i2c_client *client) } sd = &it6625->sd; - err = it6625_init_v4l2_subdev(it6625); - if (err) + v4l2_i2c_subdev_init(sd, it6625->i2c_client, &it6625_ops); + sd->internal_ops = &it6625_internal_ops; + sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS; + + err = it6625_v4l2_init_controls(sd); + if (err) { + dev_err(it6625->dev, "failed to initialize v4l2 controls: %d", err); goto err_clean_work_queues; + } + + it6625->pad.flags = MEDIA_PAD_FL_SOURCE; + sd->entity.function = MEDIA_ENT_F_CAM_SENSOR; + err = media_entity_pads_init(&sd->entity, 1, &it6625->pad); + if (err < 0) { + dev_err(it6625->dev, "%s %d err=%d", __func__, __LINE__, err); + goto err_clean_ctrl_handler; + } err = v4l2_ctrl_handler_setup(sd->ctrl_handler); if (err) @@ -2340,6 +2327,7 @@ static int it6625_probe(struct i2c_client *client) cec_unregister_adapter(it6625->cec_adap); err_clean_hdl: media_entity_cleanup(&sd->entity); +err_clean_ctrl_handler: v4l2_ctrl_handler_free(&it6625->hdl); err_clean_work_queues: