| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd |
|---|
| 3 | 4 | * Author:Mark Yao <mark.yao@rock-chips.com> |
|---|
| 4 | | - * |
|---|
| 5 | | - * This software is licensed under the terms of the GNU General Public |
|---|
| 6 | | - * License version 2, as published by the Free Software Foundation, and |
|---|
| 7 | | - * may be copied, distributed, and modified under those terms. |
|---|
| 8 | | - * |
|---|
| 9 | | - * This program is distributed in the hope that it will be useful, |
|---|
| 10 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 11 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 12 | | - * GNU General Public License for more details. |
|---|
| 13 | 5 | */ |
|---|
| 14 | 6 | |
|---|
| 15 | | -#include <drm/drmP.h> |
|---|
| 16 | | - |
|---|
| 17 | | -#include <linux/kernel.h> |
|---|
| 18 | 7 | #include <linux/component.h> |
|---|
| 8 | +#include <linux/kernel.h> |
|---|
| 9 | +#include <linux/of.h> |
|---|
| 10 | +#include <linux/platform_device.h> |
|---|
| 11 | + |
|---|
| 12 | +#include <drm/drm_fourcc.h> |
|---|
| 13 | +#include <drm/drm_print.h> |
|---|
| 19 | 14 | |
|---|
| 20 | 15 | #include "rockchip_drm_vop.h" |
|---|
| 21 | 16 | #include "rockchip_vop_reg.h" |
|---|
| .. | .. |
|---|
| 67 | 62 | DRM_FORMAT_NV12, |
|---|
| 68 | 63 | DRM_FORMAT_NV16, |
|---|
| 69 | 64 | DRM_FORMAT_NV24, |
|---|
| 70 | | - DRM_FORMAT_NV12_10, |
|---|
| 71 | | - DRM_FORMAT_NV16_10, |
|---|
| 72 | | - DRM_FORMAT_NV24_10, |
|---|
| 65 | + DRM_FORMAT_NV15, /* yuv420_10bit linear mode, 2 plane, no padding */ |
|---|
| 66 | +#ifdef CONFIG_NO_GKI |
|---|
| 67 | + DRM_FORMAT_NV20, /* yuv422_10bit linear mode, 2 plane, no padding */ |
|---|
| 68 | + DRM_FORMAT_NV30, /* yuv444_10bit linear mode, 2 plane, no padding */ |
|---|
| 69 | +#endif |
|---|
| 73 | 70 | }; |
|---|
| 74 | 71 | |
|---|
| 75 | 72 | static const uint32_t formats_win_full_10bit_yuyv[] = { |
|---|
| .. | .. |
|---|
| 81 | 78 | DRM_FORMAT_BGR888, |
|---|
| 82 | 79 | DRM_FORMAT_RGB565, |
|---|
| 83 | 80 | DRM_FORMAT_BGR565, |
|---|
| 84 | | - DRM_FORMAT_NV12, |
|---|
| 85 | | - DRM_FORMAT_NV16, |
|---|
| 86 | | - DRM_FORMAT_NV24, |
|---|
| 87 | | - DRM_FORMAT_NV12_10, |
|---|
| 88 | | - DRM_FORMAT_NV16_10, |
|---|
| 89 | | - DRM_FORMAT_NV24_10, |
|---|
| 90 | | - DRM_FORMAT_YUYV, |
|---|
| 81 | + DRM_FORMAT_NV12, /* yuv420_8bit linear mode, 2 plane */ |
|---|
| 82 | + DRM_FORMAT_NV16, /* yuv422_8bit linear mode, 2 plane */ |
|---|
| 83 | + DRM_FORMAT_NV24, /* yuv444_8bit linear mode, 2 plane */ |
|---|
| 84 | + DRM_FORMAT_NV15, /* yuv420_10bit linear mode, 2 plane, no padding */ |
|---|
| 85 | +#ifdef CONFIG_NO_GKI |
|---|
| 86 | + DRM_FORMAT_NV20, /* yuv422_10bit linear mode, 2 plane, no padding */ |
|---|
| 87 | + DRM_FORMAT_NV30, /* yuv444_10bit linear mode, 2 plane, no padding */ |
|---|
| 88 | +#endif |
|---|
| 89 | + DRM_FORMAT_YVYU, /* yuv422_8bit[YVYU] linear mode or non-Linear mode */ |
|---|
| 90 | + DRM_FORMAT_VYUY, /* yuv422_8bit[VYUY] linear mode or non-Linear mode */ |
|---|
| 91 | + DRM_FORMAT_YUYV, /* yuv422_8bit[YUYV] linear mode or non-Linear mode */ |
|---|
| 92 | + DRM_FORMAT_UYVY, /* yuv422_8bit[UYVY] linear mode or non-Linear mode */ |
|---|
| 91 | 93 | }; |
|---|
| 92 | 94 | |
|---|
| 93 | 95 | static const uint32_t formats_win_lite[] = { |
|---|
| .. | .. |
|---|
| 99 | 101 | DRM_FORMAT_BGR888, |
|---|
| 100 | 102 | DRM_FORMAT_RGB565, |
|---|
| 101 | 103 | DRM_FORMAT_BGR565, |
|---|
| 104 | +}; |
|---|
| 105 | + |
|---|
| 106 | +static const uint64_t format_modifiers[] = { |
|---|
| 107 | + DRM_FORMAT_MOD_LINEAR, |
|---|
| 108 | + DRM_FORMAT_MOD_INVALID, |
|---|
| 109 | +}; |
|---|
| 110 | + |
|---|
| 111 | +static const uint64_t format_modifiers_afbc[] = { |
|---|
| 112 | + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16), |
|---|
| 113 | + |
|---|
| 114 | + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | |
|---|
| 115 | + AFBC_FORMAT_MOD_SPARSE), |
|---|
| 116 | + |
|---|
| 117 | + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | |
|---|
| 118 | + AFBC_FORMAT_MOD_YTR), |
|---|
| 119 | + |
|---|
| 120 | + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | |
|---|
| 121 | + AFBC_FORMAT_MOD_CBR), |
|---|
| 122 | + |
|---|
| 123 | + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | |
|---|
| 124 | + AFBC_FORMAT_MOD_YTR | |
|---|
| 125 | + AFBC_FORMAT_MOD_SPARSE), |
|---|
| 126 | + |
|---|
| 127 | + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | |
|---|
| 128 | + AFBC_FORMAT_MOD_CBR | |
|---|
| 129 | + AFBC_FORMAT_MOD_SPARSE), |
|---|
| 130 | + |
|---|
| 131 | + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | |
|---|
| 132 | + AFBC_FORMAT_MOD_YTR | |
|---|
| 133 | + AFBC_FORMAT_MOD_CBR), |
|---|
| 134 | + |
|---|
| 135 | + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | |
|---|
| 136 | + AFBC_FORMAT_MOD_YTR | |
|---|
| 137 | + AFBC_FORMAT_MOD_CBR | |
|---|
| 138 | + AFBC_FORMAT_MOD_SPARSE), |
|---|
| 139 | + |
|---|
| 140 | + /* SPLIT mandates SPARSE, RGB modes mandates YTR */ |
|---|
| 141 | + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | |
|---|
| 142 | + AFBC_FORMAT_MOD_YTR | |
|---|
| 143 | + AFBC_FORMAT_MOD_SPARSE | |
|---|
| 144 | + AFBC_FORMAT_MOD_SPLIT), |
|---|
| 145 | + |
|---|
| 146 | + DRM_FORMAT_MOD_LINEAR, |
|---|
| 147 | + DRM_FORMAT_MOD_INVALID, |
|---|
| 102 | 148 | }; |
|---|
| 103 | 149 | |
|---|
| 104 | 150 | static const struct vop_scl_extension rk3288_win_full_scl_ext = { |
|---|
| .. | .. |
|---|
| 139 | 185 | .nformats = ARRAY_SIZE(formats_win_full_10bit), |
|---|
| 140 | 186 | .enable = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 0), |
|---|
| 141 | 187 | .format = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 1), |
|---|
| 142 | | - .fmt_10 = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 4), |
|---|
| 188 | + .fmt_10 = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 4), |
|---|
| 143 | 189 | .csc_mode = VOP_REG_VER(RK3288_WIN0_CTRL0, 0x3, 10, 3, 2, -1), |
|---|
| 144 | 190 | .rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12), |
|---|
| 145 | 191 | .xmirror = VOP_REG_VER(RK3368_WIN0_CTRL0, 0x1, 21, 3, 2, -1), |
|---|
| .. | .. |
|---|
| 265 | 311 | |
|---|
| 266 | 312 | .dsp_out_yuv = VOP_REG_VER(RK3399_POST_SCL_CTRL, 0x1, 2, 3, 5, -1), |
|---|
| 267 | 313 | .dsp_data_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1f, 12), |
|---|
| 314 | + .dsp_bg_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 12), |
|---|
| 315 | + .dsp_rb_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 13), |
|---|
| 316 | + .dsp_rg_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 14), |
|---|
| 317 | + .dsp_delta_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 15), |
|---|
| 318 | + .dsp_dummy_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 16), |
|---|
| 268 | 319 | .dsp_ccir656_avg = VOP_REG(RK3288_DSP_CTRL0, 0x1, 20), |
|---|
| 269 | 320 | .dsp_blank = VOP_REG(RK3288_DSP_CTRL0, 0x3, 18), |
|---|
| 270 | 321 | .update_gamma_lut = VOP_REG_VER(RK3288_DSP_CTRL1, 0x1, 7, 3, 5, -1), |
|---|
| .. | .. |
|---|
| 349 | 400 | }; |
|---|
| 350 | 401 | |
|---|
| 351 | 402 | static const struct vop_data rk3288_vop_big = { |
|---|
| 403 | + .soc_id = 0x3288, |
|---|
| 404 | + .vop_id = 0, |
|---|
| 352 | 405 | .version = VOP_VERSION(3, 0), |
|---|
| 353 | | - .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE, |
|---|
| 406 | + .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN, |
|---|
| 354 | 407 | .max_input = {4096, 8192}, |
|---|
| 355 | 408 | .max_output = {3840, 2160}, |
|---|
| 356 | 409 | .intr = &rk3288_vop_intr, |
|---|
| .. | .. |
|---|
| 361 | 414 | }; |
|---|
| 362 | 415 | |
|---|
| 363 | 416 | static const struct vop_data rk3288_vop_lit = { |
|---|
| 417 | + .soc_id = 0x3288, |
|---|
| 418 | + .vop_id = 1, |
|---|
| 364 | 419 | .version = VOP_VERSION(3, 0), |
|---|
| 365 | | - .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE, |
|---|
| 420 | + .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN, |
|---|
| 366 | 421 | .max_input = {4096, 8192}, |
|---|
| 367 | 422 | .max_output = {2560, 1600}, |
|---|
| 368 | 423 | .intr = &rk3288_vop_intr, |
|---|
| .. | .. |
|---|
| 470 | 525 | }; |
|---|
| 471 | 526 | |
|---|
| 472 | 527 | static const struct vop_data rk3368_vop = { |
|---|
| 528 | + .soc_id = 0x3368, |
|---|
| 529 | + .vop_id = 0, |
|---|
| 473 | 530 | .version = VOP_VERSION(3, 2), |
|---|
| 474 | | - .feature = VOP_FEATURE_ALPHA_SCALE, |
|---|
| 531 | + .feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN, |
|---|
| 475 | 532 | .max_input = {4096, 8192}, |
|---|
| 476 | 533 | .max_output = {4096, 2160}, |
|---|
| 477 | 534 | .intr = &rk3368_vop_intr, |
|---|
| .. | .. |
|---|
| 495 | 552 | }; |
|---|
| 496 | 553 | |
|---|
| 497 | 554 | static const struct vop_data rk3366_vop = { |
|---|
| 555 | + .soc_id = 0x3366, |
|---|
| 556 | + .vop_id = 0, |
|---|
| 498 | 557 | .version = VOP_VERSION(3, 4), |
|---|
| 499 | | - .feature = VOP_FEATURE_ALPHA_SCALE, |
|---|
| 558 | + .feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN, |
|---|
| 500 | 559 | .max_input = {4096, 8192}, |
|---|
| 501 | 560 | .max_output = {4096, 2160}, |
|---|
| 502 | 561 | .intr = &rk3366_vop_intr, |
|---|
| .. | .. |
|---|
| 610 | 669 | .nformats = ARRAY_SIZE(formats_win_full_10bit_yuyv), |
|---|
| 611 | 670 | .enable = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 0), |
|---|
| 612 | 671 | .format = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 1), |
|---|
| 613 | | - .fmt_10 = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 4), |
|---|
| 672 | + .fmt_10 = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 4), |
|---|
| 614 | 673 | .fmt_yuyv = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 17), |
|---|
| 615 | 674 | .csc_mode = VOP_REG_VER(RK3288_WIN0_CTRL0, 0x3, 10, 3, 2, -1), |
|---|
| 616 | 675 | .rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12), |
|---|
| .. | .. |
|---|
| 633 | 692 | |
|---|
| 634 | 693 | static const struct vop_win_data rk3399_vop_win_data[] = { |
|---|
| 635 | 694 | { .base = 0x00, .phy = &rk3399_win01_data, .csc = &rk3399_win0_csc, |
|---|
| 695 | + .format_modifiers = format_modifiers_afbc, |
|---|
| 636 | 696 | .type = DRM_PLANE_TYPE_PRIMARY, |
|---|
| 637 | 697 | .feature = WIN_FEATURE_AFBDC }, |
|---|
| 638 | 698 | { .base = 0x40, .phy = &rk3399_win01_data, .csc = &rk3399_win1_csc, |
|---|
| 699 | + .format_modifiers = format_modifiers_afbc, |
|---|
| 639 | 700 | .type = DRM_PLANE_TYPE_OVERLAY, |
|---|
| 640 | 701 | .feature = WIN_FEATURE_AFBDC }, |
|---|
| 641 | 702 | { .base = 0x00, .phy = &rk3368_win23_data, .csc = &rk3399_win2_csc, |
|---|
| 703 | + .format_modifiers = format_modifiers_afbc, |
|---|
| 642 | 704 | .type = DRM_PLANE_TYPE_OVERLAY, |
|---|
| 643 | 705 | .feature = WIN_FEATURE_AFBDC, |
|---|
| 644 | 706 | .area = rk3368_area_data, |
|---|
| 645 | 707 | .area_size = ARRAY_SIZE(rk3368_area_data), }, |
|---|
| 646 | 708 | { .base = 0x50, .phy = &rk3368_win23_data, .csc = &rk3399_win3_csc, |
|---|
| 709 | + .format_modifiers = format_modifiers_afbc, |
|---|
| 647 | 710 | .type = DRM_PLANE_TYPE_CURSOR, |
|---|
| 648 | 711 | .feature = WIN_FEATURE_AFBDC, |
|---|
| 649 | 712 | .area = rk3368_area_data, |
|---|
| .. | .. |
|---|
| 651 | 714 | }; |
|---|
| 652 | 715 | |
|---|
| 653 | 716 | static const struct vop_data rk3399_vop_big = { |
|---|
| 717 | + .soc_id = 0x3399, |
|---|
| 718 | + .vop_id = 0, |
|---|
| 654 | 719 | .version = VOP_VERSION(3, 5), |
|---|
| 655 | 720 | .csc_table = &rk3399_csc_table, |
|---|
| 656 | | - .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_AFBDC | |
|---|
| 657 | | - VOP_FEATURE_ALPHA_SCALE, |
|---|
| 721 | + .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN, |
|---|
| 658 | 722 | .max_input = {4096, 8192}, |
|---|
| 659 | 723 | .max_output = {4096, 2160}, |
|---|
| 660 | 724 | .intr = &rk3366_vop_intr, |
|---|
| .. | .. |
|---|
| 665 | 729 | |
|---|
| 666 | 730 | static const struct vop_win_data rk3399_vop_lit_win_data[] = { |
|---|
| 667 | 731 | { .base = 0x00, .phy = &rk3399_win01_data, .csc = &rk3399_win0_csc, |
|---|
| 732 | + .format_modifiers = format_modifiers, |
|---|
| 668 | 733 | .type = DRM_PLANE_TYPE_OVERLAY, |
|---|
| 669 | 734 | .feature = WIN_FEATURE_AFBDC }, |
|---|
| 670 | 735 | { .phy = NULL }, |
|---|
| 671 | 736 | { .base = 0x00, .phy = &rk3368_win23_data, .csc = &rk3399_win2_csc, |
|---|
| 737 | + .format_modifiers = format_modifiers, |
|---|
| 672 | 738 | .type = DRM_PLANE_TYPE_PRIMARY, |
|---|
| 673 | 739 | .feature = WIN_FEATURE_AFBDC, |
|---|
| 674 | 740 | .area = rk3368_area_data, |
|---|
| .. | .. |
|---|
| 678 | 744 | |
|---|
| 679 | 745 | |
|---|
| 680 | 746 | static const struct vop_data rk3399_vop_lit = { |
|---|
| 747 | + .soc_id = 0x3399, |
|---|
| 748 | + .vop_id = 1, |
|---|
| 681 | 749 | .version = VOP_VERSION(3, 6), |
|---|
| 682 | | - .feature = VOP_FEATURE_ALPHA_SCALE, |
|---|
| 750 | + .feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN, |
|---|
| 683 | 751 | .csc_table = &rk3399_csc_table, |
|---|
| 684 | 752 | .max_input = {4096, 8192}, |
|---|
| 685 | 753 | .max_output = {2560, 1600}, |
|---|
| .. | .. |
|---|
| 697 | 765 | }; |
|---|
| 698 | 766 | |
|---|
| 699 | 767 | static const struct vop_data rk3228_vop = { |
|---|
| 768 | + .soc_id = 0x3228, |
|---|
| 769 | + .vop_id = 0, |
|---|
| 700 | 770 | .version = VOP_VERSION(3, 7), |
|---|
| 701 | | - .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE, |
|---|
| 771 | + .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN, |
|---|
| 702 | 772 | .max_input = {4096, 8192}, |
|---|
| 703 | 773 | .max_output = {4096, 2160}, |
|---|
| 704 | 774 | .intr = &rk3366_vop_intr, |
|---|
| .. | .. |
|---|
| 999 | 1069 | .dither_up_en = VOP_REG(RK3328_DSP_CTRL1, 0x1, 6), |
|---|
| 1000 | 1070 | |
|---|
| 1001 | 1071 | .dsp_data_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1f, 12), |
|---|
| 1072 | + .dsp_bg_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 12), |
|---|
| 1073 | + .dsp_rb_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 13), |
|---|
| 1074 | + .dsp_rg_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 14), |
|---|
| 1075 | + .dsp_delta_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 15), |
|---|
| 1076 | + .dsp_dummy_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 16), |
|---|
| 1002 | 1077 | .dsp_ccir656_avg = VOP_REG(RK3328_DSP_CTRL0, 0x1, 20), |
|---|
| 1003 | 1078 | .dsp_blank = VOP_REG(RK3328_DSP_CTRL0, 0x3, 18), |
|---|
| 1004 | 1079 | .dsp_lut_en = VOP_REG(RK3328_DSP_CTRL1, 0x1, 0), |
|---|
| .. | .. |
|---|
| 1088 | 1163 | }; |
|---|
| 1089 | 1164 | |
|---|
| 1090 | 1165 | static const struct vop_data rk3328_vop = { |
|---|
| 1166 | + .soc_id = 0x3328, |
|---|
| 1167 | + .vop_id = 0, |
|---|
| 1091 | 1168 | .version = VOP_VERSION(3, 8), |
|---|
| 1092 | | - .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE, |
|---|
| 1169 | + .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_HDR10 | |
|---|
| 1170 | + VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN, |
|---|
| 1093 | 1171 | .hdr_table = &rk3328_hdr_table, |
|---|
| 1094 | 1172 | .max_input = {4096, 8192}, |
|---|
| 1095 | 1173 | .max_output = {4096, 2160}, |
|---|
| .. | .. |
|---|
| 1171 | 1249 | |
|---|
| 1172 | 1250 | static const struct vop_ctrl rk3036_ctrl_data = { |
|---|
| 1173 | 1251 | .standby = VOP_REG(RK3036_SYS_CTRL, 0x1, 30), |
|---|
| 1252 | + .sw_dac_sel = VOP_REG(RK3036_SYS_CTRL, 0x1, 29), |
|---|
| 1174 | 1253 | .out_mode = VOP_REG(RK3036_DSP_CTRL0, 0xf, 0), |
|---|
| 1254 | + .dsp_interlace = VOP_REG(RK3036_DSP_CTRL0, 0x1, 12), |
|---|
| 1175 | 1255 | .dsp_blank = VOP_REG(RK3036_DSP_CTRL1, 0x1, 24), |
|---|
| 1256 | + .dsp_background = VOP_REG(RK3036_DSP_CTRL1, 0xffffff, 0), |
|---|
| 1176 | 1257 | .dclk_pol = VOP_REG(RK3036_DSP_CTRL0, 0x1, 7), |
|---|
| 1177 | 1258 | .pin_pol = VOP_REG(RK3036_DSP_CTRL0, 0x7, 4), |
|---|
| 1178 | 1259 | .dither_down_sel = VOP_REG(RK3036_DSP_CTRL0, 0x1, 27), |
|---|
| 1260 | + .tve_sw_mode = VOP_REG(RK3036_DSP_CTRL0, 0x1, 25), |
|---|
| 1261 | + .dsp_interlace_pol = VOP_REG(RK3036_DSP_CTRL0, 0x1, 13), |
|---|
| 1179 | 1262 | .dither_down_en = VOP_REG(RK3036_DSP_CTRL0, 0x1, 11), |
|---|
| 1180 | 1263 | .dither_down_mode = VOP_REG(RK3036_DSP_CTRL0, 0x1, 10), |
|---|
| 1181 | 1264 | .dither_up_en = VOP_REG(RK3036_DSP_CTRL0, 0x1, 9), |
|---|
| 1182 | 1265 | .dsp_layer_sel = VOP_REG(RK3036_DSP_CTRL0, 0x1, 8), |
|---|
| 1183 | 1266 | .htotal_pw = VOP_REG(RK3036_DSP_HTOTAL_HS_END, 0x1fff1fff, 0), |
|---|
| 1184 | 1267 | .hact_st_end = VOP_REG(RK3036_DSP_HACT_ST_END, 0x1fff1fff, 0), |
|---|
| 1268 | + .tve_dclk_en = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 20), |
|---|
| 1269 | + .tve_dclk_pol = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 21), |
|---|
| 1185 | 1270 | .hdmi_en = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 22), |
|---|
| 1186 | 1271 | .hdmi_dclk_pol = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 23), |
|---|
| 1272 | + .core_dclk_div = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 30), |
|---|
| 1187 | 1273 | .hdmi_pin_pol = VOP_REG(RK3036_INT_SCALER, 0x7, 4), |
|---|
| 1188 | 1274 | .rgb_en = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 24), |
|---|
| 1189 | 1275 | .rgb_dclk_pol = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 25), |
|---|
| .. | .. |
|---|
| 1193 | 1279 | .mipi_dclk_pol = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 29), |
|---|
| 1194 | 1280 | .vtotal_pw = VOP_REG(RK3036_DSP_VTOTAL_VS_END, 0x1fff1fff, 0), |
|---|
| 1195 | 1281 | .vact_st_end = VOP_REG(RK3036_DSP_VACT_ST_END, 0x1fff1fff, 0), |
|---|
| 1282 | + .vs_st_end_f1 = VOP_REG(RK3036_DSP_VS_ST_END_F1, 0x1fff1fff, 0), |
|---|
| 1283 | + .vact_st_end_f1 = VOP_REG(RK3036_DSP_VACT_ST_END_F1, 0x1fff1fff, 0), |
|---|
| 1196 | 1284 | .cfg_done = VOP_REG(RK3036_REG_CFG_DONE, 0x1, 0), |
|---|
| 1197 | 1285 | }; |
|---|
| 1198 | 1286 | |
|---|
| 1199 | 1287 | static const struct vop_data rk3036_vop = { |
|---|
| 1288 | + .soc_id = 0x3036, |
|---|
| 1289 | + .vop_id = 0, |
|---|
| 1200 | 1290 | .version = VOP_VERSION(2, 2), |
|---|
| 1201 | 1291 | .max_input = {1920, 1080}, |
|---|
| 1202 | 1292 | .max_output = {1920, 1080}, |
|---|
| .. | .. |
|---|
| 1303 | 1393 | }; |
|---|
| 1304 | 1394 | |
|---|
| 1305 | 1395 | static const struct vop_data rk3066_vop = { |
|---|
| 1396 | + .soc_id = 0x3066, |
|---|
| 1397 | + .vop_id = 0, |
|---|
| 1306 | 1398 | .version = VOP_VERSION(2, 1), |
|---|
| 1307 | 1399 | .max_input = {1920, 4096}, |
|---|
| 1308 | 1400 | .max_output = {1920, 1080}, |
|---|
| .. | .. |
|---|
| 1341 | 1433 | |
|---|
| 1342 | 1434 | .enable = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x1, 0), |
|---|
| 1343 | 1435 | .format = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x7, 1), |
|---|
| 1436 | + .interlace_read = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x1, 8), |
|---|
| 1344 | 1437 | .rb_swap = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x1, 12), |
|---|
| 1345 | 1438 | .act_info = VOP_REG(RK3366_LIT_WIN0_ACT_INFO, 0xffffffff, 0), |
|---|
| 1346 | 1439 | .dsp_info = VOP_REG(RK3366_LIT_WIN0_DSP_INFO, 0xffffffff, 0), |
|---|
| .. | .. |
|---|
| 1365 | 1458 | |
|---|
| 1366 | 1459 | .enable = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 0), |
|---|
| 1367 | 1460 | .format = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x7, 4), |
|---|
| 1461 | + .interlace_read = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 8), |
|---|
| 1368 | 1462 | .rb_swap = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 12), |
|---|
| 1369 | 1463 | .dsp_info = VOP_REG(RK3366_LIT_WIN1_DSP_INFO, 0xffffffff, 0), |
|---|
| 1370 | 1464 | .dsp_st = VOP_REG(RK3366_LIT_WIN1_DSP_ST, 0xffffffff, 0), |
|---|
| .. | .. |
|---|
| 1420 | 1514 | }; |
|---|
| 1421 | 1515 | |
|---|
| 1422 | 1516 | static const struct vop_data rk3126_vop = { |
|---|
| 1517 | + .soc_id = 0x3126, |
|---|
| 1518 | + .vop_id = 0, |
|---|
| 1423 | 1519 | .version = VOP_VERSION(2, 4), |
|---|
| 1424 | 1520 | .max_input = {1920, 8192}, |
|---|
| 1425 | 1521 | .max_output = {1920, 1080}, |
|---|
| .. | .. |
|---|
| 1468 | 1564 | .dither_down_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 6), |
|---|
| 1469 | 1565 | .dither_up_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), |
|---|
| 1470 | 1566 | .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), |
|---|
| 1567 | + .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), |
|---|
| 1568 | + .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), |
|---|
| 1569 | + .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), |
|---|
| 1471 | 1570 | .dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5), |
|---|
| 1472 | 1571 | .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), |
|---|
| 1473 | 1572 | .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), |
|---|
| .. | .. |
|---|
| 1557 | 1656 | }; |
|---|
| 1558 | 1657 | |
|---|
| 1559 | 1658 | static const struct vop_data px30_vop_lit = { |
|---|
| 1659 | + .soc_id = 0x3326, |
|---|
| 1660 | + .vop_id = 1, |
|---|
| 1560 | 1661 | .version = VOP_VERSION(2, 5), |
|---|
| 1561 | 1662 | .max_input = {1920, 8192}, |
|---|
| 1562 | 1663 | .max_output = {1920, 1080}, |
|---|
| .. | .. |
|---|
| 1568 | 1669 | }; |
|---|
| 1569 | 1670 | |
|---|
| 1570 | 1671 | static const struct vop_data px30_vop_big = { |
|---|
| 1672 | + .soc_id = 0x3326, |
|---|
| 1673 | + .vop_id = 0, |
|---|
| 1571 | 1674 | .version = VOP_VERSION(2, 6), |
|---|
| 1572 | | - .feature = VOP_FEATURE_AFBDC, |
|---|
| 1573 | 1675 | .max_input = {1920, 8192}, |
|---|
| 1574 | 1676 | .max_output = {1920, 1080}, |
|---|
| 1575 | 1677 | .ctrl = &px30_ctrl_data, |
|---|
| .. | .. |
|---|
| 1602 | 1704 | .dither_down_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 6), |
|---|
| 1603 | 1705 | .dither_up_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), |
|---|
| 1604 | 1706 | .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), |
|---|
| 1707 | + .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), |
|---|
| 1708 | + .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), |
|---|
| 1709 | + .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), |
|---|
| 1605 | 1710 | .dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5), |
|---|
| 1606 | 1711 | .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), |
|---|
| 1607 | 1712 | .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), |
|---|
| .. | .. |
|---|
| 1665 | 1770 | }; |
|---|
| 1666 | 1771 | |
|---|
| 1667 | 1772 | static const struct vop_data rk3308_vop = { |
|---|
| 1773 | + .soc_id = 0x3308, |
|---|
| 1774 | + .vop_id = 0, |
|---|
| 1668 | 1775 | .version = VOP_VERSION(2, 7), |
|---|
| 1669 | 1776 | .max_input = {1920, 8192}, |
|---|
| 1670 | 1777 | .max_output = {1920, 1080}, |
|---|
| .. | .. |
|---|
| 1708 | 1815 | .dither_down_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 6), |
|---|
| 1709 | 1816 | .dither_up_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), |
|---|
| 1710 | 1817 | .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), |
|---|
| 1818 | + .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), |
|---|
| 1819 | + .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), |
|---|
| 1820 | + .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), |
|---|
| 1711 | 1821 | .yuv_clip = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 4), |
|---|
| 1712 | 1822 | .dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5), |
|---|
| 1713 | 1823 | .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), |
|---|
| .. | .. |
|---|
| 1763 | 1873 | }; |
|---|
| 1764 | 1874 | |
|---|
| 1765 | 1875 | static const struct vop_data rv1126_vop = { |
|---|
| 1876 | + .soc_id = 0x1126, |
|---|
| 1877 | + .vop_id = 0, |
|---|
| 1766 | 1878 | .version = VOP_VERSION(2, 0xb), |
|---|
| 1767 | 1879 | .max_input = {1920, 1920}, |
|---|
| 1768 | 1880 | .max_output = {1920, 1080}, |
|---|
| .. | .. |
|---|
| 1771 | 1883 | .grf_ctrl = &rv1126_grf_ctrl, |
|---|
| 1772 | 1884 | .win = rv1126_vop_win_data, |
|---|
| 1773 | 1885 | .win_size = ARRAY_SIZE(rv1126_vop_win_data), |
|---|
| 1886 | +}; |
|---|
| 1887 | + |
|---|
| 1888 | +static const struct vop_ctrl rv1106_ctrl_data = { |
|---|
| 1889 | + .standby = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 1), |
|---|
| 1890 | + .axi_outstanding_max_num = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1f, 16), |
|---|
| 1891 | + .axi_max_outstanding_en = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1, 12), |
|---|
| 1892 | + .htotal_pw = VOP_REG(RK3366_LIT_DSP_HTOTAL_HS_END, 0x0fff0fff, 0), |
|---|
| 1893 | + .hact_st_end = VOP_REG(RK3366_LIT_DSP_HACT_ST_END, 0x0fff0fff, 0), |
|---|
| 1894 | + .vtotal_pw = VOP_REG(RK3366_LIT_DSP_VTOTAL_VS_END, 0x0fff0fff, 0), |
|---|
| 1895 | + .vact_st_end = VOP_REG(RK3366_LIT_DSP_VACT_ST_END, 0x0fff0fff, 0), |
|---|
| 1896 | + .vact_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VACT_ST_END_F1, 0x0fff0fff, 0), |
|---|
| 1897 | + .vs_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VS_ST_END_F1, 0x0fff0fff, 0), |
|---|
| 1898 | + .dsp_interlace = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 0), |
|---|
| 1899 | + .auto_gate_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 0), |
|---|
| 1900 | + .overlay_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 4), |
|---|
| 1901 | + .core_dclk_div = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 13), |
|---|
| 1902 | + .dclk_ddr = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 14), |
|---|
| 1903 | + .rgb_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 0), |
|---|
| 1904 | + .rgb_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 1), |
|---|
| 1905 | + .dither_down_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 8), |
|---|
| 1906 | + .dither_down_sel = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 7), |
|---|
| 1907 | + .dither_down_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 6), |
|---|
| 1908 | + .dither_up_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), |
|---|
| 1909 | + .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), |
|---|
| 1910 | + .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), |
|---|
| 1911 | + .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), |
|---|
| 1912 | + .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), |
|---|
| 1913 | + .yuv_clip = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 4), |
|---|
| 1914 | + .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), |
|---|
| 1915 | + .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), |
|---|
| 1916 | + .dsp_outzero = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 3), |
|---|
| 1917 | + .out_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 16), |
|---|
| 1918 | + .dsp_background = VOP_REG(RK3366_LIT_DSP_BG, 0x00ffffff, 0), |
|---|
| 1919 | + .cfg_done = VOP_REG(RK3366_LIT_REG_CFG_DONE, 0x1, 0), |
|---|
| 1920 | + |
|---|
| 1921 | + .bcsh_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 0), |
|---|
| 1922 | + .bcsh_r2y_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 1), |
|---|
| 1923 | + .bcsh_out_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 2), |
|---|
| 1924 | + .bcsh_y2r_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 4), |
|---|
| 1925 | + .bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6), |
|---|
| 1926 | + .bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7), |
|---|
| 1927 | + .bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0), |
|---|
| 1928 | + .bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 0), |
|---|
| 1929 | + .bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 8), |
|---|
| 1930 | + .bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3ff, 20), |
|---|
| 1931 | + .bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 0), |
|---|
| 1932 | + .bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 16), |
|---|
| 1933 | + |
|---|
| 1934 | + .mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0), |
|---|
| 1935 | + .mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6), |
|---|
| 1936 | + .mcu_cs_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 10), |
|---|
| 1937 | + .mcu_rw_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 16), |
|---|
| 1938 | + .mcu_rw_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 20), |
|---|
| 1939 | + .mcu_clk_sel = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 26), |
|---|
| 1940 | + .mcu_hold_mode = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 27), |
|---|
| 1941 | + .mcu_frame_st = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 28), |
|---|
| 1942 | + .mcu_rs = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 29), |
|---|
| 1943 | + .mcu_bypass = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 30), |
|---|
| 1944 | + .mcu_type = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 31), |
|---|
| 1945 | + .mcu_rw_bypass_port = VOP_REG(RK3366_LIT_MCU_RW_BYPASS_PORT, |
|---|
| 1946 | + 0xffffffff, 0), |
|---|
| 1947 | + .bt1120_yc_swap = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 30), |
|---|
| 1948 | + .bt1120_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 31), |
|---|
| 1949 | + .bt656_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 6), |
|---|
| 1950 | +}; |
|---|
| 1951 | + |
|---|
| 1952 | +static const struct vop_win_data rv1106_vop_win_data[] = { |
|---|
| 1953 | + { .phy = NULL }, |
|---|
| 1954 | + { .base = 0x00, .phy = &rk3366_lit_win1_data, |
|---|
| 1955 | + .type = DRM_PLANE_TYPE_PRIMARY }, |
|---|
| 1956 | +}; |
|---|
| 1957 | + |
|---|
| 1958 | +static const struct vop_grf_ctrl rv1106_grf_ctrl = { |
|---|
| 1959 | + .grf_dclk_inv = VOP_REG(RV1106_VENC_GRF_VOP_IO_WRAPPER, 0x1, 2), |
|---|
| 1960 | +}; |
|---|
| 1961 | + |
|---|
| 1962 | +static const struct vop_data rv1106_vop = { |
|---|
| 1963 | + .soc_id = 0x1106, |
|---|
| 1964 | + .vop_id = 0, |
|---|
| 1965 | + .version = VOP_VERSION(2, 0xc), |
|---|
| 1966 | + .max_input = {1280, 1280}, |
|---|
| 1967 | + .max_output = {1280, 1280}, |
|---|
| 1968 | + .ctrl = &rv1106_ctrl_data, |
|---|
| 1969 | + .intr = &rk3366_lit_intr, |
|---|
| 1970 | + .grf_ctrl = &rv1106_grf_ctrl, |
|---|
| 1971 | + .win = rv1106_vop_win_data, |
|---|
| 1972 | + .win_size = ARRAY_SIZE(rv1106_vop_win_data), |
|---|
| 1774 | 1973 | }; |
|---|
| 1775 | 1974 | |
|---|
| 1776 | 1975 | static const struct of_device_id vop_driver_dt_match[] = { |
|---|
| .. | .. |
|---|
| 1796 | 1995 | { .compatible = "rockchip,rk3308-vop", |
|---|
| 1797 | 1996 | .data = &rk3308_vop }, |
|---|
| 1798 | 1997 | #endif |
|---|
| 1998 | +#if IS_ENABLED(CONFIG_CPU_RV1106) |
|---|
| 1999 | + { .compatible = "rockchip,rv1106-vop", |
|---|
| 2000 | + .data = &rv1106_vop }, |
|---|
| 2001 | +#endif |
|---|
| 1799 | 2002 | #if IS_ENABLED(CONFIG_CPU_RV1126) |
|---|
| 1800 | 2003 | { .compatible = "rockchip,rv1126-vop", |
|---|
| 1801 | 2004 | .data = &rv1126_vop }, |
|---|