| .. | .. |
|---|
| 12 | 12 | #include <media/v4l2-subdev.h> |
|---|
| 13 | 13 | #include <media/videobuf2-dma-contig.h> |
|---|
| 14 | 14 | #include "dev.h" |
|---|
| 15 | +#include "isp_external.h" |
|---|
| 15 | 16 | #include "regs.h" |
|---|
| 16 | 17 | |
|---|
| 17 | 18 | static void get_remote_mipi_sensor(struct rkisp_device *dev, |
|---|
| .. | .. |
|---|
| 103 | 104 | } |
|---|
| 104 | 105 | |
|---|
| 105 | 106 | static int rkisp_csi_g_mbus_config(struct v4l2_subdev *sd, |
|---|
| 106 | | - struct v4l2_mbus_config *config) |
|---|
| 107 | + unsigned int pad_id, |
|---|
| 108 | + struct v4l2_mbus_config *config) |
|---|
| 107 | 109 | { |
|---|
| 108 | 110 | struct v4l2_subdev *remote_sd; |
|---|
| 109 | 111 | |
|---|
| 110 | 112 | if (!sd) |
|---|
| 111 | 113 | return -ENODEV; |
|---|
| 112 | 114 | remote_sd = get_remote_subdev(sd); |
|---|
| 113 | | - return v4l2_subdev_call(remote_sd, video, g_mbus_config, config); |
|---|
| 115 | + return v4l2_subdev_call(remote_sd, pad, get_mbus_config, pad_id, config); |
|---|
| 114 | 116 | } |
|---|
| 115 | 117 | |
|---|
| 116 | 118 | static int rkisp_csi_get_set_fmt(struct v4l2_subdev *sd, |
|---|
| .. | .. |
|---|
| 159 | 161 | static const struct v4l2_subdev_pad_ops rkisp_csi_pad_ops = { |
|---|
| 160 | 162 | .set_fmt = rkisp_csi_get_set_fmt, |
|---|
| 161 | 163 | .get_fmt = rkisp_csi_get_set_fmt, |
|---|
| 164 | + .get_mbus_config = rkisp_csi_g_mbus_config, |
|---|
| 162 | 165 | }; |
|---|
| 163 | 166 | |
|---|
| 164 | 167 | static const struct v4l2_subdev_video_ops rkisp_csi_video_ops = { |
|---|
| 165 | | - .g_mbus_config = rkisp_csi_g_mbus_config, |
|---|
| 166 | 168 | .s_stream = rkisp_csi_s_stream, |
|---|
| 167 | 169 | }; |
|---|
| 168 | 170 | |
|---|
| .. | .. |
|---|
| 279 | 281 | |
|---|
| 280 | 282 | dev->hdr.op_mode = HDR_NORMAL; |
|---|
| 281 | 283 | dev->hdr.esp_mode = HDR_NORMAL_VC; |
|---|
| 282 | | - if (mipi_sensor) { |
|---|
| 283 | | - ret = v4l2_subdev_call(mipi_sensor, |
|---|
| 284 | | - core, ioctl, |
|---|
| 285 | | - RKMODULE_GET_HDR_CFG, |
|---|
| 286 | | - &hdr_cfg); |
|---|
| 287 | | - if (!ret) { |
|---|
| 288 | | - dev->hdr.op_mode = hdr_cfg.hdr_mode; |
|---|
| 289 | | - dev->hdr.esp_mode = hdr_cfg.esp.mode; |
|---|
| 290 | | - } |
|---|
| 284 | + memset(&hdr_cfg, 0, sizeof(hdr_cfg)); |
|---|
| 285 | + if (rkisp_csi_get_hdr_cfg(dev, &hdr_cfg) == 0) { |
|---|
| 286 | + dev->hdr.op_mode = hdr_cfg.hdr_mode; |
|---|
| 287 | + dev->hdr.esp_mode = hdr_cfg.esp.mode; |
|---|
| 291 | 288 | } |
|---|
| 292 | 289 | |
|---|
| 293 | 290 | /* normal read back mode */ |
|---|
| .. | .. |
|---|
| 316 | 313 | rkisp_write(dev, CSI2RX_DATA_IDS_1, val, true); |
|---|
| 317 | 314 | } else { |
|---|
| 318 | 315 | rkisp_set_bits(dev, CSI2RX_DATA_IDS_1, mask, val, true); |
|---|
| 319 | | - for (i = 0; i < dev->hw_dev->dev_num; i++) |
|---|
| 316 | + for (i = 0; i < dev->hw_dev->dev_num; i++) { |
|---|
| 317 | + if (dev->hw_dev->isp[i] && |
|---|
| 318 | + !dev->hw_dev->isp[i]->is_hw_link) |
|---|
| 319 | + continue; |
|---|
| 320 | 320 | rkisp_set_bits(dev->hw_dev->isp[i], |
|---|
| 321 | 321 | CSI2RX_DATA_IDS_1, mask, val, false); |
|---|
| 322 | + } |
|---|
| 322 | 323 | } |
|---|
| 323 | 324 | val = SW_CSI_ID4(csi->mipi_di[4]); |
|---|
| 324 | 325 | rkisp_write(dev, CSI2RX_DATA_IDS_2, val, true); |
|---|
| .. | .. |
|---|
| 338 | 339 | Y_STAT_AFIFOX3_OVERFLOW; |
|---|
| 339 | 340 | rkisp_write(dev, CSI2RX_MASK_OVERFLOW, val, true); |
|---|
| 340 | 341 | val = RAW0_WR_FRAME | RAW1_WR_FRAME | RAW2_WR_FRAME | |
|---|
| 341 | | - MIPI_DROP_FRM | RAW_WR_SIZE_ERR | MIPI_LINECNT | |
|---|
| 342 | + RAW_WR_SIZE_ERR | MIPI_LINECNT | |
|---|
| 342 | 343 | RAW_RD_SIZE_ERR | RAW0_Y_STATE | |
|---|
| 343 | 344 | RAW1_Y_STATE | RAW2_Y_STATE; |
|---|
| 345 | + if (dev->isp_ver == ISP_V20) |
|---|
| 346 | + val |= MIPI_DROP_FRM; |
|---|
| 347 | + else |
|---|
| 348 | + val |= ISP21_MIPI_DROP_FRM; |
|---|
| 344 | 349 | rkisp_write(dev, CSI2RX_MASK_STAT, val, true); |
|---|
| 345 | 350 | |
|---|
| 346 | 351 | /* hdr merge */ |
|---|
| .. | .. |
|---|
| 423 | 428 | return 0; |
|---|
| 424 | 429 | } |
|---|
| 425 | 430 | |
|---|
| 431 | +int rkisp_expander_config(struct rkisp_device *dev, |
|---|
| 432 | + struct rkmodule_hdr_cfg *cfg, bool on) |
|---|
| 433 | +{ |
|---|
| 434 | + struct rkmodule_hdr_cfg hdr_cfg; |
|---|
| 435 | + u32 i, val, num, d0, d1, drop_bit = 0; |
|---|
| 436 | + |
|---|
| 437 | + if (dev->isp_ver != ISP_V32) |
|---|
| 438 | + return 0; |
|---|
| 439 | + |
|---|
| 440 | + if (!on) { |
|---|
| 441 | + rkisp_write(dev, ISP32_EXPD_CTRL, 0, false); |
|---|
| 442 | + return 0; |
|---|
| 443 | + } |
|---|
| 444 | + |
|---|
| 445 | + if (!cfg) { |
|---|
| 446 | + if (rkisp_csi_get_hdr_cfg(dev, &hdr_cfg) != 0) |
|---|
| 447 | + goto err; |
|---|
| 448 | + cfg = &hdr_cfg; |
|---|
| 449 | + } |
|---|
| 450 | + |
|---|
| 451 | + if (cfg->hdr_mode != HDR_COMPR) |
|---|
| 452 | + return 0; |
|---|
| 453 | + |
|---|
| 454 | + /* compressed data max 12bit and src data max 20bit */ |
|---|
| 455 | + if (cfg->compr.bit > 20) |
|---|
| 456 | + drop_bit = cfg->compr.bit - 20; |
|---|
| 457 | + dev->hdr.compr_bit = cfg->compr.bit - drop_bit; |
|---|
| 458 | + |
|---|
| 459 | + num = cfg->compr.segment; |
|---|
| 460 | + for (i = 0; i < num; i++) { |
|---|
| 461 | + val = cfg->compr.slope_k[i]; |
|---|
| 462 | + rkisp_write(dev, ISP32_EXPD_K0 + i * 4, val, false); |
|---|
| 463 | + } |
|---|
| 464 | + |
|---|
| 465 | + d0 = 0; |
|---|
| 466 | + d1 = cfg->compr.data_compr[0]; |
|---|
| 467 | + val = ISP32_EXPD_DATA(d0, d1 > 0xfff ? 0xfff : d1); |
|---|
| 468 | + rkisp_write(dev, ISP32_EXPD_X00_01, val, false); |
|---|
| 469 | + |
|---|
| 470 | + d1 = cfg->compr.data_src_shitf[0]; |
|---|
| 471 | + val = ISP32_EXPD_DATA(d0, drop_bit ? d1 >> drop_bit : d1); |
|---|
| 472 | + rkisp_write(dev, ISP32_EXPD_Y00_01, val, false); |
|---|
| 473 | + |
|---|
| 474 | + for (i = 1; i < num - 1; i += 2) { |
|---|
| 475 | + d0 = cfg->compr.data_compr[i]; |
|---|
| 476 | + d1 = cfg->compr.data_compr[i + 1]; |
|---|
| 477 | + val = ISP32_EXPD_DATA(d0 > 0xfff ? 0xfff : d0, |
|---|
| 478 | + d1 > 0xfff ? 0xfff : d1); |
|---|
| 479 | + rkisp_write(dev, ISP32_EXPD_X00_01 + (i + 1) * 2, val, false); |
|---|
| 480 | + |
|---|
| 481 | + d0 = cfg->compr.data_src_shitf[i]; |
|---|
| 482 | + d1 = cfg->compr.data_src_shitf[i + 1]; |
|---|
| 483 | + if (drop_bit) { |
|---|
| 484 | + d0 = d0 >> drop_bit; |
|---|
| 485 | + d1 = d1 >> drop_bit; |
|---|
| 486 | + } |
|---|
| 487 | + val = ISP32_EXPD_DATA(d0, d1); |
|---|
| 488 | + rkisp_write(dev, ISP32_EXPD_Y00_01 + (i + 1) * 2, val, false); |
|---|
| 489 | + } |
|---|
| 490 | + |
|---|
| 491 | + /* the last valid point */ |
|---|
| 492 | + val = cfg->compr.data_compr[i]; |
|---|
| 493 | + val = val > 0xfff ? 0xfff : val; |
|---|
| 494 | + d0 = ISP32_EXPD_DATA(val, val); |
|---|
| 495 | + |
|---|
| 496 | + val = cfg->compr.data_src_shitf[i]; |
|---|
| 497 | + val = drop_bit ? val >> drop_bit : val; |
|---|
| 498 | + d1 = ISP32_EXPD_DATA(val, val); |
|---|
| 499 | + |
|---|
| 500 | + num = HDR_COMPR_SEGMENT_16; |
|---|
| 501 | + for (; i < num - 1; i += 2) { |
|---|
| 502 | + rkisp_write(dev, ISP32_EXPD_X00_01 + (i + 1) * 2, d0, false); |
|---|
| 503 | + rkisp_write(dev, ISP32_EXPD_Y00_01 + (i + 1) * 2, d1, false); |
|---|
| 504 | + } |
|---|
| 505 | + rkisp_write(dev, ISP32_EXPD_Y16, val, false); |
|---|
| 506 | + |
|---|
| 507 | + switch (cfg->compr.segment) { |
|---|
| 508 | + case HDR_COMPR_SEGMENT_12: |
|---|
| 509 | + num = 1; |
|---|
| 510 | + break; |
|---|
| 511 | + case HDR_COMPR_SEGMENT_16: |
|---|
| 512 | + num = 2; |
|---|
| 513 | + break; |
|---|
| 514 | + default: |
|---|
| 515 | + num = 0; |
|---|
| 516 | + } |
|---|
| 517 | + val = ISP32_EXPD_EN | |
|---|
| 518 | + ISP32_EXPD_MODE(num) | |
|---|
| 519 | + ISP32_EXPD_K_SHIFT(cfg->compr.k_shift); |
|---|
| 520 | + rkisp_write(dev, ISP32_EXPD_CTRL, val, false); |
|---|
| 521 | + return 0; |
|---|
| 522 | +err: |
|---|
| 523 | + return -EINVAL; |
|---|
| 524 | +} |
|---|
| 525 | + |
|---|
| 526 | +int rkisp_csi_get_hdr_cfg(struct rkisp_device *dev, void *arg) |
|---|
| 527 | +{ |
|---|
| 528 | + struct rkmodule_hdr_cfg *cfg = arg; |
|---|
| 529 | + struct v4l2_subdev *sd = NULL; |
|---|
| 530 | + u32 type; |
|---|
| 531 | + |
|---|
| 532 | + if (dev->isp_inp & INP_CSI) { |
|---|
| 533 | + type = MEDIA_ENT_F_CAM_SENSOR; |
|---|
| 534 | + } else if (dev->isp_inp & INP_CIF) { |
|---|
| 535 | + type = MEDIA_ENT_F_PROC_VIDEO_COMPOSER; |
|---|
| 536 | + } else { |
|---|
| 537 | + switch (dev->isp_inp & 0x7) { |
|---|
| 538 | + case INP_RAWRD2 | INP_RAWRD0: |
|---|
| 539 | + cfg->hdr_mode = HDR_RDBK_FRAME2; |
|---|
| 540 | + break; |
|---|
| 541 | + case INP_RAWRD2 | INP_RAWRD1 | INP_RAWRD0: |
|---|
| 542 | + cfg->hdr_mode = HDR_RDBK_FRAME3; |
|---|
| 543 | + break; |
|---|
| 544 | + default: //INP_RAWRD2 |
|---|
| 545 | + cfg->hdr_mode = HDR_RDBK_FRAME1; |
|---|
| 546 | + } |
|---|
| 547 | + return 0; |
|---|
| 548 | + } |
|---|
| 549 | + get_remote_mipi_sensor(dev, &sd, type); |
|---|
| 550 | + if (!sd) { |
|---|
| 551 | + v4l2_err(&dev->v4l2_dev, "%s don't find subdev\n", __func__); |
|---|
| 552 | + return -EINVAL; |
|---|
| 553 | + } |
|---|
| 554 | + |
|---|
| 555 | + return v4l2_subdev_call(sd, core, ioctl, RKMODULE_GET_HDR_CFG, cfg); |
|---|
| 556 | +} |
|---|
| 557 | + |
|---|
| 426 | 558 | int rkisp_csi_config_patch(struct rkisp_device *dev) |
|---|
| 427 | 559 | { |
|---|
| 428 | 560 | int val = 0, ret = 0; |
|---|
| .. | .. |
|---|
| 434 | 566 | dev->hw_dev->mipi_dev_id = dev->dev_id; |
|---|
| 435 | 567 | ret = csi_config(&dev->csi_dev); |
|---|
| 436 | 568 | } else { |
|---|
| 569 | + struct rkmodule_hdr_cfg hdr_cfg; |
|---|
| 570 | + |
|---|
| 571 | + memset(&hdr_cfg, 0, sizeof(hdr_cfg)); |
|---|
| 572 | + ret = rkisp_csi_get_hdr_cfg(dev, &hdr_cfg); |
|---|
| 437 | 573 | if (dev->isp_inp & INP_CIF) { |
|---|
| 438 | | - struct rkmodule_hdr_cfg hdr_cfg; |
|---|
| 574 | + struct rkisp_vicap_mode mode; |
|---|
| 575 | + int buf_cnt; |
|---|
| 576 | + |
|---|
| 577 | + memset(&mode, 0, sizeof(mode)); |
|---|
| 578 | + mode.name = dev->name; |
|---|
| 439 | 579 | |
|---|
| 440 | 580 | get_remote_mipi_sensor(dev, &mipi_sensor, MEDIA_ENT_F_PROC_VIDEO_COMPOSER); |
|---|
| 581 | + if (!mipi_sensor) |
|---|
| 582 | + return -EINVAL; |
|---|
| 441 | 583 | dev->hdr.op_mode = HDR_NORMAL; |
|---|
| 442 | 584 | dev->hdr.esp_mode = HDR_NORMAL_VC; |
|---|
| 443 | | - if (mipi_sensor) { |
|---|
| 444 | | - ret = v4l2_subdev_call(mipi_sensor, |
|---|
| 445 | | - core, ioctl, |
|---|
| 446 | | - RKMODULE_GET_HDR_CFG, |
|---|
| 447 | | - &hdr_cfg); |
|---|
| 448 | | - if (!ret) { |
|---|
| 449 | | - dev->hdr.op_mode = hdr_cfg.hdr_mode; |
|---|
| 450 | | - dev->hdr.esp_mode = hdr_cfg.esp.mode; |
|---|
| 451 | | - } |
|---|
| 585 | + if (!ret) { |
|---|
| 586 | + dev->hdr.op_mode = hdr_cfg.hdr_mode; |
|---|
| 587 | + dev->hdr.esp_mode = hdr_cfg.esp.mode; |
|---|
| 588 | + rkisp_expander_config(dev, &hdr_cfg, true); |
|---|
| 452 | 589 | } |
|---|
| 453 | 590 | |
|---|
| 454 | | - /* normal read back mode */ |
|---|
| 455 | | - if (dev->hdr.op_mode == HDR_NORMAL) |
|---|
| 591 | + /* normal read back mode default */ |
|---|
| 592 | + if (dev->hdr.op_mode == HDR_NORMAL || dev->hdr.op_mode == HDR_COMPR) |
|---|
| 456 | 593 | dev->hdr.op_mode = HDR_RDBK_FRAME1; |
|---|
| 457 | | - } else { |
|---|
| 458 | | - switch (dev->isp_inp & 0x7) { |
|---|
| 459 | | - case INP_RAWRD2 | INP_RAWRD0: |
|---|
| 460 | | - dev->hdr.op_mode = HDR_RDBK_FRAME2; |
|---|
| 461 | | - break; |
|---|
| 462 | | - case INP_RAWRD2 | INP_RAWRD1 | INP_RAWRD0: |
|---|
| 463 | | - dev->hdr.op_mode = HDR_RDBK_FRAME3; |
|---|
| 464 | | - break; |
|---|
| 465 | | - default: //INP_RAWRD2 |
|---|
| 466 | | - dev->hdr.op_mode = HDR_RDBK_FRAME1; |
|---|
| 594 | + |
|---|
| 595 | + if (dev->isp_inp == INP_CIF && dev->isp_ver > ISP_V21) |
|---|
| 596 | + mode.rdbk_mode = dev->is_rdbk_auto ? RKISP_VICAP_RDBK_AUTO : RKISP_VICAP_ONLINE; |
|---|
| 597 | + else |
|---|
| 598 | + mode.rdbk_mode = RKISP_VICAP_RDBK_AIQ; |
|---|
| 599 | + v4l2_subdev_call(mipi_sensor, core, ioctl, RKISP_VICAP_CMD_MODE, &mode); |
|---|
| 600 | + dev->vicap_in = mode.input; |
|---|
| 601 | + /* vicap direct to isp */ |
|---|
| 602 | + if (dev->isp_ver >= ISP_V30 && !mode.rdbk_mode) { |
|---|
| 603 | + switch (dev->hdr.op_mode) { |
|---|
| 604 | + case HDR_RDBK_FRAME3: |
|---|
| 605 | + dev->hdr.op_mode = HDR_LINEX3_DDR; |
|---|
| 606 | + break; |
|---|
| 607 | + case HDR_RDBK_FRAME2: |
|---|
| 608 | + dev->hdr.op_mode = HDR_LINEX2_DDR; |
|---|
| 609 | + break; |
|---|
| 610 | + default: |
|---|
| 611 | + dev->hdr.op_mode = HDR_NORMAL; |
|---|
| 612 | + } |
|---|
| 613 | + if (dev->hdr.op_mode != HDR_NORMAL) { |
|---|
| 614 | + buf_cnt = 1; |
|---|
| 615 | + v4l2_subdev_call(mipi_sensor, core, ioctl, |
|---|
| 616 | + RKISP_VICAP_CMD_INIT_BUF, &buf_cnt); |
|---|
| 617 | + } |
|---|
| 618 | + } else if (mode.rdbk_mode == RKISP_VICAP_RDBK_AUTO) { |
|---|
| 619 | + buf_cnt = RKISP_VICAP_BUF_CNT; |
|---|
| 620 | + v4l2_subdev_call(mipi_sensor, core, ioctl, |
|---|
| 621 | + RKISP_VICAP_CMD_INIT_BUF, &buf_cnt); |
|---|
| 467 | 622 | } |
|---|
| 623 | + } else { |
|---|
| 624 | + dev->hdr.op_mode = hdr_cfg.hdr_mode; |
|---|
| 468 | 625 | } |
|---|
| 469 | 626 | |
|---|
| 470 | | - if (dev->hdr.op_mode == HDR_RDBK_FRAME2) |
|---|
| 471 | | - val = SW_HDRMGE_EN | SW_HDRMGE_MODE_FRAMEX2; |
|---|
| 472 | | - else if (dev->hdr.op_mode == HDR_RDBK_FRAME3) |
|---|
| 473 | | - val = SW_HDRMGE_EN | SW_HDRMGE_MODE_FRAMEX3; |
|---|
| 474 | | - |
|---|
| 475 | 627 | if (!dev->hw_dev->is_mi_update) |
|---|
| 476 | | - rkisp_write(dev, CSI2RX_CTRL0, |
|---|
| 477 | | - SW_IBUF_OP_MODE(dev->hdr.op_mode), true); |
|---|
| 628 | + rkisp_unite_write(dev, CSI2RX_CTRL0, |
|---|
| 629 | + SW_IBUF_OP_MODE(dev->hdr.op_mode), |
|---|
| 630 | + true, dev->hw_dev->is_unite); |
|---|
| 478 | 631 | |
|---|
| 632 | + /* hdr merge */ |
|---|
| 633 | + switch (dev->hdr.op_mode) { |
|---|
| 634 | + case HDR_RDBK_FRAME2: |
|---|
| 635 | + case HDR_FRAMEX2_DDR: |
|---|
| 636 | + case HDR_LINEX2_DDR: |
|---|
| 637 | + case HDR_LINEX2_NO_DDR: |
|---|
| 638 | + val = SW_HDRMGE_EN | SW_HDRMGE_MODE_FRAMEX2; |
|---|
| 639 | + break; |
|---|
| 640 | + case HDR_RDBK_FRAME3: |
|---|
| 641 | + case HDR_FRAMEX3_DDR: |
|---|
| 642 | + case HDR_LINEX3_DDR: |
|---|
| 643 | + val = SW_HDRMGE_EN | SW_HDRMGE_MODE_FRAMEX3; |
|---|
| 644 | + break; |
|---|
| 645 | + default: |
|---|
| 646 | + val = 0; |
|---|
| 647 | + } |
|---|
| 479 | 648 | if (is_feature_on) { |
|---|
| 480 | 649 | if ((ISP2X_MODULE_HDRMGE & ~iq_feature) && (val & SW_HDRMGE_EN)) { |
|---|
| 481 | 650 | v4l2_err(&dev->v4l2_dev, "hdrmge is not supported\n"); |
|---|
| 482 | 651 | return -EINVAL; |
|---|
| 483 | 652 | } |
|---|
| 484 | 653 | } |
|---|
| 485 | | - rkisp_write(dev, ISP_HDRMGE_BASE, val, false); |
|---|
| 654 | + rkisp_unite_write(dev, ISP_HDRMGE_BASE, val, false, dev->hw_dev->is_unite); |
|---|
| 486 | 655 | |
|---|
| 487 | | - rkisp_set_bits(dev, CSI2RX_MASK_STAT, 0, RAW_RD_SIZE_ERR, true); |
|---|
| 656 | + val = RAW_RD_SIZE_ERR; |
|---|
| 657 | + if (!IS_HDR_RDBK(dev->hdr.op_mode)) |
|---|
| 658 | + val |= ISP21_MIPI_DROP_FRM; |
|---|
| 659 | + rkisp_unite_set_bits(dev, CSI2RX_MASK_STAT, 0, val, true, dev->hw_dev->is_unite); |
|---|
| 488 | 660 | } |
|---|
| 489 | 661 | |
|---|
| 490 | 662 | if (IS_HDR_RDBK(dev->hdr.op_mode)) |
|---|
| 491 | | - rkisp_set_bits(dev, CTRL_SWS_CFG, 0, SW_MPIP_DROP_FRM_DIS, true); |
|---|
| 663 | + rkisp_unite_set_bits(dev, CTRL_SWS_CFG, 0, SW_MPIP_DROP_FRM_DIS, |
|---|
| 664 | + true, dev->hw_dev->is_unite); |
|---|
| 492 | 665 | |
|---|
| 493 | | - memset(dev->filt_state, 0, sizeof(dev->filt_state)); |
|---|
| 666 | + if (dev->isp_ver >= ISP_V30) |
|---|
| 667 | + rkisp_unite_set_bits(dev, CTRL_SWS_CFG, 0, ISP3X_SW_ACK_FRM_PRO_DIS, |
|---|
| 668 | + true, dev->hw_dev->is_unite); |
|---|
| 669 | + /* line counter from isp out, default from mp out */ |
|---|
| 670 | + if (dev->isp_ver == ISP_V32_L) |
|---|
| 671 | + rkisp_unite_set_bits(dev, CTRL_SWS_CFG, 0, ISP32L_ISP2ENC_CNT_MUX, |
|---|
| 672 | + true, dev->hw_dev->is_unite); |
|---|
| 494 | 673 | dev->rdbk_cnt = -1; |
|---|
| 495 | 674 | dev->rdbk_cnt_x1 = -1; |
|---|
| 496 | 675 | dev->rdbk_cnt_x2 = -1; |
|---|
| .. | .. |
|---|
| 556 | 735 | csi_dev->pads[CSI_SRC_CH2].flags = MEDIA_PAD_FL_SOURCE; |
|---|
| 557 | 736 | csi_dev->pads[CSI_SRC_CH3].flags = MEDIA_PAD_FL_SOURCE; |
|---|
| 558 | 737 | csi_dev->pads[CSI_SRC_CH4].flags = MEDIA_PAD_FL_SOURCE; |
|---|
| 738 | + } else if (dev->isp_ver >= ISP_V30) { |
|---|
| 739 | + return 0; |
|---|
| 559 | 740 | } |
|---|
| 560 | 741 | |
|---|
| 561 | 742 | ret = media_entity_pads_init(&sd->entity, csi_dev->max_pad, |
|---|