diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_connectors.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_connectors.c | 237 |
1 files changed, 216 insertions, 21 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 5ee81b6a879..af1d551f1a8 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | |||
@@ -39,6 +39,15 @@ radeon_atombios_connected_scratch_regs(struct drm_connector *connector, | |||
39 | struct drm_encoder *encoder, | 39 | struct drm_encoder *encoder, |
40 | bool connected); | 40 | bool connected); |
41 | 41 | ||
42 | static void radeon_property_change_mode(struct drm_encoder *encoder) | ||
43 | { | ||
44 | struct drm_crtc *crtc = encoder->crtc; | ||
45 | |||
46 | if (crtc && crtc->enabled) { | ||
47 | drm_crtc_helper_set_mode(crtc, &crtc->mode, | ||
48 | crtc->x, crtc->y, crtc->fb); | ||
49 | } | ||
50 | } | ||
42 | static void | 51 | static void |
43 | radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_connector_status status) | 52 | radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_connector_status status) |
44 | { | 53 | { |
@@ -78,6 +87,27 @@ radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_c | |||
78 | } | 87 | } |
79 | } | 88 | } |
80 | 89 | ||
90 | struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type) | ||
91 | { | ||
92 | struct drm_mode_object *obj; | ||
93 | struct drm_encoder *encoder; | ||
94 | int i; | ||
95 | |||
96 | for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { | ||
97 | if (connector->encoder_ids[i] == 0) | ||
98 | break; | ||
99 | |||
100 | obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER); | ||
101 | if (!obj) | ||
102 | continue; | ||
103 | |||
104 | encoder = obj_to_encoder(obj); | ||
105 | if (encoder->encoder_type == encoder_type) | ||
106 | return encoder; | ||
107 | } | ||
108 | return NULL; | ||
109 | } | ||
110 | |||
81 | struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector) | 111 | struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector) |
82 | { | 112 | { |
83 | int enc_id = connector->encoder_ids[0]; | 113 | int enc_id = connector->encoder_ids[0]; |
@@ -95,7 +125,6 @@ struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector) | |||
95 | return NULL; | 125 | return NULL; |
96 | } | 126 | } |
97 | 127 | ||
98 | |||
99 | /* | 128 | /* |
100 | * radeon_connector_analog_encoder_conflict_solve | 129 | * radeon_connector_analog_encoder_conflict_solve |
101 | * - search for other connectors sharing this encoder | 130 | * - search for other connectors sharing this encoder |
@@ -224,6 +253,89 @@ static void radeon_add_common_modes(struct drm_encoder *encoder, struct drm_conn | |||
224 | int radeon_connector_set_property(struct drm_connector *connector, struct drm_property *property, | 253 | int radeon_connector_set_property(struct drm_connector *connector, struct drm_property *property, |
225 | uint64_t val) | 254 | uint64_t val) |
226 | { | 255 | { |
256 | struct drm_device *dev = connector->dev; | ||
257 | struct radeon_device *rdev = dev->dev_private; | ||
258 | struct drm_encoder *encoder; | ||
259 | struct radeon_encoder *radeon_encoder; | ||
260 | |||
261 | if (property == rdev->mode_info.coherent_mode_property) { | ||
262 | struct radeon_encoder_atom_dig *dig; | ||
263 | |||
264 | /* need to find digital encoder on connector */ | ||
265 | encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); | ||
266 | if (!encoder) | ||
267 | return 0; | ||
268 | |||
269 | radeon_encoder = to_radeon_encoder(encoder); | ||
270 | |||
271 | if (!radeon_encoder->enc_priv) | ||
272 | return 0; | ||
273 | |||
274 | dig = radeon_encoder->enc_priv; | ||
275 | dig->coherent_mode = val ? true : false; | ||
276 | radeon_property_change_mode(&radeon_encoder->base); | ||
277 | } | ||
278 | |||
279 | if (property == rdev->mode_info.tv_std_property) { | ||
280 | encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TVDAC); | ||
281 | if (!encoder) { | ||
282 | encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_DAC); | ||
283 | } | ||
284 | |||
285 | if (!encoder) | ||
286 | return 0; | ||
287 | |||
288 | radeon_encoder = to_radeon_encoder(encoder); | ||
289 | if (!radeon_encoder->enc_priv) | ||
290 | return 0; | ||
291 | if (rdev->is_atom_bios) { | ||
292 | struct radeon_encoder_atom_dac *dac_int; | ||
293 | dac_int = radeon_encoder->enc_priv; | ||
294 | dac_int->tv_std = val; | ||
295 | } else { | ||
296 | struct radeon_encoder_tv_dac *dac_int; | ||
297 | dac_int = radeon_encoder->enc_priv; | ||
298 | dac_int->tv_std = val; | ||
299 | } | ||
300 | radeon_property_change_mode(&radeon_encoder->base); | ||
301 | } | ||
302 | |||
303 | if (property == rdev->mode_info.load_detect_property) { | ||
304 | struct radeon_connector *radeon_connector = | ||
305 | to_radeon_connector(connector); | ||
306 | |||
307 | if (val == 0) | ||
308 | radeon_connector->dac_load_detect = false; | ||
309 | else | ||
310 | radeon_connector->dac_load_detect = true; | ||
311 | } | ||
312 | |||
313 | if (property == rdev->mode_info.tmds_pll_property) { | ||
314 | struct radeon_encoder_int_tmds *tmds = NULL; | ||
315 | bool ret = false; | ||
316 | /* need to find digital encoder on connector */ | ||
317 | encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); | ||
318 | if (!encoder) | ||
319 | return 0; | ||
320 | |||
321 | radeon_encoder = to_radeon_encoder(encoder); | ||
322 | |||
323 | tmds = radeon_encoder->enc_priv; | ||
324 | if (!tmds) | ||
325 | return 0; | ||
326 | |||
327 | if (val == 0) { | ||
328 | if (rdev->is_atom_bios) | ||
329 | ret = radeon_atombios_get_tmds_info(radeon_encoder, tmds); | ||
330 | else | ||
331 | ret = radeon_legacy_get_tmds_info_from_combios(radeon_encoder, tmds); | ||
332 | } | ||
333 | if (val == 1 || ret == false) { | ||
334 | radeon_legacy_get_tmds_info_from_table(radeon_encoder, tmds); | ||
335 | } | ||
336 | radeon_property_change_mode(&radeon_encoder->base); | ||
337 | } | ||
338 | |||
227 | return 0; | 339 | return 0; |
228 | } | 340 | } |
229 | 341 | ||
@@ -320,6 +432,42 @@ static void radeon_connector_destroy(struct drm_connector *connector) | |||
320 | kfree(connector); | 432 | kfree(connector); |
321 | } | 433 | } |
322 | 434 | ||
435 | static int radeon_lvds_set_property(struct drm_connector *connector, | ||
436 | struct drm_property *property, | ||
437 | uint64_t value) | ||
438 | { | ||
439 | struct drm_device *dev = connector->dev; | ||
440 | struct radeon_encoder *radeon_encoder; | ||
441 | enum radeon_rmx_type rmx_type; | ||
442 | |||
443 | DRM_DEBUG("\n"); | ||
444 | if (property != dev->mode_config.scaling_mode_property) | ||
445 | return 0; | ||
446 | |||
447 | if (connector->encoder) | ||
448 | radeon_encoder = to_radeon_encoder(connector->encoder); | ||
449 | else { | ||
450 | struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; | ||
451 | radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector)); | ||
452 | } | ||
453 | |||
454 | switch (value) { | ||
455 | case DRM_MODE_SCALE_NONE: rmx_type = RMX_OFF; break; | ||
456 | case DRM_MODE_SCALE_CENTER: rmx_type = RMX_CENTER; break; | ||
457 | case DRM_MODE_SCALE_ASPECT: rmx_type = RMX_ASPECT; break; | ||
458 | default: | ||
459 | case DRM_MODE_SCALE_FULLSCREEN: rmx_type = RMX_FULL; break; | ||
460 | } | ||
461 | if (radeon_encoder->rmx_type == rmx_type) | ||
462 | return 0; | ||
463 | |||
464 | radeon_encoder->rmx_type = rmx_type; | ||
465 | |||
466 | radeon_property_change_mode(&radeon_encoder->base); | ||
467 | return 0; | ||
468 | } | ||
469 | |||
470 | |||
323 | struct drm_connector_helper_funcs radeon_lvds_connector_helper_funcs = { | 471 | struct drm_connector_helper_funcs radeon_lvds_connector_helper_funcs = { |
324 | .get_modes = radeon_lvds_get_modes, | 472 | .get_modes = radeon_lvds_get_modes, |
325 | .mode_valid = radeon_lvds_mode_valid, | 473 | .mode_valid = radeon_lvds_mode_valid, |
@@ -331,7 +479,7 @@ struct drm_connector_funcs radeon_lvds_connector_funcs = { | |||
331 | .detect = radeon_lvds_detect, | 479 | .detect = radeon_lvds_detect, |
332 | .fill_modes = drm_helper_probe_single_connector_modes, | 480 | .fill_modes = drm_helper_probe_single_connector_modes, |
333 | .destroy = radeon_connector_destroy, | 481 | .destroy = radeon_connector_destroy, |
334 | .set_property = radeon_connector_set_property, | 482 | .set_property = radeon_lvds_set_property, |
335 | }; | 483 | }; |
336 | 484 | ||
337 | static int radeon_vga_get_modes(struct drm_connector *connector) | 485 | static int radeon_vga_get_modes(struct drm_connector *connector) |
@@ -368,8 +516,10 @@ static enum drm_connector_status radeon_vga_detect(struct drm_connector *connect | |||
368 | if (dret) | 516 | if (dret) |
369 | ret = connector_status_connected; | 517 | ret = connector_status_connected; |
370 | else { | 518 | else { |
371 | encoder_funcs = encoder->helper_private; | 519 | if (radeon_connector->dac_load_detect) { |
372 | ret = encoder_funcs->detect(encoder, connector); | 520 | encoder_funcs = encoder->helper_private; |
521 | ret = encoder_funcs->detect(encoder, connector); | ||
522 | } | ||
373 | } | 523 | } |
374 | 524 | ||
375 | if (ret == connector_status_connected) | 525 | if (ret == connector_status_connected) |
@@ -426,7 +576,11 @@ static enum drm_connector_status radeon_tv_detect(struct drm_connector *connecto | |||
426 | { | 576 | { |
427 | struct drm_encoder *encoder; | 577 | struct drm_encoder *encoder; |
428 | struct drm_encoder_helper_funcs *encoder_funcs; | 578 | struct drm_encoder_helper_funcs *encoder_funcs; |
429 | int ret; | 579 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
580 | enum drm_connector_status ret = connector_status_disconnected; | ||
581 | |||
582 | if (!radeon_connector->dac_load_detect) | ||
583 | return ret; | ||
430 | 584 | ||
431 | encoder = radeon_best_single_encoder(connector); | 585 | encoder = radeon_best_single_encoder(connector); |
432 | if (!encoder) | 586 | if (!encoder) |
@@ -510,27 +664,29 @@ static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connect | |||
510 | goto out; | 664 | goto out; |
511 | 665 | ||
512 | /* find analog encoder */ | 666 | /* find analog encoder */ |
513 | for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { | 667 | if (radeon_connector->dac_load_detect) { |
514 | if (connector->encoder_ids[i] == 0) | 668 | for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { |
515 | break; | 669 | if (connector->encoder_ids[i] == 0) |
670 | break; | ||
516 | 671 | ||
517 | obj = drm_mode_object_find(connector->dev, | 672 | obj = drm_mode_object_find(connector->dev, |
518 | connector->encoder_ids[i], | 673 | connector->encoder_ids[i], |
519 | DRM_MODE_OBJECT_ENCODER); | 674 | DRM_MODE_OBJECT_ENCODER); |
520 | if (!obj) | 675 | if (!obj) |
521 | continue; | 676 | continue; |
522 | 677 | ||
523 | encoder = obj_to_encoder(obj); | 678 | encoder = obj_to_encoder(obj); |
524 | 679 | ||
525 | encoder_funcs = encoder->helper_private; | 680 | encoder_funcs = encoder->helper_private; |
526 | if (encoder_funcs->detect) { | 681 | if (encoder_funcs->detect) { |
527 | if (ret != connector_status_connected) { | 682 | if (ret != connector_status_connected) { |
528 | ret = encoder_funcs->detect(encoder, connector); | 683 | ret = encoder_funcs->detect(encoder, connector); |
529 | if (ret == connector_status_connected) { | 684 | if (ret == connector_status_connected) { |
530 | radeon_connector->use_digital = false; | 685 | radeon_connector->use_digital = false; |
686 | } | ||
531 | } | 687 | } |
688 | break; | ||
532 | } | 689 | } |
533 | break; | ||
534 | } | 690 | } |
535 | } | 691 | } |
536 | 692 | ||
@@ -610,6 +766,7 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
610 | bool linkb, | 766 | bool linkb, |
611 | uint32_t igp_lane_info) | 767 | uint32_t igp_lane_info) |
612 | { | 768 | { |
769 | struct radeon_device *rdev = dev->dev_private; | ||
613 | struct drm_connector *connector; | 770 | struct drm_connector *connector; |
614 | struct radeon_connector *radeon_connector; | 771 | struct radeon_connector *radeon_connector; |
615 | struct radeon_connector_atom_dig *radeon_dig_connector; | 772 | struct radeon_connector_atom_dig *radeon_dig_connector; |
@@ -645,6 +802,9 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
645 | if (!radeon_connector->ddc_bus) | 802 | if (!radeon_connector->ddc_bus) |
646 | goto failed; | 803 | goto failed; |
647 | } | 804 | } |
805 | drm_connector_attach_property(&radeon_connector->base, | ||
806 | rdev->mode_info.load_detect_property, | ||
807 | 1); | ||
648 | break; | 808 | break; |
649 | case DRM_MODE_CONNECTOR_DVIA: | 809 | case DRM_MODE_CONNECTOR_DVIA: |
650 | drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); | 810 | drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); |
@@ -654,6 +814,9 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
654 | if (!radeon_connector->ddc_bus) | 814 | if (!radeon_connector->ddc_bus) |
655 | goto failed; | 815 | goto failed; |
656 | } | 816 | } |
817 | drm_connector_attach_property(&radeon_connector->base, | ||
818 | rdev->mode_info.load_detect_property, | ||
819 | 1); | ||
657 | break; | 820 | break; |
658 | case DRM_MODE_CONNECTOR_DVII: | 821 | case DRM_MODE_CONNECTOR_DVII: |
659 | case DRM_MODE_CONNECTOR_DVID: | 822 | case DRM_MODE_CONNECTOR_DVID: |
@@ -671,6 +834,12 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
671 | goto failed; | 834 | goto failed; |
672 | } | 835 | } |
673 | subpixel_order = SubPixelHorizontalRGB; | 836 | subpixel_order = SubPixelHorizontalRGB; |
837 | drm_connector_attach_property(&radeon_connector->base, | ||
838 | rdev->mode_info.coherent_mode_property, | ||
839 | 1); | ||
840 | drm_connector_attach_property(&radeon_connector->base, | ||
841 | rdev->mode_info.load_detect_property, | ||
842 | 1); | ||
674 | break; | 843 | break; |
675 | case DRM_MODE_CONNECTOR_HDMIA: | 844 | case DRM_MODE_CONNECTOR_HDMIA: |
676 | case DRM_MODE_CONNECTOR_HDMIB: | 845 | case DRM_MODE_CONNECTOR_HDMIB: |
@@ -687,6 +856,9 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
687 | if (!radeon_connector->ddc_bus) | 856 | if (!radeon_connector->ddc_bus) |
688 | goto failed; | 857 | goto failed; |
689 | } | 858 | } |
859 | drm_connector_attach_property(&radeon_connector->base, | ||
860 | rdev->mode_info.coherent_mode_property, | ||
861 | 1); | ||
690 | subpixel_order = SubPixelHorizontalRGB; | 862 | subpixel_order = SubPixelHorizontalRGB; |
691 | break; | 863 | break; |
692 | case DRM_MODE_CONNECTOR_DisplayPort: | 864 | case DRM_MODE_CONNECTOR_DisplayPort: |
@@ -712,6 +884,9 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
712 | drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type); | 884 | drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type); |
713 | drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); | 885 | drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); |
714 | } | 886 | } |
887 | drm_connector_attach_property(&radeon_connector->base, | ||
888 | rdev->mode_info.load_detect_property, | ||
889 | 1); | ||
715 | break; | 890 | break; |
716 | case DRM_MODE_CONNECTOR_LVDS: | 891 | case DRM_MODE_CONNECTOR_LVDS: |
717 | radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); | 892 | radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); |
@@ -727,6 +902,10 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
727 | if (!radeon_connector->ddc_bus) | 902 | if (!radeon_connector->ddc_bus) |
728 | goto failed; | 903 | goto failed; |
729 | } | 904 | } |
905 | drm_mode_create_scaling_mode_property(dev); | ||
906 | drm_connector_attach_property(&radeon_connector->base, | ||
907 | dev->mode_config.scaling_mode_property, | ||
908 | DRM_MODE_SCALE_FULLSCREEN); | ||
730 | subpixel_order = SubPixelHorizontalRGB; | 909 | subpixel_order = SubPixelHorizontalRGB; |
731 | break; | 910 | break; |
732 | } | 911 | } |
@@ -749,6 +928,7 @@ radeon_add_legacy_connector(struct drm_device *dev, | |||
749 | int connector_type, | 928 | int connector_type, |
750 | struct radeon_i2c_bus_rec *i2c_bus) | 929 | struct radeon_i2c_bus_rec *i2c_bus) |
751 | { | 930 | { |
931 | struct radeon_device *rdev = dev->dev_private; | ||
752 | struct drm_connector *connector; | 932 | struct drm_connector *connector; |
753 | struct radeon_connector *radeon_connector; | 933 | struct radeon_connector *radeon_connector; |
754 | uint32_t subpixel_order = SubPixelNone; | 934 | uint32_t subpixel_order = SubPixelNone; |
@@ -783,6 +963,9 @@ radeon_add_legacy_connector(struct drm_device *dev, | |||
783 | if (!radeon_connector->ddc_bus) | 963 | if (!radeon_connector->ddc_bus) |
784 | goto failed; | 964 | goto failed; |
785 | } | 965 | } |
966 | drm_connector_attach_property(&radeon_connector->base, | ||
967 | rdev->mode_info.load_detect_property, | ||
968 | 1); | ||
786 | break; | 969 | break; |
787 | case DRM_MODE_CONNECTOR_DVIA: | 970 | case DRM_MODE_CONNECTOR_DVIA: |
788 | drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); | 971 | drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); |
@@ -792,6 +975,9 @@ radeon_add_legacy_connector(struct drm_device *dev, | |||
792 | if (!radeon_connector->ddc_bus) | 975 | if (!radeon_connector->ddc_bus) |
793 | goto failed; | 976 | goto failed; |
794 | } | 977 | } |
978 | drm_connector_attach_property(&radeon_connector->base, | ||
979 | rdev->mode_info.load_detect_property, | ||
980 | 1); | ||
795 | break; | 981 | break; |
796 | case DRM_MODE_CONNECTOR_DVII: | 982 | case DRM_MODE_CONNECTOR_DVII: |
797 | case DRM_MODE_CONNECTOR_DVID: | 983 | case DRM_MODE_CONNECTOR_DVID: |
@@ -801,6 +987,9 @@ radeon_add_legacy_connector(struct drm_device *dev, | |||
801 | radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI"); | 987 | radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI"); |
802 | if (!radeon_connector->ddc_bus) | 988 | if (!radeon_connector->ddc_bus) |
803 | goto failed; | 989 | goto failed; |
990 | drm_connector_attach_property(&radeon_connector->base, | ||
991 | rdev->mode_info.load_detect_property, | ||
992 | 1); | ||
804 | } | 993 | } |
805 | subpixel_order = SubPixelHorizontalRGB; | 994 | subpixel_order = SubPixelHorizontalRGB; |
806 | break; | 995 | break; |
@@ -810,6 +999,9 @@ radeon_add_legacy_connector(struct drm_device *dev, | |||
810 | if (radeon_tv == 1) { | 999 | if (radeon_tv == 1) { |
811 | drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type); | 1000 | drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type); |
812 | drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); | 1001 | drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); |
1002 | drm_connector_attach_property(&radeon_connector->base, | ||
1003 | rdev->mode_info.load_detect_property, | ||
1004 | 1); | ||
813 | } | 1005 | } |
814 | break; | 1006 | break; |
815 | case DRM_MODE_CONNECTOR_LVDS: | 1007 | case DRM_MODE_CONNECTOR_LVDS: |
@@ -820,6 +1012,9 @@ radeon_add_legacy_connector(struct drm_device *dev, | |||
820 | if (!radeon_connector->ddc_bus) | 1012 | if (!radeon_connector->ddc_bus) |
821 | goto failed; | 1013 | goto failed; |
822 | } | 1014 | } |
1015 | drm_connector_attach_property(&radeon_connector->base, | ||
1016 | dev->mode_config.scaling_mode_property, | ||
1017 | DRM_MODE_SCALE_FULLSCREEN); | ||
823 | subpixel_order = SubPixelHorizontalRGB; | 1018 | subpixel_order = SubPixelHorizontalRGB; |
824 | break; | 1019 | break; |
825 | } | 1020 | } |