* [PATCH v7 0/3] Add support for the Samsung S6E8FC0 DSI and M1906F9 display panel
@ 2026-03-20 14:41 Yedaya Katsman
2026-03-20 14:41 ` [PATCH v7 1/3] dt-bindings: display: panel: Add Samsung S6E8FC0-M1906F9 Yedaya Katsman
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Yedaya Katsman @ 2026-03-20 14:41 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, Kaustabh Chakraborty
Cc: ~postmarketos/upstreaming, phone-devel, dri-devel, devicetree,
linux-kernel, linux-arm-msm, Yedaya Katsman, Krzysztof Kozlowski,
David Heidelberg, Dmitry Baryshkov, Konrad Dybcio
This adds a driver to support the Samsung S6E8FC0 DSI controller with the
M1906F9 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 v7:
- Mark as DRM_MODE_TYPE_PREFERRED
- Link to v6: https://lore.kernel.org/r/20260318-panel-patches-v6-0-7a30c2f85e0b@gmail.com
Changes in v6:
- Rename some identifiers to be more panel generic like David asked
- Link to v5: https://lore.kernel.org/r/20260317-panel-patches-v5-0-ef99f7b280da@gmail.com
Changes in v5:
- Fix typo in panel name, s6e8fco -> s6e8fc0 (zero -> O). Was like this in
downstream, but in samsung website it ends with a 0 [1]. Found in [2]
- Link to v4: https://lore.kernel.org/r/20260314-panel-patches-v4-0-1ecbb2c0c3c8@gmail.com
[1] https://semiconductor.samsung.com/display-ic/mobile-ddi/part-number/s6e8fc0/
[2] https://sashiko.dev/#/patchset/20260314-panel-patches-v4-0-1ecbb2c0c3c8%40gmail.com
Changes in v4:
- Use exisiting binding instead of creating a new one
- Mention dsi phy power source in commit message
- Mention only DSI controller, not panel where it makes sense
- Remove VIDEOMODE_HELPERS selection
- Collect trailers
- Link to v3: https://lore.kernel.org/r/20260312-panel-patches-v3-0-6ed8c006d0be@gmail.com
Changes in v3:
- Make driver, bindings, compatible specific to M1906F9 panel
- Adjust brightness scale and default
- de-mystify some dsi writes
- move pinctrl for mdss into panel node
- Rename regulator nodes and names according to schematic
- Treat vreg_l9a as input to vddi regulator
- Add myself to copyright header, remove years
- Link to v2: https://lore.kernel.org/r/20260223-panel-patches-v2-0-1b6ad471d540@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 S6E8FC0-M1906F9
drm: panel: Add Samsung S6E8FC0 DSI controller for M1906F9 panel
arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel
.../panel/samsung,s6e8aa5x01-ams561ra01.yaml | 5 +-
MAINTAINERS | 5 +
.../boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts | 94 +++++++
drivers/gpu/drm/panel/Kconfig | 13 +
drivers/gpu/drm/panel/Makefile | 1 +
.../gpu/drm/panel/panel-samsung-s6e8fc0-m1906f9.c | 301 +++++++++++++++++++++
6 files changed, 418 insertions(+), 1 deletion(-)
---
base-commit: d4906ae14a5f136ceb671bb14cedbf13fa560da6
change-id: 20260218-panel-patches-696df7e0d810
prerequisite-message-id: <20260303034847.13870-1-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] 9+ messages in thread* [PATCH v7 1/3] dt-bindings: display: panel: Add Samsung S6E8FC0-M1906F9 2026-03-20 14:41 [PATCH v7 0/3] Add support for the Samsung S6E8FC0 DSI and M1906F9 display panel Yedaya Katsman @ 2026-03-20 14:41 ` Yedaya Katsman 2026-03-21 17:41 ` Claude review: " Claude Code Review Bot 2026-03-20 14:41 ` [PATCH v7 2/3] drm: panel: Add Samsung S6E8FC0 DSI controller for M1906F9 panel Yedaya Katsman ` (2 subsequent siblings) 3 siblings, 1 reply; 9+ messages in thread From: Yedaya Katsman @ 2026-03-20 14:41 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, Kaustabh Chakraborty Cc: ~postmarketos/upstreaming, phone-devel, dri-devel, devicetree, linux-kernel, linux-arm-msm, Yedaya Katsman, Krzysztof Kozlowski Add Samsung S6E8FC0 DTS binding used with the M1906F9 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> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com> --- .../bindings/display/panel/samsung,s6e8aa5x01-ams561ra01.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/display/panel/samsung,s6e8aa5x01-ams561ra01.yaml b/Documentation/devicetree/bindings/display/panel/samsung,s6e8aa5x01-ams561ra01.yaml index eccfc66d7fe24fbe86e3c25f35beb0855c4fcee6..b271de575e15071bc8370466428bedbf41a93d11 100644 --- a/Documentation/devicetree/bindings/display/panel/samsung,s6e8aa5x01-ams561ra01.yaml +++ b/Documentation/devicetree/bindings/display/panel/samsung,s6e8aa5x01-ams561ra01.yaml @@ -8,13 +8,16 @@ title: Samsung AMS561RA01 panel with S6E8AA5X01 controller maintainers: - Kaustabh Chakraborty <kauschluss@disroot.org> + - Yedaya Katsman <yedaya.ka@gmail.com> allOf: - $ref: panel-common.yaml# properties: compatible: - const: samsung,s6e8aa5x01-ams561ra01 + enum: + - samsung,s6e8aa5x01-ams561ra01 + - samsung,s6e8fc0-m1906f9 reg: maxItems: 1 -- 2.53.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Claude review: dt-bindings: display: panel: Add Samsung S6E8FC0-M1906F9 2026-03-20 14:41 ` [PATCH v7 1/3] dt-bindings: display: panel: Add Samsung S6E8FC0-M1906F9 Yedaya Katsman @ 2026-03-21 17:41 ` Claude Code Review Bot 0 siblings, 0 replies; 9+ messages in thread From: Claude Code Review Bot @ 2026-03-21 17:41 UTC (permalink / raw) To: dri-devel-reviews Patch Review This patch extends the existing `samsung,s6e8aa5x01-ams561ra01.yaml` binding to add the new `samsung,s6e8fc0-m1906f9` compatible, converting `const` to `enum`. **Looks good.** Already has `Reviewed-by: Krzysztof Kozlowski`. The approach of reusing an existing binding with a compatible panel interface is appropriate. One minor observation: the YAML title still says "Samsung AMS561RA01 panel with S6E8AA5X01 controller" — it might be worth updating the title to be more generic now that the binding covers two different panels, but this is purely cosmetic and not blocking. --- --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v7 2/3] drm: panel: Add Samsung S6E8FC0 DSI controller for M1906F9 panel 2026-03-20 14:41 [PATCH v7 0/3] Add support for the Samsung S6E8FC0 DSI and M1906F9 display panel Yedaya Katsman 2026-03-20 14:41 ` [PATCH v7 1/3] dt-bindings: display: panel: Add Samsung S6E8FC0-M1906F9 Yedaya Katsman @ 2026-03-20 14:41 ` Yedaya Katsman 2026-03-21 17:41 ` Claude review: " Claude Code Review Bot 2026-03-20 14:41 ` [PATCH v7 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel Yedaya Katsman 2026-03-21 17:41 ` Claude review: Add support for the Samsung S6E8FC0 DSI and M1906F9 display panel Claude Code Review Bot 3 siblings, 1 reply; 9+ messages in thread From: Yedaya Katsman @ 2026-03-20 14:41 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, Kaustabh Chakraborty Cc: ~postmarketos/upstreaming, phone-devel, dri-devel, devicetree, linux-kernel, linux-arm-msm, Yedaya Katsman, David Heidelberg, Dmitry Baryshkov Add driver for Samsung S6E8FC0 DSI controller for M1906F9 video mode panel, found 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> Reviewed-by: David Heidelberg <david@ixit.cz> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Signed-off-by: Yedaya Katsman <yedaya.ka@gmail.com> --- The downstream dts claims a max brightness of 2047, but seems to ignore the MSB. --- MAINTAINERS | 5 + drivers/gpu/drm/panel/Kconfig | 13 + drivers/gpu/drm/panel/Makefile | 1 + .../gpu/drm/panel/panel-samsung-s6e8fc0-m1906f9.c | 301 +++++++++++++++++++++ 4 files changed, 320 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index e087673237636268346979ddc270f8cf0905c722..d57d4c128cdd7fde82ba9c68b5f1b6d883a36860 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 S6E8FC0 PANELS +M: Yedaya Katsman <yedaya.ka@gmail.com> +S: Maintained +F: drivers/gpu/drm/panel/panel-samsung-s6e8fc0-m1906f9.c + DRM DRIVER FOR SAMSUNG SOFEF00 DDIC M: David Heidelberg <david@ixit.cz> M: Casey Connolly <casey.connolly@linaro.org> diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig index 7a83804fedca1b688ce6fbe4295ec9009007e693..fed15b7c08ba579a0a09108bca1646b4821f94c6 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -893,6 +893,19 @@ 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_S6E8FC0 + tristate "Samsung S6E8FC0 DSI controller" + depends on OF + depends on BACKLIGHT_CLASS_DEVICE + select DRM_MIPI_DSI + help + Say Y or M here if you want to enable support for the Samsung + S6E8FC0 DSI controller and connected panel. + Currently supported panels: + + M1906F9 (M1906F9SH or M1906F9SI), 6.09 inch 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..bf2b178f507ba1c1173d2b6a468c5fe5d23977b6 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_S6E8FC0) += panel-samsung-s6e8fc0-m1906f9.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-s6e8fc0-m1906f9.c b/drivers/gpu/drm/panel/panel-samsung-s6e8fc0-m1906f9.c new file mode 100644 index 0000000000000000000000000000000000000000..199ff99efd7895f5f26bf8f777ebd79db01bafff --- /dev/null +++ b/drivers/gpu/drm/panel/panel-samsung-s6e8fc0-m1906f9.c @@ -0,0 +1,301 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Copyright (c) Kamil Gołda <kamil.golda@protonmail.com> +// Copyright (c) Yedaya Katsman <yedaya.ka@gmail.com> +// Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree: +// Copyright (c) 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 s6e8fc0_ctx { + 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 s6e8fc0_supplies[] = { + { .supply = "vdd" }, + { .supply = "vci" }, +}; + +static inline +struct s6e8fc0_ctx *to_s6e8fc0_ctx(struct drm_panel *panel) +{ + return container_of_const(panel, struct s6e8fc0_ctx, panel); +} + +static void s6e8fc0_m1906f9_reset(struct s6e8fc0_ctx *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); +} + +#define s6e8fc0_test_key_on_lvl2(ctx) \ + mipi_dsi_dcs_write_seq_multi(ctx, 0xf0, 0x5a, 0x5a) +#define s6e8fc0_test_key_off_lvl2(ctx) \ + mipi_dsi_dcs_write_seq_multi(ctx, 0xf0, 0xa5, 0xa5) +#define s6e8fc0_test_key_on_lvl3(ctx) \ + mipi_dsi_dcs_write_seq_multi(ctx, 0xfc, 0x5a, 0x5a) +#define s6e8fc0_test_key_off_lvl3(ctx) \ + mipi_dsi_dcs_write_seq_multi(ctx, 0xfc, 0xa5, 0xa5) + +static int s6e8fc0_m1906f9_on(struct s6e8fc0_ctx *ctx) +{ + struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi }; + + s6e8fc0_test_key_on_lvl3(&dsi_ctx); + + 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); + s6e8fc0_test_key_off_lvl3(&dsi_ctx); + s6e8fc0_test_key_on_lvl2(&dsi_ctx); + s6e8fc0_test_key_on_lvl3(&dsi_ctx); + 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); + s6e8fc0_test_key_off_lvl2(&dsi_ctx); + s6e8fc0_test_key_off_lvl3(&dsi_ctx); + + return dsi_ctx.accum_err; +} + +static int s6e8fc0_m1906f9_off(struct s6e8fc0_ctx *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 s6e8fc0_m1906f9_prepare(struct drm_panel *panel) +{ + struct s6e8fc0_ctx *ctx = to_s6e8fc0_ctx(panel); + struct device *dev = &ctx->dsi->dev; + int ret; + + ret = regulator_bulk_enable(ARRAY_SIZE(s6e8fc0_supplies), ctx->supplies); + if (ret < 0) { + dev_err(dev, "Failed to enable regulators: %d\n", ret); + return ret; + } + + s6e8fc0_m1906f9_reset(ctx); + + ret = s6e8fc0_m1906f9_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(s6e8fc0_supplies), ctx->supplies); + return ret; + } + + return 0; +} + +static int s6e8fc0_m1906f9_unprepare(struct drm_panel *panel) +{ + struct s6e8fc0_ctx *ctx = to_s6e8fc0_ctx(panel); + struct device *dev = &ctx->dsi->dev; + int ret; + + ret = s6e8fc0_m1906f9_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(s6e8fc0_supplies), ctx->supplies); + + return 0; +} + +static const struct drm_display_mode s6e8fc0_m1906f9_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 | DRM_MODE_TYPE_PREFERRED, +}; + +static int s6e8fc0_m1906f9_get_modes(struct drm_panel *panel, + struct drm_connector *connector) +{ + return drm_connector_helper_get_modes_fixed(connector, &s6e8fc0_m1906f9_samsungp_mode); +} + +static const struct drm_panel_funcs s6e8fc0_m1906f9_panel_funcs = { + .prepare = s6e8fc0_m1906f9_prepare, + .unprepare = s6e8fc0_m1906f9_unprepare, + .get_modes = s6e8fc0_m1906f9_get_modes, +}; + +static int s6e8fc0_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 s6e8fc0_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 s6e8fc0_bl_ops = { + .update_status = s6e8fc0_bl_update_status, + .get_brightness = s6e8fc0_bl_get_brightness, +}; + +static struct backlight_device * +s6e8fc0_m1906f9_create_backlight(struct mipi_dsi_device *dsi) +{ + struct device *dev = &dsi->dev; + const struct backlight_properties props = { + .type = BACKLIGHT_RAW, + .brightness = 512, + .max_brightness = 1023, + }; + + return devm_backlight_device_register(dev, dev_name(dev), dev, dsi, + &s6e8fc0_bl_ops, &props); +} + +static int s6e8fc0_m1906f9_probe(struct mipi_dsi_device *dsi) +{ + struct device *dev = &dsi->dev; + struct s6e8fc0_ctx *ctx; + int ret; + + ctx = devm_drm_panel_alloc(dev, struct s6e8fc0_ctx, panel, + &s6e8fc0_m1906f9_panel_funcs, + DRM_MODE_CONNECTOR_DSI); + if (IS_ERR(ctx)) + return PTR_ERR(ctx); + + ret = devm_regulator_bulk_get_const(dev, + ARRAY_SIZE(s6e8fc0_supplies), + s6e8fc0_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 = s6e8fc0_m1906f9_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 s6e8fc0_remove(struct mipi_dsi_device *dsi) +{ + struct s6e8fc0_ctx *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 samsung_s6e8fc0_of_match[] = { + { .compatible = "samsung,s6e8fc0-m1906f9" }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, samsung_s6e8fc0_of_match); + +static struct mipi_dsi_driver s6e8fc0_driver = { + .probe = s6e8fc0_m1906f9_probe, + .remove = s6e8fc0_remove, + .driver = { + .name = "panel-samsung-s6e8fc0-m1906f9", + .of_match_table = samsung_s6e8fc0_of_match, + }, +}; +module_mipi_dsi_driver(s6e8fc0_driver); + +MODULE_AUTHOR("Kamil Gołda <kamil.golda@protonmail.com>"); +MODULE_DESCRIPTION("DRM driver for Samsung s6e8fc0 DSI controller"); +MODULE_LICENSE("GPL"); -- 2.53.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Claude review: drm: panel: Add Samsung S6E8FC0 DSI controller for M1906F9 panel 2026-03-20 14:41 ` [PATCH v7 2/3] drm: panel: Add Samsung S6E8FC0 DSI controller for M1906F9 panel Yedaya Katsman @ 2026-03-21 17:41 ` Claude Code Review Bot 0 siblings, 0 replies; 9+ messages in thread From: Claude Code Review Bot @ 2026-03-21 17:41 UTC (permalink / raw) To: dri-devel-reviews Patch Review The driver is well-structured and uses modern APIs. A few observations: 1. **Variable name `s6e8fc0_m1906f9_samsungp_mode`** (line 141): The `samsungp` suffix looks like a typo/leftover from the generator — should probably be `samsung_mode` or just `mode`. Very minor. 2. **Backlight LPM toggling** (lines 174, 180, 191, 197): The `mode_flags` manipulation in `s6e8fc0_bl_update_status` and `s6e8fc0_bl_get_brightness` is not thread-safe — if both are called concurrently, the flags could be corrupted. This is a common pattern in generated panel drivers and unlikely to cause real issues in practice, but worth noting. 3. **`mipi_dsi_dcs_set_display_brightness_multi` vs `_large` inconsistency**: In `s6e8fc0_m1906f9_on()` (line 64), `mipi_dsi_dcs_set_display_brightness_multi` is used (which sends a 1-byte brightness), but the backlight ops use `mipi_dsi_dcs_set_display_brightness_large` (2-byte). This is fine since the init sequence sets brightness to 0 and the actual brightness control goes through the backlight ops, but the inconsistency is worth being aware of. 4. **`max_brightness = 1023`** (line 214): The cover letter mentions downstream claims max 2047 but ignores the MSB. 1023 (10-bit) with `_large` (16-bit command) seems reasonable and is documented in the commit message. Good. 5. **Overall structure**: Uses `devm_drm_panel_alloc`, `devm_regulator_bulk_get_const`, `mipi_dsi_multi_context` — all modern best practices. The `container_of_const` usage in the accessor is correct. Probe/remove ordering (panel_add before attach, detach before panel_remove) is correct. --- --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v7 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel 2026-03-20 14:41 [PATCH v7 0/3] Add support for the Samsung S6E8FC0 DSI and M1906F9 display panel Yedaya Katsman 2026-03-20 14:41 ` [PATCH v7 1/3] dt-bindings: display: panel: Add Samsung S6E8FC0-M1906F9 Yedaya Katsman 2026-03-20 14:41 ` [PATCH v7 2/3] drm: panel: Add Samsung S6E8FC0 DSI controller for M1906F9 panel Yedaya Katsman @ 2026-03-20 14:41 ` Yedaya Katsman 2026-03-21 17:41 ` Claude review: " Claude Code Review Bot 2026-03-21 17:41 ` Claude review: Add support for the Samsung S6E8FC0 DSI and M1906F9 display panel Claude Code Review Bot 3 siblings, 1 reply; 9+ messages in thread From: Yedaya Katsman @ 2026-03-20 14:41 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, Kaustabh Chakraborty Cc: ~postmarketos/upstreaming, phone-devel, dri-devel, devicetree, linux-kernel, linux-arm-msm, Yedaya Katsman, Dmitry Baryshkov, Konrad Dybcio Enable the MDSS nodes and add supplies and bindings for the Samsung S6E8FC0 DSI controller for the M1906F9 panel. The ldo and iovcc gpio pins boot up with a current of 16 mA, but they work fine with 2mA, so I used that. mdss_dsi0_phy is powered by VDD_MX, see power-domains in sm6125.dtsi Co-developed-by: Kamil Gołda <kamil.golda@protonmail.com> Signed-off-by: Kamil Gołda <kamil.golda@protonmail.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.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..6eb46967712554929ab68af6f3218396b7f0118e 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,33 @@ key-volume-up { }; }; + panel_vdd_1p8: regulator-panel-vdd { + compatible = "regulator-fixed"; + regulator-name = "panel_vdd_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; + vin-supply = <&vreg_l9a>; + + enable-active-high; + gpio = <&tlmm 26 GPIO_ACTIVE_HIGH>; + pinctrl-0 = <&panel_vdd_1p8_en>; + pinctrl-names = "default"; + }; + + panel_vci_3p0: regulator-panel-vci { + compatible = "regulator-fixed"; + regulator-name = "panel_vci_3p0"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; + + enable-active-high; + gpio = <&tlmm 124 GPIO_ACTIVE_HIGH>; + pinctrl-0 = <&panel_vci_3p0_en>; + pinctrl-names = "default"; + }; + thermal-zones { rf-pa0-thermal { thermal-sensors = <&pm6125_adc_tm 0>; @@ -128,6 +155,45 @@ &hsusb_phy1 { status = "okay"; }; +&mdss { + status = "okay"; +}; + +&mdss_dsi0 { + vdda-supply = <&vreg_l18a>; + status = "okay"; + + panel@0 { + compatible = "samsung,s6e8fc0-m1906f9"; + reg = <0>; + + reset-gpios = <&tlmm 90 GPIO_ACTIVE_LOW>; + + pinctrl-0 = <&mdss_default>; + pinctrl-1 = <&mdss_sleep>; + pinctrl-names = "default", "sleep"; + + vdd-supply = <&panel_vdd_1p8>; + vci-supply = <&panel_vci_3p0>; + + 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_vdd_1p8_en: panel-vdd-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_vci_3p0_en: panel-vci-default-state { + pins = "gpio124"; + function = "gpio"; + drive-strength = <2>; + bias-pull-up; + }; }; &ufs_mem_hc { -- 2.53.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Claude review: arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel 2026-03-20 14:41 ` [PATCH v7 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel Yedaya Katsman @ 2026-03-21 17:41 ` Claude Code Review Bot 0 siblings, 0 replies; 9+ messages in thread From: Claude Code Review Bot @ 2026-03-21 17:41 UTC (permalink / raw) To: dri-devel-reviews Patch Review 1. **`panel_vci_3p0` voltage mismatch** (lines 99-110 of the DTS): The regulator node is named `panel_vci_3p0` and `regulator-name` is `"panel_vci_3p0"`, implying 3.0V, but the actual voltage is set to **1800000 µV (1.8V)**: ``` panel_vci_3p0: regulator-panel-vci { regulator-name = "panel_vci_3p0"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; ``` This is likely a bug — either the voltage should be 3000000 (matching the name), or the name should be changed to `panel_vci_1p8`. VCI supplies for Samsung AMOLED panels are typically 3.0V. **This should be clarified/fixed.** 2. **No `vin-supply` on `panel_vci_3p0`**: The `panel_vdd_1p8` regulator has `vin-supply = <&vreg_l9a>`, but `panel_vci_3p0` has no `vin-supply`. This may be intentional if it's directly driven by the GPIO, but worth confirming. 3. **Extra blank line** (between `&mdss_dsi0_out` and `&mdss_dsi0_phy` blocks): There's a double blank line at the junction. Very minor style nit. 4. **`regulator-boot-on` on both regulators**: This keeps regulators enabled during boot, preventing screen flicker. Reasonable for a display panel. 5. **`reset-gpios` polarity**: The panel node uses `GPIO_ACTIVE_LOW`, and the driver's reset sequence asserts with `gpiod_set_value_cansleep(ctx->reset_gpio, 0)` → deassert, `1` → assert. With `GPIOD_OUT_HIGH` at probe (asserting reset = holding panel in reset), then the prepare sequence deasserts, pulses assert, deasserts. This is consistent — the GPIO descriptor layer handles the inversion. Fine. **Summary**: The main actionable item is the `panel_vci_3p0` regulator voltage — the name says 3.0V but the value is 1.8V. This should be resolved before merging. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 9+ messages in thread
* Claude review: Add support for the Samsung S6E8FC0 DSI and M1906F9 display panel 2026-03-20 14:41 [PATCH v7 0/3] Add support for the Samsung S6E8FC0 DSI and M1906F9 display panel Yedaya Katsman ` (2 preceding siblings ...) 2026-03-20 14:41 ` [PATCH v7 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel Yedaya Katsman @ 2026-03-21 17:41 ` Claude Code Review Bot 3 siblings, 0 replies; 9+ messages in thread From: Claude Code Review Bot @ 2026-03-21 17:41 UTC (permalink / raw) To: dri-devel-reviews Overall Series Review Subject: Add support for the Samsung S6E8FC0 DSI and M1906F9 display panel Author: Yedaya Katsman <yedaya.ka@gmail.com> Patches: 4 Reviewed: 2026-03-22T03:41:50.224825 --- This is a v7 of a well-iterated 3-patch series adding support for the Samsung S6E8FC0 DSI controller with the M1906F9 panel found in the Xiaomi Mi A3. The driver is auto-generated from vendor DT via `linux-mdss-dsi-panel-driver-generator`. The series is clean, has accumulated multiple Reviewed-by tags, and follows modern kernel panel driver conventions (`devm_drm_panel_alloc`, `mipi_dsi_multi_context`, `drm_connector_helper_get_modes_fixed`). Overall it looks ready to merge with one potential issue worth clarifying in the DTS patch. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v4 0/3] Add support for the Samsung S6E8FCO DSI and M1906F9 display panel
@ 2026-03-14 21:46 Yedaya Katsman
2026-03-14 21:46 ` [PATCH v4 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel Yedaya Katsman
0 siblings, 1 reply; 9+ messages in thread
From: Yedaya Katsman @ 2026-03-14 21:46 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, Kaustabh Chakraborty
Cc: ~postmarketos/upstreaming, phone-devel, dri-devel, devicetree,
linux-kernel, linux-arm-msm, Yedaya Katsman, Dmitry Baryshkov,
Konrad Dybcio
This adds a driver to support the Samsung S6E8FCO DSI controller with the
M1906F9 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 v4:
- Use exisiting binding instead of creating a new one
- Mention dsi phy power source in commit message
- Mention only DSI controller, not panel where it makes sense
- Remove VIDEOMODE_HELPERS selection
- Collect trailers
- Link to v3: https://lore.kernel.org/r/20260312-panel-patches-v3-0-6ed8c006d0be@gmail.com
Changes in v3:
- Make driver, bindings, compatible specific to M1906F9 panel
- Adjust brightness scale and default
- de-mystify some dsi writes
- move pinctrl for mdss into panel node
- Rename regulator nodes and names according to schematic
- Treat vreg_l9a as input to vddi regulator
- Add myself to copyright header, remove years
- Link to v2: https://lore.kernel.org/r/20260223-panel-patches-v2-0-1b6ad471d540@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-M1906F9
drm: panel: Add Samsung S6E8FCO DSI controller for M1906F9 panel
arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel
.../panel/samsung,s6e8aa5x01-ams561ra01.yaml | 5 +-
MAINTAINERS | 5 +
.../boot/dts/qcom/sm6125-xiaomi-laurel-sprout.dts | 94 +++++++
drivers/gpu/drm/panel/Kconfig | 13 +
drivers/gpu/drm/panel/Makefile | 1 +
.../gpu/drm/panel/panel-samsung-s6e8fco-m1906f9.c | 301 +++++++++++++++++++++
6 files changed, 418 insertions(+), 1 deletion(-)
---
base-commit: d4906ae14a5f136ceb671bb14cedbf13fa560da6
change-id: 20260218-panel-patches-696df7e0d810
prerequisite-message-id: <20260303034847.13870-1-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] 9+ messages in thread* [PATCH v4 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel 2026-03-14 21:46 [PATCH v4 0/3] Add support for the Samsung S6E8FCO " Yedaya Katsman @ 2026-03-14 21:46 ` Yedaya Katsman 2026-03-16 1:54 ` Claude review: " Claude Code Review Bot 0 siblings, 1 reply; 9+ messages in thread From: Yedaya Katsman @ 2026-03-14 21:46 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, Kaustabh Chakraborty Cc: ~postmarketos/upstreaming, phone-devel, dri-devel, devicetree, linux-kernel, linux-arm-msm, Yedaya Katsman, Dmitry Baryshkov, Konrad Dybcio Enable the MDSS nodes and add supplies and bindings for the Samsung S6E8FCO DSI controller for the M1906F9 panel. The ldo and iovcc gpio pins boot up with a current of 16 mA, but they work fine with 2mA, so I used that. mdss_dsi0_phy is powered by VDD_MX, see power-domains in sm6125.dtsi Co-developed-by: Kamil Gołda <kamil.golda@protonmail.com> Signed-off-by: Kamil Gołda <kamil.golda@protonmail.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.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..9b046d21da1dc54bd851a94d0e209bf1763e865a 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,33 @@ key-volume-up { }; }; + panel_vdd_1p8: regulator-panel-vdd { + compatible = "regulator-fixed"; + regulator-name = "panel_vdd_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; + vin-supply = <&vreg_l9a>; + + enable-active-high; + gpio = <&tlmm 26 GPIO_ACTIVE_HIGH>; + pinctrl-0 = <&panel_vdd_1p8_en>; + pinctrl-names = "default"; + }; + + panel_vci_3p0: regulator-panel-vci { + compatible = "regulator-fixed"; + regulator-name = "panel_vci_3p0"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; + + enable-active-high; + gpio = <&tlmm 124 GPIO_ACTIVE_HIGH>; + pinctrl-0 = <&panel_vci_3p0_en>; + pinctrl-names = "default"; + }; + thermal-zones { rf-pa0-thermal { thermal-sensors = <&pm6125_adc_tm 0>; @@ -128,6 +155,45 @@ &hsusb_phy1 { status = "okay"; }; +&mdss { + status = "okay"; +}; + +&mdss_dsi0 { + vdda-supply = <&vreg_l18a>; + status = "okay"; + + panel@0 { + compatible = "samsung,s6e8fco-m1906f9"; + reg = <0>; + + reset-gpios = <&tlmm 90 GPIO_ACTIVE_LOW>; + + pinctrl-0 = <&mdss_default>; + pinctrl-1 = <&mdss_sleep>; + pinctrl-names = "default", "sleep"; + + vdd-supply = <&panel_vdd_1p8>; + vci-supply = <&panel_vci_3p0>; + + 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_vdd_1p8_en: panel-vdd-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_vci_3p0_en: panel-vci-default-state { + pins = "gpio124"; + function = "gpio"; + drive-strength = <2>; + bias-pull-up; + }; }; &ufs_mem_hc { -- 2.53.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Claude review: arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel 2026-03-14 21:46 ` [PATCH v4 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel Yedaya Katsman @ 2026-03-16 1:54 ` Claude Code Review Bot 0 siblings, 0 replies; 9+ messages in thread From: Claude Code Review Bot @ 2026-03-16 1:54 UTC (permalink / raw) To: dri-devel-reviews Patch Review **1. Regulator voltage mismatch for `panel_vci_3p0`.** This is the most significant issue. The regulator node is named `panel_vci_3p0` suggesting 3.0V, but the actual voltage specified is 1.8V (mbox lines 493-504): ``` panel_vci_3p0: regulator-panel-vci { ... regulator-name = "panel_vci_3p0"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; ``` Either the name is wrong (should reflect 1.8V), or the voltage is wrong (should be 3000000). VCI for OLED panels is typically 3.0V, so the name might be correct and the voltage should be `<3000000>`. Please verify against the hardware schematic. If 1.8V is actually correct, change the name to avoid confusion. **2. Extra blank line.** There's a double blank line between `&mdss_dsi0_out` and `&mdss_dsi0_phy` blocks (mbox lines 547-548): ``` &mdss_dsi0_phy { ``` Should be a single blank line for consistency with the rest of the file. **3. `regulator-boot-on` on `panel_vci_3p0`.** The `panel_vdd_1p8` regulator has `vin-supply = <&vreg_l9a>` but `panel_vci_3p0` does not specify a `vin-supply`. If this GPIO-controlled regulator is powered by a PMIC rail, the `vin-supply` should be specified for proper power sequencing. The commit message mentions "ldo and iovcc gpio pins" but doesn't fully explain the VCI supply chain. **4. `regulator-boot-on` without `regulator-always-on`.** Both fixed regulators use `regulator-boot-on` which prevents them from being disabled at boot. This is common for panel regulators to avoid flicker, but worth noting that the driver does call `regulator_bulk_disable()` in unprepare, so these regulators will be disabled during runtime PM. This is fine. The DTS changes have appropriate Reviewed-by tags from Dmitry and Konrad, which is good. --- Generated by Claude Code Patch Reviewer ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-03-21 17:41 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-03-20 14:41 [PATCH v7 0/3] Add support for the Samsung S6E8FC0 DSI and M1906F9 display panel Yedaya Katsman 2026-03-20 14:41 ` [PATCH v7 1/3] dt-bindings: display: panel: Add Samsung S6E8FC0-M1906F9 Yedaya Katsman 2026-03-21 17:41 ` Claude review: " Claude Code Review Bot 2026-03-20 14:41 ` [PATCH v7 2/3] drm: panel: Add Samsung S6E8FC0 DSI controller for M1906F9 panel Yedaya Katsman 2026-03-21 17:41 ` Claude review: " Claude Code Review Bot 2026-03-20 14:41 ` [PATCH v7 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel Yedaya Katsman 2026-03-21 17:41 ` Claude review: " Claude Code Review Bot 2026-03-21 17:41 ` Claude review: Add support for the Samsung S6E8FC0 DSI and M1906F9 display panel Claude Code Review Bot -- strict thread matches above, loose matches on Subject: below -- 2026-03-14 21:46 [PATCH v4 0/3] Add support for the Samsung S6E8FCO " Yedaya Katsman 2026-03-14 21:46 ` [PATCH v4 3/3] arm64: dts: qcom: sm6125-xiaomi-laurel-sprout: Enable MDSS and add panel Yedaya Katsman 2026-03-16 1:54 ` Claude review: " Claude Code Review Bot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox