Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/panel: ilitek-ili9881d: Add support for Wanchanglong W552946AAA panel

W552946AAA is a panel by Wanchanglong. This panel utilizes the
Ilitek ILI9881D controller.

W552946AAA is similar to W552946ABA, but the W552946AAA only
uses 2 lanes.

Tested on rk3506g-evb1-v10.

Signed-off-by: Chaoyi Chen <chaoyi.chen@rock-chips.com>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patch.msgid.link/20251106020632.92-6-kernel@airkyi.com

authored by

Chaoyi Chen and committed by
Neil Armstrong
89b34ebe 15e794bc

+225
+225
drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
··· 820 820 ILI9881C_COMMAND_INSTR(0xd3, 0x39), 821 821 }; 822 822 823 + static const struct ili9881c_instr w552946aaa_init[] = { 824 + ILI9881C_SWITCH_PAGE_INSTR(3), 825 + ILI9881C_COMMAND_INSTR(0x01, 0x00), 826 + ILI9881C_COMMAND_INSTR(0x02, 0x00), 827 + ILI9881C_COMMAND_INSTR(0x03, 0x53), 828 + ILI9881C_COMMAND_INSTR(0x04, 0x53), 829 + ILI9881C_COMMAND_INSTR(0x05, 0x13), 830 + ILI9881C_COMMAND_INSTR(0x06, 0x04), 831 + ILI9881C_COMMAND_INSTR(0x07, 0x02), 832 + ILI9881C_COMMAND_INSTR(0x08, 0x02), 833 + ILI9881C_COMMAND_INSTR(0x09, 0x00), 834 + ILI9881C_COMMAND_INSTR(0x0a, 0x00), 835 + ILI9881C_COMMAND_INSTR(0x0b, 0x00), 836 + ILI9881C_COMMAND_INSTR(0x0c, 0x00), 837 + ILI9881C_COMMAND_INSTR(0x0d, 0x00), 838 + ILI9881C_COMMAND_INSTR(0x0e, 0x00), 839 + ILI9881C_COMMAND_INSTR(0x0f, 0x00), 840 + ILI9881C_COMMAND_INSTR(0x10, 0x00), 841 + ILI9881C_COMMAND_INSTR(0x11, 0x00), 842 + ILI9881C_COMMAND_INSTR(0x12, 0x00), 843 + ILI9881C_COMMAND_INSTR(0x13, 0x00), 844 + ILI9881C_COMMAND_INSTR(0x14, 0x00), 845 + ILI9881C_COMMAND_INSTR(0x15, 0x08), 846 + ILI9881C_COMMAND_INSTR(0x16, 0x10), 847 + ILI9881C_COMMAND_INSTR(0x17, 0x00), 848 + ILI9881C_COMMAND_INSTR(0x18, 0x08), 849 + ILI9881C_COMMAND_INSTR(0x19, 0x00), 850 + ILI9881C_COMMAND_INSTR(0x1a, 0x00), 851 + ILI9881C_COMMAND_INSTR(0x1b, 0x00), 852 + ILI9881C_COMMAND_INSTR(0x1c, 0x00), 853 + ILI9881C_COMMAND_INSTR(0x1d, 0x00), 854 + ILI9881C_COMMAND_INSTR(0x1e, 0xc0), 855 + ILI9881C_COMMAND_INSTR(0x1f, 0x80), 856 + ILI9881C_COMMAND_INSTR(0x20, 0x02), 857 + ILI9881C_COMMAND_INSTR(0x21, 0x09), 858 + ILI9881C_COMMAND_INSTR(0x22, 0x00), 859 + ILI9881C_COMMAND_INSTR(0x23, 0x00), 860 + ILI9881C_COMMAND_INSTR(0x24, 0x00), 861 + ILI9881C_COMMAND_INSTR(0x25, 0x00), 862 + ILI9881C_COMMAND_INSTR(0x26, 0x00), 863 + ILI9881C_COMMAND_INSTR(0x27, 0x00), 864 + ILI9881C_COMMAND_INSTR(0x28, 0x55), 865 + ILI9881C_COMMAND_INSTR(0x29, 0x03), 866 + ILI9881C_COMMAND_INSTR(0x2a, 0x00), 867 + ILI9881C_COMMAND_INSTR(0x2b, 0x00), 868 + ILI9881C_COMMAND_INSTR(0x2c, 0x00), 869 + ILI9881C_COMMAND_INSTR(0x2d, 0x00), 870 + ILI9881C_COMMAND_INSTR(0x2e, 0x00), 871 + ILI9881C_COMMAND_INSTR(0x2f, 0x00), 872 + ILI9881C_COMMAND_INSTR(0x30, 0x00), 873 + ILI9881C_COMMAND_INSTR(0x31, 0x00), 874 + ILI9881C_COMMAND_INSTR(0x32, 0x00), 875 + ILI9881C_COMMAND_INSTR(0x33, 0x00), 876 + ILI9881C_COMMAND_INSTR(0x34, 0x04), 877 + ILI9881C_COMMAND_INSTR(0x35, 0x05), 878 + ILI9881C_COMMAND_INSTR(0x36, 0x05), 879 + ILI9881C_COMMAND_INSTR(0x37, 0x00), 880 + ILI9881C_COMMAND_INSTR(0x38, 0x3c), 881 + ILI9881C_COMMAND_INSTR(0x39, 0x35), 882 + ILI9881C_COMMAND_INSTR(0x3a, 0x00), 883 + ILI9881C_COMMAND_INSTR(0x3b, 0x40), 884 + ILI9881C_COMMAND_INSTR(0x3c, 0x00), 885 + ILI9881C_COMMAND_INSTR(0x3d, 0x00), 886 + ILI9881C_COMMAND_INSTR(0x3e, 0x00), 887 + ILI9881C_COMMAND_INSTR(0x3f, 0x00), 888 + ILI9881C_COMMAND_INSTR(0x40, 0x00), 889 + ILI9881C_COMMAND_INSTR(0x41, 0x88), 890 + ILI9881C_COMMAND_INSTR(0x42, 0x00), 891 + ILI9881C_COMMAND_INSTR(0x43, 0x00), 892 + ILI9881C_COMMAND_INSTR(0x44, 0x1f), 893 + ILI9881C_COMMAND_INSTR(0x50, 0x01), 894 + ILI9881C_COMMAND_INSTR(0x51, 0x23), 895 + ILI9881C_COMMAND_INSTR(0x52, 0x45), 896 + ILI9881C_COMMAND_INSTR(0x53, 0x67), 897 + ILI9881C_COMMAND_INSTR(0x54, 0x89), 898 + ILI9881C_COMMAND_INSTR(0x55, 0xab), 899 + ILI9881C_COMMAND_INSTR(0x56, 0x01), 900 + ILI9881C_COMMAND_INSTR(0x57, 0x23), 901 + ILI9881C_COMMAND_INSTR(0x58, 0x45), 902 + ILI9881C_COMMAND_INSTR(0x59, 0x67), 903 + ILI9881C_COMMAND_INSTR(0x5a, 0x89), 904 + ILI9881C_COMMAND_INSTR(0x5b, 0xab), 905 + ILI9881C_COMMAND_INSTR(0x5c, 0xcd), 906 + ILI9881C_COMMAND_INSTR(0x5d, 0xef), 907 + ILI9881C_COMMAND_INSTR(0x5e, 0x03), 908 + ILI9881C_COMMAND_INSTR(0x5f, 0x14), 909 + ILI9881C_COMMAND_INSTR(0x60, 0x15), 910 + ILI9881C_COMMAND_INSTR(0x61, 0x0c), 911 + ILI9881C_COMMAND_INSTR(0x62, 0x0d), 912 + ILI9881C_COMMAND_INSTR(0x63, 0x0e), 913 + ILI9881C_COMMAND_INSTR(0x64, 0x0f), 914 + ILI9881C_COMMAND_INSTR(0x65, 0x10), 915 + ILI9881C_COMMAND_INSTR(0x66, 0x11), 916 + ILI9881C_COMMAND_INSTR(0x67, 0x08), 917 + ILI9881C_COMMAND_INSTR(0x68, 0x02), 918 + ILI9881C_COMMAND_INSTR(0x69, 0x0a), 919 + ILI9881C_COMMAND_INSTR(0x6a, 0x02), 920 + ILI9881C_COMMAND_INSTR(0x6b, 0x02), 921 + ILI9881C_COMMAND_INSTR(0x6c, 0x02), 922 + ILI9881C_COMMAND_INSTR(0x6d, 0x02), 923 + ILI9881C_COMMAND_INSTR(0x6e, 0x02), 924 + ILI9881C_COMMAND_INSTR(0x6f, 0x02), 925 + ILI9881C_COMMAND_INSTR(0x70, 0x02), 926 + ILI9881C_COMMAND_INSTR(0x71, 0x02), 927 + ILI9881C_COMMAND_INSTR(0x72, 0x06), 928 + ILI9881C_COMMAND_INSTR(0x73, 0x02), 929 + ILI9881C_COMMAND_INSTR(0x74, 0x02), 930 + ILI9881C_COMMAND_INSTR(0x75, 0x14), 931 + ILI9881C_COMMAND_INSTR(0x76, 0x15), 932 + ILI9881C_COMMAND_INSTR(0x77, 0x0f), 933 + ILI9881C_COMMAND_INSTR(0x78, 0x0e), 934 + ILI9881C_COMMAND_INSTR(0x79, 0x0d), 935 + ILI9881C_COMMAND_INSTR(0x7a, 0x0c), 936 + ILI9881C_COMMAND_INSTR(0x7b, 0x11), 937 + ILI9881C_COMMAND_INSTR(0x7c, 0x10), 938 + ILI9881C_COMMAND_INSTR(0x7d, 0x06), 939 + ILI9881C_COMMAND_INSTR(0x7e, 0x02), 940 + ILI9881C_COMMAND_INSTR(0x7f, 0x0a), 941 + ILI9881C_COMMAND_INSTR(0x80, 0x02), 942 + ILI9881C_COMMAND_INSTR(0x81, 0x02), 943 + ILI9881C_COMMAND_INSTR(0x82, 0x02), 944 + ILI9881C_COMMAND_INSTR(0x83, 0x02), 945 + ILI9881C_COMMAND_INSTR(0x84, 0x02), 946 + ILI9881C_COMMAND_INSTR(0x85, 0x02), 947 + ILI9881C_COMMAND_INSTR(0x86, 0x02), 948 + ILI9881C_COMMAND_INSTR(0x87, 0x02), 949 + ILI9881C_COMMAND_INSTR(0x88, 0x08), 950 + ILI9881C_COMMAND_INSTR(0x89, 0x02), 951 + ILI9881C_COMMAND_INSTR(0x8a, 0x02), 952 + ILI9881C_SWITCH_PAGE_INSTR(4), 953 + ILI9881C_COMMAND_INSTR(0x00, 0x80), 954 + ILI9881C_COMMAND_INSTR(0x70, 0x00), 955 + ILI9881C_COMMAND_INSTR(0x71, 0x00), 956 + ILI9881C_COMMAND_INSTR(0x66, 0xfe), 957 + ILI9881C_COMMAND_INSTR(0x82, 0x15), 958 + ILI9881C_COMMAND_INSTR(0x84, 0x15), 959 + ILI9881C_COMMAND_INSTR(0x85, 0x15), 960 + ILI9881C_COMMAND_INSTR(0x3a, 0x24), 961 + ILI9881C_COMMAND_INSTR(0x32, 0xac), 962 + ILI9881C_COMMAND_INSTR(0x8c, 0x80), 963 + ILI9881C_COMMAND_INSTR(0x3c, 0xf5), 964 + ILI9881C_COMMAND_INSTR(0x88, 0x33), 965 + ILI9881C_SWITCH_PAGE_INSTR(1), 966 + ILI9881C_COMMAND_INSTR(0x22, 0x0a), 967 + ILI9881C_COMMAND_INSTR(0x31, 0x00), 968 + ILI9881C_COMMAND_INSTR(0x53, 0x78), 969 + ILI9881C_COMMAND_INSTR(0x55, 0x7b), 970 + ILI9881C_COMMAND_INSTR(0x60, 0x20), 971 + ILI9881C_COMMAND_INSTR(0x61, 0x00), 972 + ILI9881C_COMMAND_INSTR(0x62, 0x0d), 973 + ILI9881C_COMMAND_INSTR(0x63, 0x00), 974 + ILI9881C_COMMAND_INSTR(0xa0, 0x00), 975 + ILI9881C_COMMAND_INSTR(0xa1, 0x10), 976 + ILI9881C_COMMAND_INSTR(0xa2, 0x1c), 977 + ILI9881C_COMMAND_INSTR(0xa3, 0x13), 978 + ILI9881C_COMMAND_INSTR(0xa4, 0x15), 979 + ILI9881C_COMMAND_INSTR(0xa5, 0x26), 980 + ILI9881C_COMMAND_INSTR(0xa6, 0x1a), 981 + ILI9881C_COMMAND_INSTR(0xa7, 0x1d), 982 + ILI9881C_COMMAND_INSTR(0xa8, 0x67), 983 + ILI9881C_COMMAND_INSTR(0xa9, 0x1c), 984 + ILI9881C_COMMAND_INSTR(0xaa, 0x29), 985 + ILI9881C_COMMAND_INSTR(0xab, 0x5b), 986 + ILI9881C_COMMAND_INSTR(0xac, 0x26), 987 + ILI9881C_COMMAND_INSTR(0xad, 0x28), 988 + ILI9881C_COMMAND_INSTR(0xae, 0x5c), 989 + ILI9881C_COMMAND_INSTR(0xaf, 0x30), 990 + ILI9881C_COMMAND_INSTR(0xb0, 0x31), 991 + ILI9881C_COMMAND_INSTR(0xb1, 0x32), 992 + ILI9881C_COMMAND_INSTR(0xb2, 0x00), 993 + ILI9881C_COMMAND_INSTR(0xb1, 0x2e), 994 + ILI9881C_COMMAND_INSTR(0xb2, 0x32), 995 + ILI9881C_COMMAND_INSTR(0xb3, 0x00), 996 + ILI9881C_COMMAND_INSTR(0xb6, 0x02), 997 + ILI9881C_COMMAND_INSTR(0xb7, 0x03), 998 + ILI9881C_COMMAND_INSTR(0xc0, 0x00), 999 + ILI9881C_COMMAND_INSTR(0xc1, 0x10), 1000 + ILI9881C_COMMAND_INSTR(0xc2, 0x1c), 1001 + ILI9881C_COMMAND_INSTR(0xc3, 0x13), 1002 + ILI9881C_COMMAND_INSTR(0xc4, 0x15), 1003 + ILI9881C_COMMAND_INSTR(0xc5, 0x26), 1004 + ILI9881C_COMMAND_INSTR(0xc6, 0x1a), 1005 + ILI9881C_COMMAND_INSTR(0xc7, 0x1d), 1006 + ILI9881C_COMMAND_INSTR(0xc8, 0x67), 1007 + ILI9881C_COMMAND_INSTR(0xc9, 0x1c), 1008 + ILI9881C_COMMAND_INSTR(0xca, 0x29), 1009 + ILI9881C_COMMAND_INSTR(0xcb, 0x5b), 1010 + ILI9881C_COMMAND_INSTR(0xcc, 0x26), 1011 + ILI9881C_COMMAND_INSTR(0xcd, 0x28), 1012 + ILI9881C_COMMAND_INSTR(0xce, 0x5c), 1013 + ILI9881C_COMMAND_INSTR(0xcf, 0x30), 1014 + ILI9881C_COMMAND_INSTR(0xd0, 0x31), 1015 + ILI9881C_COMMAND_INSTR(0xd1, 0x2e), 1016 + ILI9881C_COMMAND_INSTR(0xd2, 0x32), 1017 + ILI9881C_COMMAND_INSTR(0xd3, 0x00), 1018 + ILI9881C_SWITCH_PAGE_INSTR(0), 1019 + }; 1020 + 823 1021 static const struct ili9881c_instr w552946ab_init[] = { 824 1022 ILI9881C_SWITCH_PAGE_INSTR(3), 825 1023 ILI9881C_COMMAND_INSTR(0x01, 0x00), ··· 2158 1960 .height_mm = 110, 2159 1961 }; 2160 1962 1963 + static const struct drm_display_mode w552946aaa_default_mode = { 1964 + .clock = 65000, 1965 + 1966 + .hdisplay = 720, 1967 + .hsync_start = 720 + 52, 1968 + .hsync_end = 720 + 52 + 8, 1969 + .htotal = 720 + 52 + 8 + 48, 1970 + 1971 + .vdisplay = 1280, 1972 + .vsync_start = 1280 + 16, 1973 + .vsync_end = 1280 + 16 + 6, 1974 + .vtotal = 1280 + 16 + 6 + 15, 1975 + 1976 + .width_mm = 68, 1977 + .height_mm = 121, 1978 + }; 1979 + 2161 1980 static const struct drm_display_mode w552946aba_default_mode = { 2162 1981 .clock = 64000, 2163 1982 ··· 2403 2188 .default_address_mode = 0x03, 2404 2189 }; 2405 2190 2191 + static const struct ili9881c_desc w552946aaa_desc = { 2192 + .init = w552946aaa_init, 2193 + .init_length = ARRAY_SIZE(w552946aaa_init), 2194 + .mode = &w552946aaa_default_mode, 2195 + .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | 2196 + MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET, 2197 + .lanes = 2, 2198 + }; 2199 + 2406 2200 static const struct ili9881c_desc w552946aba_desc = { 2407 2201 .init = w552946ab_init, 2408 2202 .init_length = ARRAY_SIZE(w552946ab_init), ··· 2460 2236 { .compatible = "feixin,k101-im2byl02", .data = &k101_im2byl02_desc }, 2461 2237 { .compatible = "startek,kd050hdfia020", .data = &kd050hdfia020_desc }, 2462 2238 { .compatible = "tdo,tl050hdv35", .data = &tl050hdv35_desc }, 2239 + { .compatible = "wanchanglong,w552946aaa", .data = &w552946aaa_desc }, 2463 2240 { .compatible = "wanchanglong,w552946aba", .data = &w552946aba_desc }, 2464 2241 { .compatible = "ampire,am8001280g", .data = &am8001280g_desc }, 2465 2242 { .compatible = "raspberrypi,dsi-5inch", &rpi_5inch_desc },