[PATCH] drm/i2c: tda998x: Choose between atomic or non atomic dpms helper

Jyri Sarha jsarha at ti.com
Mon Mar 7 21:47:38 UTC 2016


Hi,
Based on discussion around this patch:

https://lists.freedesktop.org/archives/dri-devel/2016-February/100685.html

I think the patch below should get into queued for v4.5 fixes as the 
Beaglebone-Black display is currently broken in linux-master and 
probably Armada is broken too. What should I do to get it there?

Best regards,
Jyri

On 01/16/16 22:17, Jyri Sarha wrote:
> Choose between atomic or non atomic connector dpms helper. If tda998x
> is connected to a drm driver that does not support atomic modeset
> calling drm_atomic_helper_connector_dpms() causes a crash when the
> connectors atomic state is not initialized. The patch implements a
> driver specific connector dpms helper that calls
> drm_atomic_helper_connector_dpms() if driver supports DRIVER_ATOMIC
> and otherwise it calls the legacy drm_helper_connector_dpms().
>
> Fixes commit 9736e988d328 ("drm/i2c: tda998x: Add support for atomic
> modesetting").
>
> Signed-off-by: Jyri Sarha <jsarha at ti.com>
> ---
>
> Ok, so this is the second approach to solve this issue. The first
> attempt can be found here [1] with the follow from Liviu Dudau that
> suggested this approach.
>
> It just makes me wonder if drm_atomic_helper_connector_dpms() should
> call the legacy callback automatically if DRIVER_ATOMIC is not set or
> at least bail out gracefully with an error message. Then again it may
> be overkill if the tda998x is the only driver that need to support
> both situations.
>
> Best regards,
> Jyri
>
> [1] http://www.spinics.net/lists/dri-devel/msg98514.html
>
>   drivers/gpu/drm/i2c/tda998x_drv.c | 10 +++++++++-
>   1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
> index 012d36d..bb7d507 100644
> --- a/drivers/gpu/drm/i2c/tda998x_drv.c
> +++ b/drivers/gpu/drm/i2c/tda998x_drv.c
> @@ -1382,8 +1382,16 @@ static void tda998x_connector_destroy(struct drm_connector *connector)
>   	drm_connector_cleanup(connector);
>   }
>
> +static int tda998x_connector_dpms(struct drm_connector *connector, int mode)
> +{
> +	if (drm_core_check_feature(connector->dev, DRIVER_ATOMIC))
> +		return drm_atomic_helper_connector_dpms(connector, mode);
> +	else
> +		return drm_helper_connector_dpms(connector, mode);
> +}
> +
>   static const struct drm_connector_funcs tda998x_connector_funcs = {
> -	.dpms = drm_atomic_helper_connector_dpms,
> +	.dpms = tda998x_connector_dpms,
>   	.reset = drm_atomic_helper_connector_reset,
>   	.fill_modes = drm_helper_probe_single_connector_modes,
>   	.detect = tda998x_connector_detect,
>



More information about the dri-devel mailing list