1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * TI VIP capture driver 4 * 5 * Copyright (C) 2025 Texas Instruments Incorpated - http://www.ti.com/ 6 * David Griego, <dagriego@biglakesoftware.com> 7 * Dale Farnsworth, <dale@farnsworth.org> 8 * Yemike Abhilash Chandra, <y-abhilashchandra@ti.com> 9 */ 10 11 #ifndef __TI_VIP_H 12 #define __TI_VIP_H 13 14 #include <linux/videodev2.h> 15 #include <media/v4l2-ctrls.h> 16 #include <media/v4l2-device.h> 17 #include <media/v4l2-event.h> 18 #include <media/v4l2-ioctl.h> 19 #include <media/videobuf2-core.h> 20 #include <media/videobuf2-dma-contig.h> 21 #include <media/videobuf2-memops.h> 22 #include <media/v4l2-fwnode.h> 23 #include <media/v4l2-async.h> 24 25 #include "vpdma.h" 26 #include "vpdma_priv.h" 27 #include "sc.h" 28 #include "csc.h" 29 30 #define VIP_INSTANCE1 1 31 #define VIP_INSTANCE2 2 32 #define VIP_INSTANCE3 3 33 34 #define VIP_SLICE1 0 35 #define VIP_SLICE2 1 36 #define VIP_NUM_SLICES 2 37 38 /* 39 * Additional client identifiers used for VPDMA configuration descriptors 40 */ 41 #define VIP_SLICE1_CFD_SC_CLIENT 7 42 #define VIP_SLICE2_CFD_SC_CLIENT 8 43 44 #define VIP_PORTA 0 45 #define VIP_PORTB 1 46 #define VIP_NUM_PORTS 2 47 48 #define VIP_MAX_PLANES 2 49 #define VIP_LUMA 0 50 #define VIP_CHROMA 1 51 52 #define VIP_CAP_STREAMS_PER_PORT 16 53 #define VIP_VBI_STREAMS_PER_PORT 16 54 55 #define VIP_MAX_SUBDEV 5 56 57 #define VPDMA_FIRMWARE "vpdma-1b8.bin" 58 59 /* 60 * This value needs to be at least as large as the number of entry in 61 * vip_formats[]. 62 * When vip_formats[] is modified make sure to adjust this value also. 63 */ 64 #define VIP_MAX_ACTIVE_FMT 16 65 /* 66 * Colorspace conversion unit can be in one of 3 modes: 67 * NA - Not Available on this port 68 * Y2R - Needed for YUV to RGB on this port 69 * R2Y - Needed for RGB to YUV on this port 70 */ 71 enum vip_csc_state { 72 VIP_CSC_NA = 0, 73 VIP_CSC_Y2R, 74 VIP_CSC_R2Y, 75 }; 76 77 /* buffer for one video frame */ 78 struct vip_buffer { 79 /* common v4l buffer stuff */ 80 struct vb2_v4l2_buffer vb; 81 struct list_head list; 82 bool drop; 83 }; 84 85 /* 86 * struct vip_fmt - VIP media bus format information 87 * @fourcc: V4L2 pixel format FCC identifier 88 * @code: V4L2 media bus format code 89 * @colorspace: V4L2 colorspace identifier 90 * @coplanar: 1 if unpacked Luma and Chroma, 0 otherwise (packed/interleaved) 91 * @vpdma_fmt: VPDMA data format per plane. 92 * @finfo: Cache v4l2_format_info for associated fourcc 93 */ 94 struct vip_fmt { 95 u32 fourcc; 96 u32 code; 97 u32 colorspace; 98 u8 coplanar; 99 const struct vpdma_data_format *vpdma_fmt[VIP_MAX_PLANES]; 100 const struct v4l2_format_info *finfo; 101 }; 102 103 /* 104 * The vip_parser_data structures contains the memory mapped 105 * info to access the parser registers. 106 */ 107 struct vip_parser_data { 108 void __iomem *base; 109 110 struct platform_device *pdev; 111 }; 112 113 /* 114 * The vip_shared structure contains data that is shared by both 115 * the VIP1 and VIP2 slices. 116 */ 117 struct vip_shared { 118 struct list_head list; 119 void __iomem *base; 120 struct vpdma_data vpdma_data; 121 struct vpdma_data *vpdma; 122 struct v4l2_device v4l2_dev; 123 struct vip_dev *devs[VIP_NUM_SLICES]; 124 struct v4l2_ctrl_handler ctrl_handler; 125 }; 126 127 struct vip_ctrl_module { 128 struct regmap *syscon_pol; 129 u32 syscon_offset; 130 u32 syscon_bit_field[4]; 131 }; 132 133 /* 134 * There are two vip_dev structure, one for each vip slice: VIP1 & VIP2. 135 */ 136 struct vip_dev { 137 struct v4l2_device v4l2_dev; 138 struct platform_device *pdev; 139 struct vip_shared *shared; 140 struct vip_ctrl_module *syscon; 141 int instance_id; 142 int slice_id; 143 int num_ports; /* count of open ports */ 144 struct mutex mutex; 145 /* protects access to stream buffer queues */ 146 spinlock_t slock; 147 148 int irq; 149 void __iomem *base; 150 151 struct vip_port *ports[VIP_NUM_PORTS]; 152 153 char name[16]; 154 /* parser data handle */ 155 struct vip_parser_data *parser; 156 /* scaler data handle */ 157 struct sc_data *sc; 158 /* scaler port assignation */ 159 int sc_assigned; 160 /* csc data handle */ 161 struct csc_data *csc; 162 /* csc port assignation */ 163 int csc_assigned; 164 }; 165 166 /* 167 * There are two vip_port structures for each vip_dev, one for port A 168 * and one for port B. 169 */ 170 struct vip_port { 171 struct vip_dev *dev; 172 int port_id; 173 174 unsigned int flags; 175 struct v4l2_rect c_rect; /* crop rectangle */ 176 struct v4l2_mbus_framefmt mbus_framefmt; 177 struct v4l2_mbus_framefmt try_mbus_framefmt; 178 179 char name[16]; 180 struct vip_fmt *fmt; /* current format info */ 181 /* Number of channels/streams configured */ 182 int num_streams_configured; 183 int num_streams; /* count of open streams */ 184 struct vip_stream *cap_streams[VIP_CAP_STREAMS_PER_PORT]; 185 186 struct v4l2_async_notifier notifier; 187 struct v4l2_subdev *subdev; 188 struct v4l2_fwnode_endpoint endpoint; 189 struct vip_fmt *active_fmt[VIP_MAX_ACTIVE_FMT]; 190 int num_active_fmt; 191 /* have new shadow reg values */ 192 bool load_mmrs; 193 /* shadow reg addr/data block */ 194 struct vpdma_buf mmr_adb; 195 /* h coeff buffer */ 196 struct vpdma_buf sc_coeff_h; 197 /* v coeff buffer */ 198 struct vpdma_buf sc_coeff_v; 199 /* Show if scaler resource is available on this port */ 200 bool scaler; 201 /* Show the csc resource state on this port */ 202 enum vip_csc_state csc; 203 }; 204 205 /* 206 * When handling multiplexed video, there can be multiple streams for each 207 * port. The vip_stream structure holds per-stream data. 208 */ 209 struct vip_stream { 210 struct video_device *vfd; 211 struct vip_port *port; 212 int stream_id; 213 int list_num; 214 int vfl_type; 215 char name[16]; 216 struct work_struct recovery_work; 217 int num_recovery; 218 enum v4l2_field field; /* current field */ 219 unsigned int sequence; /* current frame/field seq */ 220 enum v4l2_field sup_field; /* supported field value */ 221 unsigned int width; /* frame width */ 222 unsigned int height; /* frame height */ 223 unsigned int bytesperline; /* bytes per line in memory */ 224 unsigned int sizeimage; /* image size in memory */ 225 struct list_head vidq; /* incoming vip_bufs queue */ 226 struct list_head dropq; /* drop vip_bufs queue */ 227 struct list_head post_bufs; /* vip_bufs to be DMAed */ 228 /* Maintain a list of used channels - Needed for VPDMA cleanup */ 229 int vpdma_channels[VPDMA_MAX_CHANNELS]; 230 int vpdma_channels_to_abort[VPDMA_MAX_CHANNELS]; 231 struct vpdma_desc_list desc_list; /* DMA descriptor list */ 232 struct vpdma_dtd *write_desc; 233 /* next unused desc_list addr */ 234 void *desc_next; 235 struct vb2_queue vb_vidq; 236 }; 237 238 /* 239 * VIP Enumerations 240 */ 241 enum data_path_select { 242 ALL_FIELDS_DATA_SELECT = 0, 243 VIP_CSC_SRC_DATA_SELECT, 244 VIP_SC_SRC_DATA_SELECT, 245 VIP_RGB_SRC_DATA_SELECT, 246 VIP_RGB_OUT_LO_DATA_SELECT, 247 VIP_RGB_OUT_HI_DATA_SELECT, 248 VIP_CHR_DS_1_SRC_DATA_SELECT, 249 VIP_CHR_DS_2_SRC_DATA_SELECT, 250 VIP_MULTI_CHANNEL_DATA_SELECT, 251 VIP_CHR_DS_1_DATA_BYPASS, 252 VIP_CHR_DS_2_DATA_BYPASS, 253 }; 254 255 enum data_interface_modes { 256 SINGLE_24B_INTERFACE = 0, 257 SINGLE_16B_INTERFACE = 1, 258 DUAL_8B_INTERFACE = 2, 259 }; 260 261 enum sync_types { 262 EMBEDDED_SYNC_SINGLE_YUV422 = 0, 263 EMBEDDED_SYNC_2X_MULTIPLEXED_YUV422 = 1, 264 EMBEDDED_SYNC_4X_MULTIPLEXED_YUV422 = 2, 265 EMBEDDED_SYNC_LINE_MULTIPLEXED_YUV422 = 3, 266 DISCRETE_SYNC_SINGLE_YUV422 = 4, 267 EMBEDDED_SYNC_SINGLE_RGB_OR_YUV444 = 5, 268 DISCRETE_SYNC_SINGLE_RGB_24B = 10, 269 }; 270 271 #define VIP_NOT_ASSIGNED -1 272 273 /* 274 * Register offsets and field selectors 275 */ 276 #define VIP_PID_FUNC 0xf02 277 278 #define VIP_PID 0x0000 279 #define VIP_PID_MINOR_MASK 0x3f 280 #define VIP_PID_MINOR_SHIFT 0 281 #define VIP_PID_CUSTOM_MASK 0x03 282 #define VIP_PID_CUSTOM_SHIFT 6 283 #define VIP_PID_MAJOR_MASK 0x07 284 #define VIP_PID_MAJOR_SHIFT 8 285 #define VIP_PID_RTL_MASK 0x1f 286 #define VIP_PID_RTL_SHIFT 11 287 #define VIP_PID_FUNC_MASK 0xfff 288 #define VIP_PID_FUNC_SHIFT 16 289 #define VIP_PID_SCHEME_MASK 0x03 290 #define VIP_PID_SCHEME_SHIFT 30 291 292 #define VIP_SYSCONFIG 0x0010 293 #define VIP_SYSCONFIG_IDLE_MASK 0x03 294 #define VIP_SYSCONFIG_IDLE_SHIFT 2 295 #define VIP_SYSCONFIG_STANDBY_MASK 0x03 296 #define VIP_SYSCONFIG_STANDBY_SHIFT 4 297 #define VIP_FORCE_IDLE_MODE 0 298 #define VIP_NO_IDLE_MODE 1 299 #define VIP_SMART_IDLE_MODE 2 300 #define VIP_SMART_IDLE_WAKEUP_MODE 3 301 #define VIP_FORCE_STANDBY_MODE 0 302 #define VIP_NO_STANDBY_MODE 1 303 #define VIP_SMART_STANDBY_MODE 2 304 #define VIP_SMART_STANDBY_WAKEUP_MODE 3 305 306 #define VIP_INTC_INTX_OFFSET 0x0020 307 308 #define VIP_INT0_STATUS0_RAW_SET 0x0020 309 #define VIP_INT0_STATUS0_RAW VIP_INT0_STATUS0_RAW_SET 310 #define VIP_INT0_STATUS0_CLR 0x0028 311 #define VIP_INT0_STATUS0 VIP_INT0_STATUS0_CLR 312 #define VIP_INT0_ENABLE0_SET 0x0030 313 #define VIP_INT0_ENABLE0 VIP_INT0_ENABLE0_SET 314 #define VIP_INT0_ENABLE0_CLR 0x0038 315 #define VIP_INT0_LIST0_COMPLETE BIT(0) 316 #define VIP_INT0_LIST0_NOTIFY BIT(1) 317 #define VIP_INT0_LIST1_COMPLETE BIT(2) 318 #define VIP_INT0_LIST1_NOTIFY BIT(3) 319 #define VIP_INT0_LIST2_COMPLETE BIT(4) 320 #define VIP_INT0_LIST2_NOTIFY BIT(5) 321 #define VIP_INT0_LIST3_COMPLETE BIT(6) 322 #define VIP_INT0_LIST3_NOTIFY BIT(7) 323 #define VIP_INT0_LIST4_COMPLETE BIT(8) 324 #define VIP_INT0_LIST4_NOTIFY BIT(9) 325 #define VIP_INT0_LIST5_COMPLETE BIT(10) 326 #define VIP_INT0_LIST5_NOTIFY BIT(11) 327 #define VIP_INT0_LIST6_COMPLETE BIT(12) 328 #define VIP_INT0_LIST6_NOTIFY BIT(13) 329 #define VIP_INT0_LIST7_COMPLETE BIT(14) 330 #define VIP_INT0_LIST7_NOTIFY BIT(15) 331 #define VIP_INT0_DESCRIPTOR BIT(16) 332 #define VIP_VIP1_PARSER_INT BIT(20) 333 #define VIP_VIP2_PARSER_INT BIT(21) 334 335 #define VIP_INT0_STATUS1_RAW_SET 0x0024 336 #define VIP_INT0_STATUS1_RAW VIP_INT0_STATUS0_RAW_SET 337 #define VIP_INT0_STATUS1_CLR 0x002c 338 #define VIP_INT0_STATUS1 VIP_INT0_STATUS0_CLR 339 #define VIP_INT0_ENABLE1_SET 0x0034 340 #define VIP_INT0_ENABLE1 VIP_INT0_ENABLE0_SET 341 #define VIP_INT0_ENABLE1_CLR 0x003c 342 #define VIP_INT0_ENABLE1_STAT 0x004c 343 #define VIP_INT0_CHANNEL_GROUP0 BIT(0) 344 #define VIP_INT0_CHANNEL_GROUP1 BIT(1) 345 #define VIP_INT0_CHANNEL_GROUP2 BIT(2) 346 #define VIP_INT0_CHANNEL_GROUP3 BIT(3) 347 #define VIP_INT0_CHANNEL_GROUP4 BIT(4) 348 #define VIP_INT0_CHANNEL_GROUP5 BIT(5) 349 #define VIP_INT0_CLIENT BIT(7) 350 #define VIP_VIP1_DS1_UV_ERROR_INT BIT(22) 351 #define VIP_VIP1_DS2_UV_ERROR_INT BIT(23) 352 #define VIP_VIP2_DS1_UV_ERROR_INT BIT(24) 353 #define VIP_VIP2_DS2_UV_ERROR_INT BIT(25) 354 355 #define VIP_INTC_E0I 0x00a0 356 357 #define VIP_CLK_ENABLE 0x0100 358 #define VIP_VPDMA_CLK_ENABLE BIT(0) 359 #define VIP_VIP1_DATA_PATH_CLK_ENABLE BIT(16) 360 #define VIP_VIP2_DATA_PATH_CLK_ENABLE BIT(17) 361 362 #define VIP_CLK_RESET 0x0104 363 #define VIP_VPDMA_RESET BIT(0) 364 #define VIP_VPDMA_CLK_RESET_MASK 0x1 365 #define VIP_VPDMA_CLK_RESET_SHIFT 0 366 #define VIP_DATA_PATH_CLK_RESET_MASK 0x1 367 #define VIP_VIP1_DATA_PATH_RESET_SHIFT 16 368 #define VIP_VIP2_DATA_PATH_RESET_SHIFT 17 369 #define VIP_VIP1_DATA_PATH_RESET BIT(16) 370 #define VIP_VIP2_DATA_PATH_RESET BIT(17) 371 #define VIP_VIP1_PARSER_RESET BIT(18) 372 #define VIP_VIP2_PARSER_RESET BIT(19) 373 #define VIP_VIP1_CSC_RESET BIT(20) 374 #define VIP_VIP2_CSC_RESET BIT(21) 375 #define VIP_VIP1_SC_RESET BIT(22) 376 #define VIP_VIP2_SC_RESET BIT(23) 377 #define VIP_VIP1_DS1_RESET BIT(25) 378 #define VIP_VIP2_DS1_RESET BIT(26) 379 #define VIP_VIP1_DS2_RESET BIT(27) 380 #define VIP_VIP2_DS2_RESET BIT(28) 381 #define VIP_MAIN_RESET BIT(31) 382 383 #define VIP_VIP1_DATA_PATH_SELECT 0x010c 384 #define VIP_VIP2_DATA_PATH_SELECT 0x0110 385 #define VIP_CSC_SRC_SELECT_MASK 0x07 386 #define VIP_CSC_SRC_SELECT_SHFT 0 387 #define VIP_SC_SRC_SELECT_MASK 0x07 388 #define VIP_SC_SRC_SELECT_SHFT 3 389 #define VIP_RGB_SRC_SELECT BIT(6) 390 #define VIP_RGB_OUT_LO_SRC_SELECT BIT(7) 391 #define VIP_RGB_OUT_HI_SRC_SELECT BIT(8) 392 #define VIP_DS1_SRC_SELECT_MASK 0x07 393 #define VIP_DS1_SRC_SELECT_SHFT 9 394 #define VIP_DS2_SRC_SELECT_MASK 0x07 395 #define VIP_DS2_SRC_SELECT_SHFT 12 396 #define VIP_MULTI_CHANNEL_SELECT BIT(15) 397 #define VIP_DS1_BYPASS BIT(16) 398 #define VIP_DS2_BYPASS BIT(17) 399 #define VIP_TESTPORT_B_SELECT BIT(26) 400 #define VIP_TESTPORT_A_SELECT BIT(27) 401 #define VIP_DATAPATH_SELECT_MASK 0x0f 402 #define VIP_DATAPATH_SELECT_SHFT 28 403 404 #define VIP_PARSER_MAIN_CFG 0x0000 405 #define VIP_DATA_INTERFACE_MODE_MASK 0x03 406 #define VIP_DATA_INTERFACE_MODE_SHFT 0 407 #define VIP_CLIP_BLANK BIT(4) 408 #define VIP_CLIP_ACTIVE BIT(5) 409 410 #define VIP_SLICE0_PARSER 0x5500 411 #define VIP_SLICE1_PARSER 0x5a00 412 #define VIP_PARSER_PORTA_0 0x0004 413 #define VIP_PARSER_PORTB_0 0x000c 414 #define VIP_SYNC_TYPE_MASK 0x0f 415 #define VIP_SYNC_TYPE_SHFT 0 416 #define VIP_CTRL_CHANNEL_SEL_MASK 0x03 417 #define VIP_CTRL_CHANNEL_SEL_SHFT 4 418 #define VIP_ASYNC_FIFO_WR BIT(6) 419 #define VIP_ASYNC_FIFO_RD BIT(7) 420 #define VIP_PORT_ENABLE BIT(8) 421 #define VIP_FID_POLARITY BIT(9) 422 #define VIP_PIXCLK_EDGE_POLARITY BIT(10) 423 #define VIP_HSYNC_POLARITY BIT(11) 424 #define VIP_VSYNC_POLARITY BIT(12) 425 #define VIP_ACTVID_POLARITY BIT(13) 426 #define VIP_FID_DETECT_MODE BIT(14) 427 #define VIP_USE_ACTVID_HSYNC_ONLY BIT(15) 428 #define VIP_FID_SKEW_PRECOUNT_MASK 0x3f 429 #define VIP_FID_SKEW_PRECOUNT_SHFT 16 430 #define VIP_DISCRETE_BASIC_MODE BIT(22) 431 #define VIP_SW_RESET BIT(23) 432 #define VIP_FID_SKEW_POSTCOUNT_MASK 0x3f 433 #define VIP_FID_SKEW_POSTCOUNT_SHFT 24 434 #define VIP_ANALYZER_2X4X_SRCNUM_POS BIT(30) 435 #define VIP_ANALYZER_FVH_ERR_COR_EN BIT(31) 436 437 #define VIP_PARSER_PORTA_1 0x0008 438 #define VIP_PARSER_PORTB_1 0x0010 439 #define VIP_SRC0_NUMLINES_MASK 0x0fff 440 #define VIP_SRC0_NUMLINES_SHFT 0 441 #define VIP_ANC_CHAN_SEL_8B_MASK 0x03 442 #define VIP_ANC_CHAN_SEL_8B_SHFT 13 443 #define VIP_SRC0_NUMPIX_MASK 0x0fff 444 #define VIP_SRC0_NUMPIX_SHFT 16 445 #define VIP_REPACK_SEL_MASK 0x07 446 #define VIP_REPACK_SEL_SHFT 28 447 448 #define VIP_PARSER_FIQ_MASK 0x0014 449 #define VIP_PARSER_FIQ_CLR 0x0018 450 #define VIP_PARSER_FIQ_STATUS 0x001c 451 #define VIP_PORTA_VDET BIT(0) 452 #define VIP_PORTB_VDET BIT(1) 453 #define VIP_PORTA_ASYNC_FIFO_OF BIT(2) 454 #define VIP_PORTB_ASYNC_FIFO_OF BIT(3) 455 #define VIP_PORTA_OUTPUT_FIFO_YUV BIT(4) 456 #define VIP_PORTA_OUTPUT_FIFO_ANC BIT(6) 457 #define VIP_PORTB_OUTPUT_FIFO_YUV BIT(7) 458 #define VIP_PORTB_OUTPUT_FIFO_ANC BIT(9) 459 #define VIP_PORTA_CONN BIT(10) 460 #define VIP_PORTA_DISCONN BIT(11) 461 #define VIP_PORTB_CONN BIT(12) 462 #define VIP_PORTB_DISCONN BIT(13) 463 #define VIP_PORTA_SRC0_SIZE BIT(14) 464 #define VIP_PORTB_SRC0_SIZE BIT(15) 465 #define VIP_PORTA_YUV_PROTO_VIOLATION BIT(16) 466 #define VIP_PORTA_ANC_PROTO_VIOLATION BIT(17) 467 #define VIP_PORTB_YUV_PROTO_VIOLATION BIT(18) 468 #define VIP_PORTB_ANC_PROTO_VIOLATION BIT(19) 469 #define VIP_PORTA_CFG_DISABLE_COMPLETE BIT(20) 470 #define VIP_PORTB_CFG_DISABLE_COMPLETE BIT(21) 471 472 #define VIP_PARSER_PORTA_SOURCE_FID 0x0020 473 #define VIP_PARSER_PORTA_ENCODER_FID 0x0024 474 #define VIP_PARSER_PORTB_SOURCE_FID 0x0028 475 #define VIP_PARSER_PORTB_ENCODER_FID 0x002c 476 477 #define VIP_PARSER_PORTA_SRC0_SIZE 0x0030 478 #define VIP_PARSER_PORTB_SRC0_SIZE 0x0070 479 #define VIP_SOURCE_HEIGHT_MASK 0x0fff 480 #define VIP_SOURCE_HEIGHT_SHFT 0 481 #define VIP_SOURCE_WIDTH_MASK 0x0fff 482 #define VIP_SOURCE_WIDTH_SHFT 16 483 484 #define VIP_PARSER_PORTA_VDET_VEC 0x00b0 485 #define VIP_PARSER_PORTB_VDET_VEC 0x00b4 486 487 #define VIP_PARSER_PORTA_EXTRA2 0x00b8 488 #define VIP_PARSER_PORTB_EXTRA2 0x00c8 489 #define VIP_ANC_SKIP_NUMPIX_MASK 0x0fff 490 #define VIP_ANC_SKIP_NUMPIX_SHFT 0 491 #define VIP_ANC_BYPASS BIT(15) 492 #define VIP_ANC_USE_NUMPIX_MASK 0x0fff 493 #define VIP_ANC_USE_NUMPIX_SHFT 16 494 #define VIP_ANC_TARGET_SRCNUM_MASK 0x0f 495 #define VIP_ANC_TARGET_SRCNUM_SHFT 28 496 497 #define VIP_PARSER_PORTA_EXTRA3 0x00bc 498 #define VIP_PARSER_PORTB_EXTRA3 0x00cc 499 #define VIP_ANC_SKIP_NUMLINES_MASK 0x0fff 500 #define VIP_ANC_SKIP_NUMLINES_SHFT 0 501 #define VIP_ANC_USE_NUMLINES_MASK 0x0fff 502 #define VIP_ANC_USE_NUMLINES_SHFT 16 503 504 #define VIP_PARSER_PORTA_EXTRA4 0x00c0 505 #define VIP_PARSER_PORTB_EXTRA4 0x00d0 506 #define VIP_ACT_SKIP_NUMPIX_MASK 0x0fff 507 #define VIP_ACT_SKIP_NUMPIX_SHFT 0 508 #define VIP_ACT_BYPASS BIT(15) 509 #define VIP_ACT_USE_NUMPIX_MASK 0x0fff 510 #define VIP_ACT_USE_NUMPIX_SHFT 16 511 #define VIP_ACT_TARGET_SRCNUM_MASK 0x0f 512 #define VIP_ACT_TARGET_SRCNUM_SHFT 28 513 514 #define VIP_PARSER_PORTA_EXTRA5 0x00c4 515 #define VIP_PARSER_PORTB_EXTRA5 0x00d4 516 #define VIP_ACT_SKIP_NUMLINES_MASK 0x0fff 517 #define VIP_ACT_SKIP_NUMLINES_SHFT 0 518 #define VIP_ACT_USE_NUMLINES_MASK 0x0fff 519 #define VIP_ACT_USE_NUMLINES_SHFT 16 520 521 #define VIP_PARSER_PORTA_EXTRA6 0x00d8 522 #define VIP_PARSER_PORTB_EXTRA6 0x00dc 523 #define VIP_ANC_SRCNUM_STOP_IMM_SHFT 0 524 #define VIP_YUV_SRCNUM_STOP_IMM_SHFT 16 525 526 #define VIP_SLICE0_CSC 0x5700 527 #define VIP_SLICE1_CSC 0x5c00 528 #define VIP_CSC_CSC00 0x0200 529 #define VIP_CSC_A0_MASK 0x1fff 530 #define VIP_CSC_A0_SHFT 0 531 #define VIP_CSC_B0_MASK 0x1fff 532 #define VIP_CSC_B0_SHFT 16 533 534 #define VIP_CSC_CSC01 0x0204 535 #define VIP_CSC_C0_MASK 0x1fff 536 #define VIP_CSC_C0_SHFT 0 537 #define VIP_CSC_A1_MASK 0x1fff 538 #define VIP_CSC_A1_SHFT 16 539 540 #define VIP_CSC_CSC02 0x0208 541 #define VIP_CSC_B1_MASK 0x1fff 542 #define VIP_CSC_B1_SHFT 0 543 #define VIP_CSC_C1_MASK 0x1fff 544 #define VIP_CSC_C1_SHFT 16 545 546 #define VIP_CSC_CSC03 0x020c 547 #define VIP_CSC_A2_MASK 0x1fff 548 #define VIP_CSC_A2_SHFT 0 549 #define VIP_CSC_B2_MASK 0x1fff 550 #define VIP_CSC_B2_SHFT 16 551 552 #define VIP_CSC_CSC04 0x0210 553 #define VIP_CSC_C2_MASK 0x1fff 554 #define VIP_CSC_C2_SHFT 0 555 #define VIP_CSC_D0_MASK 0x0fff 556 #define VIP_CSC_D0_SHFT 16 557 558 #define VIP_CSC_CSC05 0x0214 559 #define VIP_CSC_D1_MASK 0x0fff 560 #define VIP_CSC_D1_SHFT 0 561 #define VIP_CSC_D2_MASK 0x0fff 562 #define VIP_CSC_D2_SHFT 16 563 #define VIP_CSC_BYPASS BIT(28) 564 565 #define VIP_SLICE0_SC 0x5800 566 #define VIP_SLICE1_SC 0x5d00 567 #define VIP_SC_MP_SC0 0x0300 568 #define VIP_INTERLACE_O BIT(0) 569 #define VIP_LINEAR BIT(1) 570 #define VIP_SC_BYPASS BIT(2) 571 #define VIP_INVT_FID BIT(3) 572 #define VIP_USE_RAV BIT(4) 573 #define VIP_ENABLE_EV BIT(5) 574 #define VIP_AUTH_HS BIT(6) 575 #define VIP_DCM_2X BIT(7) 576 #define VIP_DCM_4X BIT(8) 577 #define VIP_HP_BYPASS BIT(9) 578 #define VIP_INTERLACE_I BIT(10) 579 #define VIP_ENABLE_SIN2_VER_INTP BIT(11) 580 #define VIP_Y_PK_EN BIT(14) 581 #define VIP_TRIM BIT(15) 582 #define VIP_SELFGEN_FID BIT(16) 583 584 #define VIP_SC_MP_SC1 0x0304 585 #define VIP_ROW_ACC_INC_MASK 0x07ffffff 586 #define VIP_ROW_ACC_INC_SHFT 0 587 588 #define VIP_SC_MP_SC2 0x0308 589 #define VIP_ROW_ACC_OFFSET_MASK 0x0fffffff 590 #define VIP_ROW_ACC_OFFSET_SHFT 0 591 592 #define VIP_SC_MP_SC3 0x030c 593 #define VIP_ROW_ACC_OFFSET_B_MASK 0x0fffffff 594 #define VIP_ROW_ACC_OFFSET_B_SHFT 0 595 596 #define VIP_SC_MP_SC4 0x0310 597 #define VIP_TAR_H_MASK 0x07ff 598 #define VIP_TAR_H_SHFT 0 599 #define VIP_TAR_W_MASK 0x07ff 600 #define VIP_TAR_W_SHFT 12 601 #define VIP_LIN_ACC_INC_U_MASK 0x07 602 #define VIP_LIN_ACC_INC_U_SHFT 24 603 #define VIP_NLIN_ACC_INIT_U_MASK 0x07 604 #define VIP_NLIN_ACC_INIT_U_SHFT 28 605 606 #define VIP_SC_MP_SC5 0x0314 607 #define VIP_SRC_H_MASK 0x03ff 608 #define VIP_SRC_H_SHFT 0 609 #define VIP_SRC_W_MASK 0x07ff 610 #define VIP_SRC_W_SHFT 12 611 #define VIP_NLIN_ACC_INC_U_MASK 0x07 612 #define VIP_NLIN_ACC_INC_U_SHFT 24 613 614 #define VIP_SC_MP_SC6 0x0318 615 #define VIP_ROW_ACC_INIT_RAV_MASK 0x03ff 616 #define VIP_ROW_ACC_INIT_RAV_SHFT 0 617 #define VIP_ROW_ACC_INIT_RAV_B_MASK 0x03ff 618 #define VIP_ROW_ACC_INIT_RAV_B_SHFT 10 619 620 #define VIP_SC_MP_SC8 0x0320 621 #define VIP_NLIN_LEFT_MASK 0x07ff 622 #define VIP_NLIN_LEFT_SHFT 0 623 #define VIP_NLIN_RIGHT_MASK 0x07ff 624 #define VIP_NLIN_RIGHT_SHFT 12 625 626 #define VIP_SC_MP_SC9 0x0324 627 #define VIP_LIN_ACC_INC VIP_SC_MP_SC9 628 629 #define VIP_SC_MP_SC10 0x0328 630 #define VIP_NLIN_ACC_INIT VIP_SC_MP_SC10 631 632 #define VIP_SC_MP_SC11 0x032c 633 #define VIP_NLIN_ACC_INC VIP_SC_MP_SC11 634 635 #define VIP_SC_MP_SC12 0x0330 636 #define VIP_COL_ACC_OFFSET_MASK 0x01ffffff 637 #define VIP_COL_ACC_OFFSET_SHFT 0 638 639 #define VIP_SC_MP_SC13 0x0334 640 #define VIP_SC_FACTOR_RAV_MASK 0x03ff 641 #define VIP_SC_FACTOR_RAV_SHFT 0 642 #define VIP_CHROMA_INTP_THR_MASK 0x03ff 643 #define VIP_CHROMA_INTP_THR_SHFT 12 644 #define VIP_DELTA_CHROMA_THR_MASK 0x0f 645 #define VIP_DELTA_CHROMA_THR_SHFT 24 646 647 #define VIP_SC_MP_SC17 0x0344 648 #define VIP_EV_THR_MASK 0x03ff 649 #define VIP_EV_THR_SHFT 12 650 #define VIP_DELTA_LUMA_THR_MASK 0x0f 651 #define VIP_DELTA_LUMA_THR_SHFT 24 652 #define VIP_DELTA_EV_THR_MASK 0x0f 653 #define VIP_DELTA_EV_THR_SHFT 28 654 655 #define VIP_SC_MP_SC18 0x0348 656 #define VIP_HS_FACTOR_MASK 0x03ff 657 #define VIP_HS_FACTOR_SHFT 0 658 #define VIP_CONF_DEFAULT_MASK 0x01ff 659 #define VIP_CONF_DEFAULT_SHFT 16 660 661 #define VIP_SC_MP_SC19 0x034c 662 #define VIP_HPF_COEFF0_MASK 0xff 663 #define VIP_HPF_COEFF0_SHFT 0 664 #define VIP_HPF_COEFF1_MASK 0xff 665 #define VIP_HPF_COEFF1_SHFT 8 666 #define VIP_HPF_COEFF2_MASK 0xff 667 #define VIP_HPF_COEFF2_SHFT 16 668 #define VIP_HPF_COEFF3_MASK 0xff 669 #define VIP_HPF_COEFF3_SHFT 23 670 671 #define VIP_SC_MP_SC20 0x0350 672 #define VIP_HPF_COEFF4_MASK 0xff 673 #define VIP_HPF_COEFF4_SHFT 0 674 #define VIP_HPF_COEFF5_MASK 0xff 675 #define VIP_HPF_COEFF5_SHFT 8 676 #define VIP_HPF_NORM_SHFT_MASK 0x07 677 #define VIP_HPF_NORM_SHFT_SHFT 16 678 #define VIP_NL_LIMIT_MASK 0x1ff 679 #define VIP_NL_LIMIT_SHFT 20 680 681 #define VIP_SC_MP_SC21 0x0354 682 #define VIP_NL_LO_THR_MASK 0x01ff 683 #define VIP_NL_LO_THR_SHFT 0 684 #define VIP_NL_LO_SLOPE_MASK 0xff 685 #define VIP_NL_LO_SLOPE_SHFT 16 686 687 #define VIP_SC_MP_SC22 0x0358 688 #define VIP_NL_HI_THR_MASK 0x01ff 689 #define VIP_NL_HI_THR_SHFT 0 690 #define VIP_NL_HI_SLOPE_SH_MASK 0x07 691 #define VIP_NL_HI_SLOPE_SH_SHFT 16 692 693 #define VIP_SC_MP_SC23 0x035c 694 #define VIP_GRADIENT_THR_MASK 0x07ff 695 #define VIP_GRADIENT_THR_SHFT 0 696 #define VIP_GRADIENT_THR_RANGE_MASK 0x0f 697 #define VIP_GRADIENT_THR_RANGE_SHFT 12 698 #define VIP_MIN_GY_THR_MASK 0xff 699 #define VIP_MIN_GY_THR_SHFT 16 700 #define VIP_MIN_GY_THR_RANGE_MASK 0x0f 701 #define VIP_MIN_GY_THR_RANGE_SHFT 28 702 703 #define VIP_SC_MP_SC24 0x0360 704 #define VIP_ORG_H_MASK 0x07ff 705 #define VIP_ORG_H_SHFT 0 706 #define VIP_ORG_W_MASK 0x07ff 707 #define VIP_ORG_W_SHFT 16 708 709 #define VIP_SC_MP_SC25 0x0364 710 #define VIP_OFF_H_MASK 0x07ff 711 #define VIP_OFF_H_SHFT 0 712 #define VIP_OFF_W_MASK 0x07ff 713 #define VIP_OFF_W_SHFT 16 714 715 #define VIP_VPDMA_BASE 0xd000 716 717 #endif 718