All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johan Hovold <johan@kernel.org>
To: Bjorn Andersson <quic_bjorande@quicinc.com>
Cc: Vinod Koul <vkoul@kernel.org>,
	Kishon Vijay Abraham I <kishon@kernel.org>,
	Bjorn Andersson <andersson@kernel.org>,
	Konrad Dybcio <konrad.dybcio@linaro.org>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	linux-arm-msm@vger.kernel.org, linux-phy@lists.infradead.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 5/7] phy: qcom-qmp-combo: Introduce drm_bridge
Date: Tue, 2 May 2023 14:05:53 +0200	[thread overview]
Message-ID: <ZFD8oQETtLuDH2Xg@hovoldconsulting.com> (raw)
In-Reply-To: <20230425034010.3789376-6-quic_bjorande@quicinc.com>

On Mon, Apr 24, 2023 at 08:40:08PM -0700, Bjorn Andersson wrote:
> The QMP combo PHY sits in an of_graph connected between the DisplayPort
> controller and a USB Type-C connector (or possibly a redriver).
> 
> The TCPM needs to be able to convey the HPD signal to the DisplayPort
> controller, but no directly link is provided by DeviceTree so the signal
> needs to "pass through" the QMP combo phy.
> 
> Handle this by introducing a drm_bridge which upon initialization finds
> the next bridge (i.e. the usb-c-connector) and chain this together. This
> way HPD changes in the connector will propagate to the DisplayPort
> driver.
> 
> The connector bridge is resolved lazily, as the TCPM is expected to be
> able to resolve the typec mux and switch at probe time, so the QMP combo
> phy will probe before the TCPM.
> 
> Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com>
> ---
>  drivers/phy/qualcomm/phy-qcom-qmp-combo.c | 36 +++++++++++++++++++++++
>  1 file changed, 36 insertions(+)
> 
> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-combo.c b/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
> index 5d6d6ef3944b..84bc08002537 100644
> --- a/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
> +++ b/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
> @@ -22,6 +22,8 @@
>  #include <linux/usb/typec.h>
>  #include <linux/usb/typec_mux.h>
>  
> +#include <drm/drm_bridge.h>
> +
>  #include <dt-bindings/phy/phy-qcom-qmp.h>
>  
>  #include "phy-qcom-qmp.h"
> @@ -1332,6 +1334,8 @@ struct qmp_combo {
>  	struct clk_hw dp_link_hw;
>  	struct clk_hw dp_pixel_hw;
>  
> +	struct drm_bridge bridge;
> +
>  	struct typec_switch_dev *sw;
>  	enum typec_orientation orientation;
>  };
> @@ -3196,6 +3200,34 @@ static int qmp_combo_register_clocks(struct qmp_combo *qmp, struct device_node *
>  	return devm_add_action_or_reset(qmp->dev, phy_clk_release_provider, dp_np);
>  }
>  
> +static int qmp_combo_bridge_attach(struct drm_bridge *bridge,
> +				   enum drm_bridge_attach_flags flags)
> +{
> +	struct qmp_combo *qmp = container_of(bridge, struct qmp_combo, bridge);
> +	struct drm_bridge *next_bridge;
> +
> +	if (!(flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR))
> +		return -EINVAL;
> +
> +	next_bridge = devm_drm_of_get_bridge(qmp->dev, qmp->dev->of_node, 0, 0);
> +	if (IS_ERR(next_bridge))
> +		return dev_err_probe(qmp->dev, PTR_ERR(next_bridge), "failed to acquire drm_bridge\n");

Using dev_err_probe() in an attach callback looks wrong as these
functions should not be returning -EPROBE_DEFER (and this is not a probe
function).

> +
> +	return drm_bridge_attach(bridge->encoder, next_bridge, bridge, DRM_BRIDGE_ATTACH_NO_CONNECTOR);

This line is over 100 chars, but there should be no reason not to break
it before 80 here.

> +}
> +
> +static const struct drm_bridge_funcs qmp_combo_bridge_funcs = {
> +	.attach	= qmp_combo_bridge_attach,
> +};
> +
> +static int qmp_combo_dp_register_bridge(struct qmp_combo *qmp)
> +{
> +	qmp->bridge.funcs = &qmp_combo_bridge_funcs;
> +	qmp->bridge.of_node = qmp->dev->of_node;
> +
> +	return devm_drm_bridge_add(qmp->dev, &qmp->bridge);
> +}

Guess you need a dummy function also for qmp_combo_dp_register_bridge()
in case of !CONFIG_DRM.

> +
>  static int qmp_combo_parse_dt_lecacy_dp(struct qmp_combo *qmp, struct device_node *np)
>  {
>  	struct device *dev = qmp->dev;
> @@ -3459,6 +3491,10 @@ static int qmp_combo_probe(struct platform_device *pdev)
>  	if (ret)
>  		return ret;
>  
> +	ret = qmp_combo_dp_register_bridge(qmp);
> +	if (ret)
> +		return ret;
> +
>  	/* Check for legacy binding with child nodes. */
>  	usb_np = of_get_child_by_name(dev->of_node, "usb3-phy");
>  	if (usb_np) {

Johan

WARNING: multiple messages have this Message-ID (diff)
From: Johan Hovold <johan@kernel.org>
To: Bjorn Andersson <quic_bjorande@quicinc.com>
Cc: Vinod Koul <vkoul@kernel.org>,
	Kishon Vijay Abraham I <kishon@kernel.org>,
	Bjorn Andersson <andersson@kernel.org>,
	Konrad Dybcio <konrad.dybcio@linaro.org>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	linux-arm-msm@vger.kernel.org, linux-phy@lists.infradead.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 5/7] phy: qcom-qmp-combo: Introduce drm_bridge
Date: Tue, 2 May 2023 14:05:53 +0200	[thread overview]
Message-ID: <ZFD8oQETtLuDH2Xg@hovoldconsulting.com> (raw)
In-Reply-To: <20230425034010.3789376-6-quic_bjorande@quicinc.com>

On Mon, Apr 24, 2023 at 08:40:08PM -0700, Bjorn Andersson wrote:
> The QMP combo PHY sits in an of_graph connected between the DisplayPort
> controller and a USB Type-C connector (or possibly a redriver).
> 
> The TCPM needs to be able to convey the HPD signal to the DisplayPort
> controller, but no directly link is provided by DeviceTree so the signal
> needs to "pass through" the QMP combo phy.
> 
> Handle this by introducing a drm_bridge which upon initialization finds
> the next bridge (i.e. the usb-c-connector) and chain this together. This
> way HPD changes in the connector will propagate to the DisplayPort
> driver.
> 
> The connector bridge is resolved lazily, as the TCPM is expected to be
> able to resolve the typec mux and switch at probe time, so the QMP combo
> phy will probe before the TCPM.
> 
> Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com>
> ---
>  drivers/phy/qualcomm/phy-qcom-qmp-combo.c | 36 +++++++++++++++++++++++
>  1 file changed, 36 insertions(+)
> 
> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-combo.c b/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
> index 5d6d6ef3944b..84bc08002537 100644
> --- a/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
> +++ b/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
> @@ -22,6 +22,8 @@
>  #include <linux/usb/typec.h>
>  #include <linux/usb/typec_mux.h>
>  
> +#include <drm/drm_bridge.h>
> +
>  #include <dt-bindings/phy/phy-qcom-qmp.h>
>  
>  #include "phy-qcom-qmp.h"
> @@ -1332,6 +1334,8 @@ struct qmp_combo {
>  	struct clk_hw dp_link_hw;
>  	struct clk_hw dp_pixel_hw;
>  
> +	struct drm_bridge bridge;
> +
>  	struct typec_switch_dev *sw;
>  	enum typec_orientation orientation;
>  };
> @@ -3196,6 +3200,34 @@ static int qmp_combo_register_clocks(struct qmp_combo *qmp, struct device_node *
>  	return devm_add_action_or_reset(qmp->dev, phy_clk_release_provider, dp_np);
>  }
>  
> +static int qmp_combo_bridge_attach(struct drm_bridge *bridge,
> +				   enum drm_bridge_attach_flags flags)
> +{
> +	struct qmp_combo *qmp = container_of(bridge, struct qmp_combo, bridge);
> +	struct drm_bridge *next_bridge;
> +
> +	if (!(flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR))
> +		return -EINVAL;
> +
> +	next_bridge = devm_drm_of_get_bridge(qmp->dev, qmp->dev->of_node, 0, 0);
> +	if (IS_ERR(next_bridge))
> +		return dev_err_probe(qmp->dev, PTR_ERR(next_bridge), "failed to acquire drm_bridge\n");

Using dev_err_probe() in an attach callback looks wrong as these
functions should not be returning -EPROBE_DEFER (and this is not a probe
function).

> +
> +	return drm_bridge_attach(bridge->encoder, next_bridge, bridge, DRM_BRIDGE_ATTACH_NO_CONNECTOR);

This line is over 100 chars, but there should be no reason not to break
it before 80 here.

> +}
> +
> +static const struct drm_bridge_funcs qmp_combo_bridge_funcs = {
> +	.attach	= qmp_combo_bridge_attach,
> +};
> +
> +static int qmp_combo_dp_register_bridge(struct qmp_combo *qmp)
> +{
> +	qmp->bridge.funcs = &qmp_combo_bridge_funcs;
> +	qmp->bridge.of_node = qmp->dev->of_node;
> +
> +	return devm_drm_bridge_add(qmp->dev, &qmp->bridge);
> +}

Guess you need a dummy function also for qmp_combo_dp_register_bridge()
in case of !CONFIG_DRM.

> +
>  static int qmp_combo_parse_dt_lecacy_dp(struct qmp_combo *qmp, struct device_node *np)
>  {
>  	struct device *dev = qmp->dev;
> @@ -3459,6 +3491,10 @@ static int qmp_combo_probe(struct platform_device *pdev)
>  	if (ret)
>  		return ret;
>  
> +	ret = qmp_combo_dp_register_bridge(qmp);
> +	if (ret)
> +		return ret;
> +
>  	/* Check for legacy binding with child nodes. */
>  	usb_np = of_get_child_by_name(dev->of_node, "usb3-phy");
>  	if (usb_np) {

Johan

-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

  parent reply	other threads:[~2023-05-02 12:05 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-25  3:40 [PATCH 0/7] phy: qcom-qmp-combo: Support orientation switching Bjorn Andersson
2023-04-25  3:40 ` Bjorn Andersson
2023-04-25  3:40 ` [PATCH 1/7] dt-bindings: phy: qcom,sc8280xp-qmp-usb43dp: Add ports and orientation-switch Bjorn Andersson
2023-04-25  3:40   ` Bjorn Andersson
2023-04-25 18:58   ` Rob Herring
2023-04-25 18:58     ` Rob Herring
2023-04-26 10:21   ` Bryan O'Donoghue
2023-04-26 10:21     ` Bryan O'Donoghue
2023-04-27 19:52     ` Bjorn Andersson
2023-04-27 19:52       ` Bjorn Andersson
2023-05-03 20:37       ` Bryan O'Donoghue
2023-05-03 20:37         ` Bryan O'Donoghue
2023-05-04 13:50       ` Neil Armstrong
2023-05-04 13:50         ` Neil Armstrong
2023-05-04 14:51         ` Bjorn Andersson
2023-05-04 14:51           ` Bjorn Andersson
2023-04-25  3:40 ` [PATCH 2/7] phy: qcom-qmp-combo: Move phy_mutex out of com_init/exit Bjorn Andersson
2023-04-25  3:40   ` Bjorn Andersson
2023-05-02 10:43   ` Johan Hovold
2023-05-02 10:43     ` Johan Hovold
2023-04-25  3:40 ` [PATCH 3/7] phy: qcom-qmp-combo: Introduce orientation variable Bjorn Andersson
2023-04-25  3:40   ` Bjorn Andersson
2023-04-27 13:13   ` Neil Armstrong
2023-04-27 13:13     ` Neil Armstrong
2023-05-02 11:48   ` Johan Hovold
2023-05-02 11:48     ` Johan Hovold
2023-05-04  3:29     ` Bjorn Andersson
2023-05-04  3:29       ` Bjorn Andersson
2023-05-04 13:44       ` Johan Hovold
2023-05-04 13:44         ` Johan Hovold
2023-05-04 15:16         ` Bjorn Andersson
2023-05-04 15:16           ` Bjorn Andersson
2023-05-04 15:41           ` Johan Hovold
2023-05-04 15:41             ` Johan Hovold
2023-04-25  3:40 ` [PATCH 4/7] phy: qcom-qmp-combo: Introduce orientation switching Bjorn Andersson
2023-04-25  3:40   ` Bjorn Andersson
2023-04-27 13:18   ` Neil Armstrong
2023-04-27 13:18     ` Neil Armstrong
2023-05-02 11:56   ` Johan Hovold
2023-05-02 11:56     ` Johan Hovold
2023-04-25  3:40 ` [PATCH 5/7] phy: qcom-qmp-combo: Introduce drm_bridge Bjorn Andersson
2023-04-25  3:40   ` Bjorn Andersson
2023-04-26 10:33   ` Bryan O'Donoghue
2023-04-26 10:33     ` Bryan O'Donoghue
2023-04-27 13:11     ` Neil Armstrong
2023-04-27 13:11       ` Neil Armstrong
2023-04-27 18:00       ` Dmitry Baryshkov
2023-04-27 18:00         ` Dmitry Baryshkov
2023-04-27 19:55     ` Bjorn Andersson
2023-04-27 19:55       ` Bjorn Andersson
2023-04-28  6:55       ` Bryan O'Donoghue
2023-04-28  6:55         ` Bryan O'Donoghue
2023-05-01 19:32   ` kernel test robot
2023-05-02  5:16   ` kernel test robot
2023-05-02 12:05   ` Johan Hovold [this message]
2023-05-02 12:05     ` Johan Hovold
2023-05-04  3:13     ` Bjorn Andersson
2023-05-04  3:13       ` Bjorn Andersson
2023-05-04  8:38       ` Johan Hovold
2023-05-04  8:38         ` Johan Hovold
2023-05-04  8:55         ` Dmitry Baryshkov
2023-05-04  8:55           ` Dmitry Baryshkov
2023-05-04 15:49         ` Bjorn Andersson
2023-05-04 15:49           ` Bjorn Andersson
2023-04-25  3:40 ` [PATCH 6/7] arm64: dts: qcom: sc8280xp-crd: Add QMP to SuperSpeed graph Bjorn Andersson
2023-04-25  3:40   ` Bjorn Andersson
2023-04-26 23:33   ` Konrad Dybcio
2023-04-26 23:33     ` Konrad Dybcio
2023-04-27 13:27     ` Neil Armstrong
2023-04-27 13:27       ` Neil Armstrong
2023-05-02 11:03       ` Konrad Dybcio
2023-05-02 11:03         ` Konrad Dybcio
2023-04-27 19:48     ` Bjorn Andersson
2023-04-27 19:48       ` Bjorn Andersson
2023-05-02 12:22   ` Johan Hovold
2023-05-02 12:22     ` Johan Hovold
2023-05-04  3:07     ` Bjorn Andersson
2023-05-04  3:07       ` Bjorn Andersson
2023-04-25  3:40 ` [PATCH 7/7] arm64: dts: qcom: sc8280xp-x13s: " Bjorn Andersson
2023-04-25  3:40   ` Bjorn Andersson
2023-04-25  4:58 ` [PATCH 0/7] phy: qcom-qmp-combo: Support orientation switching Steev Klimaszewski
2023-04-25  4:58   ` Steev Klimaszewski
2023-04-26 14:25 ` Abel Vesa
2023-04-26 14:25   ` Abel Vesa
2023-05-02 12:26 ` Johan Hovold
2023-05-02 12:26   ` Johan Hovold
2023-05-03  9:50 ` Neil Armstrong
2023-05-03  9:50   ` Neil Armstrong
2023-05-23  3:03 ` Bjorn Andersson
2023-05-23  3:03   ` Bjorn Andersson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZFD8oQETtLuDH2Xg@hovoldconsulting.com \
    --to=johan@kernel.org \
    --cc=andersson@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=kishon@kernel.org \
    --cc=konrad.dybcio@linaro.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-phy@lists.infradead.org \
    --cc=quic_bjorande@quicinc.com \
    --cc=robh+dt@kernel.org \
    --cc=vkoul@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.