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

drm/atomic-helper: Add a TV properties reset helper

The drm_tv_create_properties() function will create a bunch of properties,
but it's up to each and every driver using that function to properly reset
the state of these properties leading to inconsistent behaviours.

Let's create a helper that will take care of it.

Reviewed-by: Noralf Trønnes <noralf@tronnes.org>
Tested-by: Mateusz Kwiatkowski <kfyatek+publicgit@gmail.com>
Acked-in-principle-or-something-like-that-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://lore.kernel.org/r/20220728-rpi-analog-tv-properties-v10-13-256dad125326@cerno.tech
Signed-off-by: Maxime Ripard <maxime@cerno.tech>

+76
+75
drivers/gpu/drm/drm_atomic_state_helper.c
··· 482 482 EXPORT_SYMBOL(drm_atomic_helper_connector_tv_margins_reset); 483 483 484 484 /** 485 + * drm_atomic_helper_connector_tv_reset - Resets Analog TV connector properties 486 + * @connector: DRM connector 487 + * 488 + * Resets the analog TV properties attached to a connector 489 + */ 490 + void drm_atomic_helper_connector_tv_reset(struct drm_connector *connector) 491 + { 492 + struct drm_device *dev = connector->dev; 493 + struct drm_cmdline_mode *cmdline = &connector->cmdline_mode; 494 + struct drm_connector_state *state = connector->state; 495 + struct drm_property *prop; 496 + uint64_t val; 497 + 498 + prop = dev->mode_config.tv_mode_property; 499 + if (prop) 500 + if (!drm_object_property_get_default_value(&connector->base, 501 + prop, &val)) 502 + state->tv.mode = val; 503 + 504 + if (cmdline->tv_mode_specified) 505 + state->tv.mode = cmdline->tv_mode; 506 + 507 + prop = dev->mode_config.tv_select_subconnector_property; 508 + if (prop) 509 + if (!drm_object_property_get_default_value(&connector->base, 510 + prop, &val)) 511 + state->tv.select_subconnector = val; 512 + 513 + prop = dev->mode_config.tv_subconnector_property; 514 + if (prop) 515 + if (!drm_object_property_get_default_value(&connector->base, 516 + prop, &val)) 517 + state->tv.subconnector = val; 518 + 519 + prop = dev->mode_config.tv_brightness_property; 520 + if (prop) 521 + if (!drm_object_property_get_default_value(&connector->base, 522 + prop, &val)) 523 + state->tv.brightness = val; 524 + 525 + prop = dev->mode_config.tv_contrast_property; 526 + if (prop) 527 + if (!drm_object_property_get_default_value(&connector->base, 528 + prop, &val)) 529 + state->tv.contrast = val; 530 + 531 + prop = dev->mode_config.tv_flicker_reduction_property; 532 + if (prop) 533 + if (!drm_object_property_get_default_value(&connector->base, 534 + prop, &val)) 535 + state->tv.flicker_reduction = val; 536 + 537 + prop = dev->mode_config.tv_overscan_property; 538 + if (prop) 539 + if (!drm_object_property_get_default_value(&connector->base, 540 + prop, &val)) 541 + state->tv.overscan = val; 542 + 543 + prop = dev->mode_config.tv_saturation_property; 544 + if (prop) 545 + if (!drm_object_property_get_default_value(&connector->base, 546 + prop, &val)) 547 + state->tv.saturation = val; 548 + 549 + prop = dev->mode_config.tv_hue_property; 550 + if (prop) 551 + if (!drm_object_property_get_default_value(&connector->base, 552 + prop, &val)) 553 + state->tv.hue = val; 554 + 555 + drm_atomic_helper_connector_tv_margins_reset(connector); 556 + } 557 + EXPORT_SYMBOL(drm_atomic_helper_connector_tv_reset); 558 + 559 + /** 485 560 * __drm_atomic_helper_connector_duplicate_state - copy atomic connector state 486 561 * @connector: connector object 487 562 * @state: atomic connector state
+1
include/drm/drm_atomic_state_helper.h
··· 70 70 void __drm_atomic_helper_connector_reset(struct drm_connector *connector, 71 71 struct drm_connector_state *conn_state); 72 72 void drm_atomic_helper_connector_reset(struct drm_connector *connector); 73 + void drm_atomic_helper_connector_tv_reset(struct drm_connector *connector); 73 74 void drm_atomic_helper_connector_tv_margins_reset(struct drm_connector *connector); 74 75 void 75 76 __drm_atomic_helper_connector_duplicate_state(struct drm_connector *connector,