From: Casey Connolly <casey.connolly@linaro.org>
To: david@ixit.cz, Robert Foss <rfoss@kernel.org>,
Todor Tomov <todor.too@gmail.com>,
Bryan O'Donoghue <bryan.odonoghue@linaro.org>,
Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Luca Weiss <luca.weiss@fairphone.com>,
Petr Hodina <phodina@protonmail.com>,
"Dr. Git" <drgitx@gmail.com>
Cc: Joel Selvaraj <foss@joelselvaraj.com>,
linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org,
Sakari Ailus <sakari.ailus@linux.intel.com>
Subject: Re: [PATCH RFC 7/8] media: qcom: camss: Account for C-PHY when calculating link frequency
Date: Sun, 9 Nov 2025 13:42:39 +0100 [thread overview]
Message-ID: <fd0a3ac1-1a6a-486f-ab0f-e5cd69f8127e@linaro.org> (raw)
In-Reply-To: <20251109-qcom-cphy-v1-7-165f7e79b0e1@ixit.cz>
Hi David,
On 11/9/25 10:39, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@ixit.cz>
>
> Ensure that the link frequency divider correctly accounts for C-PHY
> operation. The divider differs between D-PHY and C-PHY, as described
> in the MIPI CSI-2 specification.
>
> For more details, see:
> https://docs.kernel.org/driver-api/media/tx-rx.html#pixel-rate
>
> Suggested-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> Signed-off-by: David Heidelberg <david@ixit.cz>
> ---
> drivers/media/platform/qcom/camss/camss-csid.c | 2 +-
> drivers/media/platform/qcom/camss/camss-csiphy.c | 6 ++++--
> drivers/media/platform/qcom/camss/camss.c | 7 ++++---
> drivers/media/platform/qcom/camss/camss.h | 2 +-
> 4 files changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c
> index 68adea33cc719..9fb5834b28e2b 100644
> --- a/drivers/media/platform/qcom/camss/camss-csid.c
> +++ b/drivers/media/platform/qcom/camss/camss-csid.c
> @@ -545,7 +545,7 @@ static int csid_set_clock_rates(struct csid_device *csid)
> fmt = csid_get_fmt_entry(csid->res->formats->formats, csid->res->formats->nformats,
> csid->fmt[MSM_CSIPHY_PAD_SINK].code);
> link_freq = camss_get_link_freq(&csid->subdev.entity, fmt->bpp,
> - csid->phy.lane_cnt);
> + csid->phy.lane_cnt, csid->phy.cphy);
> if (link_freq < 0)
> link_freq = 0;
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c
> index a734fb7dde0a4..61f2b2ac3f159 100644
> --- a/drivers/media/platform/qcom/camss/camss-csiphy.c
> +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
> @@ -144,8 +144,9 @@ static int csiphy_set_clock_rates(struct csiphy_device *csiphy)
> u8 bpp = csiphy_get_bpp(csiphy->res->formats->formats, csiphy->res->formats->nformats,
> csiphy->fmt[MSM_CSIPHY_PAD_SINK].code);
> u8 num_lanes = csiphy->cfg.csi2->lane_cfg.num_data;
> + bool cphy = csiphy->cfg.csi2->lane_cfg.cphy;
>
> - link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes);
> + link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes, cphy);
> if (link_freq < 0)
> link_freq = 0;
>
> @@ -270,9 +271,10 @@ static int csiphy_stream_on(struct csiphy_device *csiphy)
> u8 bpp = csiphy_get_bpp(csiphy->res->formats->formats, csiphy->res->formats->nformats,
> csiphy->fmt[MSM_CSIPHY_PAD_SINK].code);
> u8 num_lanes = csiphy->cfg.csi2->lane_cfg.num_data;
> + bool cphy = csiphy->cfg.csi2->lane_cfg.cphy;
> u8 val;
>
> - link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes);
> + link_freq = camss_get_link_freq(&csiphy->subdev.entity, bpp, num_lanes, cphy);
>
> if (link_freq < 0) {
> dev_err(csiphy->camss->dev,
> diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
> index 549780f3f948b..248aa6b21b5ad 100644
> --- a/drivers/media/platform/qcom/camss/camss.c
> +++ b/drivers/media/platform/qcom/camss/camss.c
> @@ -3912,20 +3912,21 @@ struct media_pad *camss_find_sensor_pad(struct media_entity *entity)
> * camss_get_link_freq - Get link frequency from sensor
> * @entity: Media entity in the current pipeline
> * @bpp: Number of bits per pixel for the current format
> - * @lanes: Number of lanes in the link to the sensor
> + * @nr_of_lanes: Number of lanes in the link to the sensor
Missing cphy doc comment.> *
> * Return link frequency on success or a negative error code otherwise
> */
> s64 camss_get_link_freq(struct media_entity *entity, unsigned int bpp,
> - unsigned int lanes)
> + unsigned int nr_of_lanes, bool cphy)
> {
> struct media_pad *sensor_pad;
> + unsigned int div = nr_of_lanes * 2 * (cphy ? 7 : 16);
What do the magic numbers 7 and 16 mean? It would be nice to describe these.
Kind regards,
Casey (she/they)
>
> sensor_pad = camss_find_sensor_pad(entity);
> if (!sensor_pad)
> return -ENODEV;
>
> - return v4l2_get_link_freq(sensor_pad, bpp, 2 * lanes);
> + return v4l2_get_link_freq(sensor_pad, 16 * bpp, div);
> }
>
> /*
> diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/platform/qcom/camss/camss.h
> index 9d9a62640e25d..0ab908b0c037f 100644
> --- a/drivers/media/platform/qcom/camss/camss.h
> +++ b/drivers/media/platform/qcom/camss/camss.h
> @@ -162,7 +162,7 @@ int camss_enable_clocks(int nclocks, struct camss_clock *clock,
> void camss_disable_clocks(int nclocks, struct camss_clock *clock);
> struct media_pad *camss_find_sensor_pad(struct media_entity *entity);
> s64 camss_get_link_freq(struct media_entity *entity, unsigned int bpp,
> - unsigned int lanes);
> + unsigned int lanes, bool cphy);
> int camss_get_pixel_clock(struct media_entity *entity, u64 *pixel_clock);
> int camss_pm_domain_on(struct camss *camss, int id);
> void camss_pm_domain_off(struct camss *camss, int id);
>
next prev parent reply other threads:[~2025-11-09 12:42 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-09 9:39 [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms David Heidelberg via B4 Relay
2025-11-09 9:39 ` [PATCH RFC 1/8] media: qcom: camss: csiphy-3ph: Add Gen2 v1.1 MIPI CSI-2 CPHY init David Heidelberg via B4 Relay
2025-11-10 20:23 ` Vladimir Zapolskiy
2025-11-09 9:39 ` [PATCH RFC 2/8] media: qcom: camss: csiphy: Introduce C-PHY David Heidelberg via B4 Relay
2025-11-09 12:35 ` Casey Connolly
2025-11-10 11:35 ` Bryan O'Donoghue
2025-11-12 16:15 ` David Heidelberg
2025-11-13 9:27 ` Bryan O'Donoghue
2025-11-09 9:39 ` [PATCH RFC 3/8] media: qcom: camss: csiphy-3ph: Use odd bits for configuring C-PHY lanes David Heidelberg via B4 Relay
2025-11-09 9:49 ` David Heidelberg
2025-11-09 9:39 ` [PATCH RFC 4/8] media: qcom: camss: Prepare CSID for C-PHY support David Heidelberg via B4 Relay
2025-11-10 11:37 ` Bryan O'Donoghue
2025-12-01 20:30 ` David Heidelberg
2025-11-09 9:39 ` [PATCH RFC 5/8] media: qcom: camss: Initialize lanes after lane configuration is available David Heidelberg via B4 Relay
2025-11-10 11:38 ` Bryan O'Donoghue
2025-11-09 9:39 ` [PATCH RFC 6/8] media: qcom: camss: csiphy-3ph: Use sdm845 C-PHY configuration sequence David Heidelberg via B4 Relay
2025-11-10 11:40 ` Bryan O'Donoghue
2025-11-10 11:41 ` Luca Weiss
2025-11-09 9:39 ` [PATCH RFC 7/8] media: qcom: camss: Account for C-PHY when calculating link frequency David Heidelberg via B4 Relay
2025-11-09 12:42 ` Casey Connolly [this message]
2025-11-09 9:39 ` [PATCH RFC 8/8] media: qcom: camss: Remove D-PHY-only endpoint restriction David Heidelberg via B4 Relay
2025-11-09 12:43 ` Casey Connolly
2025-11-09 17:22 ` Luca Weiss
2025-11-09 12:49 ` [PATCH RFC 0/8] media: camss: Add support for C-PHY configuration on Qualcomm platforms Casey Connolly
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=fd0a3ac1-1a6a-486f-ab0f-e5cd69f8127e@linaro.org \
--to=casey.connolly@linaro.org \
--cc=bryan.odonoghue@linaro.org \
--cc=david@ixit.cz \
--cc=drgitx@gmail.com \
--cc=foss@joelselvaraj.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=luca.weiss@fairphone.com \
--cc=mchehab@kernel.org \
--cc=phodina@protonmail.com \
--cc=phone-devel@vger.kernel.org \
--cc=rfoss@kernel.org \
--cc=sakari.ailus@linux.intel.com \
--cc=todor.too@gmail.com \
--cc=vladimir.zapolskiy@linaro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).