* [PATCH 1/3] drm/bridge: analogix_dp: deassert DP_PHY_PD on power-on for exynos
2026-10-27 12:01 [PATCH 0/3] DRM Google Nexus 10 display support Alexandre Marquet via B4 Relay
@ 2026-10-27 12:01 ` Alexandre Marquet via B4 Relay
2026-10-29 8:27 ` Marek Szyprowski
2026-10-27 12:01 ` [PATCH 2/3] drm/exynos: exynos_dp: change poweron/off to encoder enable/disable Alexandre Marquet via B4 Relay
2026-10-27 12:01 ` [PATCH 3/3] drm/panel_edp: Add SEC LTL101DL02-002 panel Alexandre Marquet via B4 Relay
2 siblings, 1 reply; 7+ messages in thread
From: Alexandre Marquet via B4 Relay @ 2026-10-27 12:01 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Jingoo Han, Inki Dae, Seung-Woo Kim, Kyungmin Park,
Krzysztof Kozlowski, Peter Griffin, Alim Akhtar,
Douglas Anderson, Jessica Zhang
Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-samsung-soc,
Lukas Timmermann, Henrik Grimler, Hendrik Noack,
Alexandre Marquet
From: Alexandre Marquet <tb@a-marquet.fr>
On exynos platforms at least, calling
analogix_dp_set_analog_power_down() to power on (with enable=false) CH0
to CH3 or the AUX bus currently produces no effect, unless the function
is first called to power on everything (by setting block to POWER_ALL or
ANALOG_TOTAL). The reason for this is that DP_PHY_PD being asserted
(which is its default state) renders every other register bit
ineffective.
This is particularly an issue for AUX bus initialization, that tends to
happen before anything else (e.g., to request EDID), and thus, before
anything has any chance to request a power on of the whole analog
section of the chip.
This commit allows analogix_dp_set_analog_power_down() to power on any
block, by deasserting DP_PHY_PD if needed.
Signed-off-by: Alexandre Marquet <tb@a-marquet.fr>
---
drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c
index c1344a3f013a..9f634d4e4793 100644
--- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c
+++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c
@@ -256,6 +256,19 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
if (dp->plat_data && analogix_dp_is_rockchip(dp->plat_data->dev_type))
phy_pd_addr = ANALOGIX_DP_PD;
+ reg = readl(dp->reg_base + phy_pd_addr);
+
+ if (dp->plat_data && (dp->plat_data->dev_type == EXYNOS_DP)) {
+ /* On exynos, register AUX_PD and CH[0-3]_PD have no effect if
+ * DP_PHY_PD is asserted. So, when powering any of them up, we
+ * need to deassert DP_PHY_PD first.
+ */
+ if (!enable && (reg & DP_PHY_PD)) {
+ reg &= ~DP_PHY_PD;
+ reg |= AUX_PD | CH0_PD | CH1_PD | CH2_PD | CH3_PD;
+ }
+ }
+
switch (block) {
case AUX_BLOCK:
if (dp->plat_data && analogix_dp_is_rockchip(dp->plat_data->dev_type))
@@ -263,7 +276,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
else
mask = AUX_PD;
- reg = readl(dp->reg_base + phy_pd_addr);
if (enable)
reg |= mask;
else
@@ -272,7 +284,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
break;
case CH0_BLOCK:
mask = CH0_PD;
- reg = readl(dp->reg_base + phy_pd_addr);
if (enable)
reg |= mask;
@@ -282,7 +293,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
break;
case CH1_BLOCK:
mask = CH1_PD;
- reg = readl(dp->reg_base + phy_pd_addr);
if (enable)
reg |= mask;
@@ -292,7 +302,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
break;
case CH2_BLOCK:
mask = CH2_PD;
- reg = readl(dp->reg_base + phy_pd_addr);
if (enable)
reg |= mask;
@@ -302,7 +311,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
break;
case CH3_BLOCK:
mask = CH3_PD;
- reg = readl(dp->reg_base + phy_pd_addr);
if (enable)
reg |= mask;
@@ -321,7 +329,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
else
mask = DP_PHY_PD;
- reg = readl(dp->reg_base + phy_pd_addr);
if (enable)
reg |= mask;
else
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH 1/3] drm/bridge: analogix_dp: deassert DP_PHY_PD on power-on for exynos
2026-10-27 12:01 ` [PATCH 1/3] drm/bridge: analogix_dp: deassert DP_PHY_PD on power-on for exynos Alexandre Marquet via B4 Relay
@ 2026-10-29 8:27 ` Marek Szyprowski
0 siblings, 0 replies; 7+ messages in thread
From: Marek Szyprowski @ 2026-10-29 8:27 UTC (permalink / raw)
To: tb, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Jingoo Han, Inki Dae, Seung-Woo Kim, Kyungmin Park,
Krzysztof Kozlowski, Peter Griffin, Alim Akhtar,
Douglas Anderson, Jessica Zhang
Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-samsung-soc,
Lukas Timmermann, Henrik Grimler, Hendrik Noack
On 27.10.2026 13:01, Alexandre Marquet via B4 Relay wrote:
> From: Alexandre Marquet <tb@a-marquet.fr>
>
> On exynos platforms at least, calling
> analogix_dp_set_analog_power_down() to power on (with enable=false) CH0
> to CH3 or the AUX bus currently produces no effect, unless the function
> is first called to power on everything (by setting block to POWER_ALL or
> ANALOG_TOTAL). The reason for this is that DP_PHY_PD being asserted
> (which is its default state) renders every other register bit
> ineffective.
>
> This is particularly an issue for AUX bus initialization, that tends to
> happen before anything else (e.g., to request EDID), and thus, before
> anything has any chance to request a power on of the whole analog
> section of the chip.
>
> This commit allows analogix_dp_set_analog_power_down() to power on any
> block, by deasserting DP_PHY_PD if needed.
>
> Signed-off-by: Alexandre Marquet <tb@a-marquet.fr>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Snow, Peach-Pit and Peach-Pi Chromebooks work fine with this change.
> ---
> drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c | 19 +++++++++++++------
> 1 file changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c
> index c1344a3f013a..9f634d4e4793 100644
> --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c
> +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c
> @@ -256,6 +256,19 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
> if (dp->plat_data && analogix_dp_is_rockchip(dp->plat_data->dev_type))
> phy_pd_addr = ANALOGIX_DP_PD;
>
> + reg = readl(dp->reg_base + phy_pd_addr);
> +
> + if (dp->plat_data && (dp->plat_data->dev_type == EXYNOS_DP)) {
> + /* On exynos, register AUX_PD and CH[0-3]_PD have no effect if
> + * DP_PHY_PD is asserted. So, when powering any of them up, we
> + * need to deassert DP_PHY_PD first.
> + */
> + if (!enable && (reg & DP_PHY_PD)) {
> + reg &= ~DP_PHY_PD;
> + reg |= AUX_PD | CH0_PD | CH1_PD | CH2_PD | CH3_PD;
> + }
> + }
> +
> switch (block) {
> case AUX_BLOCK:
> if (dp->plat_data && analogix_dp_is_rockchip(dp->plat_data->dev_type))
> @@ -263,7 +276,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
> else
> mask = AUX_PD;
>
> - reg = readl(dp->reg_base + phy_pd_addr);
> if (enable)
> reg |= mask;
> else
> @@ -272,7 +284,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
> break;
> case CH0_BLOCK:
> mask = CH0_PD;
> - reg = readl(dp->reg_base + phy_pd_addr);
>
> if (enable)
> reg |= mask;
> @@ -282,7 +293,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
> break;
> case CH1_BLOCK:
> mask = CH1_PD;
> - reg = readl(dp->reg_base + phy_pd_addr);
>
> if (enable)
> reg |= mask;
> @@ -292,7 +302,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
> break;
> case CH2_BLOCK:
> mask = CH2_PD;
> - reg = readl(dp->reg_base + phy_pd_addr);
>
> if (enable)
> reg |= mask;
> @@ -302,7 +311,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
> break;
> case CH3_BLOCK:
> mask = CH3_PD;
> - reg = readl(dp->reg_base + phy_pd_addr);
>
> if (enable)
> reg |= mask;
> @@ -321,7 +329,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp,
> else
> mask = DP_PHY_PD;
>
> - reg = readl(dp->reg_base + phy_pd_addr);
> if (enable)
> reg |= mask;
> else
>
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/3] drm/exynos: exynos_dp: change poweron/off to encoder enable/disable
2026-10-27 12:01 [PATCH 0/3] DRM Google Nexus 10 display support Alexandre Marquet via B4 Relay
2026-10-27 12:01 ` [PATCH 1/3] drm/bridge: analogix_dp: deassert DP_PHY_PD on power-on for exynos Alexandre Marquet via B4 Relay
@ 2026-10-27 12:01 ` Alexandre Marquet via B4 Relay
2026-10-29 8:28 ` Marek Szyprowski
2026-10-27 12:01 ` [PATCH 3/3] drm/panel_edp: Add SEC LTL101DL02-002 panel Alexandre Marquet via B4 Relay
2 siblings, 1 reply; 7+ messages in thread
From: Alexandre Marquet via B4 Relay @ 2026-10-27 12:01 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Jingoo Han, Inki Dae, Seung-Woo Kim, Kyungmin Park,
Krzysztof Kozlowski, Peter Griffin, Alim Akhtar,
Douglas Anderson, Jessica Zhang
Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-samsung-soc,
Lukas Timmermann, Henrik Grimler, Hendrik Noack,
Alexandre Marquet
From: Alexandre Marquet <tb@a-marquet.fr>
Current functions exynos_dp_poweron()/exynos_dp_poweroff(), that
supposedly powers on/off the device, actually only enable the encoder
clock. This cause issues where poweron() calls fail silently in
analogix_dp_probe(), leading in some cases to a state were the encoder
is never enabled but the rest of the driver assumes that it is.
Signed-off-by: Alexandre Marquet <tb@a-marquet.fr>
---
drivers/gpu/drm/exynos/exynos_dp.c | 40 +++++++++++++-------------------------
1 file changed, 13 insertions(+), 27 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/exynos_dp.c
index 82c238829921..16b00aacd55b 100644
--- a/drivers/gpu/drm/exynos/exynos_dp.c
+++ b/drivers/gpu/drm/exynos/exynos_dp.c
@@ -43,39 +43,27 @@ struct exynos_dp_device {
struct analogix_dp_plat_data plat_data;
};
-static int exynos_dp_crtc_clock_enable(struct analogix_dp_plat_data *plat_data,
- bool enable)
-{
- struct exynos_dp_device *dp = to_dp(plat_data);
- struct drm_encoder *encoder = &dp->encoder;
-
- if (!encoder->crtc)
- return -EPERM;
-
- exynos_drm_pipe_clk_enable(to_exynos_crtc(encoder->crtc), enable);
-
- return 0;
-}
-
-static int exynos_dp_poweron(struct analogix_dp_plat_data *plat_data)
+static void exynos_dp_mode_set(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
{
- return exynos_dp_crtc_clock_enable(plat_data, true);
}
-static int exynos_dp_poweroff(struct analogix_dp_plat_data *plat_data)
+static void exynos_dp_crtc_clock_enable(struct drm_encoder *encoder,
+ bool enable)
{
- return exynos_dp_crtc_clock_enable(plat_data, false);
+ if (encoder->crtc)
+ exynos_drm_pipe_clk_enable(to_exynos_crtc(encoder->crtc), enable);
}
-static void exynos_dp_mode_set(struct drm_encoder *encoder,
- struct drm_display_mode *mode,
- struct drm_display_mode *adjusted_mode)
+static void exynos_dp_enable(struct drm_encoder *encoder)
{
+ exynos_dp_crtc_clock_enable(encoder, true);
}
-static void exynos_dp_nop(struct drm_encoder *encoder)
+static void exynos_dp_disable(struct drm_encoder *encoder)
{
- /* do nothing */
+ exynos_dp_crtc_clock_enable(encoder, false);
}
static const struct drm_encoder_funcs exynos_dp_encoder_funcs = {
@@ -84,8 +72,8 @@ static const struct drm_encoder_funcs exynos_dp_encoder_funcs = {
static const struct drm_encoder_helper_funcs exynos_dp_encoder_helper_funcs = {
.mode_set = exynos_dp_mode_set,
- .enable = exynos_dp_nop,
- .disable = exynos_dp_nop,
+ .enable = exynos_dp_enable,
+ .disable = exynos_dp_disable,
};
static int exynos_dp_bind(struct device *dev, struct device *master, void *data)
@@ -171,8 +159,6 @@ static int exynos_dp_probe(struct platform_device *pdev)
/* The remote port can be either a panel or a bridge */
dp->plat_data.dev_type = EXYNOS_DP;
- dp->plat_data.power_on = exynos_dp_poweron;
- dp->plat_data.power_off = exynos_dp_poweroff;
dp->plat_data.ops = &exynos_dp_ops;
dp->adp = analogix_dp_probe(dev, &dp->plat_data);
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH 2/3] drm/exynos: exynos_dp: change poweron/off to encoder enable/disable
2026-10-27 12:01 ` [PATCH 2/3] drm/exynos: exynos_dp: change poweron/off to encoder enable/disable Alexandre Marquet via B4 Relay
@ 2026-10-29 8:28 ` Marek Szyprowski
0 siblings, 0 replies; 7+ messages in thread
From: Marek Szyprowski @ 2026-10-29 8:28 UTC (permalink / raw)
To: tb, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Jingoo Han, Inki Dae, Seung-Woo Kim, Kyungmin Park,
Krzysztof Kozlowski, Peter Griffin, Alim Akhtar,
Douglas Anderson, Jessica Zhang
Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-samsung-soc,
Lukas Timmermann, Henrik Grimler, Hendrik Noack
On 27.10.2026 13:01, Alexandre Marquet via B4 Relay wrote:
> From: Alexandre Marquet <tb@a-marquet.fr>
>
> Current functions exynos_dp_poweron()/exynos_dp_poweroff(), that
> supposedly powers on/off the device, actually only enable the encoder
> clock. This cause issues where poweron() calls fail silently in
> analogix_dp_probe(), leading in some cases to a state were the encoder
> is never enabled but the rest of the driver assumes that it is.
>
> Signed-off-by: Alexandre Marquet <tb@a-marquet.fr>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Snow, Peach-Pit and Peach-Pi Chromebooks work fine with this change.
> ---
> drivers/gpu/drm/exynos/exynos_dp.c | 40 +++++++++++++-------------------------
> 1 file changed, 13 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/exynos_dp.c
> index 82c238829921..16b00aacd55b 100644
> --- a/drivers/gpu/drm/exynos/exynos_dp.c
> +++ b/drivers/gpu/drm/exynos/exynos_dp.c
> @@ -43,39 +43,27 @@ struct exynos_dp_device {
> struct analogix_dp_plat_data plat_data;
> };
>
> -static int exynos_dp_crtc_clock_enable(struct analogix_dp_plat_data *plat_data,
> - bool enable)
> -{
> - struct exynos_dp_device *dp = to_dp(plat_data);
> - struct drm_encoder *encoder = &dp->encoder;
> -
> - if (!encoder->crtc)
> - return -EPERM;
> -
> - exynos_drm_pipe_clk_enable(to_exynos_crtc(encoder->crtc), enable);
> -
> - return 0;
> -}
> -
> -static int exynos_dp_poweron(struct analogix_dp_plat_data *plat_data)
> +static void exynos_dp_mode_set(struct drm_encoder *encoder,
> + struct drm_display_mode *mode,
> + struct drm_display_mode *adjusted_mode)
> {
> - return exynos_dp_crtc_clock_enable(plat_data, true);
> }
>
> -static int exynos_dp_poweroff(struct analogix_dp_plat_data *plat_data)
> +static void exynos_dp_crtc_clock_enable(struct drm_encoder *encoder,
> + bool enable)
> {
> - return exynos_dp_crtc_clock_enable(plat_data, false);
> + if (encoder->crtc)
> + exynos_drm_pipe_clk_enable(to_exynos_crtc(encoder->crtc), enable);
> }
>
> -static void exynos_dp_mode_set(struct drm_encoder *encoder,
> - struct drm_display_mode *mode,
> - struct drm_display_mode *adjusted_mode)
> +static void exynos_dp_enable(struct drm_encoder *encoder)
> {
> + exynos_dp_crtc_clock_enable(encoder, true);
> }
>
> -static void exynos_dp_nop(struct drm_encoder *encoder)
> +static void exynos_dp_disable(struct drm_encoder *encoder)
> {
> - /* do nothing */
> + exynos_dp_crtc_clock_enable(encoder, false);
> }
>
> static const struct drm_encoder_funcs exynos_dp_encoder_funcs = {
> @@ -84,8 +72,8 @@ static const struct drm_encoder_funcs exynos_dp_encoder_funcs = {
>
> static const struct drm_encoder_helper_funcs exynos_dp_encoder_helper_funcs = {
> .mode_set = exynos_dp_mode_set,
> - .enable = exynos_dp_nop,
> - .disable = exynos_dp_nop,
> + .enable = exynos_dp_enable,
> + .disable = exynos_dp_disable,
> };
>
> static int exynos_dp_bind(struct device *dev, struct device *master, void *data)
> @@ -171,8 +159,6 @@ static int exynos_dp_probe(struct platform_device *pdev)
>
> /* The remote port can be either a panel or a bridge */
> dp->plat_data.dev_type = EXYNOS_DP;
> - dp->plat_data.power_on = exynos_dp_poweron;
> - dp->plat_data.power_off = exynos_dp_poweroff;
> dp->plat_data.ops = &exynos_dp_ops;
>
> dp->adp = analogix_dp_probe(dev, &dp->plat_data);
>
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 3/3] drm/panel_edp: Add SEC LTL101DL02-002 panel
2026-10-27 12:01 [PATCH 0/3] DRM Google Nexus 10 display support Alexandre Marquet via B4 Relay
2026-10-27 12:01 ` [PATCH 1/3] drm/bridge: analogix_dp: deassert DP_PHY_PD on power-on for exynos Alexandre Marquet via B4 Relay
2026-10-27 12:01 ` [PATCH 2/3] drm/exynos: exynos_dp: change poweron/off to encoder enable/disable Alexandre Marquet via B4 Relay
@ 2026-10-27 12:01 ` Alexandre Marquet via B4 Relay
2026-10-28 16:34 ` Doug Anderson
2 siblings, 1 reply; 7+ messages in thread
From: Alexandre Marquet via B4 Relay @ 2026-10-27 12:01 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Jingoo Han, Inki Dae, Seung-Woo Kim, Kyungmin Park,
Krzysztof Kozlowski, Peter Griffin, Alim Akhtar,
Douglas Anderson, Jessica Zhang
Cc: dri-devel, linux-kernel, linux-arm-kernel, linux-samsung-soc,
Lukas Timmermann, Henrik Grimler, Hendrik Noack,
Alexandre Marquet
From: Alexandre Marquet <tb@a-marquet.fr>
Add an entry for the eDP SEC LTL101DL02-002 panel used in
google-manta.
Raw EDID dump:
00 ff ff ff ff ff ff 00 4c a3 0f 9c 00 00 00 00
05 0e 01 03 80 21 19 78 0a 87 fe 98 57 51 8c 27
21 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 14 69 00 a0 a0 40 2e 60 30 20
36 00 1e d6 10 00 00 19 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9e
Signed-off-by: Alexandre Marquet <tb@a-marquet.fr>
---
drivers/gpu/drm/panel/panel-edp.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-edp.c b/drivers/gpu/drm/panel/panel-edp.c
index 94bc54c3833a..c92985363093 100644
--- a/drivers/gpu/drm/panel/panel-edp.c
+++ b/drivers/gpu/drm/panel/panel-edp.c
@@ -2198,6 +2198,8 @@ static const struct edp_panel_entry edp_panels[] = {
EDP_PANEL_ENTRY('L', 'G', 'D', 0x0778, &delay_200_500_e200_d200, "134WT1"),
EDP_PANEL_ENTRY('L', 'G', 'D', 0x07fe, &delay_200_500_e200_d200, "LP116WHA-SPB1"),
+ EDP_PANEL_ENTRY('S', 'E', 'C', 0x9c0f, &delay_200_500_e50, "LTL101DL02-002"),
+
EDP_PANEL_ENTRY('S', 'H', 'P', 0x1511, &delay_200_500_e50, "LQ140M1JW48"),
EDP_PANEL_ENTRY('S', 'H', 'P', 0x1523, &delay_80_500_e50, "LQ140M1JW46"),
EDP_PANEL_ENTRY('S', 'H', 'P', 0x153a, &delay_200_500_e50, "LQ140T1JH01"),
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH 3/3] drm/panel_edp: Add SEC LTL101DL02-002 panel
2026-10-27 12:01 ` [PATCH 3/3] drm/panel_edp: Add SEC LTL101DL02-002 panel Alexandre Marquet via B4 Relay
@ 2026-10-28 16:34 ` Doug Anderson
0 siblings, 0 replies; 7+ messages in thread
From: Doug Anderson @ 2026-10-28 16:34 UTC (permalink / raw)
To: tb
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Jingoo Han, Inki Dae, Seung-Woo Kim, Kyungmin Park,
Krzysztof Kozlowski, Peter Griffin, Alim Akhtar, Jessica Zhang,
dri-devel, linux-kernel, linux-arm-kernel, linux-samsung-soc,
Lukas Timmermann, Henrik Grimler, Hendrik Noack
Hi,
On Tue, Oct 27, 2026 at 5:01 AM Alexandre Marquet via B4 Relay
<devnull+tb.a-marquet.fr@kernel.org> wrote:
>
> From: Alexandre Marquet <tb@a-marquet.fr>
>
> Add an entry for the eDP SEC LTL101DL02-002 panel used in
> google-manta.
>
> Raw EDID dump:
>
> 00 ff ff ff ff ff ff 00 4c a3 0f 9c 00 00 00 00
> 05 0e 01 03 80 21 19 78 0a 87 fe 98 57 51 8c 27
> 21 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01
> 01 01 01 01 01 01 14 69 00 a0 a0 40 2e 60 30 20
> 36 00 1e d6 10 00 00 19 00 00 00 00 00 00 00 00
> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9e
>
> Signed-off-by: Alexandre Marquet <tb@a-marquet.fr>
> ---
> drivers/gpu/drm/panel/panel-edp.c | 2 ++
> 1 file changed, 2 insertions(+)
nit: subject doesn't quite fit the pattern of recent commits (_ vs -).
> diff --git a/drivers/gpu/drm/panel/panel-edp.c b/drivers/gpu/drm/panel/panel-edp.c
> index 94bc54c3833a..c92985363093 100644
> --- a/drivers/gpu/drm/panel/panel-edp.c
> +++ b/drivers/gpu/drm/panel/panel-edp.c
> @@ -2198,6 +2198,8 @@ static const struct edp_panel_entry edp_panels[] = {
> EDP_PANEL_ENTRY('L', 'G', 'D', 0x0778, &delay_200_500_e200_d200, "134WT1"),
> EDP_PANEL_ENTRY('L', 'G', 'D', 0x07fe, &delay_200_500_e200_d200, "LP116WHA-SPB1"),
>
> + EDP_PANEL_ENTRY('S', 'E', 'C', 0x9c0f, &delay_200_500_e50, "LTL101DL02-002"),
> +
It would also be good to note in the commit message where you got the
timings from. Datasheet? Downstream code? Guessing?
I had my AI agent take a look for itself. It found evidence suggesting
the enable delay should be 97ms, not 50ms. The other ones seem to be
OK.
-Doug
^ permalink raw reply [flat|nested] 7+ messages in thread