public inbox for linux-i2c@vger.kernel.org
 help / color / mirror / Atom feed
From: Ludwig Zenz <lzenz@dh-electronics.com>
To: <tomi.valkeinen@ideasonboard.com>
Cc: <Matti.Vaittinen@fi.rohmeurope.com>,
	<andriy.shevchenko@intel.com>,
	<andriy.shevchenko@linux.intel.com>, <broonie@kernel.org>,
	<devicetree@vger.kernel.org>, <hverkuil@xs4all.nl>,
	<khalasa@piap.pl>, <krzysztof.kozlowski+dt@linaro.org>,
	<laurent.pinchart+renesas@ideasonboard.com>,
	<lgirdwood@gmail.com>, <linux-i2c@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <linux-media@vger.kernel.org>,
	<luca.ceresoli@bootlin.com>, <m.tretter@pengutronix.de>,
	<marex@denx.de>, <mchehab@kernel.org>, <mpagano@gentoo.org>,
	<peda@axentia.se>, <robh+dt@kernel.org>,
	<sakari.ailus@linux.intel.com>, <satish.nagireddy@getcruise.com>,
	<wsa@kernel.org>
Subject: Re: [PATCH v13 6/8] media: i2c: add DS90UB960 driver
Date: Tue, 16 May 2023 14:35:49 +0200	[thread overview]
Message-ID: <20230516123549.3120-1-lzenz@dh-electronics.com> (raw)
In-Reply-To: <20230426115114.156696-7-tomi.valkeinen@ideasonboard.com>

On Wed, 26 Apr 2023 14:51:12 +0300, Tomi Valkeinen wrote:

[...]

>  +static int ub960_configure_ports_for_streaming(struct ub960_data *priv,
>  +					       struct v4l2_subdev_state *state)
>  +{
>  +	u8 fwd_ctl;
>  +	struct {
>  +		u32 num_streams;
>  +		u8 pixel_dt;
>  +		u8 meta_dt;
>  +		u32 meta_lines;
>  +		u32 tx_port;
>  +	} rx_data[UB960_MAX_RX_NPORTS] = {};
>  +	u8 vc_map[UB960_MAX_RX_NPORTS] = {};
>  +	struct v4l2_subdev_route *route;
>  +	unsigned int nport;
>  +	int ret;
>  +
>  +	ret = ub960_validate_stream_vcs(priv);
>  +	if (ret)
>  +		return ret;
>  +
>  +	ub960_get_vc_maps(priv, state, vc_map);
>  +
>  +	for_each_active_route(&state->routing, route) {
>  +		struct ub960_rxport *rxport;
>  +		struct ub960_txport *txport;
>  +		struct v4l2_mbus_framefmt *fmt;
>  +		const struct ub960_format_info *ub960_fmt;
>  +		unsigned int nport;
>  +
>  +		nport = ub960_pad_to_port(priv, route->sink_pad);
>  +
>  +		rxport = priv->rxports[nport];
>  +		if (!rxport)
>  +			return -EINVAL;
>  +
>  +		txport = priv->txports[ub960_pad_to_port(priv, route->source_pad)];
>  +		if (!txport)
>  +			return -EINVAL;
>  +
>  +		rx_data[nport].tx_port = ub960_pad_to_port(priv, route->source_pad);
>  +
>  +		rx_data[nport].num_streams++;
>  +
>  +		/* For the rest, we are only interested in parallel busses */
>  +		if (rxport->rx_mode == RXPORT_MODE_CSI2_SYNC ||
>  +		    rxport->rx_mode == RXPORT_MODE_CSI2_ASYNC)
>  +			continue;
>  +
>  +		if (rx_data[nport].num_streams > 2)
>  +			return -EPIPE;
>  +
>  +		fmt = v4l2_subdev_state_get_stream_format(state,
>  +							  route->sink_pad,
>  +							  route->sink_stream);
>  +		if (!fmt)
>  +			return -EPIPE;
>  +
>  +		ub960_fmt = ub960_find_format(fmt->code);
>  +		if (!ub960_fmt)
>  +			return -EPIPE;
>  +
>  +		if (ub960_fmt->meta) {
>  +			if (fmt->height > 3) {
>  +				dev_err(&priv->client->dev,
>  +					"rx%u: unsupported metadata height %u\n",
>  +					nport, fmt->height);
>  +				return -EPIPE;
>  +			}
>  +
>  +			rx_data[nport].meta_dt = ub960_fmt->datatype;
>  +			rx_data[nport].meta_lines = fmt->height;
>  +		} else {
>  +			rx_data[nport].pixel_dt = ub960_fmt->datatype;
>  +		}
>  +	}
>  +
>  +	/* Configure RX ports */
>  +
>  +	fwd_ctl = 0;

Hello, I have only used the first RX port in my setup (ds90ub933 to ds90ub964). The logic for activating/deactivating the Rx ports did not work for me. My suggestion is:

-	fwd_ctl = 0;
+	fwd_ctl = 0xF0; /* Default: Disable forwarding for all RX ports */

>  +
>  +	for (nport = 0; nport < priv->hw_data->num_rxports; nport++) {
>  +		struct ub960_rxport *rxport = priv->rxports[nport];
>  +		u8 vc = vc_map[nport];
>  +
>  +		if (rx_data[nport].num_streams == 0)
>  +			continue;
>  +
>  +		switch (rxport->rx_mode) {
>  +		case RXPORT_MODE_RAW10:
>  +			ub960_rxport_write(priv, nport, UB960_RR_RAW10_ID,
>  +				rx_data[nport].pixel_dt | (vc << UB960_RR_RAW10_ID_VC_SHIFT));
>  +
>  +			ub960_rxport_write(priv, rxport->nport,
>  +				UB960_RR_RAW_EMBED_DTYPE,
>  +				(rx_data[nport].meta_lines << UB960_RR_RAW_EMBED_DTYPE_LINES_SHIFT) |
>  +					rx_data[nport].meta_dt);
>  +
>  +			break;
>  +
>  +		case RXPORT_MODE_RAW12_HF:
>  +		case RXPORT_MODE_RAW12_LF:
>  +			/* Not implemented */
>  +			break;
>  +
>  +		case RXPORT_MODE_CSI2_SYNC:
>  +		case RXPORT_MODE_CSI2_ASYNC:
>  +			if (!priv->hw_data->is_ub9702) {
>  +				/* Map all VCs from this port to the same VC */
>  +				ub960_rxport_write(priv, nport, UB960_RR_CSI_VC_MAP,
>  +						   (vc << UB960_RR_CSI_VC_MAP_SHIFT(3)) |
>  +						   (vc << UB960_RR_CSI_VC_MAP_SHIFT(2)) |
>  +						   (vc << UB960_RR_CSI_VC_MAP_SHIFT(1)) |
>  +						   (vc << UB960_RR_CSI_VC_MAP_SHIFT(0)));
>  +			} else {
>  +				unsigned int i;
>  +
>  +				/* Map all VCs from this port to VC(nport) */
>  +				for (i = 0; i < 8; i++)
>  +					ub960_rxport_write(priv, nport,
>  +							   UB960_RR_VC_ID_MAP(i),
>  +							   nport);
>  +			}
>  +
>  +			break;
>  +		}
>  +
>  +		/* Forwarding */
>  +
>  +		fwd_ctl |= BIT(4 + nport); /* forward disable */

-		fwd_ctl |= BIT(4 + nport); /* forward disable */
+		fwd_ctl &= ~UB960_SR_FWD_CTL1_PORT_DIS(nport); /* clear disable
+								  forwarding */

According to the data sheet, the ds90ub960 and the ds90ub964 should be identical, so this change should fit both devices.

>  +		if (rx_data[nport].tx_port == 1)
>  +			fwd_ctl |= BIT(nport); /* forward to TX1 */
>  +		else
>  +			fwd_ctl &= ~BIT(nport); /* forward to TX0 */
>  +	}
>  +
>  +	ub960_write(priv, UB960_SR_FWD_CTL1, fwd_ctl);
>  +
>  +	return 0;
>  +}

[...]

Thanks and regards,
Ludwig Zenz

  reply	other threads:[~2023-05-16 14:32 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-26 11:51 [PATCH v13 0/8] i2c-atr and FPDLink Tomi Valkeinen
2023-04-26 11:51 ` [PATCH v13 1/8] dt-bindings: i2c: Add I2C Address Translator (ATR) Tomi Valkeinen
2023-04-27 16:41   ` Rob Herring
2023-04-26 11:51 ` [PATCH v13 2/8] i2c: add I2C Address Translator (ATR) support Tomi Valkeinen
2023-04-26 11:51 ` [PATCH v13 3/8] dt-bindings: media: add TI DS90UB913 FPD-Link III Serializer Tomi Valkeinen
2023-04-26 11:51 ` [PATCH v13 4/8] dt-bindings: media: add TI DS90UB953 " Tomi Valkeinen
2023-04-26 11:51 ` [PATCH v13 5/8] dt-bindings: media: add TI DS90UB960 FPD-Link III Deserializer Tomi Valkeinen
2023-04-26 11:51 ` [PATCH v13 6/8] media: i2c: add DS90UB960 driver Tomi Valkeinen
2023-05-16 12:35   ` Ludwig Zenz [this message]
2023-05-16 13:02     ` Tomi Valkeinen
2023-05-16 12:44   ` Sakari Ailus
2023-04-26 11:51 ` [PATCH v13 7/8] media: i2c: add DS90UB913 driver Tomi Valkeinen
2023-04-26 11:51 ` [PATCH v13 8/8] media: i2c: add DS90UB953 driver Tomi Valkeinen
  -- strict thread matches above, loose matches on Subject: below --
2023-05-16 13:32 [PATCH v13 6/8] media: i2c: add DS90UB960 driver Ludwig Zenz
2023-05-16 13:58 ` Tomi Valkeinen
2023-05-16 19:05 Ludwig Zenz
2023-05-19 12:19 ` Tomi Valkeinen
2023-05-22 11:42 Ludwig Zenz

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=20230516123549.3120-1-lzenz@dh-electronics.com \
    --to=lzenz@dh-electronics.com \
    --cc=Matti.Vaittinen@fi.rohmeurope.com \
    --cc=andriy.shevchenko@intel.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=broonie@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=hverkuil@xs4all.nl \
    --cc=khalasa@piap.pl \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=laurent.pinchart+renesas@ideasonboard.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=luca.ceresoli@bootlin.com \
    --cc=m.tretter@pengutronix.de \
    --cc=marex@denx.de \
    --cc=mchehab@kernel.org \
    --cc=mpagano@gentoo.org \
    --cc=peda@axentia.se \
    --cc=robh+dt@kernel.org \
    --cc=sakari.ailus@linux.intel.com \
    --cc=satish.nagireddy@getcruise.com \
    --cc=tomi.valkeinen@ideasonboard.com \
    --cc=wsa@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox