1 /* 2 * V4L2 Media Controller Driver for Freescale i.MX5/6 SOC 3 * 4 * Copyright (c) 2016 Mentor Graphics Inc. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 */ 11 #ifndef _IMX_MEDIA_H 12 #define _IMX_MEDIA_H 13 14 #include <media/v4l2-ctrls.h> 15 #include <media/v4l2-device.h> 16 #include <media/v4l2-fwnode.h> 17 #include <media/v4l2-subdev.h> 18 #include <media/videobuf2-dma-contig.h> 19 #include <video/imx-ipu-v3.h> 20 21 /* 22 * This is somewhat arbitrary, but we need at least: 23 * - 4 video devices per IPU 24 * - 3 IC subdevs per IPU 25 * - 1 VDIC subdev per IPU 26 * - 2 CSI subdevs per IPU 27 * - 1 mipi-csi2 receiver subdev 28 * - 2 video-mux subdevs 29 * - 2 camera sensor subdevs per IPU (1 parallel, 1 mipi-csi2) 30 * 31 */ 32 /* max video devices */ 33 #define IMX_MEDIA_MAX_VDEVS 8 34 /* max subdevices */ 35 #define IMX_MEDIA_MAX_SUBDEVS 32 36 /* max pads per subdev */ 37 #define IMX_MEDIA_MAX_PADS 16 38 /* max links per pad */ 39 #define IMX_MEDIA_MAX_LINKS 8 40 41 /* 42 * Pad definitions for the subdevs with multiple source or 43 * sink pads 44 */ 45 46 /* ipu_csi */ 47 enum { 48 CSI_SINK_PAD = 0, 49 CSI_SRC_PAD_DIRECT, 50 CSI_SRC_PAD_IDMAC, 51 CSI_NUM_PADS, 52 }; 53 54 #define CSI_NUM_SINK_PADS 1 55 #define CSI_NUM_SRC_PADS 2 56 57 /* ipu_vdic */ 58 enum { 59 VDIC_SINK_PAD_DIRECT = 0, 60 VDIC_SINK_PAD_IDMAC, 61 VDIC_SRC_PAD_DIRECT, 62 VDIC_NUM_PADS, 63 }; 64 65 #define VDIC_NUM_SINK_PADS 2 66 #define VDIC_NUM_SRC_PADS 1 67 68 /* ipu_ic_prp */ 69 enum { 70 PRP_SINK_PAD = 0, 71 PRP_SRC_PAD_PRPENC, 72 PRP_SRC_PAD_PRPVF, 73 PRP_NUM_PADS, 74 }; 75 76 #define PRP_NUM_SINK_PADS 1 77 #define PRP_NUM_SRC_PADS 2 78 79 /* ipu_ic_prpencvf */ 80 enum { 81 PRPENCVF_SINK_PAD = 0, 82 PRPENCVF_SRC_PAD, 83 PRPENCVF_NUM_PADS, 84 }; 85 86 #define PRPENCVF_NUM_SINK_PADS 1 87 #define PRPENCVF_NUM_SRC_PADS 1 88 89 /* How long to wait for EOF interrupts in the buffer-capture subdevs */ 90 #define IMX_MEDIA_EOF_TIMEOUT 1000 91 92 struct imx_media_pixfmt { 93 u32 fourcc; 94 u32 codes[4]; 95 int bpp; /* total bpp */ 96 enum ipu_color_space cs; 97 bool planar; /* is a planar format */ 98 bool bayer; /* is a raw bayer format */ 99 bool ipufmt; /* is one of the IPU internal formats */ 100 }; 101 102 struct imx_media_buffer { 103 struct vb2_v4l2_buffer vbuf; /* v4l buffer must be first */ 104 struct list_head list; 105 }; 106 107 struct imx_media_video_dev { 108 struct video_device *vfd; 109 110 /* the user format */ 111 struct v4l2_format fmt; 112 const struct imx_media_pixfmt *cc; 113 }; 114 115 static inline struct imx_media_buffer *to_imx_media_vb(struct vb2_buffer *vb) 116 { 117 struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); 118 119 return container_of(vbuf, struct imx_media_buffer, vbuf); 120 } 121 122 struct imx_media_link { 123 struct device_node *remote_sd_node; 124 char remote_devname[32]; 125 int local_pad; 126 int remote_pad; 127 }; 128 129 struct imx_media_pad { 130 struct media_pad pad; 131 struct imx_media_link link[IMX_MEDIA_MAX_LINKS]; 132 bool devnode; /* does this pad link to a device node */ 133 int num_links; 134 135 /* 136 * list of video devices that can be reached from this pad, 137 * list is only valid for source pads. 138 */ 139 struct imx_media_video_dev *vdev[IMX_MEDIA_MAX_VDEVS]; 140 int num_vdevs; 141 }; 142 143 struct imx_media_internal_sd_platformdata { 144 char sd_name[V4L2_SUBDEV_NAME_SIZE]; 145 u32 grp_id; 146 int ipu_id; 147 }; 148 149 struct imx_media_subdev { 150 struct v4l2_async_subdev asd; 151 struct v4l2_subdev *sd; /* set when bound */ 152 153 struct imx_media_pad pad[IMX_MEDIA_MAX_PADS]; 154 int num_sink_pads; 155 int num_src_pads; 156 157 /* the platform device if this is an internal subdev */ 158 struct platform_device *pdev; 159 /* the devname is needed for async devname match */ 160 char devname[32]; 161 162 /* if this is a sensor */ 163 struct v4l2_fwnode_endpoint sensor_ep; 164 }; 165 166 struct imx_media_dev { 167 struct media_device md; 168 struct v4l2_device v4l2_dev; 169 170 /* the pipeline object */ 171 struct media_pipeline pipe; 172 173 struct mutex mutex; /* protect elements below */ 174 175 /* master subdevice list */ 176 struct imx_media_subdev subdev[IMX_MEDIA_MAX_SUBDEVS]; 177 int num_subdevs; 178 179 /* master video device list */ 180 struct imx_media_video_dev *vdev[IMX_MEDIA_MAX_VDEVS]; 181 int num_vdevs; 182 183 /* IPUs this media driver control, valid after subdevs bound */ 184 struct ipu_soc *ipu[2]; 185 186 /* for async subdev registration */ 187 struct v4l2_async_subdev *async_ptrs[IMX_MEDIA_MAX_SUBDEVS]; 188 struct v4l2_async_notifier subdev_notifier; 189 }; 190 191 enum codespace_sel { 192 CS_SEL_YUV = 0, 193 CS_SEL_RGB, 194 CS_SEL_ANY, 195 }; 196 197 const struct imx_media_pixfmt * 198 imx_media_find_format(u32 fourcc, enum codespace_sel cs_sel, bool allow_bayer); 199 int imx_media_enum_format(u32 *fourcc, u32 index, enum codespace_sel cs_sel); 200 const struct imx_media_pixfmt * 201 imx_media_find_mbus_format(u32 code, enum codespace_sel cs_sel, 202 bool allow_bayer); 203 int imx_media_enum_mbus_format(u32 *code, u32 index, enum codespace_sel cs_sel, 204 bool allow_bayer); 205 const struct imx_media_pixfmt * 206 imx_media_find_ipu_format(u32 code, enum codespace_sel cs_sel); 207 int imx_media_enum_ipu_format(u32 *code, u32 index, enum codespace_sel cs_sel); 208 209 int imx_media_init_mbus_fmt(struct v4l2_mbus_framefmt *mbus, 210 u32 width, u32 height, u32 code, u32 field, 211 const struct imx_media_pixfmt **cc); 212 void imx_media_fill_default_mbus_fields(struct v4l2_mbus_framefmt *tryfmt, 213 struct v4l2_mbus_framefmt *fmt, 214 bool ic_route); 215 int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, 216 struct v4l2_mbus_framefmt *mbus, 217 const struct imx_media_pixfmt *cc); 218 int imx_media_mbus_fmt_to_ipu_image(struct ipu_image *image, 219 struct v4l2_mbus_framefmt *mbus); 220 int imx_media_ipu_image_to_mbus_fmt(struct v4l2_mbus_framefmt *mbus, 221 struct ipu_image *image); 222 223 struct imx_media_subdev * 224 imx_media_find_async_subdev(struct imx_media_dev *imxmd, 225 struct device_node *np, 226 const char *devname); 227 struct imx_media_subdev * 228 imx_media_add_async_subdev(struct imx_media_dev *imxmd, 229 struct device_node *np, 230 struct platform_device *pdev); 231 int imx_media_add_pad_link(struct imx_media_dev *imxmd, 232 struct imx_media_pad *pad, 233 struct device_node *remote_node, 234 const char *remote_devname, 235 int local_pad, int remote_pad); 236 237 void imx_media_grp_id_to_sd_name(char *sd_name, int sz, 238 u32 grp_id, int ipu_id); 239 240 int imx_media_add_internal_subdevs(struct imx_media_dev *imxmd, 241 struct imx_media_subdev *csi[4]); 242 void imx_media_remove_internal_subdevs(struct imx_media_dev *imxmd); 243 244 struct imx_media_subdev * 245 imx_media_find_subdev_by_sd(struct imx_media_dev *imxmd, 246 struct v4l2_subdev *sd); 247 struct imx_media_subdev * 248 imx_media_find_subdev_by_id(struct imx_media_dev *imxmd, 249 u32 grp_id); 250 int imx_media_add_video_device(struct imx_media_dev *imxmd, 251 struct imx_media_video_dev *vdev); 252 int imx_media_find_mipi_csi2_channel(struct imx_media_dev *imxmd, 253 struct media_entity *start_entity); 254 struct imx_media_subdev * 255 imx_media_find_upstream_subdev(struct imx_media_dev *imxmd, 256 struct media_entity *start_entity, 257 u32 grp_id); 258 struct imx_media_subdev * 259 __imx_media_find_sensor(struct imx_media_dev *imxmd, 260 struct media_entity *start_entity); 261 struct imx_media_subdev * 262 imx_media_find_sensor(struct imx_media_dev *imxmd, 263 struct media_entity *start_entity); 264 265 struct imx_media_dma_buf { 266 void *virt; 267 dma_addr_t phys; 268 unsigned long len; 269 }; 270 271 void imx_media_free_dma_buf(struct imx_media_dev *imxmd, 272 struct imx_media_dma_buf *buf); 273 int imx_media_alloc_dma_buf(struct imx_media_dev *imxmd, 274 struct imx_media_dma_buf *buf, 275 int size); 276 277 int imx_media_pipeline_set_stream(struct imx_media_dev *imxmd, 278 struct media_entity *entity, 279 bool on); 280 281 /* imx-media-fim.c */ 282 struct imx_media_fim; 283 void imx_media_fim_eof_monitor(struct imx_media_fim *fim, struct timespec *ts); 284 int imx_media_fim_set_stream(struct imx_media_fim *fim, 285 const struct v4l2_fract *frame_interval, 286 bool on); 287 int imx_media_fim_add_controls(struct imx_media_fim *fim); 288 struct imx_media_fim *imx_media_fim_init(struct v4l2_subdev *sd); 289 void imx_media_fim_free(struct imx_media_fim *fim); 290 291 /* imx-media-of.c */ 292 struct imx_media_subdev * 293 imx_media_of_find_subdev(struct imx_media_dev *imxmd, 294 struct device_node *np, 295 const char *name); 296 int imx_media_of_parse(struct imx_media_dev *dev, 297 struct imx_media_subdev *(*csi)[4], 298 struct device_node *np); 299 300 /* imx-media-capture.c */ 301 struct imx_media_video_dev * 302 imx_media_capture_device_init(struct v4l2_subdev *src_sd, int pad); 303 void imx_media_capture_device_remove(struct imx_media_video_dev *vdev); 304 int imx_media_capture_device_register(struct imx_media_video_dev *vdev); 305 void imx_media_capture_device_unregister(struct imx_media_video_dev *vdev); 306 struct imx_media_buffer * 307 imx_media_capture_device_next_buf(struct imx_media_video_dev *vdev); 308 void imx_media_capture_device_set_format(struct imx_media_video_dev *vdev, 309 struct v4l2_pix_format *pix); 310 void imx_media_capture_device_error(struct imx_media_video_dev *vdev); 311 312 /* subdev group ids */ 313 #define IMX_MEDIA_GRP_ID_SENSOR (1 << 8) 314 #define IMX_MEDIA_GRP_ID_VIDMUX (1 << 9) 315 #define IMX_MEDIA_GRP_ID_CSI2 (1 << 10) 316 #define IMX_MEDIA_GRP_ID_CSI_BIT 11 317 #define IMX_MEDIA_GRP_ID_CSI (0x3 << IMX_MEDIA_GRP_ID_CSI_BIT) 318 #define IMX_MEDIA_GRP_ID_CSI0 (1 << IMX_MEDIA_GRP_ID_CSI_BIT) 319 #define IMX_MEDIA_GRP_ID_CSI1 (2 << IMX_MEDIA_GRP_ID_CSI_BIT) 320 #define IMX_MEDIA_GRP_ID_VDIC (1 << 13) 321 #define IMX_MEDIA_GRP_ID_IC_PRP (1 << 14) 322 #define IMX_MEDIA_GRP_ID_IC_PRPENC (1 << 15) 323 #define IMX_MEDIA_GRP_ID_IC_PRPVF (1 << 16) 324 325 #endif 326