From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Jacopo Mondi <jacopo+renesas@jmondi.org>
Cc: mchehab@kernel.org, hverkuil-cisco@xs4all.nl,
sakari.ailus@linux.intel.com,
niklas.soderlund+renesas@ragnatech.se,
kieran.bingham@ideasonboard.com, dave.stevenson@raspberrypi.com,
hyun.kwon@xilinx.com, linux-media@vger.kernel.org,
linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH v2 4/6] media: i2c: adv748x: Adjust TXA data lanes number
Date: Mon, 20 Apr 2020 04:56:27 +0300 [thread overview]
Message-ID: <20200420015627.GD15673@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20200415105004.2497356-5-jacopo+renesas@jmondi.org>
Hi Jacopo,
Thank you for the patch.
On Wed, Apr 15, 2020 at 12:50:01PM +0200, Jacopo Mondi wrote:
> When outputting SD-Core output through the TXA MIPI CSI-2 interface,
> the number of enabled data lanes should be reduced in order to guarantee
> the two video format produced by the SD-Core (480i and 576i) generate a
> MIPI CSI-2 link clock frequency compatible with the MIPI D-PHY
> specifications.
>
> Limit the number of enabled data lanes to 2, which is guaranteed to
> support 480i and 576i formats.
>
> Cache the number of enabled data lanes to be able to report it through
> the new get_mbus_config operation introduced in the following patches.
When this will be merged it won't be "following patches" anymore :-)
>
> Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
> Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
> drivers/media/i2c/adv748x/adv748x-core.c | 31 ++++++++++++++++++------
> drivers/media/i2c/adv748x/adv748x.h | 1 +
> 2 files changed, 25 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/media/i2c/adv748x/adv748x-core.c b/drivers/media/i2c/adv748x/adv748x-core.c
> index 23e02ff27b17..1fe7f97c6d52 100644
> --- a/drivers/media/i2c/adv748x/adv748x-core.c
> +++ b/drivers/media/i2c/adv748x/adv748x-core.c
> @@ -241,10 +241,10 @@ static int adv748x_power_up_tx(struct adv748x_csi2 *tx)
> int ret = 0;
>
> /* Enable n-lane MIPI */
> - adv748x_write_check(state, page, 0x00, 0x80 | tx->num_lanes, &ret);
> + adv748x_write_check(state, page, 0x00, 0x80 | tx->active_lanes, &ret);
>
> /* Set Auto DPHY Timing */
> - adv748x_write_check(state, page, 0x00, 0xa0 | tx->num_lanes, &ret);
> + adv748x_write_check(state, page, 0x00, 0xa0 | tx->active_lanes, &ret);
>
> /* ADI Required Write */
> if (tx->src == &state->hdmi.sd) {
> @@ -270,7 +270,7 @@ static int adv748x_power_up_tx(struct adv748x_csi2 *tx)
> usleep_range(2000, 2500);
>
> /* Power-up CSI-TX */
> - adv748x_write_check(state, page, 0x00, 0x20 | tx->num_lanes, &ret);
> + adv748x_write_check(state, page, 0x00, 0x20 | tx->active_lanes, &ret);
> usleep_range(1000, 1500);
>
> /* ADI Required Writes */
> @@ -292,7 +292,7 @@ static int adv748x_power_down_tx(struct adv748x_csi2 *tx)
> adv748x_write_check(state, page, 0x1e, 0x00, &ret);
>
> /* Enable n-lane MIPI */
> - adv748x_write_check(state, page, 0x00, 0x80 | tx->num_lanes, &ret);
> + adv748x_write_check(state, page, 0x00, 0x80 | tx->active_lanes, &ret);
>
> /* i2c_mipi_pll_en - 1'b1 */
> adv748x_write_check(state, page, 0xda, 0x01, &ret);
> @@ -357,14 +357,29 @@ static int adv748x_link_setup(struct media_entity *entity,
> if (state->afe.tx) {
> /* AFE Requires TXA enabled, even when output to TXB */
> io10 |= ADV748X_IO_10_CSI4_EN;
> - if (is_txa(tx))
> + if (is_txa(tx)) {
> + /*
> + * Output from the SD-core (480i and 576i) from the TXA
> + * interface requires reducing the number of enabled
> + * data lanes in order to guarantee a valid link
> + * frequency.
> + */
> + tx->active_lanes = min(tx->num_lanes, 2U);
> io10 |= ADV748X_IO_10_CSI4_IN_SEL_AFE;
> - else
> + } else {
> + /* TXB has a single data lane, no need to adjust. */
> io10 |= ADV748X_IO_10_CSI1_EN;
> + }
> }
>
> - if (state->hdmi.tx)
> + if (state->hdmi.tx) {
> + /*
> + * Restore the number of active lanes, in case we have gone
> + * through an AFE->TXA streaming sessions.
> + */
> + tx->active_lanes = tx->num_lanes;
> io10 |= ADV748X_IO_10_CSI4_EN;
> + }
>
> return io_clrset(state, ADV748X_IO_10, io10_mask, io10);
> }
> @@ -596,6 +611,7 @@ static int adv748x_parse_csi2_lanes(struct adv748x_state *state,
> }
>
> state->txa.num_lanes = num_lanes;
> + state->txa.active_lanes = num_lanes;
> adv_dbg(state, "TXA: using %u lanes\n", state->txa.num_lanes);
> }
>
> @@ -607,6 +623,7 @@ static int adv748x_parse_csi2_lanes(struct adv748x_state *state,
> }
>
> state->txb.num_lanes = num_lanes;
> + state->txb.active_lanes = num_lanes;
> adv_dbg(state, "TXB: using %u lanes\n", state->txb.num_lanes);
> }
>
> diff --git a/drivers/media/i2c/adv748x/adv748x.h b/drivers/media/i2c/adv748x/adv748x.h
> index fccb388ce179..1061f425ece5 100644
> --- a/drivers/media/i2c/adv748x/adv748x.h
> +++ b/drivers/media/i2c/adv748x/adv748x.h
> @@ -79,6 +79,7 @@ struct adv748x_csi2 {
> unsigned int page;
> unsigned int port;
> unsigned int num_lanes;
> + unsigned int active_lanes;
>
> struct media_pad pads[ADV748X_CSI2_NR_PADS];
> struct v4l2_ctrl_handler ctrl_hdl;
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2020-04-20 1:56 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-15 10:49 [PATCH v2 0/6] v4l2-subdev: Introduce get_mbus_format pad op Jacopo Mondi
2020-04-15 10:49 ` [PATCH v2 1/6] media: v4l2-subdv: Introduce get_mbus_config " Jacopo Mondi
2020-04-20 1:44 ` Laurent Pinchart
2020-04-29 13:54 ` Sakari Ailus
2020-05-11 11:32 ` Jacopo Mondi
2020-05-11 20:03 ` Sakari Ailus
2020-05-11 20:21 ` Laurent Pinchart
2020-05-13 17:23 ` Jacopo Mondi
2020-04-15 10:49 ` [PATCH v2 2/6] media: v4l2-subdev: Deprecate g_mbus_config video op Jacopo Mondi
2020-04-20 1:48 ` Laurent Pinchart
2020-05-14 10:16 ` Jacopo Mondi
2020-04-15 10:50 ` [PATCH v2 3/6] media: v4l2-subdev: Expand get_mbus_config doc Jacopo Mondi
2020-04-20 1:52 ` Laurent Pinchart
2020-04-15 10:50 ` [PATCH v2 4/6] media: i2c: adv748x: Adjust TXA data lanes number Jacopo Mondi
2020-04-20 1:56 ` Laurent Pinchart [this message]
2020-04-15 10:50 ` [PATCH v2 5/6] media: i2c: adv748x: Implement get_mbus_config Jacopo Mondi
2020-04-20 2:00 ` Laurent Pinchart
2020-04-15 10:50 ` [PATCH v2 6/6] media: rcar-csi2: Negotiate data lanes number Jacopo Mondi
2020-04-20 2:08 ` Laurent Pinchart
2020-04-20 2:02 ` [PATCH v2 0/6] v4l2-subdev: Introduce get_mbus_format pad op Laurent Pinchart
2020-05-13 18:52 ` Jacopo Mondi
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=20200420015627.GD15673@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=dave.stevenson@raspberrypi.com \
--cc=hverkuil-cisco@xs4all.nl \
--cc=hyun.kwon@xilinx.com \
--cc=jacopo+renesas@jmondi.org \
--cc=kieran.bingham@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=niklas.soderlund+renesas@ragnatech.se \
--cc=sakari.ailus@linux.intel.com \
/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).