#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);