Skip to content

Commit c4d229c

Browse files
committed
drm/panel-jdi-lt070me050000: Don't control backlight when off
If the display has never been powered up, or been powered dow via unprepare, then don't allow the backlight subsystem to try and send DSI commands to the powered down panel. Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
1 parent fcb9bed commit c4d229c

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

drivers/gpu/drm/panel/panel-jdi-lt070me05000.c

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -279,10 +279,10 @@ static int jdi_panel_enable(struct drm_panel *panel)
279279
if (jdi->enabled)
280280
return 0;
281281

282-
backlight_enable(jdi->backlight);
283-
284282
jdi->enabled = true;
285283

284+
backlight_enable(jdi->backlight);
285+
286286
return 0;
287287
}
288288

@@ -326,10 +326,14 @@ static int jdi_panel_get_modes(struct drm_panel *panel,
326326

327327
static int dsi_dcs_bl_get_brightness(struct backlight_device *bl)
328328
{
329-
struct mipi_dsi_device *dsi = bl_get_data(bl);
329+
struct jdi_panel *jdi = bl_get_data(bl);
330+
struct mipi_dsi_device *dsi = jdi->dsi;
330331
int ret;
331332
u16 brightness = bl->props.brightness;
332333

334+
if (!jdi->enabled)
335+
return brightness;
336+
333337
dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
334338

335339
ret = mipi_dsi_dcs_get_display_brightness(dsi, &brightness);
@@ -343,9 +347,13 @@ static int dsi_dcs_bl_get_brightness(struct backlight_device *bl)
343347

344348
static int dsi_dcs_bl_update_status(struct backlight_device *bl)
345349
{
346-
struct mipi_dsi_device *dsi = bl_get_data(bl);
350+
struct jdi_panel *jdi = bl_get_data(bl);
351+
struct mipi_dsi_device *dsi = jdi->dsi;
347352
int ret;
348353

354+
if (!jdi->enabled)
355+
return 0;
356+
349357
dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
350358

351359
ret = mipi_dsi_dcs_set_display_brightness(dsi, bl->props.brightness);
@@ -363,8 +371,9 @@ static const struct backlight_ops dsi_bl_ops = {
363371
};
364372

365373
static struct backlight_device *
366-
drm_panel_create_dsi_backlight(struct mipi_dsi_device *dsi)
374+
drm_panel_create_dsi_backlight(struct jdi_panel *jdi)
367375
{
376+
struct mipi_dsi_device *dsi = jdi->dsi;
368377
struct device *dev = &dsi->dev;
369378
struct backlight_properties props;
370379

@@ -373,7 +382,7 @@ drm_panel_create_dsi_backlight(struct mipi_dsi_device *dsi)
373382
props.brightness = 255;
374383
props.max_brightness = 255;
375384

376-
return devm_backlight_device_register(dev, dev_name(dev), dev, dsi,
385+
return devm_backlight_device_register(dev, dev_name(dev), dev, jdi,
377386
&dsi_bl_ops, &props);
378387
}
379388

@@ -424,7 +433,7 @@ static int jdi_panel_add(struct jdi_panel *jdi)
424433
return dev_err_probe(dev, PTR_ERR(jdi->dcdc_en_gpio),
425434
"cannot get dcdc-en-gpio %d\n", ret);
426435

427-
jdi->backlight = drm_panel_create_dsi_backlight(jdi->dsi);
436+
jdi->backlight = drm_panel_create_dsi_backlight(jdi);
428437
if (IS_ERR(jdi->backlight))
429438
return dev_err_probe(dev, PTR_ERR(jdi->backlight),
430439
"failed to register backlight %d\n", ret);

0 commit comments

Comments
 (0)