2022-08-29 13:28:33

by Maxime Ripard

[permalink] [raw]
Subject: [PATCH v2 22/41] 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.



Signed-off-by: Maxime Ripard <[email protected]>



diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c

index dfb57217253b..0373c3dc824b 100644

--- a/drivers/gpu/drm/drm_atomic_state_helper.c

+++ b/drivers/gpu/drm/drm_atomic_state_helper.c

@@ -481,6 +481,81 @@ void drm_atomic_helper_connector_tv_margins_reset(struct drm_connector *connecto

}

EXPORT_SYMBOL(drm_atomic_helper_connector_tv_margins_reset);



+/**

+ * drm_atomic_helper_connector_tv_reset - Resets Analog TV connector properties

+ * @connector: DRM connector

+ *

+ * Resets the analog TV properties attached to a connector

+ */

+void drm_atomic_helper_connector_tv_reset(struct drm_connector *connector)

+{

+ struct drm_device *dev = connector->dev;

+ struct drm_cmdline_mode *cmdline = &connector->cmdline_mode;

+ struct drm_connector_state *state = connector->state;

+ struct drm_property *prop;

+ uint64_t val;

+

+ prop = dev->mode_config.tv_mode_property;

+ if (prop)

+ if (!drm_object_property_get_default_value(&connector->base,

+ prop, &val))

+ state->tv.mode = val;

+

+ if (cmdline->tv_mode)

+ state->tv.mode = cmdline->tv_mode;

+

+ prop = dev->mode_config.tv_select_subconnector_property;

+ if (prop)

+ if (!drm_object_property_get_default_value(&connector->base,

+ prop, &val))

+ state->tv.select_subconnector = val;

+

+ prop = dev->mode_config.tv_subconnector_property;

+ if (prop)

+ if (!drm_object_property_get_default_value(&connector->base,

+ prop, &val))

+ state->tv.subconnector = val;

+

+ prop = dev->mode_config.tv_brightness_property;

+ if (prop)

+ if (!drm_object_property_get_default_value(&connector->base,

+ prop, &val))

+ state->tv.brightness = val;

+

+ prop = dev->mode_config.tv_contrast_property;

+ if (prop)

+ if (!drm_object_property_get_default_value(&connector->base,

+ prop, &val))

+ state->tv.contrast = val;

+

+ prop = dev->mode_config.tv_flicker_reduction_property;

+ if (prop)

+ if (!drm_object_property_get_default_value(&connector->base,

+ prop, &val))

+ state->tv.flicker_reduction = val;

+

+ prop = dev->mode_config.tv_overscan_property;

+ if (prop)

+ if (!drm_object_property_get_default_value(&connector->base,

+ prop, &val))

+ state->tv.overscan = val;

+

+ prop = dev->mode_config.tv_saturation_property;

+ if (prop)

+ if (!drm_object_property_get_default_value(&connector->base,

+ prop, &val))

+ state->tv.saturation = val;

+

+ prop = dev->mode_config.tv_hue_property;

+ if (prop)

+ if (!drm_object_property_get_default_value(&connector->base,

+ prop, &val))

+ state->tv.hue = val;

+

+ drm_atomic_helper_connector_tv_margins_reset(connector);

+}

+EXPORT_SYMBOL(drm_atomic_helper_connector_tv_reset);

+

/**

* __drm_atomic_helper_connector_duplicate_state - copy atomic connector state

* @connector: connector object

diff --git a/include/drm/drm_atomic_state_helper.h b/include/drm/drm_atomic_state_helper.h

index 192766656b88..c8fbce795ee7 100644

--- a/include/drm/drm_atomic_state_helper.h

+++ b/include/drm/drm_atomic_state_helper.h

@@ -70,6 +70,7 @@ void __drm_atomic_helper_connector_state_reset(struct drm_connector_state *conn_

void __drm_atomic_helper_connector_reset(struct drm_connector *connector,

struct drm_connector_state *conn_state);

void drm_atomic_helper_connector_reset(struct drm_connector *connector);

+void drm_atomic_helper_connector_tv_reset(struct drm_connector *connector);

void drm_atomic_helper_connector_tv_margins_reset(struct drm_connector *connector);

void

__drm_atomic_helper_connector_duplicate_state(struct drm_connector *connector,



--

b4 0.10.0-dev-65ba7


2022-08-30 18:53:27

by Noralf Trønnes

[permalink] [raw]
Subject: Re: [PATCH v2 22/41] drm/atomic-helper: Add a TV properties reset helper



Den 29.08.2022 15.11, skrev Maxime Ripard:
> 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.
>
>
>
> Signed-off-by: Maxime Ripard <[email protected]>
>

Reviewed-by: Noralf Trønnes <[email protected]>