forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
....@@ -37,7 +37,6 @@
3737 #include "rockchip_drm_logo.h"
3838
3939 #include "../drm_crtc_internal.h"
40
-#include "../drivers/clk/rockchip/clk.h"
4140
4241 #define DRIVER_NAME "rockchip"
4342 #define DRIVER_DESC "RockChip Soc DRM"
....@@ -125,6 +124,7 @@
125124 hbp = mode->htotal - mode->hsync_end;
126125
127126 mode->clock *= 2;
127
+ mode->crtc_clock *= 2;
128128 mode->hdisplay = hactive * 2;
129129 mode->hsync_start = mode->hdisplay + hfp * 2;
130130 mode->hsync_end = mode->hsync_start + hsync * 2;
....@@ -143,6 +143,7 @@
143143 hbp = mode->htotal - mode->hsync_end;
144144
145145 mode->clock /= 2;
146
+ mode->crtc_clock /= 2;
146147 mode->hdisplay = hactive / 2;
147148 mode->hsync_start = mode->hdisplay + hfp / 2;
148149 mode->hsync_end = mode->hsync_start + hsync / 2;
....@@ -197,6 +198,30 @@
197198 return 0;
198199 }
199200 EXPORT_SYMBOL(rockchip_drm_get_bpp);
201
+
202
+uint32_t rockchip_drm_get_cycles_per_pixel(uint32_t bus_format)
203
+{
204
+ switch (bus_format) {
205
+ case MEDIA_BUS_FMT_RGB565_1X16:
206
+ case MEDIA_BUS_FMT_RGB666_1X18:
207
+ case MEDIA_BUS_FMT_RGB888_1X24:
208
+ case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
209
+ return 1;
210
+ case MEDIA_BUS_FMT_RGB565_2X8_LE:
211
+ case MEDIA_BUS_FMT_BGR565_2X8_LE:
212
+ return 2;
213
+ case MEDIA_BUS_FMT_RGB666_3X6:
214
+ case MEDIA_BUS_FMT_RGB888_3X8:
215
+ case MEDIA_BUS_FMT_BGR888_3X8:
216
+ return 3;
217
+ case MEDIA_BUS_FMT_RGB888_DUMMY_4X8:
218
+ case MEDIA_BUS_FMT_BGR888_DUMMY_4X8:
219
+ return 4;
220
+ default:
221
+ return 1;
222
+ }
223
+}
224
+EXPORT_SYMBOL(rockchip_drm_get_cycles_per_pixel);
200225
201226 /**
202227 * rockchip_drm_of_find_possible_crtcs - find the possible CRTCs for an active
....@@ -1289,6 +1314,12 @@
12891314 }
12901315 #endif
12911316
1317
+static const struct drm_prop_enum_list split_area[] = {
1318
+ { ROCKCHIP_DRM_SPLIT_UNSET, "UNSET" },
1319
+ { ROCKCHIP_DRM_SPLIT_LEFT_SIDE, "LEFT" },
1320
+ { ROCKCHIP_DRM_SPLIT_RIGHT_SIDE, "RIGHT" },
1321
+};
1322
+
12921323 static int rockchip_drm_create_properties(struct drm_device *dev)
12931324 {
12941325 struct drm_property *prop;
....@@ -1324,6 +1355,11 @@
13241355 return -ENOMEM;
13251356 private->connector_id_prop = prop;
13261357
1358
+ prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM, "SPLIT_AREA",
1359
+ split_area,
1360
+ ARRAY_SIZE(split_area));
1361
+ private->split_area_prop = prop;
1362
+
13271363 prop = drm_property_create_object(dev,
13281364 DRM_MODE_PROP_ATOMIC | DRM_MODE_PROP_IMMUTABLE,
13291365 "SOC_ID", DRM_MODE_OBJECT_CRTC);
....@@ -1337,6 +1373,9 @@
13371373 private->aclk_prop = drm_property_create_range(dev, 0, "ACLK", 0, UINT_MAX);
13381374 private->bg_prop = drm_property_create_range(dev, 0, "BACKGROUND", 0, UINT_MAX);
13391375 private->line_flag_prop = drm_property_create_range(dev, 0, "LINE_FLAG1", 0, UINT_MAX);
1376
+ private->cubic_lut_prop = drm_property_create(dev, DRM_MODE_PROP_BLOB, "CUBIC_LUT", 0);
1377
+ private->cubic_lut_size_prop = drm_property_create_range(dev, DRM_MODE_PROP_IMMUTABLE,
1378
+ "CUBIC_LUT_SIZE", 0, UINT_MAX);
13401379
13411380 return drm_mode_create_tv_properties(dev, 0, NULL);
13421381 }
....@@ -1543,8 +1582,6 @@
15431582 ret = drm_dev_register(drm_dev, 0);
15441583 if (ret)
15451584 goto err_kms_helper_poll_fini;
1546
-
1547
- rockchip_clk_unprotect();
15481585
15491586 return 0;
15501587 err_kms_helper_poll_fini: