* [PATCH v2 0/3] Add support for the Samsung S6E8FCO display panel
@ 2026-02-23 20:26 Yedaya Katsman
2026-02-23 20:26 ` [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO Yedaya Katsman
` (3 more replies)
0 siblings, 4 replies; 18+ messages in thread
From: Yedaya Katsman @ 2026-02-23 20:26 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio
Cc: ~postmarketos/upstreaming, dri-devel, devicetree, linux-kernel,
linux-arm-msm, Yedaya Katsman, Dmitry Baryshkov
This adds a driver to support the Samsung S6E8FCO display panel found in Xiaomi
Mi A3 (xiaomi-laurel). The driver is generated using
linux-mdss-dsi-panel-driver-generator[0].
The mdss reset dependency makes the screen work more reliably.
[0]: https://github.com/msm8916-mainline/linux-mdss-dsi-panel-driver-generator
Original tree with patches: https://gitlab.postmarketos.org/SzczurekYT/linux/-/tree/laurel
Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
---
Changes in v2:
- Changed commit title like Dmitry asked
- Fixed copyright header years
- Link to v1: https://lore.kernel.org/r/20260223-panel-patches-v1-0-7756209477f9@gmail.com
---
Yedaya Katsman (3):
dt-bindings: display: panel: Add Samsung S6E8FCO
drm: panel: Add Samsung S6E8FCO
arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel
.../bindings/display/panel/samsung,s6e8fco.yaml | 64 +++++
MAINTAINERS | 6 +
.../boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts | 94 +++++++
drivers/gpu/drm/panel/Kconfig | 12 +
drivers/gpu/drm/panel/Makefile | 1 +
drivers/gpu/drm/panel/panel-samsung-s6e8fco.c | 293 +++++++++++++++++++++
6 files changed, 470 insertions(+)
---
base-commit: d4906ae14a5f136ceb671bb14cedbf13fa560da6
change-id: 20260218-panel-patches-696df7e0d810
prerequisite-message-id: <20260216233600.13098-2-val@packett.cool>
prerequisite-patch-id: 3fba84f11111406e0d530013fd45ad0eb389786b
prerequisite-patch-id: 81440b7f28f9101d3dc5d4bad6dc86e39b81a026
prerequisite-patch-id: 53469d8c9810169d058f1bfd27ac8399038aae74
prerequisite-patch-id: 80809bee71eb6434f6699d5e5f8c7f9d4bcd1ca7
prerequisite-patch-id: 0269e01c9c54a37bb92983635cd516342189aee5
prerequisite-patch-id: e2bbf7c452d4da6d71b1a5194e0d7ce46584e113
Best regards,
--
Yedaya Katsman <yedaya.ka@gmail.com>
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO
2026-02-23 20:26 [PATCH v2 0/3] Add support for the Samsung S6E8FCO display panel Yedaya Katsman
@ 2026-02-23 20:26 ` Yedaya Katsman
2026-02-24 7:26 ` Krzysztof Kozlowski
2026-02-23 20:26 ` [PATCH v2 2/3] drm: " Yedaya Katsman
` (2 subsequent siblings)
3 siblings, 1 reply; 18+ messages in thread
From: Yedaya Katsman @ 2026-02-23 20:26 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio
Cc: ~postmarketos/upstreaming, dri-devel, devicetree, linux-kernel,
linux-arm-msm, Yedaya Katsman
Document Samsung S6E8FCO 6.09" 720x1560 panel
found in the Xiaomi Mi A3 smartphone.
Co-developed-by: Kamil Gołda <kamil.golda@protonmail.com>
Signed-off-by: Kamil Gołda <kamil.golda@protonmail.com>
Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
---
.../bindings/display/panel/samsung,s6e8fco.yaml | 64 ++++++++++++++++++++++
MAINTAINERS | 5 ++
2 files changed, 69 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml b/Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8c042ce5f65bf317df48e109d88ebdc87ef5d5ed
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml
@@ -0,0 +1,64 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/panel/samsung,s6e8fco.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Samsung S6E8FCO AMOLED Panel
+
+maintainers:
+ - Yedaya Katsman <yedaya.ka@gmail.com>
+
+allOf:
+ - $ref: panel-common.yaml#
+
+properties:
+ compatible:
+ const: samsung,s6e8fco
+
+ reg:
+ maxItems: 1
+
+ vddio-supply: true
+ ldo-supply: true
+ iovcc-supply: true
+ reset-gpios: true
+ port: true
+
+required:
+ - compatible
+ - reg
+ - vddio-supply
+ - ldo-supply
+ - iovcc-supply
+ - port
+ - reset-gpios
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+
+ dsi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ panel@0 {
+ compatible = "samsung,s6e8fco";
+ reg = <0>;
+
+ vddio-supply = <&vreg_l9a>;
+ ldo-supply = <&panel_ldo_supply>;
+ iovcc-supply = <&panel_iovcc_supply>;
+
+ reset-gpios = <&tlmm 90 GPIO_ACTIVE_LOW>;
+
+ port {
+ panel_in: endpoint {
+ remote-endpoint = <&mdss_dsi0_out>;
+ };
+ };
+ };
+ };
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index e087673237636268346979ddc270f8cf0905c722..545d4cf68b9ac27765c7981e668e32cfecf3366b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8183,6 +8183,11 @@ S: Maintained
F: Documentation/devicetree/bindings/display/panel/samsung,s6e3ha8.yaml
F: drivers/gpu/drm/panel/panel-samsung-s6e3ha8.c
+DRM DRIVER FOR SAMSUNG S6E8FCO PANELS
+M: Yedaya Katsman <yedaya.ka@gmail.com>
+S: Maintained
+F: Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml
+
DRM DRIVER FOR SAMSUNG SOFEF00 DDIC
M: David Heidelberg <david@ixit.cz>
M: Casey Connolly <casey.connolly@linaro.org>
--
2.53.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 2/3] drm: panel: Add Samsung S6E8FCO
2026-02-23 20:26 [PATCH v2 0/3] Add support for the Samsung S6E8FCO display panel Yedaya Katsman
2026-02-23 20:26 ` [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO Yedaya Katsman
@ 2026-02-23 20:26 ` Yedaya Katsman
2026-02-23 22:00 ` David Heidelberg
2026-02-23 20:26 ` [PATCH v2 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel Yedaya Katsman
2026-02-25 11:50 ` [PATCH v2 0/3] Add support for the Samsung S6E8FCO display panel Konrad Dybcio
3 siblings, 1 reply; 18+ messages in thread
From: Yedaya Katsman @ 2026-02-23 20:26 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio
Cc: ~postmarketos/upstreaming, dri-devel, devicetree, linux-kernel,
linux-arm-msm, Yedaya Katsman, Dmitry Baryshkov
Add driver for Samsung S6E8FCO DSI video mode panel, used in
Xiaomi Mi A3 mobile phone.
Co-developed-by: Kamil Gołda <kamil.golda@protonmail.com>
Signed-off-by: Kamil Gołda <kamil.golda@protonmail.com>
Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
MAINTAINERS | 1 +
drivers/gpu/drm/panel/Kconfig | 12 ++
drivers/gpu/drm/panel/Makefile | 1 +
drivers/gpu/drm/panel/panel-samsung-s6e8fco.c | 293 ++++++++++++++++++++++++++
4 files changed, 307 insertions(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index 545d4cf68b9ac27765c7981e668e32cfecf3366b..238b5332eaf0e0cfb9834084e24671ccaee79939 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8187,6 +8187,7 @@ DRM DRIVER FOR SAMSUNG S6E8FCO PANELS
M: Yedaya Katsman <yedaya.ka@gmail.com>
S: Maintained
F: Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml
+F: drivers/gpu/drm/panel/panel-samsung-s6e8fco.c
DRM DRIVER FOR SAMSUNG SOFEF00 DDIC
M: David Heidelberg <david@ixit.cz>
diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
index 7a83804fedca1b688ce6fbe4295ec9009007e693..734640bb3f73c83e9273573aeb720ea1ba20862f 100644
--- a/drivers/gpu/drm/panel/Kconfig
+++ b/drivers/gpu/drm/panel/Kconfig
@@ -893,6 +893,18 @@ config DRM_PANEL_SAMSUNG_S6E8AA5X01_AMS561RA01
~5.6 inch AMOLED display, and the controller is driven by the MIPI
DSI protocol with 4 lanes.
+config DRM_PANEL_SAMSUNG_S6E8FCO
+ tristate "Samsung S6E8FCO DSI video mode panel"
+ depends on OF
+ depends on BACKLIGHT_CLASS_DEVICE
+ select DRM_MIPI_DSI
+ select VIDEOMODE_HELPERS
+ help
+ Say Y or M here if you want to enable support for the Samsung video
+ mode panel S6E8FCO. The panel has a 6.09 inch AMOLED display, with
+ a resolution of 720x1560.
+ Found in the Xiaomi Mi A3 smartphone (xiaomi-laurel).
+
config DRM_PANEL_SAMSUNG_SOFEF00
tristate "Samsung SOFEF00 DSI panel controller"
depends on OF
diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
index b9562a6fdcb38bfd0dfee9e8c11e16149ada4386..54eca60e5b57328ea94ed7880f4dead981f87fc1 100644
--- a/drivers/gpu/drm/panel/Makefile
+++ b/drivers/gpu/drm/panel/Makefile
@@ -91,6 +91,7 @@ obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS427AP24) += panel-samsung-s6e88a0-ams4
obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01) += panel-samsung-s6e88a0-ams452ef01.o
obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0) += panel-samsung-s6e8aa0.o
obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E8AA5X01_AMS561RA01) += panel-samsung-s6e8aa5x01-ams561ra01.o
+obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E8FCO) += panel-samsung-s6e8fco.o
obj-$(CONFIG_DRM_PANEL_SAMSUNG_SOFEF00) += panel-samsung-sofef00.o
obj-$(CONFIG_DRM_PANEL_SEIKO_43WVF1G) += panel-seiko-43wvf1g.o
obj-$(CONFIG_DRM_PANEL_SHARP_LQ079L1SX01) += panel-sharp-lq079l1sx01.o
diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e8fco.c b/drivers/gpu/drm/panel/panel-samsung-s6e8fco.c
new file mode 100644
index 0000000000000000000000000000000000000000..7bbbe8af3e2eb9021ed7f555cb4ad2b0d7ea55ee
--- /dev/null
+++ b/drivers/gpu/drm/panel/panel-samsung-s6e8fco.c
@@ -0,0 +1,293 @@
+// SPDX-License-Identifier: GPL-2.0-only
+// Copyright (c) 2025 Kamil Gołda <kamil.golda@protonmail.com>
+// Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree:
+// Copyright (c) 2025, The Linux Foundation. All rights reserved.
+
+#include <linux/backlight.h>
+#include <linux/delay.h>
+#include <linux/gpio/consumer.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/regulator/consumer.h>
+
+#include <video/mipi_display.h>
+
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_modes.h>
+#include <drm/drm_panel.h>
+#include <drm/drm_probe_helper.h>
+
+struct s6e8fco_samsungp {
+ struct drm_panel panel;
+ struct mipi_dsi_device *dsi;
+ struct regulator_bulk_data *supplies;
+ struct gpio_desc *reset_gpio;
+};
+
+static const struct regulator_bulk_data s6e8fco_samsungp_supplies[] = {
+ { .supply = "vddio" },
+ { .supply = "ldo" },
+ { .supply = "iovcc" },
+};
+
+static inline
+struct s6e8fco_samsungp *to_s6e8fco_samsungp(struct drm_panel *panel)
+{
+ return container_of_const(panel, struct s6e8fco_samsungp, panel);
+}
+
+static void s6e8fco_samsungp_reset(struct s6e8fco_samsungp *ctx)
+{
+ gpiod_set_value_cansleep(ctx->reset_gpio, 0);
+ usleep_range(12000, 13000);
+ gpiod_set_value_cansleep(ctx->reset_gpio, 1);
+ usleep_range(2000, 3000);
+ gpiod_set_value_cansleep(ctx->reset_gpio, 0);
+ usleep_range(10000, 11000);
+}
+
+static int s6e8fco_samsungp_on(struct s6e8fco_samsungp *ctx)
+{
+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
+
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0x5a, 0x5a);
+
+ mipi_dsi_dcs_set_display_brightness_multi(&dsi_ctx, 0x0000);
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, MIPI_DCS_WRITE_CONTROL_DISPLAY,
+ 0x20);
+ mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx);
+ mipi_dsi_msleep(&dsi_ctx, 50);
+ mipi_dsi_dcs_set_display_on_multi(&dsi_ctx);
+
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xb0, 0x04, 0xed);
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xed,
+ 0xe4, 0x08, 0x96, 0xa4, 0x2a, 0x72, 0xe2,
+ 0xca, 0x00);
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0xa5, 0xa5);
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf0, 0x5a, 0x5a);
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0x5a, 0x5a);
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xe1, 0x93);
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xb0, 0x05, 0xf4);
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf4, 0x03);
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xed, 0x01, 0x81, 0x04);
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf0, 0xa5, 0xa5);
+ mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0xa5, 0xa5);
+
+ return dsi_ctx.accum_err;
+}
+
+static int s6e8fco_samsungp_off(struct s6e8fco_samsungp *ctx)
+{
+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
+
+
+ mipi_dsi_dcs_set_display_off_multi(&dsi_ctx);
+ mipi_dsi_msleep(&dsi_ctx, 20);
+ mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx);
+ mipi_dsi_msleep(&dsi_ctx, 120);
+
+ return dsi_ctx.accum_err;
+}
+
+static int s6e8fco_samsungp_prepare(struct drm_panel *panel)
+{
+ struct s6e8fco_samsungp *ctx = to_s6e8fco_samsungp(panel);
+ struct device *dev = &ctx->dsi->dev;
+ int ret;
+
+ ret = regulator_bulk_enable(ARRAY_SIZE(s6e8fco_samsungp_supplies), ctx->supplies);
+ if (ret < 0) {
+ dev_err(dev, "Failed to enable regulators: %d\n", ret);
+ return ret;
+ }
+
+ s6e8fco_samsungp_reset(ctx);
+
+ ret = s6e8fco_samsungp_on(ctx);
+ if (ret < 0) {
+ dev_err(dev, "Failed to initialize panel: %d\n", ret);
+ gpiod_set_value_cansleep(ctx->reset_gpio, 1);
+ regulator_bulk_disable(ARRAY_SIZE(s6e8fco_samsungp_supplies), ctx->supplies);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int s6e8fco_samsungp_unprepare(struct drm_panel *panel)
+{
+ struct s6e8fco_samsungp *ctx = to_s6e8fco_samsungp(panel);
+ struct device *dev = &ctx->dsi->dev;
+ int ret;
+
+ ret = s6e8fco_samsungp_off(ctx);
+ if (ret < 0)
+ dev_err(dev, "Failed to un-initialize panel: %d\n", ret);
+
+ gpiod_set_value_cansleep(ctx->reset_gpio, 1);
+ regulator_bulk_disable(ARRAY_SIZE(s6e8fco_samsungp_supplies), ctx->supplies);
+
+ return 0;
+}
+
+static const struct drm_display_mode s6e8fco_samsungp_mode = {
+ .clock = (720 + 350 + 40 + 294) * (1560 + 17 + 2 + 5) * 60 / 1000,
+ .hdisplay = 720,
+ .hsync_start = 720 + 350,
+ .hsync_end = 720 + 350 + 40,
+ .htotal = 720 + 350 + 40 + 294,
+ .vdisplay = 1560,
+ .vsync_start = 1560 + 17,
+ .vsync_end = 1560 + 17 + 2,
+ .vtotal = 1560 + 17 + 2 + 5,
+ .width_mm = 65,
+ .height_mm = 140,
+ .type = DRM_MODE_TYPE_DRIVER,
+};
+
+static int s6e8fco_samsungp_get_modes(struct drm_panel *panel,
+ struct drm_connector *connector)
+{
+ return drm_connector_helper_get_modes_fixed(connector, &s6e8fco_samsungp_mode);
+}
+
+static const struct drm_panel_funcs s6e8fco_samsungp_panel_funcs = {
+ .prepare = s6e8fco_samsungp_prepare,
+ .unprepare = s6e8fco_samsungp_unprepare,
+ .get_modes = s6e8fco_samsungp_get_modes,
+};
+
+static int s6e8fco_samsungp_bl_update_status(struct backlight_device *bl)
+{
+ struct mipi_dsi_device *dsi = bl_get_data(bl);
+ u16 brightness = backlight_get_brightness(bl);
+ int ret;
+
+ dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
+
+ ret = mipi_dsi_dcs_set_display_brightness_large(dsi, brightness);
+ if (ret < 0)
+ return ret;
+
+ dsi->mode_flags |= MIPI_DSI_MODE_LPM;
+
+ return 0;
+}
+
+static int s6e8fco_samsungp_bl_get_brightness(struct backlight_device *bl)
+{
+ struct mipi_dsi_device *dsi = bl_get_data(bl);
+ u16 brightness;
+ int ret;
+
+ dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
+
+ ret = mipi_dsi_dcs_get_display_brightness_large(dsi, &brightness);
+ if (ret < 0)
+ return ret;
+
+ dsi->mode_flags |= MIPI_DSI_MODE_LPM;
+
+ return brightness;
+}
+
+static const struct backlight_ops s6e8fco_samsungp_bl_ops = {
+ .update_status = s6e8fco_samsungp_bl_update_status,
+ .get_brightness = s6e8fco_samsungp_bl_get_brightness,
+};
+
+static struct backlight_device *
+s6e8fco_samsungp_create_backlight(struct mipi_dsi_device *dsi)
+{
+ struct device *dev = &dsi->dev;
+ const struct backlight_properties props = {
+ .type = BACKLIGHT_RAW,
+ .brightness = 268,
+ .max_brightness = 2047,
+ };
+
+ return devm_backlight_device_register(dev, dev_name(dev), dev, dsi,
+ &s6e8fco_samsungp_bl_ops, &props);
+}
+
+static int s6e8fco_samsungp_probe(struct mipi_dsi_device *dsi)
+{
+ struct device *dev = &dsi->dev;
+ struct s6e8fco_samsungp *ctx;
+ int ret;
+
+ ctx = devm_drm_panel_alloc(dev, struct s6e8fco_samsungp, panel,
+ &s6e8fco_samsungp_panel_funcs,
+ DRM_MODE_CONNECTOR_DSI);
+ if (IS_ERR(ctx))
+ return PTR_ERR(ctx);
+
+ ret = devm_regulator_bulk_get_const(dev,
+ ARRAY_SIZE(s6e8fco_samsungp_supplies),
+ s6e8fco_samsungp_supplies,
+ &ctx->supplies);
+ if (ret < 0)
+ return ret;
+
+ ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
+ if (IS_ERR(ctx->reset_gpio))
+ return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
+ "Failed to get reset-gpios\n");
+
+ ctx->dsi = dsi;
+ mipi_dsi_set_drvdata(dsi, ctx);
+
+ dsi->lanes = 4;
+ dsi->format = MIPI_DSI_FMT_RGB888;
+ dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+ MIPI_DSI_CLOCK_NON_CONTINUOUS;
+
+ ctx->panel.prepare_prev_first = true;
+
+ ctx->panel.backlight = s6e8fco_samsungp_create_backlight(dsi);
+ if (IS_ERR(ctx->panel.backlight))
+ return dev_err_probe(dev, PTR_ERR(ctx->panel.backlight),
+ "Failed to create backlight\n");
+
+ drm_panel_add(&ctx->panel);
+
+ ret = mipi_dsi_attach(dsi);
+ if (ret < 0) {
+ drm_panel_remove(&ctx->panel);
+ return dev_err_probe(dev, ret, "Failed to attach to DSI host\n");
+ }
+
+ return 0;
+}
+
+static void s6e8fco_samsungp_remove(struct mipi_dsi_device *dsi)
+{
+ struct s6e8fco_samsungp *ctx = mipi_dsi_get_drvdata(dsi);
+ int ret;
+
+ ret = mipi_dsi_detach(dsi);
+ if (ret < 0)
+ dev_err(&dsi->dev, "Failed to detach from DSI host: %d\n", ret);
+
+ drm_panel_remove(&ctx->panel);
+}
+
+static const struct of_device_id s6e8fco_samsungp_of_match[] = {
+ { .compatible = "samsung,s6e8fco" },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, s6e8fco_samsungp_of_match);
+
+static struct mipi_dsi_driver s6e8fco_samsungp_driver = {
+ .probe = s6e8fco_samsungp_probe,
+ .remove = s6e8fco_samsungp_remove,
+ .driver = {
+ .name = "panel-samsung-s6e8fco",
+ .of_match_table = s6e8fco_samsungp_of_match,
+ },
+};
+module_mipi_dsi_driver(s6e8fco_samsungp_driver);
+
+MODULE_AUTHOR("Kamil Gołda <kamil.golda@protonmail.com>");
+MODULE_DESCRIPTION("DRM driver for s6e8fco samsung amoled video mode dsi panel");
+MODULE_LICENSE("GPL");
--
2.53.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel
2026-02-23 20:26 [PATCH v2 0/3] Add support for the Samsung S6E8FCO display panel Yedaya Katsman
2026-02-23 20:26 ` [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO Yedaya Katsman
2026-02-23 20:26 ` [PATCH v2 2/3] drm: " Yedaya Katsman
@ 2026-02-23 20:26 ` Yedaya Katsman
2026-02-23 22:08 ` David Heidelberg
2026-02-25 11:50 ` [PATCH v2 0/3] Add support for the Samsung S6E8FCO display panel Konrad Dybcio
3 siblings, 1 reply; 18+ messages in thread
From: Yedaya Katsman @ 2026-02-23 20:26 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio
Cc: ~postmarketos/upstreaming, dri-devel, devicetree, linux-kernel,
linux-arm-msm, Yedaya Katsman
Enable the MDSS nodes and add supplies and bindings for the Samsung
S6E8FCO panel.
The ldo and iovcc pins boot up with a current of 16 mA, but they work
fine with 2mA, so I used that.
Co-developed-by: Kamil Gołda <kamil.golda@protonmail.com>
Signed-off-by: Kamil Gołda <kamil.golda@protonmail.com>
Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
---
.../boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts | 94 ++++++++++++++++++++++
1 file changed, 94 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts b/arch/arm64/boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts
index 994fb0412fcbdf5466f87a325c48b697a37b514b..10fd01143a644004b807fc455d2235f8e6a9737a 100644
--- a/arch/arm64/boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts
+++ b/arch/arm64/boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts
@@ -82,6 +82,32 @@ key-volume-up {
};
};
+ panel_ldo_supply: panel-ldo-supply {
+ compatible = "regulator-fixed";
+ regulator-name = "panel_ldo_supply";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-boot-on;
+
+ enable-active-high;
+ gpio = <&tlmm 26 GPIO_ACTIVE_HIGH>;
+ pinctrl-0 = <&panel_ldo_en>;
+ pinctrl-names = "default";
+ };
+
+ panel_iovcc_supply: panel-iovcc-supply {
+ compatible = "regulator-fixed";
+ regulator-name = "panel_iovcc_supply";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-boot-on;
+
+ enable-active-high;
+ gpio = <&tlmm 124 GPIO_ACTIVE_HIGH>;
+ pinctrl-0 = <&panel_iovcc_en>;
+ pinctrl-names = "default";
+ };
+
thermal-zones {
rf-pa0-thermal {
thermal-sensors = <&pm6125_adc_tm 0>;
@@ -128,6 +154,46 @@ &hsusb_phy1 {
status = "okay";
};
+&mdss {
+ status = "okay";
+};
+
+&mdss_dsi0 {
+ vdda-supply = <&vreg_l18a>;
+
+ pinctrl-0 = <&mdss_default>;
+ pinctrl-1 = <&mdss_sleep>;
+ pinctrl-names = "default", "sleep";
+
+ status = "okay";
+
+ panel@0 {
+ compatible = "samsung,s6e8fco";
+ reg = <0>;
+
+ vddio-supply = <&vreg_l9a>;
+ ldo-supply = <&panel_ldo_supply>;
+ iovcc-supply = <&panel_iovcc_supply>;
+ reset-gpios = <&tlmm 90 GPIO_ACTIVE_LOW>;
+
+ port {
+ panel_in: endpoint {
+ remote-endpoint = <&mdss_dsi0_out>;
+ };
+ };
+ };
+};
+
+&mdss_dsi0_out {
+ data-lanes = <0 1 2 3>;
+ remote-endpoint = <&panel_in>;
+};
+
+
+&mdss_dsi0_phy {
+ status = "okay";
+};
+
&pm6125_adc {
pinctrl-names = "default";
pinctrl-0 = <&camera_flash_therm &emmc_ufs_therm>;
@@ -387,6 +453,34 @@ &sdhc_2 {
&tlmm {
gpio-reserved-ranges = <22 2>, <28 6>;
+
+ panel_ldo_en: panel-ldo-default-state {
+ pins = "gpio26";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ mdss_default: mdss-default-state {
+ pins = "gpio90";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ mdss_sleep: mdss-sleep-state {
+ pins = "gpio90";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-down;
+ };
+
+ panel_iovcc_en: panel-iovcc-default-state {
+ pins = "gpio124";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
};
&ufs_mem_hc {
--
2.53.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH v2 2/3] drm: panel: Add Samsung S6E8FCO
2026-02-23 20:26 ` [PATCH v2 2/3] drm: " Yedaya Katsman
@ 2026-02-23 22:00 ` David Heidelberg
2026-02-25 21:13 ` Yedaya Katsman
0 siblings, 1 reply; 18+ messages in thread
From: David Heidelberg @ 2026-02-23 22:00 UTC (permalink / raw)
To: Yedaya Katsman, Neil Armstrong, Jessica Zhang, David Airlie,
Simona Vetter, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Kamil Gołda, Bjorn Andersson, Konrad Dybcio
Cc: dri-devel, devicetree, linux-kernel, linux-arm-msm,
Dmitry Baryshkov
On 23/02/2026 21:26, Yedaya Katsman wrote:
> Add driver for Samsung S6E8FCO DSI video mode panel, used in
> Xiaomi Mi A3 mobile phone.
>
> Co-developed-by: Kamil Gołda <kamil.golda@protonmail.com>
> Signed-off-by: Kamil Gołda <kamil.golda@protonmail.com>
> Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> ---
> MAINTAINERS | 1 +
> drivers/gpu/drm/panel/Kconfig | 12 ++
> drivers/gpu/drm/panel/Makefile | 1 +
> drivers/gpu/drm/panel/panel-samsung-s6e8fco.c | 293 ++++++++++++++++++++++++++
> 4 files changed, 307 insertions(+)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 545d4cf68b9ac27765c7981e668e32cfecf3366b..238b5332eaf0e0cfb9834084e24671ccaee79939 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -8187,6 +8187,7 @@ DRM DRIVER FOR SAMSUNG S6E8FCO PANELS
> M: Yedaya Katsman <yedaya.ka@gmail.com>
> S: Maintained
> F: Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml
> +F: drivers/gpu/drm/panel/panel-samsung-s6e8fco.c
>
> DRM DRIVER FOR SAMSUNG SOFEF00 DDIC
> M: David Heidelberg <david@ixit.cz>
> diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
> index 7a83804fedca1b688ce6fbe4295ec9009007e693..734640bb3f73c83e9273573aeb720ea1ba20862f 100644
> --- a/drivers/gpu/drm/panel/Kconfig
> +++ b/drivers/gpu/drm/panel/Kconfig
> @@ -893,6 +893,18 @@ config DRM_PANEL_SAMSUNG_S6E8AA5X01_AMS561RA01
> ~5.6 inch AMOLED display, and the controller is driven by the MIPI
> DSI protocol with 4 lanes.
>
> +config DRM_PANEL_SAMSUNG_S6E8FCO
> + tristate "Samsung S6E8FCO DSI video mode panel"
> + depends on OF
> + depends on BACKLIGHT_CLASS_DEVICE
> + select DRM_MIPI_DSI
> + select VIDEOMODE_HELPERS
> + help
> + Say Y or M here if you want to enable support for the Samsung video
> + mode panel S6E8FCO. The panel has a 6.09 inch AMOLED display, with
The S6E8.. is not panel, but Display Driver IC, the panel from the
replacement parts is likely one of M1906F9SH M1906F9SI, thus I would say
M1906F9.
> + a resolution of 720x1560.
> + Found in the Xiaomi Mi A3 smartphone (xiaomi-laurel).
> +
> config DRM_PANEL_SAMSUNG_SOFEF00
> tristate "Samsung SOFEF00 DSI panel controller"
> depends on OF
> diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
> index b9562a6fdcb38bfd0dfee9e8c11e16149ada4386..54eca60e5b57328ea94ed7880f4dead981f87fc1 100644
> --- a/drivers/gpu/drm/panel/Makefile
> +++ b/drivers/gpu/drm/panel/Makefile
> @@ -91,6 +91,7 @@ obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS427AP24) += panel-samsung-s6e88a0-ams4
> obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01) += panel-samsung-s6e88a0-ams452ef01.o
> obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0) += panel-samsung-s6e8aa0.o
> obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E8AA5X01_AMS561RA01) += panel-samsung-s6e8aa5x01-ams561ra01.o
> +obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E8FCO) += panel-samsung-s6e8fco.o
> obj-$(CONFIG_DRM_PANEL_SAMSUNG_SOFEF00) += panel-samsung-sofef00.o
> obj-$(CONFIG_DRM_PANEL_SEIKO_43WVF1G) += panel-seiko-43wvf1g.o
> obj-$(CONFIG_DRM_PANEL_SHARP_LQ079L1SX01) += panel-sharp-lq079l1sx01.o
> diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e8fco.c b/drivers/gpu/drm/panel/panel-samsung-s6e8fco.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..7bbbe8af3e2eb9021ed7f555cb4ad2b0d7ea55ee
> --- /dev/null
> +++ b/drivers/gpu/drm/panel/panel-samsung-s6e8fco.c
> @@ -0,0 +1,293 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +// Copyright (c) 2025 Kamil Gołda <kamil.golda@protonmail.com>
nitpick: you can also drop copyright year from your copyright or update,
up to you.
> +// Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree:
> +// Copyright (c) 2025, The Linux Foundation. All rights reserved.
> +
> +#include <linux/backlight.h>
> +#include <linux/delay.h>
> +#include <linux/gpio/consumer.h>
> +#include <linux/mod_devicetable.h>
> +#include <linux/module.h>
> +#include <linux/regulator/consumer.h>
> +
> +#include <video/mipi_display.h>
> +
> +#include <drm/drm_mipi_dsi.h>
> +#include <drm/drm_modes.h>
> +#include <drm/drm_panel.h>
> +#include <drm/drm_probe_helper.h>
> +
> +struct s6e8fco_samsungp {
> + struct drm_panel panel;
> + struct mipi_dsi_device *dsi;
> + struct regulator_bulk_data *supplies;
> + struct gpio_desc *reset_gpio;
> +};
> +
> +static const struct regulator_bulk_data s6e8fco_samsungp_supplies[] = {
> + { .supply = "vddio" },
> + { .supply = "ldo" },
> + { .supply = "iovcc" },
> +};
> +
> +static inline
> +struct s6e8fco_samsungp *to_s6e8fco_samsungp(struct drm_panel *panel)
> +{
> + return container_of_const(panel, struct s6e8fco_samsungp, panel);
> +}
> +
> +static void s6e8fco_samsungp_reset(struct s6e8fco_samsungp *ctx)
> +{
> + gpiod_set_value_cansleep(ctx->reset_gpio, 0);
> + usleep_range(12000, 13000);
> + gpiod_set_value_cansleep(ctx->reset_gpio, 1);
> + usleep_range(2000, 3000);
> + gpiod_set_value_cansleep(ctx->reset_gpio, 0);
> + usleep_range(10000, 11000);
> +}
> +
> +static int s6e8fco_samsungp_on(struct s6e8fco_samsungp *ctx)
> +{
> + struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
> +
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0x5a, 0x5a);
#define s6e3fc2x01_test_key_on_lvl3(ctx) \
mipi_dsi_dcs_write_seq_multi(ctx, 0xfc, 0x5a, 0x5a> +
> + mipi_dsi_dcs_set_display_brightness_multi(&dsi_ctx, 0x0000);
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, MIPI_DCS_WRITE_CONTROL_DISPLAY,
> + 0x20);
> + mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx);
> + mipi_dsi_msleep(&dsi_ctx, 50);
> + mipi_dsi_dcs_set_display_on_multi(&dsi_ctx);
> +
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xb0, 0x04, 0xed);
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xed,
> + 0xe4, 0x08, 0x96, 0xa4, 0x2a, 0x72, 0xe2,
> + 0xca, 0x00);
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0xa5, 0xa5);
#define s6e3fc2x01_test_key_off_lvl3(ctx) \
mipi_dsi_dcs_write_seq_multi(ctx, 0xfc, 0xa5, 0xa5)
etc. etc., check panel-samsung-s6e3fc2x01.c for example (and eventually
other surrounding drivers) and try to de-mystify the writes as much as
you can (ofc "reasonably" - as we don't have the datasheet).
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf0, 0x5a, 0x5a);
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0x5a, 0x5a);
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xe1, 0x93);
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xb0, 0x05, 0xf4);
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf4, 0x03);
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xed, 0x01, 0x81, 0x04);
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf0, 0xa5, 0xa5);
> + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0xa5, 0xa5);
> +
> + return dsi_ctx.accum_err;
> +}
> +
> +static int s6e8fco_samsungp_off(struct s6e8fco_samsungp *ctx)
> +{
> + struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
> +
> +
> + mipi_dsi_dcs_set_display_off_multi(&dsi_ctx);
> + mipi_dsi_msleep(&dsi_ctx, 20);
> + mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx);
> + mipi_dsi_msleep(&dsi_ctx, 120);
> +
> + return dsi_ctx.accum_err;
> +}
> +
> +static int s6e8fco_samsungp_prepare(struct drm_panel *panel)
> +{
> + struct s6e8fco_samsungp *ctx = to_s6e8fco_samsungp(panel);
> + struct device *dev = &ctx->dsi->dev;
> + int ret;
> +
> + ret = regulator_bulk_enable(ARRAY_SIZE(s6e8fco_samsungp_supplies), ctx->supplies);
> + if (ret < 0) {
> + dev_err(dev, "Failed to enable regulators: %d\n", ret);
> + return ret;
> + }
> +
> + s6e8fco_samsungp_reset(ctx);
> +
> + ret = s6e8fco_samsungp_on(ctx);
> + if (ret < 0) {
> + dev_err(dev, "Failed to initialize panel: %d\n", ret);
> + gpiod_set_value_cansleep(ctx->reset_gpio, 1);
> + regulator_bulk_disable(ARRAY_SIZE(s6e8fco_samsungp_supplies), ctx->supplies);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static int s6e8fco_samsungp_unprepare(struct drm_panel *panel)
> +{
> + struct s6e8fco_samsungp *ctx = to_s6e8fco_samsungp(panel);
> + struct device *dev = &ctx->dsi->dev;
> + int ret;
> +
> + ret = s6e8fco_samsungp_off(ctx);
> + if (ret < 0)
> + dev_err(dev, "Failed to un-initialize panel: %d\n", ret);
> +
> + gpiod_set_value_cansleep(ctx->reset_gpio, 1);
> + regulator_bulk_disable(ARRAY_SIZE(s6e8fco_samsungp_supplies), ctx->supplies);
> +
> + return 0;
> +}
> +
> +static const struct drm_display_mode s6e8fco_samsungp_mode = {
name the struct according to the panel, not (only) the DDIC.
> + .clock = (720 + 350 + 40 + 294) * (1560 + 17 + 2 + 5) * 60 / 1000,
> + .hdisplay = 720,
> + .hsync_start = 720 + 350,
> + .hsync_end = 720 + 350 + 40,
> + .htotal = 720 + 350 + 40 + 294,
> + .vdisplay = 1560,
> + .vsync_start = 1560 + 17,
> + .vsync_end = 1560 + 17 + 2,
> + .vtotal = 1560 + 17 + 2 + 5,
> + .width_mm = 65,
> + .height_mm = 140,
> + .type = DRM_MODE_TYPE_DRIVER,
> +};
> +
> +static int s6e8fco_samsungp_get_modes(struct drm_panel *panel,
> + struct drm_connector *connector)
> +{
> + return drm_connector_helper_get_modes_fixed(connector, &s6e8fco_samsungp_mode);
> +}
> +
> +static const struct drm_panel_funcs s6e8fco_samsungp_panel_funcs = {
> + .prepare = s6e8fco_samsungp_prepare,
> + .unprepare = s6e8fco_samsungp_unprepare,
> + .get_modes = s6e8fco_samsungp_get_modes,
> +};
> +
> +static int s6e8fco_samsungp_bl_update_status(struct backlight_device *bl)
> +{
> + struct mipi_dsi_device *dsi = bl_get_data(bl);
> + u16 brightness = backlight_get_brightness(bl);
> + int ret;
> +
> + dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
> +
> + ret = mipi_dsi_dcs_set_display_brightness_large(dsi, brightness);
> + if (ret < 0)
> + return ret;
> +
> + dsi->mode_flags |= MIPI_DSI_MODE_LPM;
> +
> + return 0;
> +}
> +
> +static int s6e8fco_samsungp_bl_get_brightness(struct backlight_device *bl)
> +{
> + struct mipi_dsi_device *dsi = bl_get_data(bl);
> + u16 brightness;
> + int ret;
> +
> + dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
> +
> + ret = mipi_dsi_dcs_get_display_brightness_large(dsi, &brightness);
> + if (ret < 0)
> + return ret;
> +
> + dsi->mode_flags |= MIPI_DSI_MODE_LPM;
> +
> + return brightness;
> +}
> +
> +static const struct backlight_ops s6e8fco_samsungp_bl_ops = {
> + .update_status = s6e8fco_samsungp_bl_update_status,
> + .get_brightness = s6e8fco_samsungp_bl_get_brightness,
> +};
> +
> +static struct backlight_device *
> +s6e8fco_samsungp_create_backlight(struct mipi_dsi_device *dsi)
> +{
> + struct device *dev = &dsi->dev;
> + const struct backlight_properties props = {
> + .type = BACKLIGHT_RAW,
> + .brightness = 268,
~ 10% of brightness at boot? What is the scale? Shouldn't make sense to
set it around 50%? (just asking)
> + .max_brightness = 2047,
> + };
> +
> + return devm_backlight_device_register(dev, dev_name(dev), dev, dsi,
> + &s6e8fco_samsungp_bl_ops, &props);
> +}
> +
> +static int s6e8fco_samsungp_probe(struct mipi_dsi_device *dsi)
> +{
> + struct device *dev = &dsi->dev;
> + struct s6e8fco_samsungp *ctx;
> + int ret;
> +
> + ctx = devm_drm_panel_alloc(dev, struct s6e8fco_samsungp, panel,
> + &s6e8fco_samsungp_panel_funcs,
> + DRM_MODE_CONNECTOR_DSI);
> + if (IS_ERR(ctx))
> + return PTR_ERR(ctx);
> +
> + ret = devm_regulator_bulk_get_const(dev,
> + ARRAY_SIZE(s6e8fco_samsungp_supplies),
> + s6e8fco_samsungp_supplies,
> + &ctx->supplies);
> + if (ret < 0)
> + return ret;
> +
> + ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
> + if (IS_ERR(ctx->reset_gpio))
> + return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
> + "Failed to get reset-gpios\n");
> +
> + ctx->dsi = dsi;
> + mipi_dsi_set_drvdata(dsi, ctx);
> +
> + dsi->lanes = 4;
> + dsi->format = MIPI_DSI_FMT_RGB888;
> + dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
> + MIPI_DSI_CLOCK_NON_CONTINUOUS;
> +
> + ctx->panel.prepare_prev_first = true;
> +
> + ctx->panel.backlight = s6e8fco_samsungp_create_backlight(dsi);
> + if (IS_ERR(ctx->panel.backlight))
> + return dev_err_probe(dev, PTR_ERR(ctx->panel.backlight),
> + "Failed to create backlight\n");
> +
> + drm_panel_add(&ctx->panel);
> +
> + ret = mipi_dsi_attach(dsi);
> + if (ret < 0) {
> + drm_panel_remove(&ctx->panel);
> + return dev_err_probe(dev, ret, "Failed to attach to DSI host\n");
> + }
> +
> + return 0;
> +}
> +
> +static void s6e8fco_samsungp_remove(struct mipi_dsi_device *dsi)
> +{
> + struct s6e8fco_samsungp *ctx = mipi_dsi_get_drvdata(dsi);
> + int ret;
> +
> + ret = mipi_dsi_detach(dsi);
> + if (ret < 0)
> + dev_err(&dsi->dev, "Failed to detach from DSI host: %d\n", ret);
> +
> + drm_panel_remove(&ctx->panel);
> +}
> +
> +static const struct of_device_id s6e8fco_samsungp_of_match[] = {
> + { .compatible = "samsung,s6e8fco" },
Optimally the compatible should reflect the panel used, eg something
like samsung,s6e8fco-m1906f9 . It's possible there will be more panels
using this DDIC, then this would make it much clearer.
Happy to see another phone panel heading to mainline, thanks for your work!
David
> + { /* sentinel */ }
> +};
> +MODULE_DEVICE_TABLE(of, s6e8fco_samsungp_of_match);
> +
> +static struct mipi_dsi_driver s6e8fco_samsungp_driver = {
> + .probe = s6e8fco_samsungp_probe,
> + .remove = s6e8fco_samsungp_remove,
> + .driver = {
> + .name = "panel-samsung-s6e8fco",
> + .of_match_table = s6e8fco_samsungp_of_match,
> + },
> +};
> +module_mipi_dsi_driver(s6e8fco_samsungp_driver);
> +
> +MODULE_AUTHOR("Kamil Gołda <kamil.golda@protonmail.com>");
> +MODULE_DESCRIPTION("DRM driver for s6e8fco samsung amoled video mode dsi panel");
> +MODULE_LICENSE("GPL");
>
--
David Heidelberg
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel
2026-02-23 20:26 ` [PATCH v2 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel Yedaya Katsman
@ 2026-02-23 22:08 ` David Heidelberg
0 siblings, 0 replies; 18+ messages in thread
From: David Heidelberg @ 2026-02-23 22:08 UTC (permalink / raw)
To: Yedaya Katsman, Neil Armstrong, Jessica Zhang, David Airlie,
Simona Vetter, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Kamil Gołda, Bjorn Andersson, Konrad Dybcio
Cc: dri-devel, devicetree, linux-kernel, linux-arm-msm
On 23/02/2026 21:26, Yedaya Katsman wrote:
> Enable the MDSS nodes and add supplies and bindings for the Samsung
> S6E8FCO panel.
>
> The ldo and iovcc pins boot up with a current of 16 mA, but they work
> fine with 2mA, so I used that.
>
> Co-developed-by: Kamil Gołda <kamil.golda@protonmail.com>
> Signed-off-by: Kamil Gołda <kamil.golda@protonmail.com>
> Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
> ---
> .../boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts | 94 ++++++++++++++++++++++
> 1 file changed, 94 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts b/arch/arm64/boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts
> index 994fb0412fcbdf5466f87a325c48b697a37b514b..10fd01143a644004b807fc455d2235f8e6a9737a 100644
> --- a/arch/arm64/boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts
> +++ b/arch/arm64/boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts
> @@ -82,6 +82,32 @@ key-volume-up {
> };
> };
>
> + panel_ldo_supply: panel-ldo-supply {
> + compatible = "regulator-fixed";
> + regulator-name = "panel_ldo_supply";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + regulator-boot-on;
> +
> + enable-active-high;
> + gpio = <&tlmm 26 GPIO_ACTIVE_HIGH>;
> + pinctrl-0 = <&panel_ldo_en>;
> + pinctrl-names = "default";
> + };
> +
> + panel_iovcc_supply: panel-iovcc-supply {
> + compatible = "regulator-fixed";
> + regulator-name = "panel_iovcc_supply";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + regulator-boot-on;
> +
> + enable-active-high;
> + gpio = <&tlmm 124 GPIO_ACTIVE_HIGH>;
> + pinctrl-0 = <&panel_iovcc_en>;
> + pinctrl-names = "default";
> + };
> +
> thermal-zones {
> rf-pa0-thermal {
> thermal-sensors = <&pm6125_adc_tm 0>;
> @@ -128,6 +154,46 @@ &hsusb_phy1 {
> status = "okay";
> };
>
> +&mdss {
> + status = "okay";
> +};
> +
> +&mdss_dsi0 {
> + vdda-supply = <&vreg_l18a>;
> +
> + pinctrl-0 = <&mdss_default>;
> + pinctrl-1 = <&mdss_sleep>;
> + pinctrl-names = "default", "sleep";
I think this pinctrl should be associated with the panel.
You want to rename it and move it to the right place.
Check sm6125-sony-xperia-seine-pdx201.dts for an example.
Otherwise LGTM.
Note: when you send next version, please
Cc: phone-devel@vger.kernel.org
David
> +
> + status = "okay";
> +
> + panel@0 {
> + compatible = "samsung,s6e8fco";
> + reg = <0>;
> +
> + vddio-supply = <&vreg_l9a>;
> + ldo-supply = <&panel_ldo_supply>;
> + iovcc-supply = <&panel_iovcc_supply>;
> + reset-gpios = <&tlmm 90 GPIO_ACTIVE_LOW>;
> +
> + port {
> + panel_in: endpoint {
> + remote-endpoint = <&mdss_dsi0_out>;
> + };
> + };
> + };
> +};
> +
> +&mdss_dsi0_out {
> + data-lanes = <0 1 2 3>;
> + remote-endpoint = <&panel_in>;
> +};
> +
> +
> +&mdss_dsi0_phy {
> + status = "okay";
> +};
> +
> &pm6125_adc {
> pinctrl-names = "default";
> pinctrl-0 = <&camera_flash_therm &emmc_ufs_therm>;
> @@ -387,6 +453,34 @@ &sdhc_2 {
>
> &tlmm {
> gpio-reserved-ranges = <22 2>, <28 6>;
> +
> + panel_ldo_en: panel-ldo-default-state {
> + pins = "gpio26";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-pull-up;
> + };
> +
> + mdss_default: mdss-default-state {
> + pins = "gpio90";
> + function = "gpio";
> + drive-strength = <8>;
> + bias-disable;
> + };
> +
> + mdss_sleep: mdss-sleep-state {
> + pins = "gpio90";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-pull-down;
> + };
> +
> + panel_iovcc_en: panel-iovcc-default-state {
> + pins = "gpio124";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-pull-up;
> + };
> };
>
> &ufs_mem_hc {
>
--
David Heidelberg
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO
2026-02-23 20:26 ` [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO Yedaya Katsman
@ 2026-02-24 7:26 ` Krzysztof Kozlowski
2026-02-25 15:29 ` Yedaya Katsman
0 siblings, 1 reply; 18+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-24 7:26 UTC (permalink / raw)
To: Yedaya Katsman
Cc: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio, ~postmarketos/upstreaming,
dri-devel, devicetree, linux-kernel, linux-arm-msm
On Mon, Feb 23, 2026 at 10:26:20PM +0200, Yedaya Katsman wrote:
> Document Samsung S6E8FCO 6.09" 720x1560 panel
> found in the Xiaomi Mi A3 smartphone.
Please wrap commit message according to Linux coding style / submission
process (neither too early nor over the limit):
https://elixir.bootlin.com/linux/v6.4-rc1/source/Documentation/process/submitting-patches.rst#L597
>
> Co-developed-by: Kamil Gołda <kamil.golda@protonmail.com>
> Signed-off-by: Kamil Gołda <kamil.golda@protonmail.com>
> Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
> ---
> .../bindings/display/panel/samsung,s6e8fco.yaml | 64 ++++++++++++++++++++++
> MAINTAINERS | 5 ++
> 2 files changed, 69 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml b/Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml
> new file mode 100644
> index 0000000000000000000000000000000000000000..8c042ce5f65bf317df48e109d88ebdc87ef5d5ed
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml
> @@ -0,0 +1,64 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/display/panel/samsung,s6e8fco.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Samsung S6E8FCO AMOLED Panel
> +
> +maintainers:
> + - Yedaya Katsman <yedaya.ka@gmail.com>
> +
> +allOf:
> + - $ref: panel-common.yaml#
> +
> +properties:
> + compatible:
> + const: samsung,s6e8fco
> +
> + reg:
> + maxItems: 1
> +
> + vddio-supply: true
> + ldo-supply: true
LDO is the name of the type of regulator. Why is it called as name of
the supply?
Isn't this binding exactly the same as s6e3ha8, s6e8aa5x01, sofef00 or
any others?
> + iovcc-supply: true
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 0/3] Add support for the Samsung S6E8FCO display panel
2026-02-23 20:26 [PATCH v2 0/3] Add support for the Samsung S6E8FCO display panel Yedaya Katsman
` (2 preceding siblings ...)
2026-02-23 20:26 ` [PATCH v2 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel Yedaya Katsman
@ 2026-02-25 11:50 ` Konrad Dybcio
2026-02-25 20:07 ` Yedaya Katsman
3 siblings, 1 reply; 18+ messages in thread
From: Konrad Dybcio @ 2026-02-25 11:50 UTC (permalink / raw)
To: Yedaya Katsman, Neil Armstrong, Jessica Zhang, David Airlie,
Simona Vetter, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Kamil Gołda, Bjorn Andersson, Konrad Dybcio
Cc: ~postmarketos/upstreaming, dri-devel, devicetree, linux-kernel,
linux-arm-msm, Dmitry Baryshkov
On 2/23/26 9:26 PM, Yedaya Katsman wrote:
> This adds a driver to support the Samsung S6E8FCO display panel found in Xiaomi
> Mi A3 (xiaomi-laurel). The driver is generated using
> linux-mdss-dsi-panel-driver-generator[0].
>
> The mdss reset dependency makes the screen work more reliably.
>
> [0]: https://github.com/msm8916-mainline/linux-mdss-dsi-panel-driver-generator
> Original tree with patches: https://gitlab.postmarketos.org/SzczurekYT/linux/-/tree/laurel
>
> Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
> ---
> Changes in v2:
> - Changed commit title like Dmitry asked
You got more comments for patch 3 from Dmitry
https://lore.kernel.org/linux-arm-msm/dko7l6iage7blup4zbpsm32d2elvxpengqwbzcsv4v4zedjmpb@rsdrb77acgme/
Konrad
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO
2026-02-24 7:26 ` Krzysztof Kozlowski
@ 2026-02-25 15:29 ` Yedaya Katsman
2026-02-25 15:45 ` Krzysztof Kozlowski
0 siblings, 1 reply; 18+ messages in thread
From: Yedaya Katsman @ 2026-02-25 15:29 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio, ~postmarketos/upstreaming,
dri-devel, devicetree, linux-kernel, linux-arm-msm
On Tue, 24 Feb 2026 at 09:27, Krzysztof Kozlowski <krzk@kernel.org> wrote:
>
> On Mon, Feb 23, 2026 at 10:26:20PM +0200, Yedaya Katsman wrote:
> > Document Samsung S6E8FCO 6.09" 720x1560 panel
> > found in the Xiaomi Mi A3 smartphone.
>
> Please wrap commit message according to Linux coding style / submission
> process (neither too early nor over the limit):
> https://elixir.bootlin.com/linux/v6.4-rc1/source/Documentation/process/submitting-patches.rst#L597
Will do in the next version
> >
> > Co-developed-by: Kamil Gołda <kamil.golda@protonmail.com>
> > Signed-off-by: Kamil Gołda <kamil.golda@protonmail.com>
> > Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
> > ---
> > .../bindings/display/panel/samsung,s6e8fco.yaml | 64 ++++++++++++++++++++++
> > MAINTAINERS | 5 ++
> > 2 files changed, 69 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml b/Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml
> > new file mode 100644
> > index 0000000000000000000000000000000000000000..8c042ce5f65bf317df48e109d88ebdc87ef5d5ed
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml
> > @@ -0,0 +1,64 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/display/panel/samsung,s6e8fco.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Samsung S6E8FCO AMOLED Panel
> > +
> > +maintainers:
> > + - Yedaya Katsman <yedaya.ka@gmail.com>
> > +
> > +allOf:
> > + - $ref: panel-common.yaml#
> > +
> > +properties:
> > + compatible:
> > + const: samsung,s6e8fco
> > +
> > + reg:
> > + maxItems: 1
> > +
> > + vddio-supply: true
> > + ldo-supply: true
>
> LDO is the name of the type of regulator. Why is it called as name of
> the supply?
Can you explain more what you mean? Do you mean to change the name of
the property? It seems that all the regulator properties are named
foo-supply.
> Isn't this binding exactly the same as s6e3ha8, s6e8aa5x01, sofef00 or
> any others?
Yeah they follow the same pattern. Is there something missing in this
one? I will add descriptions to foo-supply properties
> > + iovcc-supply: true
>
>
> Best regards,
> Krzysztof
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO
2026-02-25 15:29 ` Yedaya Katsman
@ 2026-02-25 15:45 ` Krzysztof Kozlowski
2026-02-25 20:03 ` Yedaya Katsman
0 siblings, 1 reply; 18+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-25 15:45 UTC (permalink / raw)
To: Yedaya Katsman
Cc: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio, ~postmarketos/upstreaming,
dri-devel, devicetree, linux-kernel, linux-arm-msm
On 25/02/2026 16:29, Yedaya Katsman wrote:
>>> + vddio-supply: true
>>> + ldo-supply: true
>>
>> LDO is the name of the type of regulator. Why is it called as name of
>> the supply?
> Can you explain more what you mean? Do you mean to change the name of
> the property? It seems that all the regulator properties are named
> foo-supply.
I just have doubts that the device has supplied called LDO, considering
what LDO means.
>
>> Isn't this binding exactly the same as s6e3ha8, s6e8aa5x01, sofef00 or
>> any others?
> Yeah they follow the same pattern. Is there something missing in this
> one? I will add descriptions to foo-supply properties
No, was rather thinking that this should be combined into other binding,
assuming the actual pins and supplies are the same.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO
2026-02-25 15:45 ` Krzysztof Kozlowski
@ 2026-02-25 20:03 ` Yedaya Katsman
2026-02-26 6:55 ` Krzysztof Kozlowski
0 siblings, 1 reply; 18+ messages in thread
From: Yedaya Katsman @ 2026-02-25 20:03 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio, ~postmarketos/upstreaming,
dri-devel, devicetree, linux-kernel, linux-arm-msm
On Wed, 25 Feb 2026 at 17:45, Krzysztof Kozlowski <krzk@kernel.org> wrote:
>
> On 25/02/2026 16:29, Yedaya Katsman wrote:
> >>> + vddio-supply: true
> >>> + ldo-supply: true
> >>
> >> LDO is the name of the type of regulator. Why is it called as name of
> >> the supply?
> > Can you explain more what you mean? Do you mean to change the name of
> > the property? It seems that all the regulator properties are named
> > foo-supply.
>
> I just have doubts that the device has supplied called LDO, considering
> what LDO means.
OK. I don't really have a way to verify if it's true, all I have is
the downstream dts
which calls it LDO [0]
[0] https://github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/d3766fc8cda2d96de2850faa9ce58e5a37ea9f9c/arch/arm64/boot/dts/qcom/trinket-sde-display.dtsi#L24-L36
> >
> >> Isn't this binding exactly the same as s6e3ha8, s6e8aa5x01, sofef00 or
> >> any others?
> > Yeah they follow the same pattern. Is there something missing in this
> > one? I will add descriptions to foo-supply properties
>
> No, was rather thinking that this should be combined into other binding,
> assuming the actual pins and supplies are the same.
Got it. I don't see any bindings that have the exact same set of supply
regulators, at least according to their names.
I guess I could add the regulators for this one to one of them and make the
not-common regulators non-required, but I don't know if that's what you had
in mind.
> Best regards,
> Krzysztof
Thanks,
Yedaya
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 0/3] Add support for the Samsung S6E8FCO display panel
2026-02-25 11:50 ` [PATCH v2 0/3] Add support for the Samsung S6E8FCO display panel Konrad Dybcio
@ 2026-02-25 20:07 ` Yedaya Katsman
0 siblings, 0 replies; 18+ messages in thread
From: Yedaya Katsman @ 2026-02-25 20:07 UTC (permalink / raw)
To: Konrad Dybcio
Cc: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio, ~postmarketos/upstreaming,
dri-devel, devicetree, linux-kernel, linux-arm-msm,
Dmitry Baryshkov
On Wed, 25 Feb 2026 at 13:50, Konrad Dybcio
<konrad.dybcio@oss.qualcomm.com> wrote:
>
> On 2/23/26 9:26 PM, Yedaya Katsman wrote:
> > This adds a driver to support the Samsung S6E8FCO display panel found in Xiaomi
> > Mi A3 (xiaomi-laurel). The driver is generated using
> > linux-mdss-dsi-panel-driver-generator[0].
> >
> > The mdss reset dependency makes the screen work more reliably.
> >
> > [0]: https://github.com/msm8916-mainline/linux-mdss-dsi-panel-driver-generator
> > Original tree with patches: https://gitlab.postmarketos.org/SzczurekYT/linux/-/tree/laurel
> >
> > Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
> > ---
> > Changes in v2:
> > - Changed commit title like Dmitry asked
>
> You got more comments for patch 3 from Dmitry
>
> https://lore.kernel.org/linux-arm-msm/dko7l6iage7blup4zbpsm32d2elvxpengqwbzcsv4v4zedjmpb@rsdrb77acgme/
Thanks for pointing it out, I missed it. Responded to that
> Konrad
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 2/3] drm: panel: Add Samsung S6E8FCO
2026-02-23 22:00 ` David Heidelberg
@ 2026-02-25 21:13 ` Yedaya Katsman
2026-02-25 21:24 ` David Heidelberg
0 siblings, 1 reply; 18+ messages in thread
From: Yedaya Katsman @ 2026-02-25 21:13 UTC (permalink / raw)
To: David Heidelberg
Cc: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio, dri-devel, devicetree,
linux-kernel, linux-arm-msm, Dmitry Baryshkov
On Tue, 24 Feb 2026 at 00:00, David Heidelberg <david@ixit.cz> wrote:
>
> On 23/02/2026 21:26, Yedaya Katsman wrote:
> > Add driver for Samsung S6E8FCO DSI video mode panel, used in
> > Xiaomi Mi A3 mobile phone.
> >
> > Co-developed-by: Kamil Gołda <kamil.golda@protonmail.com>
> > Signed-off-by: Kamil Gołda <kamil.golda@protonmail.com>
> > Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com>
> > Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> > ---
> > MAINTAINERS | 1 +
> > drivers/gpu/drm/panel/Kconfig | 12 ++
> > drivers/gpu/drm/panel/Makefile | 1 +
> > drivers/gpu/drm/panel/panel-samsung-s6e8fco.c | 293 ++++++++++++++++++++++++++
> > 4 files changed, 307 insertions(+)
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index 545d4cf68b9ac27765c7981e668e32cfecf3366b..238b5332eaf0e0cfb9834084e24671ccaee79939 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -8187,6 +8187,7 @@ DRM DRIVER FOR SAMSUNG S6E8FCO PANELS
> > M: Yedaya Katsman <yedaya.ka@gmail.com>
> > S: Maintained
> > F: Documentation/devicetree/bindings/display/panel/samsung,s6e8fco.yaml
> > +F: drivers/gpu/drm/panel/panel-samsung-s6e8fco.c
> >
> > DRM DRIVER FOR SAMSUNG SOFEF00 DDIC
> > M: David Heidelberg <david@ixit.cz>
> > diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
> > index 7a83804fedca1b688ce6fbe4295ec9009007e693..734640bb3f73c83e9273573aeb720ea1ba20862f 100644
> > --- a/drivers/gpu/drm/panel/Kconfig
> > +++ b/drivers/gpu/drm/panel/Kconfig
> > @@ -893,6 +893,18 @@ config DRM_PANEL_SAMSUNG_S6E8AA5X01_AMS561RA01
> > ~5.6 inch AMOLED display, and the controller is driven by the MIPI
> > DSI protocol with 4 lanes.
> >
> > +config DRM_PANEL_SAMSUNG_S6E8FCO
> > + tristate "Samsung S6E8FCO DSI video mode panel"
> > + depends on OF
> > + depends on BACKLIGHT_CLASS_DEVICE
> > + select DRM_MIPI_DSI
> > + select VIDEOMODE_HELPERS
> > + help
> > + Say Y or M here if you want to enable support for the Samsung video
> > + mode panel S6E8FCO. The panel has a 6.09 inch AMOLED display, with
>
> The S6E8.. is not panel, but Display Driver IC, the panel from the
> replacement parts is likely one of M1906F9SH M1906F9SI, thus I would say
> M1906F9.
>
> > + a resolution of 720x1560.
> > + Found in the Xiaomi Mi A3 smartphone (xiaomi-laurel).
> > +
> > config DRM_PANEL_SAMSUNG_SOFEF00
> > tristate "Samsung SOFEF00 DSI panel controller"
> > depends on OF
> > diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
> > index b9562a6fdcb38bfd0dfee9e8c11e16149ada4386..54eca60e5b57328ea94ed7880f4dead981f87fc1 100644
> > --- a/drivers/gpu/drm/panel/Makefile
> > +++ b/drivers/gpu/drm/panel/Makefile
> > @@ -91,6 +91,7 @@ obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS427AP24) += panel-samsung-s6e88a0-ams4
> > obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01) += panel-samsung-s6e88a0-ams452ef01.o
> > obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0) += panel-samsung-s6e8aa0.o
> > obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E8AA5X01_AMS561RA01) += panel-samsung-s6e8aa5x01-ams561ra01.o
> > +obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E8FCO) += panel-samsung-s6e8fco.o
> > obj-$(CONFIG_DRM_PANEL_SAMSUNG_SOFEF00) += panel-samsung-sofef00.o
> > obj-$(CONFIG_DRM_PANEL_SEIKO_43WVF1G) += panel-seiko-43wvf1g.o
> > obj-$(CONFIG_DRM_PANEL_SHARP_LQ079L1SX01) += panel-sharp-lq079l1sx01.o
> > diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e8fco.c b/drivers/gpu/drm/panel/panel-samsung-s6e8fco.c
> > new file mode 100644
> > index 0000000000000000000000000000000000000000..7bbbe8af3e2eb9021ed7f555cb4ad2b0d7ea55ee
> > --- /dev/null
> > +++ b/drivers/gpu/drm/panel/panel-samsung-s6e8fco.c
> > @@ -0,0 +1,293 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +// Copyright (c) 2025 Kamil Gołda <kamil.golda@protonmail.com>
>
> nitpick: you can also drop copyright year from your copyright or update,
> up to you.
>
> > +// Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree:
> > +// Copyright (c) 2025, The Linux Foundation. All rights reserved.
> > +
> > +#include <linux/backlight.h>
> > +#include <linux/delay.h>
> > +#include <linux/gpio/consumer.h>
> > +#include <linux/mod_devicetable.h>
> > +#include <linux/module.h>
> > +#include <linux/regulator/consumer.h>
> > +
> > +#include <video/mipi_display.h>
> > +
> > +#include <drm/drm_mipi_dsi.h>
> > +#include <drm/drm_modes.h>
> > +#include <drm/drm_panel.h>
> > +#include <drm/drm_probe_helper.h>
> > +
> > +struct s6e8fco_samsungp {
> > + struct drm_panel panel;
> > + struct mipi_dsi_device *dsi;
> > + struct regulator_bulk_data *supplies;
> > + struct gpio_desc *reset_gpio;
> > +};
> > +
> > +static const struct regulator_bulk_data s6e8fco_samsungp_supplies[] = {
> > + { .supply = "vddio" },
> > + { .supply = "ldo" },
> > + { .supply = "iovcc" },
> > +};
> > +
> > +static inline
> > +struct s6e8fco_samsungp *to_s6e8fco_samsungp(struct drm_panel *panel)
> > +{
> > + return container_of_const(panel, struct s6e8fco_samsungp, panel);
> > +}
> > +
> > +static void s6e8fco_samsungp_reset(struct s6e8fco_samsungp *ctx)
> > +{
> > + gpiod_set_value_cansleep(ctx->reset_gpio, 0);
> > + usleep_range(12000, 13000);
> > + gpiod_set_value_cansleep(ctx->reset_gpio, 1);
> > + usleep_range(2000, 3000);
> > + gpiod_set_value_cansleep(ctx->reset_gpio, 0);
> > + usleep_range(10000, 11000);
> > +}
> > +
> > +static int s6e8fco_samsungp_on(struct s6e8fco_samsungp *ctx)
> > +{
> > + struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
> > +
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0x5a, 0x5a);
>
> #define s6e3fc2x01_test_key_on_lvl3(ctx) \
> mipi_dsi_dcs_write_seq_multi(ctx, 0xfc, 0x5a, 0x5a> +
> > + mipi_dsi_dcs_set_display_brightness_multi(&dsi_ctx, 0x0000);
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, MIPI_DCS_WRITE_CONTROL_DISPLAY,
> > + 0x20);
> > + mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx);
> > + mipi_dsi_msleep(&dsi_ctx, 50);
> > + mipi_dsi_dcs_set_display_on_multi(&dsi_ctx);
> > +
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xb0, 0x04, 0xed);
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xed,
> > + 0xe4, 0x08, 0x96, 0xa4, 0x2a, 0x72, 0xe2,
> > + 0xca, 0x00);
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0xa5, 0xa5);
>
> #define s6e3fc2x01_test_key_off_lvl3(ctx) \
> mipi_dsi_dcs_write_seq_multi(ctx, 0xfc, 0xa5, 0xa5)
>
> etc. etc., check panel-samsung-s6e3fc2x01.c for example (and eventually
> other surrounding drivers) and try to de-mystify the writes as much as
> you can (ofc "reasonably" - as we don't have the datasheet).
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf0, 0x5a, 0x5a);
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0x5a, 0x5a);
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xe1, 0x93);
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xb0, 0x05, 0xf4);
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf4, 0x03);
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xed, 0x01, 0x81, 0x04);
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xf0, 0xa5, 0xa5);
> > + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, 0xfc, 0xa5, 0xa5);
> > +
> > + return dsi_ctx.accum_err;
> > +}
> > +
> > +static int s6e8fco_samsungp_off(struct s6e8fco_samsungp *ctx)
> > +{
> > + struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
> > +
> > +
> > + mipi_dsi_dcs_set_display_off_multi(&dsi_ctx);
> > + mipi_dsi_msleep(&dsi_ctx, 20);
> > + mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx);
> > + mipi_dsi_msleep(&dsi_ctx, 120);
> > +
> > + return dsi_ctx.accum_err;
> > +}
> > +
> > +static int s6e8fco_samsungp_prepare(struct drm_panel *panel)
> > +{
> > + struct s6e8fco_samsungp *ctx = to_s6e8fco_samsungp(panel);
> > + struct device *dev = &ctx->dsi->dev;
> > + int ret;
> > +
> > + ret = regulator_bulk_enable(ARRAY_SIZE(s6e8fco_samsungp_supplies), ctx->supplies);
> > + if (ret < 0) {
> > + dev_err(dev, "Failed to enable regulators: %d\n", ret);
> > + return ret;
> > + }
> > +
> > + s6e8fco_samsungp_reset(ctx);
> > +
> > + ret = s6e8fco_samsungp_on(ctx);
> > + if (ret < 0) {
> > + dev_err(dev, "Failed to initialize panel: %d\n", ret);
> > + gpiod_set_value_cansleep(ctx->reset_gpio, 1);
> > + regulator_bulk_disable(ARRAY_SIZE(s6e8fco_samsungp_supplies), ctx->supplies);
> > + return ret;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > +static int s6e8fco_samsungp_unprepare(struct drm_panel *panel)
> > +{
> > + struct s6e8fco_samsungp *ctx = to_s6e8fco_samsungp(panel);
> > + struct device *dev = &ctx->dsi->dev;
> > + int ret;
> > +
> > + ret = s6e8fco_samsungp_off(ctx);
> > + if (ret < 0)
> > + dev_err(dev, "Failed to un-initialize panel: %d\n", ret);
> > +
> > + gpiod_set_value_cansleep(ctx->reset_gpio, 1);
> > + regulator_bulk_disable(ARRAY_SIZE(s6e8fco_samsungp_supplies), ctx->supplies);
> > +
> > + return 0;
> > +}
> > +
> > +static const struct drm_display_mode s6e8fco_samsungp_mode = {
>
> name the struct according to the panel, not (only) the DDIC.
Did that (in the next version I will send), changed the rest of
driver to be very S6E8FCO-M1906F9 specific as well.
>
> > + .clock = (720 + 350 + 40 + 294) * (1560 + 17 + 2 + 5) * 60 / 1000,
> > + .hdisplay = 720,
> > + .hsync_start = 720 + 350,
> > + .hsync_end = 720 + 350 + 40,
> > + .htotal = 720 + 350 + 40 + 294,
> > + .vdisplay = 1560,
> > + .vsync_start = 1560 + 17,
> > + .vsync_end = 1560 + 17 + 2,
> > + .vtotal = 1560 + 17 + 2 + 5,
> > + .width_mm = 65,
> > + .height_mm = 140,
> > + .type = DRM_MODE_TYPE_DRIVER,
> > +};
> > +
> > +static int s6e8fco_samsungp_get_modes(struct drm_panel *panel,
> > + struct drm_connector *connector)
> > +{
> > + return drm_connector_helper_get_modes_fixed(connector, &s6e8fco_samsungp_mode);
> > +}
> > +
> > +static const struct drm_panel_funcs s6e8fco_samsungp_panel_funcs = {
> > + .prepare = s6e8fco_samsungp_prepare,
> > + .unprepare = s6e8fco_samsungp_unprepare,
> > + .get_modes = s6e8fco_samsungp_get_modes,
> > +};
> > +
> > +static int s6e8fco_samsungp_bl_update_status(struct backlight_device *bl)
> > +{
> > + struct mipi_dsi_device *dsi = bl_get_data(bl);
> > + u16 brightness = backlight_get_brightness(bl);
> > + int ret;
> > +
> > + dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
> > +
> > + ret = mipi_dsi_dcs_set_display_brightness_large(dsi, brightness);
> > + if (ret < 0)
> > + return ret;
> > +
> > + dsi->mode_flags |= MIPI_DSI_MODE_LPM;
> > +
> > + return 0;
> > +}
> > +
> > +static int s6e8fco_samsungp_bl_get_brightness(struct backlight_device *bl)
> > +{
> > + struct mipi_dsi_device *dsi = bl_get_data(bl);
> > + u16 brightness;
> > + int ret;
> > +
> > + dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
> > +
> > + ret = mipi_dsi_dcs_get_display_brightness_large(dsi, &brightness);
> > + if (ret < 0)
> > + return ret;
> > +
> > + dsi->mode_flags |= MIPI_DSI_MODE_LPM;
> > +
> > + return brightness;
> > +}
> > +
> > +static const struct backlight_ops s6e8fco_samsungp_bl_ops = {
> > + .update_status = s6e8fco_samsungp_bl_update_status,
> > + .get_brightness = s6e8fco_samsungp_bl_get_brightness,
> > +};
> > +
> > +static struct backlight_device *
> > +s6e8fco_samsungp_create_backlight(struct mipi_dsi_device *dsi)
> > +{
> > + struct device *dev = &dsi->dev;
> > + const struct backlight_properties props = {
> > + .type = BACKLIGHT_RAW,
> > + .brightness = 268,
>
> ~ 10% of brightness at boot? What is the scale? Shouldn't make sense to
> set it around 50%? (just asking)
This is just what was configured downstream, it looks bright enough for me
fwiw, I can change it if you want.
> > + .max_brightness = 2047,
> > + };
> > +
> > + return devm_backlight_device_register(dev, dev_name(dev), dev, dsi,
> > + &s6e8fco_samsungp_bl_ops, &props);
> > +}
> > +
> > +static int s6e8fco_samsungp_probe(struct mipi_dsi_device *dsi)
> > +{
> > + struct device *dev = &dsi->dev;
> > + struct s6e8fco_samsungp *ctx;
> > + int ret;
> > +
> > + ctx = devm_drm_panel_alloc(dev, struct s6e8fco_samsungp, panel,
> > + &s6e8fco_samsungp_panel_funcs,
> > + DRM_MODE_CONNECTOR_DSI);
> > + if (IS_ERR(ctx))
> > + return PTR_ERR(ctx);
> > +
> > + ret = devm_regulator_bulk_get_const(dev,
> > + ARRAY_SIZE(s6e8fco_samsungp_supplies),
> > + s6e8fco_samsungp_supplies,
> > + &ctx->supplies);
> > + if (ret < 0)
> > + return ret;
> > +
> > + ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
> > + if (IS_ERR(ctx->reset_gpio))
> > + return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
> > + "Failed to get reset-gpios\n");
> > +
> > + ctx->dsi = dsi;
> > + mipi_dsi_set_drvdata(dsi, ctx);
> > +
> > + dsi->lanes = 4;
> > + dsi->format = MIPI_DSI_FMT_RGB888;
> > + dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
> > + MIPI_DSI_CLOCK_NON_CONTINUOUS;
> > +
> > + ctx->panel.prepare_prev_first = true;
> > +
> > + ctx->panel.backlight = s6e8fco_samsungp_create_backlight(dsi);
> > + if (IS_ERR(ctx->panel.backlight))
> > + return dev_err_probe(dev, PTR_ERR(ctx->panel.backlight),
> > + "Failed to create backlight\n");
> > +
> > + drm_panel_add(&ctx->panel);
> > +
> > + ret = mipi_dsi_attach(dsi);
> > + if (ret < 0) {
> > + drm_panel_remove(&ctx->panel);
> > + return dev_err_probe(dev, ret, "Failed to attach to DSI host\n");
> > + }
> > +
> > + return 0;
> > +}
> > +
> > +static void s6e8fco_samsungp_remove(struct mipi_dsi_device *dsi)
> > +{
> > + struct s6e8fco_samsungp *ctx = mipi_dsi_get_drvdata(dsi);
> > + int ret;
> > +
> > + ret = mipi_dsi_detach(dsi);
> > + if (ret < 0)
> > + dev_err(&dsi->dev, "Failed to detach from DSI host: %d\n", ret);
> > +
> > + drm_panel_remove(&ctx->panel);
> > +}
> > +
> > +static const struct of_device_id s6e8fco_samsungp_of_match[] = {
> > + { .compatible = "samsung,s6e8fco" },
>
> Optimally the compatible should reflect the panel used, eg something
> like samsung,s6e8fco-m1906f9 . It's possible there will be more panels
> using this DDIC, then this would make it much clearer.
Will do
> Happy to see another phone panel heading to mainline, thanks for your work!
Thanks for your review!
> David
>
> > + { /* sentinel */ }
> > +};
> > +MODULE_DEVICE_TABLE(of, s6e8fco_samsungp_of_match);
> > +
> > +static struct mipi_dsi_driver s6e8fco_samsungp_driver = {
> > + .probe = s6e8fco_samsungp_probe,
> > + .remove = s6e8fco_samsungp_remove,
> > + .driver = {
> > + .name = "panel-samsung-s6e8fco",
> > + .of_match_table = s6e8fco_samsungp_of_match,
> > + },
> > +};
> > +module_mipi_dsi_driver(s6e8fco_samsungp_driver);
> > +
> > +MODULE_AUTHOR("Kamil Gołda <kamil.golda@protonmail.com>");
> > +MODULE_DESCRIPTION("DRM driver for s6e8fco samsung amoled video mode dsi panel");
> > +MODULE_LICENSE("GPL");
> >
>
> --
> David Heidelberg
>
Thanks, Yedaya
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 2/3] drm: panel: Add Samsung S6E8FCO
2026-02-25 21:13 ` Yedaya Katsman
@ 2026-02-25 21:24 ` David Heidelberg
2026-02-26 11:49 ` Yedaya Katsman
0 siblings, 1 reply; 18+ messages in thread
From: David Heidelberg @ 2026-02-25 21:24 UTC (permalink / raw)
To: Yedaya Katsman
Cc: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio, dri-devel, devicetree,
linux-kernel, linux-arm-msm, Dmitry Baryshkov
On 25/02/2026 22:13, Yedaya Katsman wrote:
[...]
>>> +static struct backlight_device *
>>> +s6e8fco_samsungp_create_backlight(struct mipi_dsi_device *dsi)
>>> +{
>>> + struct device *dev = &dsi->dev;
>>> + const struct backlight_properties props = {
>>> + .type = BACKLIGHT_RAW,
>>> + .brightness = 268,
>>
>> ~ 10% of brightness at boot? What is the scale? Shouldn't make sense to
>> set it around 50%? (just asking)
> This is just what was configured downstream, it looks bright enough for me
> fwiw, I can change it if you want.
No need to change it if it’s bright enough. If it’s usable when you
power on the device outdoors with some daylight exposure, then it’s fine.
Also, since the user can adjust the brightness later, it won’t matter
much either way.
Thanks,
David
[...]
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO
2026-02-25 20:03 ` Yedaya Katsman
@ 2026-02-26 6:55 ` Krzysztof Kozlowski
2026-02-26 13:42 ` Konrad Dybcio
0 siblings, 1 reply; 18+ messages in thread
From: Krzysztof Kozlowski @ 2026-02-26 6:55 UTC (permalink / raw)
To: Yedaya Katsman
Cc: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio, ~postmarketos/upstreaming,
dri-devel, devicetree, linux-kernel, linux-arm-msm
On 25/02/2026 21:03, Yedaya Katsman wrote:
> On Wed, 25 Feb 2026 at 17:45, Krzysztof Kozlowski <krzk@kernel.org> wrote:
>>
>> On 25/02/2026 16:29, Yedaya Katsman wrote:
>>>>> + vddio-supply: true
>>>>> + ldo-supply: true
>>>>
>>>> LDO is the name of the type of regulator. Why is it called as name of
>>>> the supply?
>>> Can you explain more what you mean? Do you mean to change the name of
>>> the property? It seems that all the regulator properties are named
>>> foo-supply.
>>
>> I just have doubts that the device has supplied called LDO, considering
>> what LDO means.
> OK. I don't really have a way to verify if it's true, all I have is
> the downstream dts
> which calls it LDO [0]
>
> [0] https://github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/d3766fc8cda2d96de2850faa9ce58e5a37ea9f9c/arch/arm64/boot/dts/qcom/trinket-sde-display.dtsi#L24-L36
Obviously the regulator is LDO, so they called it. Most of the
regulators are LDO, so why VDD IN is not called LDO?
This is name of the supply in this device.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 2/3] drm: panel: Add Samsung S6E8FCO
2026-02-25 21:24 ` David Heidelberg
@ 2026-02-26 11:49 ` Yedaya Katsman
0 siblings, 0 replies; 18+ messages in thread
From: Yedaya Katsman @ 2026-02-26 11:49 UTC (permalink / raw)
To: David Heidelberg
Cc: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio, dri-devel, devicetree,
linux-kernel, linux-arm-msm, Dmitry Baryshkov
On Wed, 25 Feb 2026 at 23:24, David Heidelberg <david@ixit.cz> wrote:
>
> On 25/02/2026 22:13, Yedaya Katsman wrote:
>
>
> [...]
> >>> +static struct backlight_device *
> >>> +s6e8fco_samsungp_create_backlight(struct mipi_dsi_device *dsi)
> >>> +{
> >>> + struct device *dev = &dsi->dev;
> >>> + const struct backlight_properties props = {
> >>> + .type = BACKLIGHT_RAW,
> >>> + .brightness = 268,
> >>
> >> ~ 10% of brightness at boot? What is the scale? Shouldn't make sense to
> >> set it around 50%? (just asking)
> > This is just what was configured downstream, it looks bright enough for me
> > fwiw, I can change it if you want.
>
> No need to change it if it’s bright enough. If it’s usable when you
> power on the device outdoors with some daylight exposure, then it’s fine.
While testing this I found out that the max brightness is actually
1023, anything
above 1024 just wraps around, i.e 1224 is the same as 200. Will update the
max to be 1023.
I tested outside and it is a bit hard to see, will update the default to 512.
> Also, since the user can adjust the brightness later, it won’t matter
> much either way.
>
> Thanks,
> David
>
> [...]
Thank,
Yedaya
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO
2026-02-26 6:55 ` Krzysztof Kozlowski
@ 2026-02-26 13:42 ` Konrad Dybcio
2026-02-26 14:21 ` Yedaya Katsman
0 siblings, 1 reply; 18+ messages in thread
From: Konrad Dybcio @ 2026-02-26 13:42 UTC (permalink / raw)
To: Krzysztof Kozlowski, Yedaya Katsman
Cc: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Kamil Gołda,
Bjorn Andersson, Konrad Dybcio, ~postmarketos/upstreaming,
dri-devel, devicetree, linux-kernel, linux-arm-msm
On 2/26/26 7:55 AM, Krzysztof Kozlowski wrote:
> On 25/02/2026 21:03, Yedaya Katsman wrote:
>> On Wed, 25 Feb 2026 at 17:45, Krzysztof Kozlowski <krzk@kernel.org> wrote:
>>>
>>> On 25/02/2026 16:29, Yedaya Katsman wrote:
>>>>>> + vddio-supply: true
>>>>>> + ldo-supply: true
>>>>>
>>>>> LDO is the name of the type of regulator. Why is it called as name of
>>>>> the supply?
>>>> Can you explain more what you mean? Do you mean to change the name of
>>>> the property? It seems that all the regulator properties are named
>>>> foo-supply.
>>>
>>> I just have doubts that the device has supplied called LDO, considering
>>> what LDO means.
>> OK. I don't really have a way to verify if it's true, all I have is
>> the downstream dts
>> which calls it LDO [0]
>>
>> [0] https://github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/d3766fc8cda2d96de2850faa9ce58e5a37ea9f9c/arch/arm64/boot/dts/qcom/trinket-sde-display.dtsi#L24-L36
>
> Obviously the regulator is LDO, so they called it. Most of the
> regulators are LDO, so why VDD IN is not called LDO?
>
> This is name of the supply in this device.
Yedaya, in case you didn't catch it, LDO is an acronym:
https://en.wikipedia.org/wiki/Low-dropout_regulator
The vendor driver probably calls it that, because the input leg of
the panel's driver IC just so happens to be connected to a regulator
of this kind
If we don't know the actual name of that input and have no way to verify
it, I think 'power-supply' would be a good generic consensus, it happens
to be reasonably common across other bindings
Konrad
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO
2026-02-26 13:42 ` Konrad Dybcio
@ 2026-02-26 14:21 ` Yedaya Katsman
0 siblings, 0 replies; 18+ messages in thread
From: Yedaya Katsman @ 2026-02-26 14:21 UTC (permalink / raw)
To: Konrad Dybcio
Cc: Krzysztof Kozlowski, Neil Armstrong, Jessica Zhang, David Airlie,
Simona Vetter, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Kamil Gołda, Bjorn Andersson, Konrad Dybcio,
~postmarketos/upstreaming, dri-devel, devicetree, linux-kernel,
linux-arm-msm
On Thu, 26 Feb 2026 at 15:42, Konrad Dybcio
<konrad.dybcio@oss.qualcomm.com> wrote:
>
> On 2/26/26 7:55 AM, Krzysztof Kozlowski wrote:
> > On 25/02/2026 21:03, Yedaya Katsman wrote:
> >> On Wed, 25 Feb 2026 at 17:45, Krzysztof Kozlowski <krzk@kernel.org> wrote:
> >>>
> >>> On 25/02/2026 16:29, Yedaya Katsman wrote:
> >>>>>> + vddio-supply: true
> >>>>>> + ldo-supply: true
> >>>>>
> >>>>> LDO is the name of the type of regulator. Why is it called as name of
> >>>>> the supply?
> >>>> Can you explain more what you mean? Do you mean to change the name of
> >>>> the property? It seems that all the regulator properties are named
> >>>> foo-supply.
> >>>
> >>> I just have doubts that the device has supplied called LDO, considering
> >>> what LDO means.
> >> OK. I don't really have a way to verify if it's true, all I have is
> >> the downstream dts
> >> which calls it LDO [0]
> >>
> >> [0] https://github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/d3766fc8cda2d96de2850faa9ce58e5a37ea9f9c/arch/arm64/boot/dts/qcom/trinket-sde-display.dtsi#L24-L36
> >
> > Obviously the regulator is LDO, so they called it. Most of the
> > regulators are LDO, so why VDD IN is not called LDO?
> >
> > This is name of the supply in this device.
>
> Yedaya, in case you didn't catch it, LDO is an acronym:
>
> https://en.wikipedia.org/wiki/Low-dropout_regulator
>
> The vendor driver probably calls it that, because the input leg of
> the panel's driver IC just so happens to be connected to a regulator
> of this kind
>
> If we don't know the actual name of that input and have no way to verify
> it, I think 'power-supply' would be a good generic consensus, it happens
> to be reasonably common across other bindings
Thanks for further explaining. I managed to find the schematic (Thanks to
Kamil finding it first and making me look for it)[0]. It seems that
this specifically is
VDDI supply regulator, while the one called iovcc in the dts is
actually a VCI regulator.
The vddio-supply is called VREG_L9_LVS and connects to the output of the vddi
regulator.
My current plan is to call them vddi-supply and vci-supply in the
binding, but I'm not sure
what to call what's currently vddio-supply.
[0] https://androidfreefile.com/wp-content/uploads/Xiaomi_Mi_A3_Schematic.pdf
> Konrad
Thanks, Yedaya
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2026-02-26 14:22 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-23 20:26 [PATCH v2 0/3] Add support for the Samsung S6E8FCO display panel Yedaya Katsman
2026-02-23 20:26 ` [PATCH v2 1/3] dt-bindings: display: panel: Add Samsung S6E8FCO Yedaya Katsman
2026-02-24 7:26 ` Krzysztof Kozlowski
2026-02-25 15:29 ` Yedaya Katsman
2026-02-25 15:45 ` Krzysztof Kozlowski
2026-02-25 20:03 ` Yedaya Katsman
2026-02-26 6:55 ` Krzysztof Kozlowski
2026-02-26 13:42 ` Konrad Dybcio
2026-02-26 14:21 ` Yedaya Katsman
2026-02-23 20:26 ` [PATCH v2 2/3] drm: " Yedaya Katsman
2026-02-23 22:00 ` David Heidelberg
2026-02-25 21:13 ` Yedaya Katsman
2026-02-25 21:24 ` David Heidelberg
2026-02-26 11:49 ` Yedaya Katsman
2026-02-23 20:26 ` [PATCH v2 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel Yedaya Katsman
2026-02-23 22:08 ` David Heidelberg
2026-02-25 11:50 ` [PATCH v2 0/3] Add support for the Samsung S6E8FCO display panel Konrad Dybcio
2026-02-25 20:07 ` Yedaya Katsman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox