Skip to content
Snippets Groups Projects
Commit 95a46a7f authored by Philipp Zabel's avatar Philipp Zabel Committed by Nicolas Dufresne
Browse files

media: imx: add mem2mem device


Add a single imx-media mem2mem video device that uses the IPU IC PP
(image converter post processing) task for scaling and colorspace
conversion.
On i.MX6Q/DL SoCs with two IPUs currently only the first IPU is used.

The hardware only supports writing to destination buffers up to
1024x1024 pixels in a single pass, so the mem2mem video device is
limited to this resolution. After fixing the tiling code it should
be possible to extend this to arbitrary sizes by rendering multiple
tiles per frame.

Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
parent 6e288586
No related branches found
No related tags found
No related merge requests found
...@@ -6,6 +6,7 @@ config VIDEO_IMX_MEDIA ...@@ -6,6 +6,7 @@ config VIDEO_IMX_MEDIA
depends on HAS_DMA depends on HAS_DMA
select VIDEOBUF2_DMA_CONTIG select VIDEOBUF2_DMA_CONTIG
select V4L2_FWNODE select V4L2_FWNODE
select V4L2_MEM2MEM_DEV
---help--- ---help---
Say yes here to enable support for video4linux media controller Say yes here to enable support for video4linux media controller
driver for the i.MX5/6 SOC. driver for the i.MX5/6 SOC.
......
...@@ -6,6 +6,7 @@ imx-media-ic-objs := imx-ic-common.o imx-ic-prp.o imx-ic-prpencvf.o ...@@ -6,6 +6,7 @@ imx-media-ic-objs := imx-ic-common.o imx-ic-prp.o imx-ic-prpencvf.o
obj-$(CONFIG_VIDEO_IMX_MEDIA) += imx-media.o obj-$(CONFIG_VIDEO_IMX_MEDIA) += imx-media.o
obj-$(CONFIG_VIDEO_IMX_MEDIA) += imx-media-common.o obj-$(CONFIG_VIDEO_IMX_MEDIA) += imx-media-common.o
obj-$(CONFIG_VIDEO_IMX_MEDIA) += imx-media-capture.o obj-$(CONFIG_VIDEO_IMX_MEDIA) += imx-media-capture.o
obj-$(CONFIG_VIDEO_IMX_MEDIA) += imx-media-mem2mem.o
obj-$(CONFIG_VIDEO_IMX_MEDIA) += imx-media-vdic.o obj-$(CONFIG_VIDEO_IMX_MEDIA) += imx-media-vdic.o
obj-$(CONFIG_VIDEO_IMX_MEDIA) += imx-media-ic.o obj-$(CONFIG_VIDEO_IMX_MEDIA) += imx-media-ic.o
......
...@@ -359,6 +359,17 @@ static int imx_media_probe_complete(struct v4l2_async_notifier *notifier) ...@@ -359,6 +359,17 @@ static int imx_media_probe_complete(struct v4l2_async_notifier *notifier)
goto unlock; goto unlock;
ret = v4l2_device_register_subdev_nodes(&imxmd->v4l2_dev); ret = v4l2_device_register_subdev_nodes(&imxmd->v4l2_dev);
if (ret)
goto unlock;
/* TODO: check whether we have IC subdevices first */
imxmd->m2m_vdev = imx_media_mem2mem_device_init(imxmd);
if (IS_ERR(imxmd->m2m_vdev)) {
ret = PTR_ERR(imxmd->m2m_vdev);
goto unlock;
}
ret = imx_media_mem2mem_device_register(imxmd->m2m_vdev);
unlock: unlock:
mutex_unlock(&imxmd->mutex); mutex_unlock(&imxmd->mutex);
if (ret) if (ret)
......
This diff is collapsed.
...@@ -149,6 +149,9 @@ struct imx_media_dev { ...@@ -149,6 +149,9 @@ struct imx_media_dev {
/* for async subdev registration */ /* for async subdev registration */
struct list_head asd_list; struct list_head asd_list;
struct v4l2_async_notifier subdev_notifier; struct v4l2_async_notifier subdev_notifier;
/* IC scaler/CSC mem2mem video device */
struct imx_media_video_dev *m2m_vdev;
}; };
enum codespace_sel { enum codespace_sel {
...@@ -262,6 +265,13 @@ void imx_media_capture_device_set_format(struct imx_media_video_dev *vdev, ...@@ -262,6 +265,13 @@ void imx_media_capture_device_set_format(struct imx_media_video_dev *vdev,
struct v4l2_pix_format *pix); struct v4l2_pix_format *pix);
void imx_media_capture_device_error(struct imx_media_video_dev *vdev); void imx_media_capture_device_error(struct imx_media_video_dev *vdev);
/* imx-media-mem2mem.c */
struct imx_media_video_dev *
imx_media_mem2mem_device_init(struct imx_media_dev *dev);
void imx_media_mem2mem_device_remove(struct imx_media_video_dev *vdev);
int imx_media_mem2mem_device_register(struct imx_media_video_dev *vdev);
void imx_media_mem2mem_device_unregister(struct imx_media_video_dev *vdev);
/* subdev group ids */ /* subdev group ids */
#define IMX_MEDIA_GRP_ID_CSI2 BIT(8) #define IMX_MEDIA_GRP_ID_CSI2 BIT(8)
#define IMX_MEDIA_GRP_ID_CSI_BIT 9 #define IMX_MEDIA_GRP_ID_CSI_BIT 9
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment