Subject: [PATCH v4 0/9] MediaTek DisplayPort: support eDP and aux-bus

Changes in v4:
- Set data lanes to idle to prevent stalls if bootloader didn't
properly close the eDP port
- Now using the .done_probing() callback for AUX bus to prevent
probe deferral loops in case the panel-edp driver is a module
as previously seen with another bridge driver (ANX7625) on
some other SoCs (MT8192 and others)
- Rebased over next-20230706
- Dropped Chen-Yu's T-b tag on last patch as some logic changed
(before, I wasn't using the .done_probing() callback).

Changes in v3:
- Added DPTX AUX block initialization before trying to communicate
to stop relying on the bootloader keeping it initialized before
booting Linux.
- Fixed commit description for patch [09/09] and removed commented
out code (that slipped from dev phase.. sorry!).

This series adds "real" support for eDP in the mtk-dp DisplayPort driver.

Explaining the "real":
Before this change, the DisplayPort driver did support eDP to some
extent, but it was treating it entirely like a regular DP interface
which is partially fine, after all, embedded DisplayPort *is* actually
DisplayPort, but there might be some differences to account for... and
this is for both small performance improvements and, more importantly,
for correct functionality in some systems.

Functionality first:

One of the common differences found in various boards implementing eDP
and machines using an eDP panel is that many times the HPD line is not
connected. This *must* be accounted for: at startup, this specific IP
will raise a HPD interrupt (which should maybe be ignored... as it does
not appear to be a "real" event...) that will make the eDP panel to be
detected and to actually work but, after a suspend-resume cycle, there
will be no HPD interrupt (as there's no HPD line in my case!) producing
a functionality issue - specifically, the DP Link Training fails because
the panel doesn't get powered up, then it stays black and won't work
until rebooting the machine (or removing and reinserting the module I
think, but I haven't tried that).

Now for.. both:
eDP panels are *e*DP because they are *not* removable (in the sense that
you can't unplug the cable without disassembling the machine, in which
case, the machine shall be powered down..!): this (correct) assumption
makes us able to solve some issues and to also gain a little performance
during PM operations.

What was done here is:
- Caching the EDID if the panel is eDP: we're always going to read the
same data everytime, so we can just cache that (as it's small enough)
shortening PM resume times for the eDP driver instance;
- Always return connector_status_connected if it's eDP: non-removable
means connector_status_disconnected can't happen during runtime...
this also saves us some time and even power, as we won't have to
perform yet another power cycle of the HW;
- Added aux-bus support!
This makes us able to rely on panel autodetection from the EDID,
avoiding to add more and more panel timings to panel-edp and, even
better, allowing to use one panel node in devicetrees for multiple
variants of the same machine since, at that point, it's not important
to "preventively know" what panel we have (eh, it's autodetected...!).

This was tested on a MT8195 Cherry Tomato Chromebook (panel-edp on aux-bus)


P.S.: For your own testing commodity, here's a reference devicetree:
&edp_tx {
status = "okay";

pinctrl-names = "default";
pinctrl-0 = <&edptx_pins_default>;

ports {
#address-cells = <1>;
#size-cells = <0>;

port@0 {
reg = <0>;
edp_in: endpoint {
remote-endpoint = <&dp_intf0_out>;
};
};

port@1 {
reg = <1>;
edp_out: endpoint {
data-lanes = <0 1 2 3>;
remote-endpoint = <&panel_in>;
};
};
};

aux-bus {
panel: panel {
compatible = "edp-panel";
power-supply = <&pp3300_disp_x>;
backlight = <&backlight_lcd0>;
port {
panel_in: endpoint {
remote-endpoint = <&edp_out>;
};
};
};
};
};


AngeloGioacchino Del Regno (9):
drm/mediatek: dp: Cache EDID for eDP panel
drm/mediatek: dp: Move AUX and panel poweron/off sequence to function
drm/mediatek: dp: Always return connected status for eDP in .detect()
drm/mediatek: dp: Always set cable_plugged_in at resume for eDP panel
drm/mediatek: dp: Change logging to dev for mtk_dp_aux_transfer()
drm/mediatek: dp: Enable event interrupt only when bridge attached
drm/mediatek: dp: Use devm variant of drm_bridge_add()
drm/mediatek: dp: Move AUX_P0 setting to
mtk_dp_initialize_aux_settings()
drm/mediatek: dp: Add support for embedded DisplayPort aux-bus

drivers/gpu/drm/mediatek/mtk_dp.c | 197 +++++++++++++++++++-----------
1 file changed, 127 insertions(+), 70 deletions(-)

--
2.40.1



Subject: [PATCH v4 4/9] drm/mediatek: dp: Always set cable_plugged_in at resume for eDP panel

eDP panels are not removable: at PM resume, the cable will obviously
still be plugged in.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
Tested-by: Chen-Yu Tsai <[email protected]>
---
drivers/gpu/drm/mediatek/mtk_dp.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c
index 5b35a2e23896..35f3549d258e 100644
--- a/drivers/gpu/drm/mediatek/mtk_dp.c
+++ b/drivers/gpu/drm/mediatek/mtk_dp.c
@@ -2606,6 +2606,9 @@ static int mtk_dp_resume(struct device *dev)
mtk_dp_hwirq_enable(mtk_dp, true);
mtk_dp_power_enable(mtk_dp);

+ if (mtk_dp->bridge.type == DRM_MODE_CONNECTOR_eDP)
+ mtk_dp->train_info.cable_plugged_in = true;
+
return 0;
}
#endif
--
2.40.1


Subject: [PATCH v4 5/9] drm/mediatek: dp: Change logging to dev for mtk_dp_aux_transfer()

Change logging from drm_{err,info}() to dev_{err,info}() in functions
mtk_dp_aux_transfer() and mtk_dp_aux_do_transfer(): this will be
essential to avoid getting NULL pointer kernel panics if any kind
of error happens during AUX transfers happening before the bridge
is attached.

This may potentially start happening in a later commit implementing
aux-bus support, as AUX transfers will be triggered from the panel
driver (for EDID) before the mtk-dp bridge gets attached, and it's
done in preparation for the same.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
Tested-by: Chen-Yu Tsai <[email protected]>
---
drivers/gpu/drm/mediatek/mtk_dp.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c
index 35f3549d258e..274119356dfb 100644
--- a/drivers/gpu/drm/mediatek/mtk_dp.c
+++ b/drivers/gpu/drm/mediatek/mtk_dp.c
@@ -848,7 +848,7 @@ static int mtk_dp_aux_do_transfer(struct mtk_dp *mtk_dp, bool is_read, u8 cmd,
u32 phy_status = mtk_dp_read(mtk_dp, MTK_DP_AUX_P0_3628) &
AUX_RX_PHY_STATE_AUX_TX_P0_MASK;
if (phy_status != AUX_RX_PHY_STATE_AUX_TX_P0_RX_IDLE) {
- drm_err(mtk_dp->drm_dev,
+ dev_err(mtk_dp->dev,
"AUX Rx Aux hang, need SW reset\n");
return -EIO;
}
@@ -2061,7 +2061,7 @@ static ssize_t mtk_dp_aux_transfer(struct drm_dp_aux *mtk_aux,
is_read = true;
break;
default:
- drm_err(mtk_aux->drm_dev, "invalid aux cmd = %d\n",
+ dev_err(mtk_dp->dev, "invalid aux cmd = %d\n",
msg->request);
ret = -EINVAL;
goto err;
@@ -2077,7 +2077,7 @@ static ssize_t mtk_dp_aux_transfer(struct drm_dp_aux *mtk_aux,
to_access, &msg->reply);

if (ret) {
- drm_info(mtk_dp->drm_dev,
+ dev_info(mtk_dp->dev,
"Failed to do AUX transfer: %d\n", ret);
goto err;
}
--
2.40.1


Subject: [PATCH v4 6/9] drm/mediatek: dp: Enable event interrupt only when bridge attached

In preparation for implementing support for aux-bus in this driver,
add a IRQ_NOAUTOEN flag to the event interrupt that we request at
probe time and manage the enablement of the ISR at bridge_attach
and detach time.

When aux-bus will be implemented, enabling the interrupt before
attaching the bridge will create an event storm and hang the kernel
during boot.
In any case, the interrupt handler anyway requires resources that
are initialized by mtk_dp_bridge_attach(), so it cannot do anything
meaningful without... and even crash, but that's not happening in
the current code because the HW remains unpowered until resources
are made available.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
Tested-by: Chen-Yu Tsai <[email protected]>
---
drivers/gpu/drm/mediatek/mtk_dp.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c
index 274119356dfb..eebcb32e67ee 100644
--- a/drivers/gpu/drm/mediatek/mtk_dp.c
+++ b/drivers/gpu/drm/mediatek/mtk_dp.c
@@ -100,6 +100,7 @@ struct mtk_dp_efuse_fmt {
struct mtk_dp {
bool enabled;
bool need_debounce;
+ int irq;
u8 max_lanes;
u8 max_linkrate;
u8 rx_cap[DP_RECEIVER_CAP_SIZE];
@@ -2147,6 +2148,8 @@ static int mtk_dp_bridge_attach(struct drm_bridge *bridge,

mtk_dp->drm_dev = bridge->dev;

+ irq_clear_status_flags(mtk_dp->irq, IRQ_NOAUTOEN);
+ enable_irq(mtk_dp->irq);
mtk_dp_hwirq_enable(mtk_dp, true);

return 0;
@@ -2163,6 +2166,7 @@ static void mtk_dp_bridge_detach(struct drm_bridge *bridge)
struct mtk_dp *mtk_dp = mtk_dp_from_bridge(bridge);

mtk_dp_hwirq_enable(mtk_dp, false);
+ disable_irq(mtk_dp->irq);
mtk_dp->drm_dev = NULL;
mtk_dp_poweroff(mtk_dp);
drm_dp_aux_unregister(&mtk_dp->aux);
@@ -2481,7 +2485,7 @@ static int mtk_dp_probe(struct platform_device *pdev)
{
struct mtk_dp *mtk_dp;
struct device *dev = &pdev->dev;
- int ret, irq_num;
+ int ret;

mtk_dp = devm_kzalloc(dev, sizeof(*mtk_dp), GFP_KERNEL);
if (!mtk_dp)
@@ -2490,9 +2494,9 @@ static int mtk_dp_probe(struct platform_device *pdev)
mtk_dp->dev = dev;
mtk_dp->data = (struct mtk_dp_data *)of_device_get_match_data(dev);

- irq_num = platform_get_irq(pdev, 0);
- if (irq_num < 0)
- return dev_err_probe(dev, irq_num,
+ mtk_dp->irq = platform_get_irq(pdev, 0);
+ if (mtk_dp->irq < 0)
+ return dev_err_probe(dev, mtk_dp->irq,
"failed to request dp irq resource\n");

mtk_dp->next_bridge = devm_drm_of_get_bridge(dev, dev->of_node, 1, 0);
@@ -2513,7 +2517,8 @@ static int mtk_dp_probe(struct platform_device *pdev)

spin_lock_init(&mtk_dp->irq_thread_lock);

- ret = devm_request_threaded_irq(dev, irq_num, mtk_dp_hpd_event,
+ irq_set_status_flags(mtk_dp->irq, IRQ_NOAUTOEN);
+ ret = devm_request_threaded_irq(dev, mtk_dp->irq, mtk_dp_hpd_event,
mtk_dp_hpd_event_thread,
IRQ_TYPE_LEVEL_HIGH, dev_name(dev),
mtk_dp);
--
2.40.1


Subject: [PATCH v4 7/9] drm/mediatek: dp: Use devm variant of drm_bridge_add()

In preparation for adding support for aux-bus, which will add a code
path that may fail after the drm_bridge_add() call, change that to
devm_drm_bridge_add() to simplify failure paths later.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
Tested-by: Chen-Yu Tsai <[email protected]>
---
drivers/gpu/drm/mediatek/mtk_dp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c
index eebcb32e67ee..6bc620aded45 100644
--- a/drivers/gpu/drm/mediatek/mtk_dp.c
+++ b/drivers/gpu/drm/mediatek/mtk_dp.c
@@ -2564,7 +2564,7 @@ static int mtk_dp_probe(struct platform_device *pdev)
DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID | DRM_BRIDGE_OP_HPD;
mtk_dp->bridge.type = mtk_dp->data->bridge_type;

- drm_bridge_add(&mtk_dp->bridge);
+ devm_drm_bridge_add(dev, &mtk_dp->bridge);

mtk_dp->need_debounce = true;
timer_setup(&mtk_dp->debounce_timer, mtk_dp_debounce_timer, 0);
--
2.40.1


Subject: [PATCH v4 3/9] drm/mediatek: dp: Always return connected status for eDP in .detect()

If this is an eDP panel it's not removable, hence it's always connected:
as a shortcut, always return connector_status_connected in the .detect()
callback for eDP connector, avoiding a poweron, a check for sink count
and a poweroff.

Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
Tested-by: Chen-Yu Tsai <[email protected]>
---
drivers/gpu/drm/mediatek/mtk_dp.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c
index 8f7d4af7076f..5b35a2e23896 100644
--- a/drivers/gpu/drm/mediatek/mtk_dp.c
+++ b/drivers/gpu/drm/mediatek/mtk_dp.c
@@ -1957,6 +1957,9 @@ static enum drm_connector_status mtk_dp_bdg_detect(struct drm_bridge *bridge)
bool enabled = mtk_dp->enabled;
u8 sink_count = 0;

+ if (mtk_dp->bridge.type == DRM_MODE_CONNECTOR_eDP)
+ return connector_status_connected;
+
if (!mtk_dp->train_info.cable_plugged_in)
return ret;

--
2.40.1


2023-07-07 08:34:23

by Chen-Yu Tsai

[permalink] [raw]
Subject: Re: [PATCH v4 0/9] MediaTek DisplayPort: support eDP and aux-bus

On Thu, Jul 6, 2023 at 8:30 PM AngeloGioacchino Del Regno
<[email protected]> wrote:
>
> Changes in v4:
> - Set data lanes to idle to prevent stalls if bootloader didn't
> properly close the eDP port
> - Now using the .done_probing() callback for AUX bus to prevent
> probe deferral loops in case the panel-edp driver is a module
> as previously seen with another bridge driver (ANX7625) on
> some other SoCs (MT8192 and others)
> - Rebased over next-20230706
> - Dropped Chen-Yu's T-b tag on last patch as some logic changed
> (before, I wasn't using the .done_probing() callback).
>
> Changes in v3:
> - Added DPTX AUX block initialization before trying to communicate
> to stop relying on the bootloader keeping it initialized before
> booting Linux.
> - Fixed commit description for patch [09/09] and removed commented
> out code (that slipped from dev phase.. sorry!).
>
> This series adds "real" support for eDP in the mtk-dp DisplayPort driver.
>
> Explaining the "real":
> Before this change, the DisplayPort driver did support eDP to some
> extent, but it was treating it entirely like a regular DP interface
> which is partially fine, after all, embedded DisplayPort *is* actually
> DisplayPort, but there might be some differences to account for... and
> this is for both small performance improvements and, more importantly,
> for correct functionality in some systems.
>
> Functionality first:
>
> One of the common differences found in various boards implementing eDP
> and machines using an eDP panel is that many times the HPD line is not
> connected. This *must* be accounted for: at startup, this specific IP
> will raise a HPD interrupt (which should maybe be ignored... as it does
> not appear to be a "real" event...) that will make the eDP panel to be
> detected and to actually work but, after a suspend-resume cycle, there
> will be no HPD interrupt (as there's no HPD line in my case!) producing
> a functionality issue - specifically, the DP Link Training fails because
> the panel doesn't get powered up, then it stays black and won't work
> until rebooting the machine (or removing and reinserting the module I
> think, but I haven't tried that).
>
> Now for.. both:
> eDP panels are *e*DP because they are *not* removable (in the sense that
> you can't unplug the cable without disassembling the machine, in which
> case, the machine shall be powered down..!): this (correct) assumption
> makes us able to solve some issues and to also gain a little performance
> during PM operations.
>
> What was done here is:
> - Caching the EDID if the panel is eDP: we're always going to read the
> same data everytime, so we can just cache that (as it's small enough)
> shortening PM resume times for the eDP driver instance;
> - Always return connector_status_connected if it's eDP: non-removable
> means connector_status_disconnected can't happen during runtime...
> this also saves us some time and even power, as we won't have to
> perform yet another power cycle of the HW;
> - Added aux-bus support!
> This makes us able to rely on panel autodetection from the EDID,
> avoiding to add more and more panel timings to panel-edp and, even
> better, allowing to use one panel node in devicetrees for multiple
> variants of the same machine since, at that point, it's not important
> to "preventively know" what panel we have (eh, it's autodetected...!).
>
> This was tested on a MT8195 Cherry Tomato Chromebook (panel-edp on aux-bus)

Do you have panel-edp built as a module? If I have it built in, the panel
can correctly display stuff. If I have it built as a module, the panel is
correctly detected, but the panel stays black even if DRM thinks it is
displaying stuff.

And it looks like EDID reading and panel power sequencing is still not
working correctly, i.e. needs regulator-always-on?

ChenYu

> P.S.: For your own testing commodity, here's a reference devicetree:
> &edp_tx {
> status = "okay";
>
> pinctrl-names = "default";
> pinctrl-0 = <&edptx_pins_default>;
>
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
>
> port@0 {
> reg = <0>;
> edp_in: endpoint {
> remote-endpoint = <&dp_intf0_out>;
> };
> };
>
> port@1 {
> reg = <1>;
> edp_out: endpoint {
> data-lanes = <0 1 2 3>;
> remote-endpoint = <&panel_in>;
> };
> };
> };
>
> aux-bus {
> panel: panel {
> compatible = "edp-panel";
> power-supply = <&pp3300_disp_x>;
> backlight = <&backlight_lcd0>;
> port {
> panel_in: endpoint {
> remote-endpoint = <&edp_out>;
> };
> };
> };
> };
> };
>
>
> AngeloGioacchino Del Regno (9):
> drm/mediatek: dp: Cache EDID for eDP panel
> drm/mediatek: dp: Move AUX and panel poweron/off sequence to function
> drm/mediatek: dp: Always return connected status for eDP in .detect()
> drm/mediatek: dp: Always set cable_plugged_in at resume for eDP panel
> drm/mediatek: dp: Change logging to dev for mtk_dp_aux_transfer()
> drm/mediatek: dp: Enable event interrupt only when bridge attached
> drm/mediatek: dp: Use devm variant of drm_bridge_add()
> drm/mediatek: dp: Move AUX_P0 setting to
> mtk_dp_initialize_aux_settings()
> drm/mediatek: dp: Add support for embedded DisplayPort aux-bus
>
> drivers/gpu/drm/mediatek/mtk_dp.c | 197 +++++++++++++++++++-----------
> 1 file changed, 127 insertions(+), 70 deletions(-)
>
> --
> 2.40.1
>

Subject: Re: [PATCH v4 0/9] MediaTek DisplayPort: support eDP and aux-bus

Il 07/07/23 10:23, Chen-Yu Tsai ha scritto:
> On Thu, Jul 6, 2023 at 8:30 PM AngeloGioacchino Del Regno
> <[email protected]> wrote:
>>
>> Changes in v4:
>> - Set data lanes to idle to prevent stalls if bootloader didn't
>> properly close the eDP port
>> - Now using the .done_probing() callback for AUX bus to prevent
>> probe deferral loops in case the panel-edp driver is a module
>> as previously seen with another bridge driver (ANX7625) on
>> some other SoCs (MT8192 and others)
>> - Rebased over next-20230706
>> - Dropped Chen-Yu's T-b tag on last patch as some logic changed
>> (before, I wasn't using the .done_probing() callback).
>>
>> Changes in v3:
>> - Added DPTX AUX block initialization before trying to communicate
>> to stop relying on the bootloader keeping it initialized before
>> booting Linux.
>> - Fixed commit description for patch [09/09] and removed commented
>> out code (that slipped from dev phase.. sorry!).
>>
>> This series adds "real" support for eDP in the mtk-dp DisplayPort driver.
>>
>> Explaining the "real":
>> Before this change, the DisplayPort driver did support eDP to some
>> extent, but it was treating it entirely like a regular DP interface
>> which is partially fine, after all, embedded DisplayPort *is* actually
>> DisplayPort, but there might be some differences to account for... and
>> this is for both small performance improvements and, more importantly,
>> for correct functionality in some systems.
>>
>> Functionality first:
>>
>> One of the common differences found in various boards implementing eDP
>> and machines using an eDP panel is that many times the HPD line is not
>> connected. This *must* be accounted for: at startup, this specific IP
>> will raise a HPD interrupt (which should maybe be ignored... as it does
>> not appear to be a "real" event...) that will make the eDP panel to be
>> detected and to actually work but, after a suspend-resume cycle, there
>> will be no HPD interrupt (as there's no HPD line in my case!) producing
>> a functionality issue - specifically, the DP Link Training fails because
>> the panel doesn't get powered up, then it stays black and won't work
>> until rebooting the machine (or removing and reinserting the module I
>> think, but I haven't tried that).
>>
>> Now for.. both:
>> eDP panels are *e*DP because they are *not* removable (in the sense that
>> you can't unplug the cable without disassembling the machine, in which
>> case, the machine shall be powered down..!): this (correct) assumption
>> makes us able to solve some issues and to also gain a little performance
>> during PM operations.
>>
>> What was done here is:
>> - Caching the EDID if the panel is eDP: we're always going to read the
>> same data everytime, so we can just cache that (as it's small enough)
>> shortening PM resume times for the eDP driver instance;
>> - Always return connector_status_connected if it's eDP: non-removable
>> means connector_status_disconnected can't happen during runtime...
>> this also saves us some time and even power, as we won't have to
>> perform yet another power cycle of the HW;
>> - Added aux-bus support!
>> This makes us able to rely on panel autodetection from the EDID,
>> avoiding to add more and more panel timings to panel-edp and, even
>> better, allowing to use one panel node in devicetrees for multiple
>> variants of the same machine since, at that point, it's not important
>> to "preventively know" what panel we have (eh, it's autodetected...!).
>>
>> This was tested on a MT8195 Cherry Tomato Chromebook (panel-edp on aux-bus)
>
> Do you have panel-edp built as a module? If I have it built in, the panel
> can correctly display stuff. If I have it built as a module, the panel is
> correctly detected, but the panel stays black even if DRM thinks it is
> displaying stuff.
>

I tested both. I'll recheck on a clean tree just to be sure...

> And it looks like EDID reading and panel power sequencing is still not
> working correctly, i.e. needs regulator-always-on?

Yeah that's still needed with this version, I'm still trying to get *at least*
some support upstreamed before refining it.

Cheers,
Angelo

>
> ChenYu
>
>> P.S.: For your own testing commodity, here's a reference devicetree:
>> &edp_tx {
>> status = "okay";
>>
>> pinctrl-names = "default";
>> pinctrl-0 = <&edptx_pins_default>;
>>
>> ports {
>> #address-cells = <1>;
>> #size-cells = <0>;
>>
>> port@0 {
>> reg = <0>;
>> edp_in: endpoint {
>> remote-endpoint = <&dp_intf0_out>;
>> };
>> };
>>
>> port@1 {
>> reg = <1>;
>> edp_out: endpoint {
>> data-lanes = <0 1 2 3>;
>> remote-endpoint = <&panel_in>;
>> };
>> };
>> };
>>
>> aux-bus {
>> panel: panel {
>> compatible = "edp-panel";
>> power-supply = <&pp3300_disp_x>;
>> backlight = <&backlight_lcd0>;
>> port {
>> panel_in: endpoint {
>> remote-endpoint = <&edp_out>;
>> };
>> };
>> };
>> };
>> };
>>
>>
>> AngeloGioacchino Del Regno (9):
>> drm/mediatek: dp: Cache EDID for eDP panel
>> drm/mediatek: dp: Move AUX and panel poweron/off sequence to function
>> drm/mediatek: dp: Always return connected status for eDP in .detect()
>> drm/mediatek: dp: Always set cable_plugged_in at resume for eDP panel
>> drm/mediatek: dp: Change logging to dev for mtk_dp_aux_transfer()
>> drm/mediatek: dp: Enable event interrupt only when bridge attached
>> drm/mediatek: dp: Use devm variant of drm_bridge_add()
>> drm/mediatek: dp: Move AUX_P0 setting to
>> mtk_dp_initialize_aux_settings()
>> drm/mediatek: dp: Add support for embedded DisplayPort aux-bus
>>
>> drivers/gpu/drm/mediatek/mtk_dp.c | 197 +++++++++++++++++++-----------
>> 1 file changed, 127 insertions(+), 70 deletions(-)
>>
>> --
>> 2.40.1
>>