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

Configure Feed

Select the types of activity you want to include in your feed.

at master 150 lines 3.3 kB view raw
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (C) 2025 Icenowy Zheng <uwu@icenowy.me> 4 */ 5 6#include <linux/errno.h> 7 8#include <drm/drm_fourcc.h> 9 10#include "vs_dc_top_regs.h" 11#include "vs_hwdb.h" 12 13static const u32 vs_formats_array_no_yuv444[] = { 14 DRM_FORMAT_XRGB4444, 15 DRM_FORMAT_XBGR4444, 16 DRM_FORMAT_RGBX4444, 17 DRM_FORMAT_BGRX4444, 18 DRM_FORMAT_ARGB4444, 19 DRM_FORMAT_ABGR4444, 20 DRM_FORMAT_RGBA4444, 21 DRM_FORMAT_BGRA4444, 22 DRM_FORMAT_XRGB1555, 23 DRM_FORMAT_XBGR1555, 24 DRM_FORMAT_RGBX5551, 25 DRM_FORMAT_BGRX5551, 26 DRM_FORMAT_ARGB1555, 27 DRM_FORMAT_ABGR1555, 28 DRM_FORMAT_RGBA5551, 29 DRM_FORMAT_BGRA5551, 30 DRM_FORMAT_RGB565, 31 DRM_FORMAT_BGR565, 32 DRM_FORMAT_XRGB8888, 33 DRM_FORMAT_XBGR8888, 34 DRM_FORMAT_RGBX8888, 35 DRM_FORMAT_BGRX8888, 36 DRM_FORMAT_ARGB8888, 37 DRM_FORMAT_ABGR8888, 38 DRM_FORMAT_RGBA8888, 39 DRM_FORMAT_BGRA8888, 40 DRM_FORMAT_ARGB2101010, 41 DRM_FORMAT_ABGR2101010, 42 DRM_FORMAT_RGBA1010102, 43 DRM_FORMAT_BGRA1010102, 44 /* TODO: non-RGB formats */ 45}; 46 47static const u32 vs_formats_array_with_yuv444[] = { 48 DRM_FORMAT_XRGB4444, 49 DRM_FORMAT_XBGR4444, 50 DRM_FORMAT_RGBX4444, 51 DRM_FORMAT_BGRX4444, 52 DRM_FORMAT_ARGB4444, 53 DRM_FORMAT_ABGR4444, 54 DRM_FORMAT_RGBA4444, 55 DRM_FORMAT_BGRA4444, 56 DRM_FORMAT_XRGB1555, 57 DRM_FORMAT_XBGR1555, 58 DRM_FORMAT_RGBX5551, 59 DRM_FORMAT_BGRX5551, 60 DRM_FORMAT_ARGB1555, 61 DRM_FORMAT_ABGR1555, 62 DRM_FORMAT_RGBA5551, 63 DRM_FORMAT_BGRA5551, 64 DRM_FORMAT_RGB565, 65 DRM_FORMAT_BGR565, 66 DRM_FORMAT_XRGB8888, 67 DRM_FORMAT_XBGR8888, 68 DRM_FORMAT_RGBX8888, 69 DRM_FORMAT_BGRX8888, 70 DRM_FORMAT_ARGB8888, 71 DRM_FORMAT_ABGR8888, 72 DRM_FORMAT_RGBA8888, 73 DRM_FORMAT_BGRA8888, 74 DRM_FORMAT_ARGB2101010, 75 DRM_FORMAT_ABGR2101010, 76 DRM_FORMAT_RGBA1010102, 77 DRM_FORMAT_BGRA1010102, 78 /* TODO: non-RGB formats */ 79}; 80 81static const struct vs_formats vs_formats_no_yuv444 = { 82 .array = vs_formats_array_no_yuv444, 83 .num = ARRAY_SIZE(vs_formats_array_no_yuv444) 84}; 85 86static const struct vs_formats vs_formats_with_yuv444 = { 87 .array = vs_formats_array_with_yuv444, 88 .num = ARRAY_SIZE(vs_formats_array_with_yuv444) 89}; 90 91static struct vs_chip_identity vs_chip_identities[] = { 92 { 93 .model = 0x8200, 94 .revision = 0x5720, 95 .customer_id = ~0U, 96 97 .display_count = 2, 98 .formats = &vs_formats_no_yuv444, 99 }, 100 { 101 .model = 0x8200, 102 .revision = 0x5721, 103 .customer_id = 0x30B, 104 105 .display_count = 2, 106 .formats = &vs_formats_no_yuv444, 107 }, 108 { 109 .model = 0x8200, 110 .revision = 0x5720, 111 .customer_id = 0x310, 112 113 .display_count = 2, 114 .formats = &vs_formats_with_yuv444, 115 }, 116 { 117 .model = 0x8200, 118 .revision = 0x5720, 119 .customer_id = 0x311, 120 121 .display_count = 2, 122 .formats = &vs_formats_no_yuv444, 123 }, 124}; 125 126int vs_fill_chip_identity(struct regmap *regs, 127 struct vs_chip_identity *ident) 128{ 129 u32 model; 130 u32 revision; 131 u32 customer_id; 132 int i; 133 134 regmap_read(regs, VSDC_TOP_CHIP_MODEL, &model); 135 regmap_read(regs, VSDC_TOP_CHIP_REV, &revision); 136 regmap_read(regs, VSDC_TOP_CHIP_CUSTOMER_ID, &customer_id); 137 138 for (i = 0; i < ARRAY_SIZE(vs_chip_identities); i++) { 139 if (vs_chip_identities[i].model == model && 140 vs_chip_identities[i].revision == revision && 141 (vs_chip_identities[i].customer_id == customer_id || 142 vs_chip_identities[i].customer_id == ~0U)) { 143 memcpy(ident, &vs_chip_identities[i], sizeof(*ident)); 144 ident->customer_id = customer_id; 145 return 0; 146 } 147 } 148 149 return -EINVAL; 150}