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
next prev parent 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