pmaports/device/linux-samsung-i927/0059-drm-panel-s6e63m0-Workaround-screen-corruption-on-bo.patch
Sergey Larin 5ccbcf999d
samsung-i927: update kernel to 5.2.1, more updates (!452)
- OTG support
- Charger
- WiFi 5GHz
- RTC bug "fixed" (always-on interrupt - made device overheat!)
- Kernel version bumped to 5.2.1
- Memory timings
- New WM8994 codec board driver (fixes suspend/resume)
- Camera's regulator supported now (saves power at least!)
- Updated panel driver (still not in mainline, idk why)
- MHL support in kernel (fixes boot times and screen, currently disabled in X,
  not tested)
- Other minor kernel chagnes

[ci:skip-build]: already built successfully in CI
2019-07-17 00:15:26 +02:00

51 lines
1.8 KiB
Diff

From 41a364dd10b44827986f6713932b297a79bd4778 Mon Sep 17 00:00:00 2001
From: Sergey Larin <cerg2010cerg2010@mail.ru>
Date: Sun, 14 Jul 2019 22:42:00 +0300
Subject: [PATCH] drm/panel: s6e63m0: Workaround screen corruption on boot
The panel driver gets probed before PMIC, so the regulator_bulk_get() call
fails with EPROBE_DEFER, making the driver to probe later in the boot
process. However, the screen gets corrupted in some time with noise
displayed. To resolve this, reset GPIO is now requested before the
regulator, setting the panel to the reset state.
Signed-off-by: Sergey Larin <cerg2010cerg2010@mail.ru>
---
drivers/gpu/drm/panel/panel-samsung-s6e63m0.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e63m0.c b/drivers/gpu/drm/panel/panel-samsung-s6e63m0.c
index db2c34adf26d..753906c32fe0 100644
--- a/drivers/gpu/drm/panel/panel-samsung-s6e63m0.c
+++ b/drivers/gpu/drm/panel/panel-samsung-s6e63m0.c
@@ -449,6 +449,13 @@ static int s6e63m0_probe(struct spi_device *spi)
ctx->enabled = false;
ctx->prepared = false;
+ ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
+ if (IS_ERR(ctx->reset_gpio)) {
+ DRM_DEV_ERROR(dev, "cannot get reset-gpios %ld\n",
+ PTR_ERR(ctx->reset_gpio));
+ return PTR_ERR(ctx->reset_gpio);
+ }
+
ctx->supplies[0].supply = "vdd3";
ctx->supplies[1].supply = "vci";
ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies),
@@ -458,13 +465,6 @@ static int s6e63m0_probe(struct spi_device *spi)
return ret;
}
- ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
- if (IS_ERR(ctx->reset_gpio)) {
- DRM_DEV_ERROR(dev, "cannot get reset-gpios %ld\n",
- PTR_ERR(ctx->reset_gpio));
- return PTR_ERR(ctx->reset_gpio);
- }
-
spi->bits_per_word = 9;
spi->mode = SPI_MODE_3;
ret = spi_setup(spi);
--
2.22.0