Den 15.06.2019 17.40, skrev Noralf Trønnes:
> 
> 
> Den 14.06.2019 14.13, skrev Maxime Ripard:
>> Properly configuring the overscan properties might be needed for the
>> initial setup of the framebuffer for display that still have overscan.
>> Let's allow for more properties on the kernel command line to setup each
>> margin.
> 
> This also needs to be documented in Documentation/fb/modedb.txt
> 
>>
>> Reviewed-by: Noralf Trønnes <nor...@tronnes.org>
>> Signed-off-by: Maxime Ripard <maxime.rip...@bootlin.com>
>> ---
>>  drivers/gpu/drm/drm_modes.c | 44 ++++++++++++++++++++++++++++++++++++++-
>>  include/drm/drm_connector.h | 12 +++++-----
>>  2 files changed, 50 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
>> index b92b7df6784a..25d2ba595750 100644
>> --- a/drivers/gpu/drm/drm_modes.c
>> +++ b/drivers/gpu/drm/drm_modes.c
>> @@ -1609,6 +1609,50 @@ static int drm_mode_parse_cmdline_options(char *str, 
>> size_t len,
>>              } else if (!strncmp(option, "reflect_y", delim - option)) {
>>                      rotation |= DRM_MODE_REFLECT_Y;
>>                      sep = delim;
>> +            } else if (!strncmp(option, "margin_right", delim - option)) {
> 
> I wonder if this should be called tv_margin_right to distinguish it from
> 'm' (the mode specifier) which also is a margin? Or can these margins be
> reused on other display types later on? A little stupid to have both
> 'tv_margin_right' and 'margin_right'.

And after a nights sleep I think 'margin_right' is just fine as long as
it's documented in modedb.txt as TV margins.

So with an modedb.txt entry and the struct change moved to patch 8:

Reviewed-by: Noralf Trønnes <nor...@tronnes.org>

> 
>> +                    const char *value = delim + 1;
>> +                    unsigned int margin;
>> +
>> +                    margin = simple_strtol(value, &sep, 10);
>> +
>> +                    /* Make sure we have parsed something */
>> +                    if (sep == value)
>> +                            return -EINVAL;
>> +
>> +                    mode->tv_margins.right = margin;
>> +            } else if (!strncmp(option, "margin_left", delim - option)) {
>> +                    const char *value = delim + 1;
>> +                    unsigned int margin;
>> +
>> +                    margin = simple_strtol(value, &sep, 10);
>> +
>> +                    /* Make sure we have parsed something */
>> +                    if (sep == value)
>> +                            return -EINVAL;
>> +
>> +                    mode->tv_margins.left = margin;
>> +            } else if (!strncmp(option, "margin_top", delim - option)) {
>> +                    const char *value = delim + 1;
>> +                    unsigned int margin;
>> +
>> +                    margin = simple_strtol(value, &sep, 10);
>> +
>> +                    /* Make sure we have parsed something */
>> +                    if (sep == value)
>> +                            return -EINVAL;
>> +
>> +                    mode->tv_margins.top = margin;
>> +            } else if (!strncmp(option, "margin_bottom", delim - option)) {
>> +                    const char *value = delim + 1;
>> +                    unsigned int margin;
>> +
>> +                    margin = simple_strtol(value, &sep, 10);
>> +
>> +                    /* Make sure we have parsed something */
>> +                    if (sep == value)
>> +                            return -EINVAL;
>> +
>> +                    mode->tv_margins.bottom = margin;
>>              } else {
>>                      return -EINVAL;
>>              }
>> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
>> index c58a35b34c1a..6841c46e6781 100644
>> --- a/include/drm/drm_connector.h
>> +++ b/include/drm/drm_connector.h
>> @@ -505,12 +505,7 @@ struct drm_connector_tv_margins {
>>   */
>>  struct drm_tv_connector_state {
>>      enum drm_mode_subconnector subconnector;
>> -    struct {
>> -            unsigned int left;
>> -            unsigned int right;
>> -            unsigned int top;
>> -            unsigned int bottom;
>> -    } margins;
>> +    struct drm_connector_tv_margins margins;
>>      unsigned int mode;
>>      unsigned int brightness;
>>      unsigned int contrast;
> 
> As mentioned this needs moving to patch 8.
> 
> Noralf.
> 
>> @@ -1039,6 +1034,11 @@ struct drm_cmdline_mode {
>>       * DRM_MODE_ROTATE_180 are supported at the moment.
>>       */
>>      unsigned int rotation;
>> +
>> +    /**
>> +     * @tv_margins: TV margins to apply to the mode.
>> +     */
>> +    struct drm_connector_tv_margins tv_margins;
>>  };
>>  
>>  /**
>>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
> 
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to