[PATCH v1 06/13] drm/probe-helper: make .get_modes() optional, add default action

Jani Nikula jani.nikula at intel.com
Tue Jun 7 11:14:54 UTC 2022


On Thu, 02 Jun 2022, Ville Syrjälä <ville.syrjala at linux.intel.com> wrote:
> On Tue, May 24, 2022 at 01:39:28PM +0300, Jani Nikula wrote:
>> Add default action when .get_modes() not set. This also defines what a
>> .get_modes() hook should do.
>> 
>> Cc: David Airlie <airlied at linux.ie>
>> Cc: Daniel Vetter <daniel at ffwll.ch>
>> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
>> ---
>>  drivers/gpu/drm/drm_probe_helper.c       | 14 +++++++++++++-
>>  include/drm/drm_modeset_helper_vtables.h |  4 ++++
>>  2 files changed, 17 insertions(+), 1 deletion(-)
>> 
>> diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c
>> index 836bcd5b4cb6..9df17f0ae225 100644
>> --- a/drivers/gpu/drm/drm_probe_helper.c
>> +++ b/drivers/gpu/drm/drm_probe_helper.c
>> @@ -360,7 +360,19 @@ static int drm_helper_probe_get_modes(struct drm_connector *connector)
>>  		connector->helper_private;
>>  	int count;
>>  
>> -	count = connector_funcs->get_modes(connector);
>> +	if (connector_funcs->get_modes) {
>> +		count = connector_funcs->get_modes(connector);
>> +	} else {
>> +		const struct drm_edid *drm_edid;
>> +
>> +		/* Note: This requires connector->ddc is set */
>> +		drm_edid = drm_edid_read(connector);
>> +
>> +		/* Update modes etc. from the EDID */
>> +		count = drm_edid_connector_update(connector, drm_edid);
>> +
>> +		drm_edid_free(drm_edid);
>> +	}
>
> Not really a huge fan of this automagic fallback. I think I'd prefer
> to keep it mandatory and just provide this as a helper for drivers to
> plug into the right spot. Otherwise I'm sure I'll forget how this works
> and then I'll be confused when I see a connector withput any apparent
> .get_modes() implementation.

Fair enough.

I'm not sure how useful that is going to be, though, at least not for
i915. If we add a .get_edid hook, where would you bolt that? It doesn't
feel right to set a .get_modes hook to a default function that goes on
to call a .get_edid hook. Or what do you think?

BR,
Jani.

>
>>  
>>  	/*
>>  	 * Fallback for when DDC probe failed in drm_get_edid() and thus skipped
>> diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h
>> index fafa70ac1337..b4402bc64e57 100644
>> --- a/include/drm/drm_modeset_helper_vtables.h
>> +++ b/include/drm/drm_modeset_helper_vtables.h
>> @@ -894,6 +894,10 @@ struct drm_connector_helper_funcs {
>>  	 * libraries always call this with the &drm_mode_config.connection_mutex
>>  	 * held. Because of this it's safe to inspect &drm_connector->state.
>>  	 *
>> +	 * This callback is optional. By default, it reads the EDID using
>> +	 * drm_edid_read() and updates the connector display info, modes, and
>> +	 * properties using drm_edid_connector_update().
>> +	 *
>>  	 * RETURNS:
>>  	 *
>>  	 * The number of modes added by calling drm_mode_probed_add().
>> -- 
>> 2.30.2

-- 
Jani Nikula, Intel Open Source Graphics Center


More information about the dri-devel mailing list