1 // SPDX-License-Identifier: (GPL-2.0+ OR MIT) 2 /* 3 * Rockchip ISP1 Driver - V4l capture device 4 * 5 * Copyright (C) 2019 Collabora, Ltd. 6 * 7 * Based on Rockchip ISP1 driver by Rockchip Electronics Co., Ltd. 8 * Copyright (C) 2017 Rockchip Electronics Co., Ltd. 9 */ 10 11 #include <linux/delay.h> 12 #include <linux/pm_runtime.h> 13 #include <media/v4l2-common.h> 14 #include <media/v4l2-event.h> 15 #include <media/v4l2-fh.h> 16 #include <media/v4l2-ioctl.h> 17 #include <media/v4l2-mc.h> 18 #include <media/v4l2-subdev.h> 19 #include <media/videobuf2-dma-contig.h> 20 21 #include "rkisp1-common.h" 22 23 /* 24 * NOTE: There are two capture video devices in rkisp1, selfpath and mainpath. 25 * 26 * differences between selfpath and mainpath 27 * available mp sink input: isp 28 * available sp sink input : isp, dma(TODO) 29 * available mp sink pad fmts: yuv422, raw 30 * available sp sink pad fmts: yuv422, yuv420...... 31 * available mp source fmts: yuv, raw, jpeg(TODO) 32 * available sp source fmts: yuv, rgb 33 */ 34 35 #define RKISP1_SP_DEV_NAME RKISP1_DRIVER_NAME "_selfpath" 36 #define RKISP1_MP_DEV_NAME RKISP1_DRIVER_NAME "_mainpath" 37 38 #define RKISP1_MIN_BUFFERS_NEEDED 3 39 40 enum rkisp1_plane { 41 RKISP1_PLANE_Y = 0, 42 RKISP1_PLANE_CB = 1, 43 RKISP1_PLANE_CR = 2 44 }; 45 46 /* 47 * @fourcc: pixel format 48 * @fmt_type: helper filed for pixel format 49 * @uv_swap: if cb cr swapped, for yuv 50 * @write_format: defines how YCbCr self picture data is written to memory 51 * @output_format: defines sp output format 52 * @mbus: the mbus code on the src resizer pad that matches the pixel format 53 */ 54 struct rkisp1_capture_fmt_cfg { 55 u32 fourcc; 56 u8 uv_swap; 57 u32 write_format; 58 u32 output_format; 59 u32 mbus; 60 }; 61 62 struct rkisp1_capture_ops { 63 void (*config)(struct rkisp1_capture *cap); 64 void (*stop)(struct rkisp1_capture *cap); 65 void (*enable)(struct rkisp1_capture *cap); 66 void (*disable)(struct rkisp1_capture *cap); 67 void (*set_data_path)(struct rkisp1_capture *cap); 68 bool (*is_stopped)(struct rkisp1_capture *cap); 69 }; 70 71 struct rkisp1_capture_config { 72 const struct rkisp1_capture_fmt_cfg *fmts; 73 int fmt_size; 74 struct { 75 u32 y_size_init; 76 u32 cb_size_init; 77 u32 cr_size_init; 78 u32 y_base_ad_init; 79 u32 cb_base_ad_init; 80 u32 cr_base_ad_init; 81 u32 y_offs_cnt_init; 82 u32 cb_offs_cnt_init; 83 u32 cr_offs_cnt_init; 84 } mi; 85 }; 86 87 /* 88 * The supported pixel formats for mainpath. NOTE, pixel formats with identical 'mbus' 89 * are grouped together. This is assumed and used by the function rkisp1_cap_enum_mbus_codes 90 */ 91 static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = { 92 /* yuv422 */ 93 { 94 .fourcc = V4L2_PIX_FMT_YUYV, 95 .uv_swap = 0, 96 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUVINT, 97 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 98 }, { 99 .fourcc = V4L2_PIX_FMT_YUV422P, 100 .uv_swap = 0, 101 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8, 102 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 103 }, { 104 .fourcc = V4L2_PIX_FMT_NV16, 105 .uv_swap = 0, 106 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA, 107 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 108 }, { 109 .fourcc = V4L2_PIX_FMT_NV61, 110 .uv_swap = 1, 111 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA, 112 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 113 }, { 114 .fourcc = V4L2_PIX_FMT_NV16M, 115 .uv_swap = 0, 116 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA, 117 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 118 }, { 119 .fourcc = V4L2_PIX_FMT_NV61M, 120 .uv_swap = 1, 121 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA, 122 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 123 }, { 124 .fourcc = V4L2_PIX_FMT_YVU422M, 125 .uv_swap = 1, 126 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8, 127 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 128 }, 129 /* yuv400 */ 130 { 131 .fourcc = V4L2_PIX_FMT_GREY, 132 .uv_swap = 0, 133 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8, 134 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 135 }, 136 /* yuv420 */ 137 { 138 .fourcc = V4L2_PIX_FMT_NV21, 139 .uv_swap = 1, 140 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA, 141 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8, 142 }, { 143 .fourcc = V4L2_PIX_FMT_NV12, 144 .uv_swap = 0, 145 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA, 146 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8, 147 }, { 148 .fourcc = V4L2_PIX_FMT_NV21M, 149 .uv_swap = 1, 150 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA, 151 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8, 152 }, { 153 .fourcc = V4L2_PIX_FMT_NV12M, 154 .uv_swap = 0, 155 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA, 156 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8, 157 }, { 158 .fourcc = V4L2_PIX_FMT_YUV420, 159 .uv_swap = 0, 160 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8, 161 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8, 162 }, { 163 .fourcc = V4L2_PIX_FMT_YVU420, 164 .uv_swap = 1, 165 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8, 166 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8, 167 }, 168 /* raw */ 169 { 170 .fourcc = V4L2_PIX_FMT_SRGGB8, 171 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8, 172 .mbus = MEDIA_BUS_FMT_SRGGB8_1X8, 173 }, { 174 .fourcc = V4L2_PIX_FMT_SGRBG8, 175 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8, 176 .mbus = MEDIA_BUS_FMT_SGRBG8_1X8, 177 }, { 178 .fourcc = V4L2_PIX_FMT_SGBRG8, 179 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8, 180 .mbus = MEDIA_BUS_FMT_SGBRG8_1X8, 181 }, { 182 .fourcc = V4L2_PIX_FMT_SBGGR8, 183 .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8, 184 .mbus = MEDIA_BUS_FMT_SBGGR8_1X8, 185 }, { 186 .fourcc = V4L2_PIX_FMT_SRGGB10, 187 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12, 188 .mbus = MEDIA_BUS_FMT_SRGGB10_1X10, 189 }, { 190 .fourcc = V4L2_PIX_FMT_SGRBG10, 191 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12, 192 .mbus = MEDIA_BUS_FMT_SGRBG10_1X10, 193 }, { 194 .fourcc = V4L2_PIX_FMT_SGBRG10, 195 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12, 196 .mbus = MEDIA_BUS_FMT_SGBRG10_1X10, 197 }, { 198 .fourcc = V4L2_PIX_FMT_SBGGR10, 199 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12, 200 .mbus = MEDIA_BUS_FMT_SBGGR10_1X10, 201 }, { 202 .fourcc = V4L2_PIX_FMT_SRGGB12, 203 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12, 204 .mbus = MEDIA_BUS_FMT_SRGGB12_1X12, 205 }, { 206 .fourcc = V4L2_PIX_FMT_SGRBG12, 207 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12, 208 .mbus = MEDIA_BUS_FMT_SGRBG12_1X12, 209 }, { 210 .fourcc = V4L2_PIX_FMT_SGBRG12, 211 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12, 212 .mbus = MEDIA_BUS_FMT_SGBRG12_1X12, 213 }, { 214 .fourcc = V4L2_PIX_FMT_SBGGR12, 215 .write_format = RKISP1_MI_CTRL_MP_WRITE_RAW12, 216 .mbus = MEDIA_BUS_FMT_SBGGR12_1X12, 217 }, 218 }; 219 220 /* 221 * The supported pixel formats for selfpath. NOTE, pixel formats with identical 'mbus' 222 * are grouped together. This is assumed and used by the function rkisp1_cap_enum_mbus_codes 223 */ 224 static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = { 225 /* yuv422 */ 226 { 227 .fourcc = V4L2_PIX_FMT_YUYV, 228 .uv_swap = 0, 229 .write_format = RKISP1_MI_CTRL_SP_WRITE_INT, 230 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422, 231 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 232 }, { 233 .fourcc = V4L2_PIX_FMT_YUV422P, 234 .uv_swap = 0, 235 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA, 236 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422, 237 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 238 }, { 239 .fourcc = V4L2_PIX_FMT_NV16, 240 .uv_swap = 0, 241 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA, 242 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422, 243 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 244 }, { 245 .fourcc = V4L2_PIX_FMT_NV61, 246 .uv_swap = 1, 247 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA, 248 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422, 249 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 250 }, { 251 .fourcc = V4L2_PIX_FMT_NV16M, 252 .uv_swap = 0, 253 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA, 254 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422, 255 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 256 }, { 257 .fourcc = V4L2_PIX_FMT_NV61M, 258 .uv_swap = 1, 259 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA, 260 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422, 261 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 262 }, { 263 .fourcc = V4L2_PIX_FMT_YVU422M, 264 .uv_swap = 1, 265 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA, 266 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422, 267 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 268 }, 269 /* yuv400 */ 270 { 271 .fourcc = V4L2_PIX_FMT_GREY, 272 .uv_swap = 0, 273 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA, 274 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422, 275 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 276 }, 277 /* rgb */ 278 { 279 .fourcc = V4L2_PIX_FMT_XBGR32, 280 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA, 281 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_RGB888, 282 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 283 }, { 284 .fourcc = V4L2_PIX_FMT_RGB565, 285 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA, 286 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_RGB565, 287 .mbus = MEDIA_BUS_FMT_YUYV8_2X8, 288 }, 289 /* yuv420 */ 290 { 291 .fourcc = V4L2_PIX_FMT_NV21, 292 .uv_swap = 1, 293 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA, 294 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV420, 295 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8, 296 }, { 297 .fourcc = V4L2_PIX_FMT_NV12, 298 .uv_swap = 0, 299 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA, 300 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV420, 301 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8, 302 }, { 303 .fourcc = V4L2_PIX_FMT_NV21M, 304 .uv_swap = 1, 305 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA, 306 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV420, 307 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8, 308 }, { 309 .fourcc = V4L2_PIX_FMT_NV12M, 310 .uv_swap = 0, 311 .write_format = RKISP1_MI_CTRL_SP_WRITE_SPLA, 312 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV420, 313 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8, 314 }, { 315 .fourcc = V4L2_PIX_FMT_YUV420, 316 .uv_swap = 0, 317 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA, 318 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV420, 319 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8, 320 }, { 321 .fourcc = V4L2_PIX_FMT_YVU420, 322 .uv_swap = 1, 323 .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA, 324 .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV420, 325 .mbus = MEDIA_BUS_FMT_YUYV8_1_5X8, 326 }, 327 }; 328 329 static const struct rkisp1_capture_config rkisp1_capture_config_mp = { 330 .fmts = rkisp1_mp_fmts, 331 .fmt_size = ARRAY_SIZE(rkisp1_mp_fmts), 332 .mi = { 333 .y_size_init = RKISP1_CIF_MI_MP_Y_SIZE_INIT, 334 .cb_size_init = RKISP1_CIF_MI_MP_CB_SIZE_INIT, 335 .cr_size_init = RKISP1_CIF_MI_MP_CR_SIZE_INIT, 336 .y_base_ad_init = RKISP1_CIF_MI_MP_Y_BASE_AD_INIT, 337 .cb_base_ad_init = RKISP1_CIF_MI_MP_CB_BASE_AD_INIT, 338 .cr_base_ad_init = RKISP1_CIF_MI_MP_CR_BASE_AD_INIT, 339 .y_offs_cnt_init = RKISP1_CIF_MI_MP_Y_OFFS_CNT_INIT, 340 .cb_offs_cnt_init = RKISP1_CIF_MI_MP_CB_OFFS_CNT_INIT, 341 .cr_offs_cnt_init = RKISP1_CIF_MI_MP_CR_OFFS_CNT_INIT, 342 }, 343 }; 344 345 static const struct rkisp1_capture_config rkisp1_capture_config_sp = { 346 .fmts = rkisp1_sp_fmts, 347 .fmt_size = ARRAY_SIZE(rkisp1_sp_fmts), 348 .mi = { 349 .y_size_init = RKISP1_CIF_MI_SP_Y_SIZE_INIT, 350 .cb_size_init = RKISP1_CIF_MI_SP_CB_SIZE_INIT, 351 .cr_size_init = RKISP1_CIF_MI_SP_CR_SIZE_INIT, 352 .y_base_ad_init = RKISP1_CIF_MI_SP_Y_BASE_AD_INIT, 353 .cb_base_ad_init = RKISP1_CIF_MI_SP_CB_BASE_AD_INIT, 354 .cr_base_ad_init = RKISP1_CIF_MI_SP_CR_BASE_AD_INIT, 355 .y_offs_cnt_init = RKISP1_CIF_MI_SP_Y_OFFS_CNT_INIT, 356 .cb_offs_cnt_init = RKISP1_CIF_MI_SP_CB_OFFS_CNT_INIT, 357 .cr_offs_cnt_init = RKISP1_CIF_MI_SP_CR_OFFS_CNT_INIT, 358 }, 359 }; 360 361 static inline struct rkisp1_vdev_node * 362 rkisp1_vdev_to_node(struct video_device *vdev) 363 { 364 return container_of(vdev, struct rkisp1_vdev_node, vdev); 365 } 366 367 int rkisp1_cap_enum_mbus_codes(struct rkisp1_capture *cap, 368 struct v4l2_subdev_mbus_code_enum *code) 369 { 370 const struct rkisp1_capture_fmt_cfg *fmts = cap->config->fmts; 371 /* 372 * initialize curr_mbus to non existing mbus code 0 to ensure it is 373 * different from fmts[0].mbus 374 */ 375 u32 curr_mbus = 0; 376 int i, n = 0; 377 378 for (i = 0; i < cap->config->fmt_size; i++) { 379 if (fmts[i].mbus == curr_mbus) 380 continue; 381 382 curr_mbus = fmts[i].mbus; 383 if (n++ == code->index) { 384 code->code = curr_mbus; 385 return 0; 386 } 387 } 388 return -EINVAL; 389 } 390 391 /* ---------------------------------------------------------------------------- 392 * Stream operations for self-picture path (sp) and main-picture path (mp) 393 */ 394 395 static void rkisp1_mi_config_ctrl(struct rkisp1_capture *cap) 396 { 397 u32 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL); 398 399 mi_ctrl &= ~GENMASK(17, 16); 400 mi_ctrl |= RKISP1_CIF_MI_CTRL_BURST_LEN_LUM_64; 401 402 mi_ctrl &= ~GENMASK(19, 18); 403 mi_ctrl |= RKISP1_CIF_MI_CTRL_BURST_LEN_CHROM_64; 404 405 mi_ctrl |= RKISP1_CIF_MI_CTRL_INIT_BASE_EN | 406 RKISP1_CIF_MI_CTRL_INIT_OFFSET_EN; 407 408 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl); 409 } 410 411 static u32 rkisp1_pixfmt_comp_size(const struct v4l2_pix_format_mplane *pixm, 412 unsigned int component) 413 { 414 /* 415 * If packed format, then plane_fmt[0].sizeimage is the sum of all 416 * components, so we need to calculate just the size of Y component. 417 * See rkisp1_fill_pixfmt(). 418 */ 419 if (!component && pixm->num_planes == 1) 420 return pixm->plane_fmt[0].bytesperline * pixm->height; 421 return pixm->plane_fmt[component].sizeimage; 422 } 423 424 static void rkisp1_irq_frame_end_enable(struct rkisp1_capture *cap) 425 { 426 u32 mi_imsc = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_IMSC); 427 428 mi_imsc |= RKISP1_CIF_MI_FRAME(cap); 429 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_IMSC, mi_imsc); 430 } 431 432 static void rkisp1_mp_config(struct rkisp1_capture *cap) 433 { 434 const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt; 435 struct rkisp1_device *rkisp1 = cap->rkisp1; 436 u32 reg; 437 438 rkisp1_write(rkisp1, cap->config->mi.y_size_init, 439 rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_Y)); 440 rkisp1_write(rkisp1, cap->config->mi.cb_size_init, 441 rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CB)); 442 rkisp1_write(rkisp1, cap->config->mi.cr_size_init, 443 rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CR)); 444 445 rkisp1_irq_frame_end_enable(cap); 446 447 /* set uv swapping for semiplanar formats */ 448 if (cap->pix.info->comp_planes == 2) { 449 reg = rkisp1_read(rkisp1, RKISP1_CIF_MI_XTD_FORMAT_CTRL); 450 if (cap->pix.cfg->uv_swap) 451 reg |= RKISP1_CIF_MI_XTD_FMT_CTRL_MP_CB_CR_SWAP; 452 else 453 reg &= ~RKISP1_CIF_MI_XTD_FMT_CTRL_MP_CB_CR_SWAP; 454 rkisp1_write(rkisp1, RKISP1_CIF_MI_XTD_FORMAT_CTRL, reg); 455 } 456 457 rkisp1_mi_config_ctrl(cap); 458 459 reg = rkisp1_read(rkisp1, RKISP1_CIF_MI_CTRL); 460 reg &= ~RKISP1_MI_CTRL_MP_FMT_MASK; 461 reg |= cap->pix.cfg->write_format; 462 rkisp1_write(rkisp1, RKISP1_CIF_MI_CTRL, reg); 463 464 reg = rkisp1_read(rkisp1, RKISP1_CIF_MI_CTRL); 465 reg |= RKISP1_CIF_MI_MP_AUTOUPDATE_ENABLE; 466 rkisp1_write(rkisp1, RKISP1_CIF_MI_CTRL, reg); 467 } 468 469 static void rkisp1_sp_config(struct rkisp1_capture *cap) 470 { 471 const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt; 472 struct rkisp1_device *rkisp1 = cap->rkisp1; 473 u32 mi_ctrl, reg; 474 475 rkisp1_write(rkisp1, cap->config->mi.y_size_init, 476 rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_Y)); 477 rkisp1_write(rkisp1, cap->config->mi.cb_size_init, 478 rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CB)); 479 rkisp1_write(rkisp1, cap->config->mi.cr_size_init, 480 rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CR)); 481 482 rkisp1_write(rkisp1, RKISP1_CIF_MI_SP_Y_LLENGTH, cap->sp_y_stride); 483 rkisp1_write(rkisp1, RKISP1_CIF_MI_SP_Y_PIC_WIDTH, pixm->width); 484 rkisp1_write(rkisp1, RKISP1_CIF_MI_SP_Y_PIC_HEIGHT, pixm->height); 485 rkisp1_write(rkisp1, RKISP1_CIF_MI_SP_Y_PIC_SIZE, 486 cap->sp_y_stride * pixm->height); 487 488 rkisp1_irq_frame_end_enable(cap); 489 490 /* set uv swapping for semiplanar formats */ 491 if (cap->pix.info->comp_planes == 2) { 492 reg = rkisp1_read(rkisp1, RKISP1_CIF_MI_XTD_FORMAT_CTRL); 493 if (cap->pix.cfg->uv_swap) 494 reg |= RKISP1_CIF_MI_XTD_FMT_CTRL_SP_CB_CR_SWAP; 495 else 496 reg &= ~RKISP1_CIF_MI_XTD_FMT_CTRL_SP_CB_CR_SWAP; 497 rkisp1_write(rkisp1, RKISP1_CIF_MI_XTD_FORMAT_CTRL, reg); 498 } 499 500 rkisp1_mi_config_ctrl(cap); 501 502 mi_ctrl = rkisp1_read(rkisp1, RKISP1_CIF_MI_CTRL); 503 mi_ctrl &= ~RKISP1_MI_CTRL_SP_FMT_MASK; 504 mi_ctrl |= cap->pix.cfg->write_format | 505 RKISP1_MI_CTRL_SP_INPUT_YUV422 | 506 cap->pix.cfg->output_format | 507 RKISP1_CIF_MI_SP_AUTOUPDATE_ENABLE; 508 rkisp1_write(rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl); 509 } 510 511 static void rkisp1_mp_disable(struct rkisp1_capture *cap) 512 { 513 u32 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL); 514 515 mi_ctrl &= ~(RKISP1_CIF_MI_CTRL_MP_ENABLE | 516 RKISP1_CIF_MI_CTRL_RAW_ENABLE); 517 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl); 518 } 519 520 static void rkisp1_sp_disable(struct rkisp1_capture *cap) 521 { 522 u32 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL); 523 524 mi_ctrl &= ~RKISP1_CIF_MI_CTRL_SP_ENABLE; 525 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl); 526 } 527 528 static void rkisp1_mp_enable(struct rkisp1_capture *cap) 529 { 530 u32 mi_ctrl; 531 532 rkisp1_mp_disable(cap); 533 534 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL); 535 if (v4l2_is_format_bayer(cap->pix.info)) 536 mi_ctrl |= RKISP1_CIF_MI_CTRL_RAW_ENABLE; 537 /* YUV */ 538 else 539 mi_ctrl |= RKISP1_CIF_MI_CTRL_MP_ENABLE; 540 541 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl); 542 } 543 544 static void rkisp1_sp_enable(struct rkisp1_capture *cap) 545 { 546 u32 mi_ctrl = rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL); 547 548 mi_ctrl |= RKISP1_CIF_MI_CTRL_SP_ENABLE; 549 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_CTRL, mi_ctrl); 550 } 551 552 static void rkisp1_mp_sp_stop(struct rkisp1_capture *cap) 553 { 554 if (!cap->is_streaming) 555 return; 556 rkisp1_write(cap->rkisp1, RKISP1_CIF_MI_ICR, RKISP1_CIF_MI_FRAME(cap)); 557 cap->ops->disable(cap); 558 } 559 560 static bool rkisp1_mp_is_stopped(struct rkisp1_capture *cap) 561 { 562 u32 en = RKISP1_CIF_MI_CTRL_SHD_MP_IN_ENABLED | 563 RKISP1_CIF_MI_CTRL_SHD_RAW_OUT_ENABLED; 564 565 return !(rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL_SHD) & en); 566 } 567 568 static bool rkisp1_sp_is_stopped(struct rkisp1_capture *cap) 569 { 570 return !(rkisp1_read(cap->rkisp1, RKISP1_CIF_MI_CTRL_SHD) & 571 RKISP1_CIF_MI_CTRL_SHD_SP_IN_ENABLED); 572 } 573 574 static void rkisp1_mp_set_data_path(struct rkisp1_capture *cap) 575 { 576 u32 dpcl = rkisp1_read(cap->rkisp1, RKISP1_CIF_VI_DPCL); 577 578 dpcl = dpcl | RKISP1_CIF_VI_DPCL_CHAN_MODE_MP | 579 RKISP1_CIF_VI_DPCL_MP_MUX_MRSZ_MI; 580 rkisp1_write(cap->rkisp1, RKISP1_CIF_VI_DPCL, dpcl); 581 } 582 583 static void rkisp1_sp_set_data_path(struct rkisp1_capture *cap) 584 { 585 u32 dpcl = rkisp1_read(cap->rkisp1, RKISP1_CIF_VI_DPCL); 586 587 dpcl |= RKISP1_CIF_VI_DPCL_CHAN_MODE_SP; 588 rkisp1_write(cap->rkisp1, RKISP1_CIF_VI_DPCL, dpcl); 589 } 590 591 static const struct rkisp1_capture_ops rkisp1_capture_ops_mp = { 592 .config = rkisp1_mp_config, 593 .enable = rkisp1_mp_enable, 594 .disable = rkisp1_mp_disable, 595 .stop = rkisp1_mp_sp_stop, 596 .set_data_path = rkisp1_mp_set_data_path, 597 .is_stopped = rkisp1_mp_is_stopped, 598 }; 599 600 static const struct rkisp1_capture_ops rkisp1_capture_ops_sp = { 601 .config = rkisp1_sp_config, 602 .enable = rkisp1_sp_enable, 603 .disable = rkisp1_sp_disable, 604 .stop = rkisp1_mp_sp_stop, 605 .set_data_path = rkisp1_sp_set_data_path, 606 .is_stopped = rkisp1_sp_is_stopped, 607 }; 608 609 /* ---------------------------------------------------------------------------- 610 * Frame buffer operations 611 */ 612 613 static int rkisp1_dummy_buf_create(struct rkisp1_capture *cap) 614 { 615 const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt; 616 struct rkisp1_dummy_buffer *dummy_buf = &cap->buf.dummy; 617 618 dummy_buf->size = max3(rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_Y), 619 rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CB), 620 rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CR)); 621 622 /* The driver never access vaddr, no mapping is required */ 623 dummy_buf->vaddr = dma_alloc_attrs(cap->rkisp1->dev, 624 dummy_buf->size, 625 &dummy_buf->dma_addr, 626 GFP_KERNEL, 627 DMA_ATTR_NO_KERNEL_MAPPING); 628 if (!dummy_buf->vaddr) 629 return -ENOMEM; 630 631 return 0; 632 } 633 634 static void rkisp1_dummy_buf_destroy(struct rkisp1_capture *cap) 635 { 636 dma_free_attrs(cap->rkisp1->dev, 637 cap->buf.dummy.size, cap->buf.dummy.vaddr, 638 cap->buf.dummy.dma_addr, DMA_ATTR_NO_KERNEL_MAPPING); 639 } 640 641 static void rkisp1_set_next_buf(struct rkisp1_capture *cap) 642 { 643 cap->buf.curr = cap->buf.next; 644 cap->buf.next = NULL; 645 646 if (!list_empty(&cap->buf.queue)) { 647 u32 *buff_addr; 648 649 cap->buf.next = list_first_entry(&cap->buf.queue, struct rkisp1_buffer, queue); 650 list_del(&cap->buf.next->queue); 651 652 buff_addr = cap->buf.next->buff_addr; 653 654 rkisp1_write(cap->rkisp1, cap->config->mi.y_base_ad_init, 655 buff_addr[RKISP1_PLANE_Y]); 656 /* 657 * In order to support grey format we capture 658 * YUV422 planar format from the camera and 659 * set the U and V planes to the dummy buffer 660 */ 661 if (cap->pix.cfg->fourcc == V4L2_PIX_FMT_GREY) { 662 rkisp1_write(cap->rkisp1, 663 cap->config->mi.cb_base_ad_init, 664 cap->buf.dummy.dma_addr); 665 rkisp1_write(cap->rkisp1, 666 cap->config->mi.cr_base_ad_init, 667 cap->buf.dummy.dma_addr); 668 } else { 669 rkisp1_write(cap->rkisp1, 670 cap->config->mi.cb_base_ad_init, 671 buff_addr[RKISP1_PLANE_CB]); 672 rkisp1_write(cap->rkisp1, 673 cap->config->mi.cr_base_ad_init, 674 buff_addr[RKISP1_PLANE_CR]); 675 } 676 } else { 677 /* 678 * Use the dummy space allocated by dma_alloc_coherent to 679 * throw data if there is no available buffer. 680 */ 681 rkisp1_write(cap->rkisp1, cap->config->mi.y_base_ad_init, 682 cap->buf.dummy.dma_addr); 683 rkisp1_write(cap->rkisp1, cap->config->mi.cb_base_ad_init, 684 cap->buf.dummy.dma_addr); 685 rkisp1_write(cap->rkisp1, cap->config->mi.cr_base_ad_init, 686 cap->buf.dummy.dma_addr); 687 } 688 689 /* Set plane offsets */ 690 rkisp1_write(cap->rkisp1, cap->config->mi.y_offs_cnt_init, 0); 691 rkisp1_write(cap->rkisp1, cap->config->mi.cb_offs_cnt_init, 0); 692 rkisp1_write(cap->rkisp1, cap->config->mi.cr_offs_cnt_init, 0); 693 } 694 695 /* 696 * This function is called when a frame end comes. The next frame 697 * is processing and we should set up buffer for next-next frame, 698 * otherwise it will overflow. 699 */ 700 static void rkisp1_handle_buffer(struct rkisp1_capture *cap) 701 { 702 struct rkisp1_isp *isp = &cap->rkisp1->isp; 703 struct rkisp1_buffer *curr_buf; 704 705 spin_lock(&cap->buf.lock); 706 curr_buf = cap->buf.curr; 707 708 if (curr_buf) { 709 curr_buf->vb.sequence = isp->frame_sequence; 710 curr_buf->vb.vb2_buf.timestamp = ktime_get_boottime_ns(); 711 curr_buf->vb.field = V4L2_FIELD_NONE; 712 vb2_buffer_done(&curr_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); 713 } else { 714 cap->rkisp1->debug.frame_drop[cap->id]++; 715 } 716 717 rkisp1_set_next_buf(cap); 718 spin_unlock(&cap->buf.lock); 719 } 720 721 irqreturn_t rkisp1_capture_isr(int irq, void *ctx) 722 { 723 struct device *dev = ctx; 724 struct rkisp1_device *rkisp1 = dev_get_drvdata(dev); 725 unsigned int i; 726 u32 status; 727 728 status = rkisp1_read(rkisp1, RKISP1_CIF_MI_MIS); 729 if (!status) 730 return IRQ_NONE; 731 732 rkisp1_write(rkisp1, RKISP1_CIF_MI_ICR, status); 733 734 for (i = 0; i < ARRAY_SIZE(rkisp1->capture_devs); ++i) { 735 struct rkisp1_capture *cap = &rkisp1->capture_devs[i]; 736 737 if (!(status & RKISP1_CIF_MI_FRAME(cap))) 738 continue; 739 if (!cap->is_stopping) { 740 rkisp1_handle_buffer(cap); 741 continue; 742 } 743 /* 744 * Make sure stream is actually stopped, whose state 745 * can be read from the shadow register, before 746 * wake_up() thread which would immediately free all 747 * frame buffers. stop() takes effect at the next 748 * frame end that sync the configurations to shadow 749 * regs. 750 */ 751 if (!cap->ops->is_stopped(cap)) { 752 cap->ops->stop(cap); 753 continue; 754 } 755 cap->is_stopping = false; 756 cap->is_streaming = false; 757 wake_up(&cap->done); 758 } 759 760 return IRQ_HANDLED; 761 } 762 763 /* ---------------------------------------------------------------------------- 764 * Vb2 operations 765 */ 766 767 static int rkisp1_vb2_queue_setup(struct vb2_queue *queue, 768 unsigned int *num_buffers, 769 unsigned int *num_planes, 770 unsigned int sizes[], 771 struct device *alloc_devs[]) 772 { 773 struct rkisp1_capture *cap = queue->drv_priv; 774 const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt; 775 unsigned int i; 776 777 if (*num_planes) { 778 if (*num_planes != pixm->num_planes) 779 return -EINVAL; 780 781 for (i = 0; i < pixm->num_planes; i++) 782 if (sizes[i] < pixm->plane_fmt[i].sizeimage) 783 return -EINVAL; 784 } else { 785 *num_planes = pixm->num_planes; 786 for (i = 0; i < pixm->num_planes; i++) 787 sizes[i] = pixm->plane_fmt[i].sizeimage; 788 } 789 790 return 0; 791 } 792 793 static int rkisp1_vb2_buf_init(struct vb2_buffer *vb) 794 { 795 struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); 796 struct rkisp1_buffer *ispbuf = 797 container_of(vbuf, struct rkisp1_buffer, vb); 798 struct rkisp1_capture *cap = vb->vb2_queue->drv_priv; 799 const struct v4l2_pix_format_mplane *pixm = &cap->pix.fmt; 800 unsigned int i; 801 802 memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr)); 803 for (i = 0; i < pixm->num_planes; i++) 804 ispbuf->buff_addr[i] = vb2_dma_contig_plane_dma_addr(vb, i); 805 806 /* Convert to non-MPLANE */ 807 if (pixm->num_planes == 1) { 808 ispbuf->buff_addr[RKISP1_PLANE_CB] = 809 ispbuf->buff_addr[RKISP1_PLANE_Y] + 810 rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_Y); 811 ispbuf->buff_addr[RKISP1_PLANE_CR] = 812 ispbuf->buff_addr[RKISP1_PLANE_CB] + 813 rkisp1_pixfmt_comp_size(pixm, RKISP1_PLANE_CB); 814 } 815 816 /* 817 * uv swap can be supported for planar formats by switching 818 * the address of cb and cr 819 */ 820 if (cap->pix.info->comp_planes == 3 && cap->pix.cfg->uv_swap) 821 swap(ispbuf->buff_addr[RKISP1_PLANE_CR], 822 ispbuf->buff_addr[RKISP1_PLANE_CB]); 823 return 0; 824 } 825 826 static void rkisp1_vb2_buf_queue(struct vb2_buffer *vb) 827 { 828 struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); 829 struct rkisp1_buffer *ispbuf = 830 container_of(vbuf, struct rkisp1_buffer, vb); 831 struct rkisp1_capture *cap = vb->vb2_queue->drv_priv; 832 833 spin_lock_irq(&cap->buf.lock); 834 list_add_tail(&ispbuf->queue, &cap->buf.queue); 835 spin_unlock_irq(&cap->buf.lock); 836 } 837 838 static int rkisp1_vb2_buf_prepare(struct vb2_buffer *vb) 839 { 840 struct rkisp1_capture *cap = vb->vb2_queue->drv_priv; 841 unsigned int i; 842 843 for (i = 0; i < cap->pix.fmt.num_planes; i++) { 844 unsigned long size = cap->pix.fmt.plane_fmt[i].sizeimage; 845 846 if (vb2_plane_size(vb, i) < size) { 847 dev_err(cap->rkisp1->dev, 848 "User buffer too small (%ld < %ld)\n", 849 vb2_plane_size(vb, i), size); 850 return -EINVAL; 851 } 852 vb2_set_plane_payload(vb, i, size); 853 } 854 855 return 0; 856 } 857 858 static void rkisp1_return_all_buffers(struct rkisp1_capture *cap, 859 enum vb2_buffer_state state) 860 { 861 struct rkisp1_buffer *buf; 862 863 spin_lock_irq(&cap->buf.lock); 864 if (cap->buf.curr) { 865 vb2_buffer_done(&cap->buf.curr->vb.vb2_buf, state); 866 cap->buf.curr = NULL; 867 } 868 if (cap->buf.next) { 869 vb2_buffer_done(&cap->buf.next->vb.vb2_buf, state); 870 cap->buf.next = NULL; 871 } 872 while (!list_empty(&cap->buf.queue)) { 873 buf = list_first_entry(&cap->buf.queue, 874 struct rkisp1_buffer, queue); 875 list_del(&buf->queue); 876 vb2_buffer_done(&buf->vb.vb2_buf, state); 877 } 878 spin_unlock_irq(&cap->buf.lock); 879 } 880 881 /* 882 * Most registers inside the rockchip ISP1 have shadow register since 883 * they must not be changed while processing a frame. 884 * Usually, each sub-module updates its shadow register after 885 * processing the last pixel of a frame. 886 */ 887 static void rkisp1_cap_stream_enable(struct rkisp1_capture *cap) 888 { 889 struct rkisp1_device *rkisp1 = cap->rkisp1; 890 struct rkisp1_capture *other = &rkisp1->capture_devs[cap->id ^ 1]; 891 892 cap->ops->set_data_path(cap); 893 cap->ops->config(cap); 894 895 /* Setup a buffer for the next frame */ 896 spin_lock_irq(&cap->buf.lock); 897 rkisp1_set_next_buf(cap); 898 cap->ops->enable(cap); 899 /* It's safe to configure ACTIVE and SHADOW registers for the 900 * first stream. While when the second is starting, do NOT 901 * force update because it also updates the first one. 902 * 903 * The latter case would drop one more buffer(that is 2) since 904 * there's no buffer in a shadow register when the second FE received. 905 * This's also required because the second FE maybe corrupt 906 * especially when run at 120fps. 907 */ 908 if (!other->is_streaming) { 909 /* force cfg update */ 910 rkisp1_write(rkisp1, RKISP1_CIF_MI_INIT, 911 RKISP1_CIF_MI_INIT_SOFT_UPD); 912 rkisp1_set_next_buf(cap); 913 } 914 spin_unlock_irq(&cap->buf.lock); 915 cap->is_streaming = true; 916 } 917 918 static void rkisp1_cap_stream_disable(struct rkisp1_capture *cap) 919 { 920 int ret; 921 922 /* Stream should stop in interrupt. If it doesn't, stop it by force. */ 923 cap->is_stopping = true; 924 ret = wait_event_timeout(cap->done, 925 !cap->is_streaming, 926 msecs_to_jiffies(1000)); 927 if (!ret) { 928 cap->rkisp1->debug.stop_timeout[cap->id]++; 929 cap->ops->stop(cap); 930 cap->is_stopping = false; 931 cap->is_streaming = false; 932 } 933 } 934 935 /* 936 * rkisp1_pipeline_stream_disable - disable nodes in the pipeline 937 * 938 * Call s_stream(false) in the reverse order from 939 * rkisp1_pipeline_stream_enable() and disable the DMA engine. 940 * Should be called before video_device_pipeline_stop() 941 */ 942 static void rkisp1_pipeline_stream_disable(struct rkisp1_capture *cap) 943 __must_hold(&cap->rkisp1->stream_lock) 944 { 945 struct rkisp1_device *rkisp1 = cap->rkisp1; 946 947 rkisp1_cap_stream_disable(cap); 948 949 /* 950 * If the other capture is streaming, isp and sensor nodes shouldn't 951 * be disabled, skip them. 952 */ 953 if (rkisp1->pipe.start_count < 2) 954 v4l2_subdev_call(&rkisp1->isp.sd, video, s_stream, false); 955 956 v4l2_subdev_call(&rkisp1->resizer_devs[cap->id].sd, video, s_stream, 957 false); 958 } 959 960 /* 961 * rkisp1_pipeline_stream_enable - enable nodes in the pipeline 962 * 963 * Enable the DMA Engine and call s_stream(true) through the pipeline. 964 * Should be called after video_device_pipeline_start() 965 */ 966 static int rkisp1_pipeline_stream_enable(struct rkisp1_capture *cap) 967 __must_hold(&cap->rkisp1->stream_lock) 968 { 969 struct rkisp1_device *rkisp1 = cap->rkisp1; 970 int ret; 971 972 rkisp1_cap_stream_enable(cap); 973 974 ret = v4l2_subdev_call(&rkisp1->resizer_devs[cap->id].sd, video, 975 s_stream, true); 976 if (ret) 977 goto err_disable_cap; 978 979 /* 980 * If the other capture is streaming, isp and sensor nodes are already 981 * enabled, skip them. 982 */ 983 if (rkisp1->pipe.start_count > 1) 984 return 0; 985 986 ret = v4l2_subdev_call(&rkisp1->isp.sd, video, s_stream, true); 987 if (ret) 988 goto err_disable_rsz; 989 990 return 0; 991 992 err_disable_rsz: 993 v4l2_subdev_call(&rkisp1->resizer_devs[cap->id].sd, video, s_stream, 994 false); 995 err_disable_cap: 996 rkisp1_cap_stream_disable(cap); 997 998 return ret; 999 } 1000 1001 static void rkisp1_vb2_stop_streaming(struct vb2_queue *queue) 1002 { 1003 struct rkisp1_capture *cap = queue->drv_priv; 1004 struct rkisp1_vdev_node *node = &cap->vnode; 1005 struct rkisp1_device *rkisp1 = cap->rkisp1; 1006 int ret; 1007 1008 mutex_lock(&cap->rkisp1->stream_lock); 1009 1010 rkisp1_pipeline_stream_disable(cap); 1011 1012 rkisp1_return_all_buffers(cap, VB2_BUF_STATE_ERROR); 1013 1014 v4l2_pipeline_pm_put(&node->vdev.entity); 1015 ret = pm_runtime_put(rkisp1->dev); 1016 if (ret < 0) 1017 dev_err(rkisp1->dev, "power down failed error:%d\n", ret); 1018 1019 rkisp1_dummy_buf_destroy(cap); 1020 1021 video_device_pipeline_stop(&node->vdev); 1022 1023 mutex_unlock(&cap->rkisp1->stream_lock); 1024 } 1025 1026 static int 1027 rkisp1_vb2_start_streaming(struct vb2_queue *queue, unsigned int count) 1028 { 1029 struct rkisp1_capture *cap = queue->drv_priv; 1030 struct media_entity *entity = &cap->vnode.vdev.entity; 1031 int ret; 1032 1033 mutex_lock(&cap->rkisp1->stream_lock); 1034 1035 ret = video_device_pipeline_start(&cap->vnode.vdev, &cap->rkisp1->pipe); 1036 if (ret) { 1037 dev_err(cap->rkisp1->dev, "start pipeline failed %d\n", ret); 1038 goto err_ret_buffers; 1039 } 1040 1041 ret = rkisp1_dummy_buf_create(cap); 1042 if (ret) 1043 goto err_pipeline_stop; 1044 1045 ret = pm_runtime_resume_and_get(cap->rkisp1->dev); 1046 if (ret < 0) { 1047 dev_err(cap->rkisp1->dev, "power up failed %d\n", ret); 1048 goto err_destroy_dummy; 1049 } 1050 ret = v4l2_pipeline_pm_get(entity); 1051 if (ret) { 1052 dev_err(cap->rkisp1->dev, "open cif pipeline failed %d\n", ret); 1053 goto err_pipe_pm_put; 1054 } 1055 1056 ret = rkisp1_pipeline_stream_enable(cap); 1057 if (ret) 1058 goto err_v4l2_pm_put; 1059 1060 mutex_unlock(&cap->rkisp1->stream_lock); 1061 1062 return 0; 1063 1064 err_v4l2_pm_put: 1065 v4l2_pipeline_pm_put(entity); 1066 err_pipe_pm_put: 1067 pm_runtime_put(cap->rkisp1->dev); 1068 err_destroy_dummy: 1069 rkisp1_dummy_buf_destroy(cap); 1070 err_pipeline_stop: 1071 video_device_pipeline_stop(&cap->vnode.vdev); 1072 err_ret_buffers: 1073 rkisp1_return_all_buffers(cap, VB2_BUF_STATE_QUEUED); 1074 mutex_unlock(&cap->rkisp1->stream_lock); 1075 1076 return ret; 1077 } 1078 1079 static const struct vb2_ops rkisp1_vb2_ops = { 1080 .queue_setup = rkisp1_vb2_queue_setup, 1081 .buf_init = rkisp1_vb2_buf_init, 1082 .buf_queue = rkisp1_vb2_buf_queue, 1083 .buf_prepare = rkisp1_vb2_buf_prepare, 1084 .wait_prepare = vb2_ops_wait_prepare, 1085 .wait_finish = vb2_ops_wait_finish, 1086 .stop_streaming = rkisp1_vb2_stop_streaming, 1087 .start_streaming = rkisp1_vb2_start_streaming, 1088 }; 1089 1090 /* ---------------------------------------------------------------------------- 1091 * IOCTLs operations 1092 */ 1093 1094 static const struct v4l2_format_info * 1095 rkisp1_fill_pixfmt(struct v4l2_pix_format_mplane *pixm, 1096 enum rkisp1_stream_id id) 1097 { 1098 struct v4l2_plane_pix_format *plane_y = &pixm->plane_fmt[0]; 1099 const struct v4l2_format_info *info; 1100 unsigned int i; 1101 u32 stride; 1102 1103 memset(pixm->plane_fmt, 0, sizeof(pixm->plane_fmt)); 1104 info = v4l2_format_info(pixm->pixelformat); 1105 pixm->num_planes = info->mem_planes; 1106 1107 /* 1108 * The SP supports custom strides, expressed as a number of pixels for 1109 * the Y plane. Clamp the stride to a reasonable value to avoid integer 1110 * overflows when calculating the bytesperline and sizeimage values. 1111 */ 1112 if (id == RKISP1_SELFPATH) 1113 stride = clamp(DIV_ROUND_UP(plane_y->bytesperline, info->bpp[0]), 1114 pixm->width, 65536U); 1115 else 1116 stride = pixm->width; 1117 1118 plane_y->bytesperline = stride * info->bpp[0]; 1119 plane_y->sizeimage = plane_y->bytesperline * pixm->height; 1120 1121 for (i = 1; i < info->comp_planes; i++) { 1122 struct v4l2_plane_pix_format *plane = &pixm->plane_fmt[i]; 1123 1124 /* bytesperline for other components derive from Y component */ 1125 plane->bytesperline = DIV_ROUND_UP(stride, info->hdiv) * 1126 info->bpp[i]; 1127 plane->sizeimage = plane->bytesperline * 1128 DIV_ROUND_UP(pixm->height, info->vdiv); 1129 } 1130 1131 /* 1132 * If pixfmt is packed, then plane_fmt[0] should contain the total size 1133 * considering all components. plane_fmt[i] for i > 0 should be ignored 1134 * by userspace as mem_planes == 1, but we are keeping information there 1135 * for convenience. 1136 */ 1137 if (info->mem_planes == 1) 1138 for (i = 1; i < info->comp_planes; i++) 1139 plane_y->sizeimage += pixm->plane_fmt[i].sizeimage; 1140 1141 return info; 1142 } 1143 1144 static const struct rkisp1_capture_fmt_cfg * 1145 rkisp1_find_fmt_cfg(const struct rkisp1_capture *cap, const u32 pixelfmt) 1146 { 1147 unsigned int i; 1148 1149 for (i = 0; i < cap->config->fmt_size; i++) { 1150 if (cap->config->fmts[i].fourcc == pixelfmt) 1151 return &cap->config->fmts[i]; 1152 } 1153 return NULL; 1154 } 1155 1156 static void rkisp1_try_fmt(const struct rkisp1_capture *cap, 1157 struct v4l2_pix_format_mplane *pixm, 1158 const struct rkisp1_capture_fmt_cfg **fmt_cfg, 1159 const struct v4l2_format_info **fmt_info) 1160 { 1161 const struct rkisp1_capture_config *config = cap->config; 1162 const struct rkisp1_capture_fmt_cfg *fmt; 1163 const struct v4l2_format_info *info; 1164 static const unsigned int max_widths[] = { 1165 RKISP1_RSZ_MP_SRC_MAX_WIDTH, RKISP1_RSZ_SP_SRC_MAX_WIDTH 1166 }; 1167 static const unsigned int max_heights[] = { 1168 RKISP1_RSZ_MP_SRC_MAX_HEIGHT, RKISP1_RSZ_SP_SRC_MAX_HEIGHT 1169 }; 1170 1171 fmt = rkisp1_find_fmt_cfg(cap, pixm->pixelformat); 1172 if (!fmt) { 1173 fmt = config->fmts; 1174 pixm->pixelformat = fmt->fourcc; 1175 } 1176 1177 pixm->width = clamp_t(u32, pixm->width, 1178 RKISP1_RSZ_SRC_MIN_WIDTH, max_widths[cap->id]); 1179 pixm->height = clamp_t(u32, pixm->height, 1180 RKISP1_RSZ_SRC_MIN_HEIGHT, max_heights[cap->id]); 1181 1182 pixm->field = V4L2_FIELD_NONE; 1183 pixm->colorspace = V4L2_COLORSPACE_DEFAULT; 1184 pixm->ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT; 1185 pixm->quantization = V4L2_QUANTIZATION_DEFAULT; 1186 1187 info = rkisp1_fill_pixfmt(pixm, cap->id); 1188 1189 if (fmt_cfg) 1190 *fmt_cfg = fmt; 1191 if (fmt_info) 1192 *fmt_info = info; 1193 } 1194 1195 static void rkisp1_set_fmt(struct rkisp1_capture *cap, 1196 struct v4l2_pix_format_mplane *pixm) 1197 { 1198 rkisp1_try_fmt(cap, pixm, &cap->pix.cfg, &cap->pix.info); 1199 cap->pix.fmt = *pixm; 1200 1201 /* SP supports custom stride in number of pixels of the Y plane */ 1202 if (cap->id == RKISP1_SELFPATH) 1203 cap->sp_y_stride = pixm->plane_fmt[0].bytesperline / 1204 cap->pix.info->bpp[0]; 1205 } 1206 1207 static int rkisp1_try_fmt_vid_cap_mplane(struct file *file, void *fh, 1208 struct v4l2_format *f) 1209 { 1210 struct rkisp1_capture *cap = video_drvdata(file); 1211 1212 rkisp1_try_fmt(cap, &f->fmt.pix_mp, NULL, NULL); 1213 1214 return 0; 1215 } 1216 1217 static int rkisp1_enum_fmt_vid_cap_mplane(struct file *file, void *priv, 1218 struct v4l2_fmtdesc *f) 1219 { 1220 struct rkisp1_capture *cap = video_drvdata(file); 1221 const struct rkisp1_capture_fmt_cfg *fmt = NULL; 1222 unsigned int i, n = 0; 1223 1224 if (!f->mbus_code) { 1225 if (f->index >= cap->config->fmt_size) 1226 return -EINVAL; 1227 1228 fmt = &cap->config->fmts[f->index]; 1229 f->pixelformat = fmt->fourcc; 1230 return 0; 1231 } 1232 1233 for (i = 0; i < cap->config->fmt_size; i++) { 1234 if (cap->config->fmts[i].mbus != f->mbus_code) 1235 continue; 1236 1237 if (n++ == f->index) { 1238 f->pixelformat = cap->config->fmts[i].fourcc; 1239 return 0; 1240 } 1241 } 1242 return -EINVAL; 1243 } 1244 1245 static int rkisp1_enum_framesizes(struct file *file, void *fh, 1246 struct v4l2_frmsizeenum *fsize) 1247 { 1248 static const unsigned int max_widths[] = { 1249 RKISP1_RSZ_MP_SRC_MAX_WIDTH, 1250 RKISP1_RSZ_SP_SRC_MAX_WIDTH, 1251 }; 1252 static const unsigned int max_heights[] = { 1253 RKISP1_RSZ_MP_SRC_MAX_HEIGHT, 1254 RKISP1_RSZ_SP_SRC_MAX_HEIGHT, 1255 }; 1256 struct rkisp1_capture *cap = video_drvdata(file); 1257 1258 if (fsize->index != 0) 1259 return -EINVAL; 1260 1261 fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE; 1262 1263 fsize->stepwise.min_width = RKISP1_RSZ_SRC_MIN_WIDTH; 1264 fsize->stepwise.max_width = max_widths[cap->id]; 1265 fsize->stepwise.step_width = 2; 1266 1267 fsize->stepwise.min_height = RKISP1_RSZ_SRC_MIN_HEIGHT; 1268 fsize->stepwise.max_height = max_heights[cap->id]; 1269 fsize->stepwise.step_height = 2; 1270 1271 return 0; 1272 } 1273 1274 static int rkisp1_s_fmt_vid_cap_mplane(struct file *file, 1275 void *priv, struct v4l2_format *f) 1276 { 1277 struct rkisp1_capture *cap = video_drvdata(file); 1278 struct rkisp1_vdev_node *node = 1279 rkisp1_vdev_to_node(&cap->vnode.vdev); 1280 1281 if (vb2_is_busy(&node->buf_queue)) 1282 return -EBUSY; 1283 1284 rkisp1_set_fmt(cap, &f->fmt.pix_mp); 1285 1286 return 0; 1287 } 1288 1289 static int rkisp1_g_fmt_vid_cap_mplane(struct file *file, void *fh, 1290 struct v4l2_format *f) 1291 { 1292 struct rkisp1_capture *cap = video_drvdata(file); 1293 1294 f->fmt.pix_mp = cap->pix.fmt; 1295 1296 return 0; 1297 } 1298 1299 static int 1300 rkisp1_querycap(struct file *file, void *priv, struct v4l2_capability *cap) 1301 { 1302 strscpy(cap->driver, RKISP1_DRIVER_NAME, sizeof(cap->driver)); 1303 strscpy(cap->card, RKISP1_DRIVER_NAME, sizeof(cap->card)); 1304 strscpy(cap->bus_info, RKISP1_BUS_INFO, sizeof(cap->bus_info)); 1305 1306 return 0; 1307 } 1308 1309 static const struct v4l2_ioctl_ops rkisp1_v4l2_ioctl_ops = { 1310 .vidioc_reqbufs = vb2_ioctl_reqbufs, 1311 .vidioc_querybuf = vb2_ioctl_querybuf, 1312 .vidioc_create_bufs = vb2_ioctl_create_bufs, 1313 .vidioc_qbuf = vb2_ioctl_qbuf, 1314 .vidioc_expbuf = vb2_ioctl_expbuf, 1315 .vidioc_dqbuf = vb2_ioctl_dqbuf, 1316 .vidioc_prepare_buf = vb2_ioctl_prepare_buf, 1317 .vidioc_streamon = vb2_ioctl_streamon, 1318 .vidioc_streamoff = vb2_ioctl_streamoff, 1319 .vidioc_try_fmt_vid_cap_mplane = rkisp1_try_fmt_vid_cap_mplane, 1320 .vidioc_s_fmt_vid_cap_mplane = rkisp1_s_fmt_vid_cap_mplane, 1321 .vidioc_g_fmt_vid_cap_mplane = rkisp1_g_fmt_vid_cap_mplane, 1322 .vidioc_enum_fmt_vid_cap = rkisp1_enum_fmt_vid_cap_mplane, 1323 .vidioc_enum_framesizes = rkisp1_enum_framesizes, 1324 .vidioc_querycap = rkisp1_querycap, 1325 .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, 1326 .vidioc_unsubscribe_event = v4l2_event_unsubscribe, 1327 }; 1328 1329 static int rkisp1_capture_link_validate(struct media_link *link) 1330 { 1331 struct video_device *vdev = 1332 media_entity_to_video_device(link->sink->entity); 1333 struct v4l2_subdev *sd = 1334 media_entity_to_v4l2_subdev(link->source->entity); 1335 struct rkisp1_capture *cap = video_get_drvdata(vdev); 1336 const struct rkisp1_capture_fmt_cfg *fmt = 1337 rkisp1_find_fmt_cfg(cap, cap->pix.fmt.pixelformat); 1338 struct v4l2_subdev_format sd_fmt = { 1339 .which = V4L2_SUBDEV_FORMAT_ACTIVE, 1340 .pad = link->source->index, 1341 }; 1342 int ret; 1343 1344 ret = v4l2_subdev_call(sd, pad, get_fmt, NULL, &sd_fmt); 1345 if (ret) 1346 return ret; 1347 1348 if (sd_fmt.format.height != cap->pix.fmt.height || 1349 sd_fmt.format.width != cap->pix.fmt.width || 1350 sd_fmt.format.code != fmt->mbus) { 1351 dev_dbg(cap->rkisp1->dev, 1352 "link '%s':%u -> '%s':%u not valid: 0x%04x/%ux%u != 0x%04x/%ux%u\n", 1353 link->source->entity->name, link->source->index, 1354 link->sink->entity->name, link->sink->index, 1355 sd_fmt.format.code, sd_fmt.format.width, 1356 sd_fmt.format.height, fmt->mbus, cap->pix.fmt.width, 1357 cap->pix.fmt.height); 1358 return -EPIPE; 1359 } 1360 1361 return 0; 1362 } 1363 1364 /* ---------------------------------------------------------------------------- 1365 * core functions 1366 */ 1367 1368 static const struct media_entity_operations rkisp1_media_ops = { 1369 .link_validate = rkisp1_capture_link_validate, 1370 }; 1371 1372 static const struct v4l2_file_operations rkisp1_fops = { 1373 .open = v4l2_fh_open, 1374 .release = vb2_fop_release, 1375 .unlocked_ioctl = video_ioctl2, 1376 .poll = vb2_fop_poll, 1377 .mmap = vb2_fop_mmap, 1378 }; 1379 1380 static void rkisp1_unregister_capture(struct rkisp1_capture *cap) 1381 { 1382 if (!video_is_registered(&cap->vnode.vdev)) 1383 return; 1384 1385 media_entity_cleanup(&cap->vnode.vdev.entity); 1386 vb2_video_unregister_device(&cap->vnode.vdev); 1387 mutex_destroy(&cap->vnode.vlock); 1388 } 1389 1390 void rkisp1_capture_devs_unregister(struct rkisp1_device *rkisp1) 1391 { 1392 struct rkisp1_capture *mp = &rkisp1->capture_devs[RKISP1_MAINPATH]; 1393 struct rkisp1_capture *sp = &rkisp1->capture_devs[RKISP1_SELFPATH]; 1394 1395 rkisp1_unregister_capture(mp); 1396 rkisp1_unregister_capture(sp); 1397 } 1398 1399 static int rkisp1_register_capture(struct rkisp1_capture *cap) 1400 { 1401 static const char * const dev_names[] = { 1402 RKISP1_MP_DEV_NAME, RKISP1_SP_DEV_NAME 1403 }; 1404 struct v4l2_device *v4l2_dev = &cap->rkisp1->v4l2_dev; 1405 struct video_device *vdev = &cap->vnode.vdev; 1406 struct rkisp1_vdev_node *node; 1407 struct vb2_queue *q; 1408 int ret; 1409 1410 strscpy(vdev->name, dev_names[cap->id], sizeof(vdev->name)); 1411 node = rkisp1_vdev_to_node(vdev); 1412 mutex_init(&node->vlock); 1413 1414 vdev->ioctl_ops = &rkisp1_v4l2_ioctl_ops; 1415 vdev->release = video_device_release_empty; 1416 vdev->fops = &rkisp1_fops; 1417 vdev->minor = -1; 1418 vdev->v4l2_dev = v4l2_dev; 1419 vdev->lock = &node->vlock; 1420 vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE_MPLANE | 1421 V4L2_CAP_STREAMING | V4L2_CAP_IO_MC; 1422 vdev->entity.ops = &rkisp1_media_ops; 1423 video_set_drvdata(vdev, cap); 1424 vdev->vfl_dir = VFL_DIR_RX; 1425 node->pad.flags = MEDIA_PAD_FL_SINK; 1426 1427 q = &node->buf_queue; 1428 q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; 1429 q->io_modes = VB2_MMAP | VB2_DMABUF; 1430 q->drv_priv = cap; 1431 q->ops = &rkisp1_vb2_ops; 1432 q->mem_ops = &vb2_dma_contig_memops; 1433 q->buf_struct_size = sizeof(struct rkisp1_buffer); 1434 q->min_queued_buffers = RKISP1_MIN_BUFFERS_NEEDED; 1435 q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; 1436 q->lock = &node->vlock; 1437 q->dev = cap->rkisp1->dev; 1438 ret = vb2_queue_init(q); 1439 if (ret) { 1440 dev_err(cap->rkisp1->dev, 1441 "vb2 queue init failed (err=%d)\n", ret); 1442 goto error; 1443 } 1444 1445 vdev->queue = q; 1446 1447 ret = media_entity_pads_init(&vdev->entity, 1, &node->pad); 1448 if (ret) 1449 goto error; 1450 1451 ret = video_register_device(vdev, VFL_TYPE_VIDEO, -1); 1452 if (ret) { 1453 dev_err(cap->rkisp1->dev, 1454 "failed to register %s, ret=%d\n", vdev->name, ret); 1455 goto error; 1456 } 1457 1458 v4l2_info(v4l2_dev, "registered %s as /dev/video%d\n", vdev->name, 1459 vdev->num); 1460 1461 return 0; 1462 1463 error: 1464 media_entity_cleanup(&vdev->entity); 1465 mutex_destroy(&node->vlock); 1466 return ret; 1467 } 1468 1469 static void 1470 rkisp1_capture_init(struct rkisp1_device *rkisp1, enum rkisp1_stream_id id) 1471 { 1472 struct rkisp1_capture *cap = &rkisp1->capture_devs[id]; 1473 struct v4l2_pix_format_mplane pixm; 1474 1475 memset(cap, 0, sizeof(*cap)); 1476 cap->id = id; 1477 cap->rkisp1 = rkisp1; 1478 1479 INIT_LIST_HEAD(&cap->buf.queue); 1480 init_waitqueue_head(&cap->done); 1481 spin_lock_init(&cap->buf.lock); 1482 if (cap->id == RKISP1_SELFPATH) { 1483 cap->ops = &rkisp1_capture_ops_sp; 1484 cap->config = &rkisp1_capture_config_sp; 1485 } else { 1486 cap->ops = &rkisp1_capture_ops_mp; 1487 cap->config = &rkisp1_capture_config_mp; 1488 } 1489 1490 cap->is_streaming = false; 1491 1492 memset(&pixm, 0, sizeof(pixm)); 1493 pixm.pixelformat = V4L2_PIX_FMT_YUYV; 1494 pixm.width = RKISP1_DEFAULT_WIDTH; 1495 pixm.height = RKISP1_DEFAULT_HEIGHT; 1496 rkisp1_set_fmt(cap, &pixm); 1497 } 1498 1499 int rkisp1_capture_devs_register(struct rkisp1_device *rkisp1) 1500 { 1501 unsigned int i; 1502 int ret; 1503 1504 for (i = 0; i < ARRAY_SIZE(rkisp1->capture_devs); i++) { 1505 struct rkisp1_capture *cap = &rkisp1->capture_devs[i]; 1506 1507 rkisp1_capture_init(rkisp1, i); 1508 1509 ret = rkisp1_register_capture(cap); 1510 if (ret) { 1511 rkisp1_capture_devs_unregister(rkisp1); 1512 return ret; 1513 } 1514 } 1515 1516 return 0; 1517 1518 } 1519