Message ID | 20220728-rpi-analog-tv-properties-v1-3-3d53ae722097@cerno.tech (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm: Analog TV Improvements | expand |
Den 29.07.2022 18.34, skrev Maxime Ripard: > The subconnector property was created by drm_mode_create_tv_properties(), > but wasn't exposed to the userspace through the generic > atomic_get/set_property implementation, and wasn't stored in any generic > state structure. > > Let's solve this. > > Signed-off-by: Maxime Ripard <maxime@cerno.tech> > I just realised that this and the select_subconnector property isn't used by any drivers. Do you plan to use them? Maybe they don't need to be wired up at all. Anyways, up to you: Reviewed-by: Noralf Trønnes <noralf@tronnes.org> > diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c > index c74c78a28171..c06d0639d552 100644 > --- a/drivers/gpu/drm/drm_atomic_uapi.c > +++ b/drivers/gpu/drm/drm_atomic_uapi.c > @@ -688,6 +688,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector, > return -EINVAL; > } else if (property == config->tv_select_subconnector_property) { > state->tv.select_subconnector = val; > + } else if (property == config->tv_subconnector_property) { > + state->tv.subconnector = val; > } else if (property == config->tv_left_margin_property) { > state->tv.margins.left = val; > } else if (property == config->tv_right_margin_property) { > @@ -796,6 +798,8 @@ drm_atomic_connector_get_property(struct drm_connector *connector, > *val = connector->dpms; > } else if (property == config->tv_select_subconnector_property) { > *val = state->tv.select_subconnector; > + } else if (property == config->tv_subconnector_property) { > + *val = state->tv.subconnector; > } else if (property == config->tv_left_margin_property) { > *val = state->tv.margins.left; > } else if (property == config->tv_right_margin_property) { > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index f8091edf9a33..1e9996b33cc8 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -672,6 +672,7 @@ struct drm_connector_tv_margins { > /** > * struct drm_tv_connector_state - TV connector related states > * @select_subconnector: selected subconnector > + * @subconnector: detected subconnector > * @margins: TV margins > * @mode: TV mode > * @brightness: brightness in percent > @@ -683,6 +684,7 @@ struct drm_connector_tv_margins { > */ > struct drm_tv_connector_state { > enum drm_mode_subconnector select_subconnector; > + enum drm_mode_subconnector subconnector; > struct drm_connector_tv_margins margins; > unsigned int mode; > unsigned int brightness; >
Hi Noralf, Thanks for your review On Mon, Aug 08, 2022 at 02:30:42PM +0200, Noralf Trønnes wrote: > Den 29.07.2022 18.34, skrev Maxime Ripard: > > The subconnector property was created by drm_mode_create_tv_properties(), > > but wasn't exposed to the userspace through the generic > > atomic_get/set_property implementation, and wasn't stored in any generic > > state structure. > > > > Let's solve this. > > > > Signed-off-by: Maxime Ripard <maxime@cerno.tech> > > I just realised that this and the select_subconnector property isn't > used by any drivers. Do you plan to use them? Maybe they don't need to > be wired up at all. I'm not sure really It's true that the subconnector and select_subconnector fields in the TV connector state aren't used by any driver, but the ch7006 and nouveau will update the property content through a call to drm_object_property_set_value https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/i2c/ch7006_drv.c#L217 https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c#L185 I think it could still be useful to report it in the connector state, if only for consistency? Maxime
Den 15.08.2022 09.35, skrev Maxime Ripard: > Hi Noralf, > > Thanks for your review > > On Mon, Aug 08, 2022 at 02:30:42PM +0200, Noralf Trønnes wrote: >> Den 29.07.2022 18.34, skrev Maxime Ripard: >>> The subconnector property was created by drm_mode_create_tv_properties(), >>> but wasn't exposed to the userspace through the generic >>> atomic_get/set_property implementation, and wasn't stored in any generic >>> state structure. >>> >>> Let's solve this. >>> >>> Signed-off-by: Maxime Ripard <maxime@cerno.tech> >> >> I just realised that this and the select_subconnector property isn't >> used by any drivers. Do you plan to use them? Maybe they don't need to >> be wired up at all. > > I'm not sure really > > It's true that the subconnector and select_subconnector fields in the TV > connector state aren't used by any driver, but the ch7006 and nouveau > will update the property content through a call to > drm_object_property_set_value > > https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/i2c/ch7006_drv.c#L217 > https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c#L185 > > I think it could still be useful to report it in the connector state, if > only for consistency? > Yeah maybe. I just realised that I have support in the GUD protocol for these properties so any future devices that rely on them them will need this patch, so I'm now suddenly in favor of this :) Noralf.
diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c index c74c78a28171..c06d0639d552 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -688,6 +688,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector, return -EINVAL; } else if (property == config->tv_select_subconnector_property) { state->tv.select_subconnector = val; + } else if (property == config->tv_subconnector_property) { + state->tv.subconnector = val; } else if (property == config->tv_left_margin_property) { state->tv.margins.left = val; } else if (property == config->tv_right_margin_property) { @@ -796,6 +798,8 @@ drm_atomic_connector_get_property(struct drm_connector *connector, *val = connector->dpms; } else if (property == config->tv_select_subconnector_property) { *val = state->tv.select_subconnector; + } else if (property == config->tv_subconnector_property) { + *val = state->tv.subconnector; } else if (property == config->tv_left_margin_property) { *val = state->tv.margins.left; } else if (property == config->tv_right_margin_property) { diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index f8091edf9a33..1e9996b33cc8 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -672,6 +672,7 @@ struct drm_connector_tv_margins { /** * struct drm_tv_connector_state - TV connector related states * @select_subconnector: selected subconnector + * @subconnector: detected subconnector * @margins: TV margins * @mode: TV mode * @brightness: brightness in percent @@ -683,6 +684,7 @@ struct drm_connector_tv_margins { */ struct drm_tv_connector_state { enum drm_mode_subconnector select_subconnector; + enum drm_mode_subconnector subconnector; struct drm_connector_tv_margins margins; unsigned int mode; unsigned int brightness;
The subconnector property was created by drm_mode_create_tv_properties(), but wasn't exposed to the userspace through the generic atomic_get/set_property implementation, and wasn't stored in any generic state structure. Let's solve this. Signed-off-by: Maxime Ripard <maxime@cerno.tech>