#include <linux/regmap.h>
 #include <linux/types.h>
 
-#include <media/v4l2-ctrls.h>
 #include <media/v4l2-device.h>
 #include <media/v4l2-event.h>
 #include <media/v4l2-fwnode.h>
        const struct imx_media_pixfmt *cc[IMX7_CSI_PADS_NUM];
        struct v4l2_fract frame_interval[IMX7_CSI_PADS_NUM];
 
-       struct v4l2_ctrl_handler ctrl_hdlr;
-
        void __iomem *regbase;
        int irq;
        struct clk *mclk;
                }
                csi->sink = remote->entity;
        } else {
-               v4l2_ctrl_handler_free(&csi->ctrl_hdlr);
-               v4l2_ctrl_handler_init(&csi->ctrl_hdlr, 0);
                csi->sink = NULL;
        }
 
        csi->sd.grp_id = IMX_MEDIA_GRP_ID_CSI;
        snprintf(csi->sd.name, sizeof(csi->sd.name), "csi");
 
-       v4l2_ctrl_handler_init(&csi->ctrl_hdlr, 0);
-       csi->sd.ctrl_handler = &csi->ctrl_hdlr;
-
        for (i = 0; i < IMX7_CSI_PADS_NUM; i++)
                csi->pad[i].flags = (i == IMX7_CSI_PAD_SINK) ?
                        MEDIA_PAD_FL_SINK : MEDIA_PAD_FL_SOURCE;
        ret = media_entity_pads_init(&csi->sd.entity, IMX7_CSI_PADS_NUM,
                                     csi->pad);
        if (ret < 0)
-               goto free;
+               goto cleanup;
 
        ret = imx7_csi_async_register(csi);
        if (ret)
        v4l2_async_notifier_unregister(&csi->notifier);
        v4l2_async_notifier_cleanup(&csi->notifier);
 
-free:
-       v4l2_ctrl_handler_free(&csi->ctrl_hdlr);
-
 cleanup:
        v4l2_async_notifier_unregister(&imxmd->notifier);
        v4l2_async_notifier_cleanup(&imxmd->notifier);
        v4l2_async_notifier_unregister(&csi->notifier);
        v4l2_async_notifier_cleanup(&csi->notifier);
        v4l2_async_unregister_subdev(sd);
-       v4l2_ctrl_handler_free(&csi->ctrl_hdlr);
 
        mutex_destroy(&csi->lock);