depends on VIDEO_DEV
depends on ARCH_QCOM || COMPILE_TEST
select V4L2_MEM2MEM_DEV
- select QCOM_MDT_LOADER if ARCH_QCOM
+ select QCOM_MDT_LOADER
select QCOM_SCM
+ select QCOM_UBWC_CONFIG
select VIDEOBUF2_DMA_CONTIG
help
This is a V4L2 driver for Qualcomm iris video accelerator
if (ret)
goto error_unload_fw;
+ ret = iris_vpu_switch_to_hwmode(core);
+ if (ret)
+ goto error_unload_fw;
+
+ core->iris_firmware_data->init_hfi_ops(core);
+
ret = iris_hfi_core_init(core);
if (ret)
goto error_unload_fw;
return iris_ctrls_init(inst);
}
- static const struct iris_fmt iris_vdec_formats_cap[] = {
- [IRIS_FMT_NV12] = {
- .pixfmt = V4L2_PIX_FMT_NV12,
- .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
- },
- [IRIS_FMT_QC08C] = {
- .pixfmt = V4L2_PIX_FMT_QC08C,
- .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
- },
-void iris_vdec_inst_deinit(struct iris_inst *inst)
-{
- kfree(inst->fmt_dst);
- kfree(inst->fmt_src);
-}
-
+ static const u32 iris_vdec_formats_cap[] = {
+ [IRIS_FMT_NV12] = V4L2_PIX_FMT_NV12,
+ [IRIS_FMT_QC08C] = V4L2_PIX_FMT_QC08C,
+ [IRIS_FMT_TP10] = V4L2_PIX_FMT_P010,
+ [IRIS_FMT_QC10C] = V4L2_PIX_FMT_QC10C,
};
- static const struct iris_fmt *
- find_format(struct iris_inst *inst, u32 pixfmt, u32 type)
+ static bool check_format(struct iris_inst *inst, u32 pixfmt, u32 type)
{
- const struct iris_fmt *fmt = NULL;
- unsigned int size = 0;
- unsigned int i;
+ unsigned int size, i;
+ const u32 *fmt;
+
switch (type) {
case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
fmt = inst->core->iris_platform_data->inst_iris_fmts;
return iris_ctrls_init(inst);
}
- static const struct iris_fmt iris_venc_formats_cap[] = {
- [IRIS_FMT_H264] = {
- .pixfmt = V4L2_PIX_FMT_H264,
- .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
- },
- [IRIS_FMT_HEVC] = {
- .pixfmt = V4L2_PIX_FMT_HEVC,
- .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
- },
-void iris_venc_inst_deinit(struct iris_inst *inst)
-{
- kfree(inst->fmt_dst);
- kfree(inst->fmt_src);
-}
-
+ static const u32 iris_venc_formats_cap[] = {
+ [IRIS_FMT_H264] = V4L2_PIX_FMT_H264,
+ [IRIS_FMT_HEVC] = V4L2_PIX_FMT_HEVC,
};
- static const struct iris_fmt iris_venc_formats_out[] = {
- [IRIS_FMT_NV12] = {
- .pixfmt = V4L2_PIX_FMT_NV12,
- .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
- },
- [IRIS_FMT_QC08C] = {
- .pixfmt = V4L2_PIX_FMT_QC08C,
- .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
- },
+ static const u32 iris_venc_formats_out[] = {
+ [IRIS_FMT_NV12] = V4L2_PIX_FMT_NV12,
+ [IRIS_FMT_QC08C] = V4L2_PIX_FMT_QC08C,
};
- static const struct iris_fmt *
- find_format(struct iris_inst *inst, u32 pixfmt, u32 type)
+ static bool check_format(struct iris_inst *inst, u32 pixfmt, u32 type)
{
- const struct iris_fmt *fmt = NULL;
- unsigned int size = 0;
- unsigned int i;
+ unsigned int size, i;
+ const u32 *fmt;
+
switch (type) {
case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
fmt = iris_venc_formats_out;
if (ret && ret != -ENOENT)
goto err_disable_hw_clock;
- ret = dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_HW_POWER_DOMAIN], true);
- if (ret)
- goto err_disable_bse_hw_clock;
-
+ ret = iris_prepare_enable_clock(core, IRIS_BSE_HW_CLK);
+ if (ret && ret != -ENOENT)
+ goto err_disable_hw_ahb_clock;
+
return 0;
-err_disable_bse_hw_clock:
- iris_disable_unprepare_clock(core, IRIS_BSE_HW_CLK);
+ err_disable_hw_ahb_clock:
+ iris_disable_unprepare_clock(core, IRIS_HW_AHB_CLK);
err_disable_hw_clock:
iris_disable_unprepare_clock(core, IRIS_HW_CLK);
err_disable_power:
format = v4l2_subdev_state_get_format(state, i);
format->code = fmt->format.code;
}
-
- format = v4l2_subdev_state_get_format(state, i);
- *format = fmt->format;
}
- done:
- mutex_unlock(&brx->entity.lock);
- return ret;
+ return 0;
}
static int brx_get_selection(struct v4l2_subdev *subdev,