<pre>
Hi, Guillaume:

On Mon, 2023-05-29 at 16:31 +0200, Guillaume Ranquet wrote:
>
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
> Adds hdmi and hdmi-ddc support for v2 IP.
>
> Signed-off-by: Guillaume Ranquet <granquet@baylibre.com>
> ---

[snip]

> +
> +static void mtk_hdmi_bridge_disable(struct drm_bridge *bridge,
> + struct drm_bridge_state *old_bridge_state)
> +{
> +struct mtk_hdmi *hdmi = hdmi_ctx_from_bridge(bridge);
> +
> +if (!hdmi->enabled)
> +return;
> +
> +mtk_hdmi_hw_send_av_mute(hdmi);
> +usleep_range(50000, 50050);
> +mtk_hdmi_hw_vid_black(hdmi, true);
> +mtk_hdmi_disable_hdcp_encrypt(hdmi);
> +usleep_range(50000, 50050);
> +
> +phy_power_off(hdmi->phy);
> +
> +hdmi->enabled = false;
> +}
> +
> +static void mtk_hdmi_bridge_post_disable(struct drm_bridge *bridge,
> + struct drm_bridge_state *old_state)
> +{
> +struct mtk_hdmi *hdmi = hdmi_ctx_from_bridge(bridge);
> +
> +if (!hdmi->powered)
> +return;
> +
> +phy_power_off(hdmi->phy);
> +
> +hdmi->powered = false;
> +}
> +
> +static void mtk_hdmi_bridge_pre_enable(struct drm_bridge *bridge,
> + struct drm_bridge_state *old_state)
> +{
> +struct mtk_hdmi *hdmi = hdmi_ctx_from_bridge(bridge);
> +struct drm_atomic_state *state = old_state->base.state;
> +union phy_configure_opts opts = {
> +.dp = { .link_rate = hdmi->mode.clock * KILO}
> +};
> +
> +/* Retrieve the connector through the atomic state. */
> +hdmi->curr_conn = drm_atomic_get_new_connector_for_encoder(state,
> + bridge->encoder);
> +
> +mtk_hdmi_output_set_display_mode(hdmi, &hdmi->mode);
> +/* configuring phy clock link with appropriate rate */
> +phy_configure(hdmi->phy, &opts);
> +phy_power_on(hdmi->phy);
> +hdmi->powered = true;
> +}

In mt8173 hdmi driver, only bridge_enable stage, no bridge_pre_enable
stage, why mt8195 need to separate it?

Regards,
CK

> +
> +static void mtk_hdmi_bridge_enable(struct drm_bridge *bridge,
> + struct drm_bridge_state *old_state)
> +{
> +struct mtk_hdmi *hdmi = hdmi_ctx_from_bridge(bridge);
> +u8 buffer_spd[HDMI_INFOFRAME_SIZE(SPD)];
> +u8 buffer_avi[HDMI_INFOFRAME_SIZE(AVI)];
> +
> +phy_power_on(hdmi->phy);
> +mtk_hdmi_send_infoframe(hdmi, buffer_spd, sizeof(buffer_spd),
> +buffer_avi, sizeof(buffer_avi), &hdmi->mode);
> +mtk_hdmi_hw_spd_infoframe(hdmi, buffer_spd, sizeof(buffer_spd));
> +mtk_hdmi_hw_avi_infoframe(hdmi, buffer_avi, sizeof(buffer_avi));
> +
> +mtk_hdmi_hw_vid_black(hdmi, false);
> +
> +hdmi->enabled = true;
> +}
> +
>

</pre><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice ********************
The information contained in this e-mail message (including any 
attachments) may be confidential, proprietary, privileged, or otherwise
exempt from disclosure under applicable laws. It is intended to be 
conveyed only to the designated recipient(s). Any use, dissemination, 
distribution, printing, retaining or copying of this e-mail (including its 
attachments) by unintended recipient(s) is strictly prohibited and may 
be unlawful. If you are not an intended recipient of this e-mail, or believe 
that you have received this e-mail in error, please notify the sender 
immediately (by replying to this e-mail), delete any and all copies of 
this e-mail (including any attachments) from your system, and do not
disclose the content of this e-mail to any other person. Thank you!
</pre><!--}-->