mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 14:12:06 +00:00
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>
This commit is contained in:
parent
1e4a91db10
commit
00e77a697d
@ -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_specified)
|
||||
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
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user