From: Pratyush Yadav 
Date: Mon, 9 Oct 2023 13:09:32 +0000 (+0530)
Subject: media: cadence: csi2rx: Configure DPHY using link freq
X-Git-Tag: v6.7-rc1~51^2~59
X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=a91d06f46bf725f97d2bf344294c54bc57686889;p=linux.git
media: cadence: csi2rx: Configure DPHY using link freq
Some platforms like TI's J721E can have the CSI2RX paired with an
external DPHY. Use the generic PHY framework to configure the DPHY with
the correct link frequency.
Signed-off-by: Pratyush Yadav 
Tested-by: Julien Massot 
Reviewed-by: Laurent Pinchart 
Reviewed-by: Tomi Valkeinen 
Reviewed-by: Maxime Ripard 
Co-developed-by: Jai Luthra 
Signed-off-by: Jai Luthra 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 
---
diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c b/drivers/media/platform/cadence/cdns-csi2rx.c
index f9b41451f4a4..77e2413c345a 100644
--- a/drivers/media/platform/cadence/cdns-csi2rx.c
+++ b/drivers/media/platform/cadence/cdns-csi2rx.c
@@ -145,8 +145,32 @@ static void csi2rx_reset(struct csi2rx_priv *csi2rx)
 static int csi2rx_configure_ext_dphy(struct csi2rx_priv *csi2rx)
 {
 	union phy_configure_opts opts = { };
+	struct phy_configure_opts_mipi_dphy *cfg = &opts.mipi_dphy;
+	struct v4l2_subdev_format sd_fmt = {
+		.which	= V4L2_SUBDEV_FORMAT_ACTIVE,
+		.pad	= CSI2RX_PAD_SINK,
+	};
+	const struct csi2rx_fmt *fmt;
+	s64 link_freq;
 	int ret;
 
+	ret = v4l2_subdev_call_state_active(&csi2rx->subdev, pad, get_fmt,
+					    &sd_fmt);
+	if (ret < 0)
+		return ret;
+
+	fmt = csi2rx_get_fmt_by_code(sd_fmt.format.code);
+
+	link_freq = v4l2_get_link_freq(csi2rx->source_subdev->ctrl_handler,
+				       fmt->bpp, 2 * csi2rx->num_lanes);
+	if (link_freq < 0)
+		return link_freq;
+
+	ret = phy_mipi_dphy_get_default_config_for_hsclk(link_freq,
+							 csi2rx->num_lanes, cfg);
+	if (ret)
+		return ret;
+
 	ret = phy_power_on(csi2rx->dphy);
 	if (ret)
 		return ret;