| .. | .. |
|---|
| 125 | 125 | hbp = mode->htotal - mode->hsync_end; |
|---|
| 126 | 126 | |
|---|
| 127 | 127 | mode->clock *= 2; |
|---|
| 128 | + mode->crtc_clock *= 2; |
|---|
| 128 | 129 | mode->hdisplay = hactive * 2; |
|---|
| 129 | 130 | mode->hsync_start = mode->hdisplay + hfp * 2; |
|---|
| 130 | 131 | mode->hsync_end = mode->hsync_start + hsync * 2; |
|---|
| .. | .. |
|---|
| 143 | 144 | hbp = mode->htotal - mode->hsync_end; |
|---|
| 144 | 145 | |
|---|
| 145 | 146 | mode->clock /= 2; |
|---|
| 147 | + mode->crtc_clock /= 2; |
|---|
| 146 | 148 | mode->hdisplay = hactive / 2; |
|---|
| 147 | 149 | mode->hsync_start = mode->hdisplay + hfp / 2; |
|---|
| 148 | 150 | mode->hsync_end = mode->hsync_start + hsync / 2; |
|---|
| .. | .. |
|---|
| 197 | 199 | return 0; |
|---|
| 198 | 200 | } |
|---|
| 199 | 201 | EXPORT_SYMBOL(rockchip_drm_get_bpp); |
|---|
| 202 | + |
|---|
| 203 | +uint32_t rockchip_drm_get_cycles_per_pixel(uint32_t bus_format) |
|---|
| 204 | +{ |
|---|
| 205 | + switch (bus_format) { |
|---|
| 206 | + case MEDIA_BUS_FMT_RGB565_1X16: |
|---|
| 207 | + case MEDIA_BUS_FMT_RGB666_1X18: |
|---|
| 208 | + case MEDIA_BUS_FMT_RGB888_1X24: |
|---|
| 209 | + case MEDIA_BUS_FMT_RGB666_1X24_CPADHI: |
|---|
| 210 | + return 1; |
|---|
| 211 | + case MEDIA_BUS_FMT_RGB565_2X8_LE: |
|---|
| 212 | + case MEDIA_BUS_FMT_BGR565_2X8_LE: |
|---|
| 213 | + return 2; |
|---|
| 214 | + case MEDIA_BUS_FMT_RGB666_3X6: |
|---|
| 215 | + case MEDIA_BUS_FMT_RGB888_3X8: |
|---|
| 216 | + case MEDIA_BUS_FMT_BGR888_3X8: |
|---|
| 217 | + return 3; |
|---|
| 218 | + case MEDIA_BUS_FMT_RGB888_DUMMY_4X8: |
|---|
| 219 | + case MEDIA_BUS_FMT_BGR888_DUMMY_4X8: |
|---|
| 220 | + return 4; |
|---|
| 221 | + default: |
|---|
| 222 | + return 1; |
|---|
| 223 | + } |
|---|
| 224 | +} |
|---|
| 225 | +EXPORT_SYMBOL(rockchip_drm_get_cycles_per_pixel); |
|---|
| 200 | 226 | |
|---|
| 201 | 227 | /** |
|---|
| 202 | 228 | * rockchip_drm_of_find_possible_crtcs - find the possible CRTCs for an active |
|---|
| .. | .. |
|---|
| 1289 | 1315 | } |
|---|
| 1290 | 1316 | #endif |
|---|
| 1291 | 1317 | |
|---|
| 1318 | +static const struct drm_prop_enum_list split_area[] = { |
|---|
| 1319 | + { ROCKCHIP_DRM_SPLIT_UNSET, "UNSET" }, |
|---|
| 1320 | + { ROCKCHIP_DRM_SPLIT_LEFT_SIDE, "LEFT" }, |
|---|
| 1321 | + { ROCKCHIP_DRM_SPLIT_RIGHT_SIDE, "RIGHT" }, |
|---|
| 1322 | +}; |
|---|
| 1323 | + |
|---|
| 1292 | 1324 | static int rockchip_drm_create_properties(struct drm_device *dev) |
|---|
| 1293 | 1325 | { |
|---|
| 1294 | 1326 | struct drm_property *prop; |
|---|
| .. | .. |
|---|
| 1324 | 1356 | return -ENOMEM; |
|---|
| 1325 | 1357 | private->connector_id_prop = prop; |
|---|
| 1326 | 1358 | |
|---|
| 1359 | + prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM, "SPLIT_AREA", |
|---|
| 1360 | + split_area, |
|---|
| 1361 | + ARRAY_SIZE(split_area)); |
|---|
| 1362 | + private->split_area_prop = prop; |
|---|
| 1363 | + |
|---|
| 1327 | 1364 | prop = drm_property_create_object(dev, |
|---|
| 1328 | 1365 | DRM_MODE_PROP_ATOMIC | DRM_MODE_PROP_IMMUTABLE, |
|---|
| 1329 | 1366 | "SOC_ID", DRM_MODE_OBJECT_CRTC); |
|---|
| .. | .. |
|---|
| 1337 | 1374 | private->aclk_prop = drm_property_create_range(dev, 0, "ACLK", 0, UINT_MAX); |
|---|
| 1338 | 1375 | private->bg_prop = drm_property_create_range(dev, 0, "BACKGROUND", 0, UINT_MAX); |
|---|
| 1339 | 1376 | private->line_flag_prop = drm_property_create_range(dev, 0, "LINE_FLAG1", 0, UINT_MAX); |
|---|
| 1377 | + private->cubic_lut_prop = drm_property_create(dev, DRM_MODE_PROP_BLOB, "CUBIC_LUT", 0); |
|---|
| 1378 | + private->cubic_lut_size_prop = drm_property_create_range(dev, DRM_MODE_PROP_IMMUTABLE, |
|---|
| 1379 | + "CUBIC_LUT_SIZE", 0, UINT_MAX); |
|---|
| 1340 | 1380 | |
|---|
| 1341 | 1381 | return drm_mode_create_tv_properties(dev, 0, NULL); |
|---|
| 1342 | 1382 | } |
|---|