The samsung-s6e63j0x03 had a local way to handle backlight. Update the driver to use a devm_ based register function and utilize drm_panel backlight support. The changes results in a simpler driver with the same functionality. Signed-off-by: Sam Ravnborg <sam@xxxxxxxxxxxx> Cc: Joonas Kylmälä <joonas.kylmala@xxxxxx> Cc: Andrzej Hajda <a.hajda@xxxxxxxxxxx> Cc: Thierry Reding <thierry.reding@xxxxxxxxx> Cc: Inki Dae <inki.dae@xxxxxxxxxxx> Cc: Hyungwon Hwang <human.hwang@xxxxxxxxxxx> Cc: Hoegeun Kwon <hoegeun.kwon@xxxxxxxxxxx> --- .../gpu/drm/panel/panel-samsung-s6e63j0x03.c | 55 ++++++++++--------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e63j0x03.c b/drivers/gpu/drm/panel/panel-samsung-s6e63j0x03.c index a3570e0a90a8..2c035f87e3f0 100644 --- a/drivers/gpu/drm/panel/panel-samsung-s6e63j0x03.c +++ b/drivers/gpu/drm/panel/panel-samsung-s6e63j0x03.c @@ -36,7 +36,6 @@ struct s6e63j0x03 { struct device *dev; struct drm_panel panel; - struct backlight_device *bl_dev; struct regulator_bulk_data supplies[2]; struct gpio_desc *reset_gpio; @@ -184,7 +183,7 @@ static unsigned int s6e63j0x03_get_brightness_index(unsigned int brightness) static int s6e63j0x03_update_gamma(struct s6e63j0x03 *ctx, unsigned int brightness) { - struct backlight_device *bl_dev = ctx->bl_dev; + struct backlight_device *bl_dev = ctx->panel.backlight; unsigned int index = s6e63j0x03_get_brightness_index(brightness); int ret; @@ -217,6 +216,30 @@ static const struct backlight_ops s6e63j0x03_bl_ops = { .update_status = s6e63j0x03_set_brightness, }; +static int s6e63j0x03_backlight_register(struct s6e63j0x03 *ctx) +{ + struct backlight_properties props = { + .type = BACKLIGHT_RAW, + .brightness = DEFAULT_BRIGHTNESS, + .max_brightness = MAX_BRIGHTNESS, + }; + struct backlight_device *backlight; + struct device *dev = ctx->dev; + int ret = 0; + + backlight = devm_backlight_device_register(dev, "panel", dev, ctx, + &s6e63j0x03_bl_ops, + &props); + if (IS_ERR(backlight)) { + ret = PTR_ERR(backlight); + DRM_DEV_ERROR(dev, "error registering backlight device (%d)\n", + ret); + } + ctx->panel.backlight = backlight; + + return ret; +} + static int s6e63j0x03_disable(struct drm_panel *panel) { struct s6e63j0x03 *ctx = panel_to_s6e63j0x03(panel); @@ -227,8 +250,6 @@ static int s6e63j0x03_disable(struct drm_panel *panel) if (ret < 0) return ret; - ctx->bl_dev->props.power = FB_BLANK_NORMAL; - ret = mipi_dsi_dcs_enter_sleep_mode(dsi); if (ret < 0) return ret; @@ -247,8 +268,6 @@ static int s6e63j0x03_unprepare(struct drm_panel *panel) if (ret < 0) return ret; - ctx->bl_dev->props.power = FB_BLANK_POWERDOWN; - return 0; } @@ -334,8 +353,6 @@ static int s6e63j0x03_prepare(struct drm_panel *panel) if (ret < 0) goto err; - ctx->bl_dev->props.power = FB_BLANK_NORMAL; - return 0; err: @@ -395,8 +412,6 @@ static int s6e63j0x03_enable(struct drm_panel *panel) if (ret < 0) return ret; - ctx->bl_dev->props.power = FB_BLANK_UNBLANK; - return 0; } @@ -469,20 +484,13 @@ static int s6e63j0x03_probe(struct mipi_dsi_device *dsi) drm_panel_init(&ctx->panel, dev, &s6e63j0x03_funcs, DRM_MODE_CONNECTOR_DSI); - ctx->bl_dev = backlight_device_register("s6e63j0x03", dev, ctx, - &s6e63j0x03_bl_ops, NULL); - if (IS_ERR(ctx->bl_dev)) { - dev_err(dev, "failed to register backlight device\n"); - return PTR_ERR(ctx->bl_dev); - } - - ctx->bl_dev->props.max_brightness = MAX_BRIGHTNESS; - ctx->bl_dev->props.brightness = DEFAULT_BRIGHTNESS; - ctx->bl_dev->props.power = FB_BLANK_POWERDOWN; + ret = s6e63j0x03_backlight_register(ctx); + if (ret) + return ret; ret = drm_panel_add(&ctx->panel); if (ret < 0) - goto unregister_backlight; + return ret; ret = mipi_dsi_attach(dsi); if (ret < 0) @@ -493,9 +501,6 @@ static int s6e63j0x03_probe(struct mipi_dsi_device *dsi) remove_panel: drm_panel_remove(&ctx->panel); -unregister_backlight: - backlight_device_unregister(ctx->bl_dev); - return ret; } @@ -506,8 +511,6 @@ static int s6e63j0x03_remove(struct mipi_dsi_device *dsi) mipi_dsi_detach(dsi); drm_panel_remove(&ctx->panel); - backlight_device_unregister(ctx->bl_dev); - return 0; } -- 2.20.1 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel