Commit 42bff048 authored by Niklas Söderlund's avatar Niklas Söderlund Committed by Mauro Carvalho Chehab

media: adv748x: csi2: Set virtual channel when device is reset

It's not enough to set the CSI-2 virtual channel for TXA and TXB during
probe: it also needs to be set when the device is reset. Move the virtual
channel selection to adv748x_reset() that is called during probe and
when the device needs to be reset.
Signed-off-by: default avatarNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent c30ed81a
...@@ -530,10 +530,14 @@ static int adv748x_reset(struct adv748x_state *state) ...@@ -530,10 +530,14 @@ static int adv748x_reset(struct adv748x_state *state)
io_write(state, ADV748X_IO_PD, ADV748X_IO_PD_RX_EN); io_write(state, ADV748X_IO_PD, ADV748X_IO_PD_RX_EN);
/* Conditionally enable TXa and TXb. */ /* Conditionally enable TXa and TXb. */
if (is_tx_enabled(&state->txa)) if (is_tx_enabled(&state->txa)) {
regval |= ADV748X_IO_10_CSI4_EN; regval |= ADV748X_IO_10_CSI4_EN;
if (is_tx_enabled(&state->txb)) adv748x_csi2_set_virtual_channel(&state->txa, 0);
}
if (is_tx_enabled(&state->txb)) {
regval |= ADV748X_IO_10_CSI1_EN; regval |= ADV748X_IO_10_CSI1_EN;
adv748x_csi2_set_virtual_channel(&state->txb, 0);
}
io_write(state, ADV748X_IO_10, regval); io_write(state, ADV748X_IO_10, regval);
/* Use vid_std and v_freq as freerun resolution for CP */ /* Use vid_std and v_freq as freerun resolution for CP */
......
...@@ -14,8 +14,7 @@ ...@@ -14,8 +14,7 @@
#include "adv748x.h" #include "adv748x.h"
static int adv748x_csi2_set_virtual_channel(struct adv748x_csi2 *tx, int adv748x_csi2_set_virtual_channel(struct adv748x_csi2 *tx, unsigned int vc)
unsigned int vc)
{ {
return tx_write(tx, ADV748X_CSI_VC_REF, vc << ADV748X_CSI_VC_REF_SHIFT); return tx_write(tx, ADV748X_CSI_VC_REF, vc << ADV748X_CSI_VC_REF_SHIFT);
} }
...@@ -313,9 +312,6 @@ int adv748x_csi2_init(struct adv748x_state *state, struct adv748x_csi2 *tx) ...@@ -313,9 +312,6 @@ int adv748x_csi2_init(struct adv748x_state *state, struct adv748x_csi2 *tx)
if (!is_tx_enabled(tx)) if (!is_tx_enabled(tx))
return 0; return 0;
/* Initialise the virtual channel */
adv748x_csi2_set_virtual_channel(tx, 0);
adv748x_subdev_init(&tx->sd, state, &adv748x_csi2_ops, adv748x_subdev_init(&tx->sd, state, &adv748x_csi2_ops,
MEDIA_ENT_F_VID_IF_BRIDGE, MEDIA_ENT_F_VID_IF_BRIDGE,
is_txa(tx) ? "txa" : "txb"); is_txa(tx) ? "txa" : "txb");
......
...@@ -439,6 +439,7 @@ int adv748x_afe_s_input(struct adv748x_afe *afe, unsigned int input); ...@@ -439,6 +439,7 @@ int adv748x_afe_s_input(struct adv748x_afe *afe, unsigned int input);
int adv748x_csi2_init(struct adv748x_state *state, struct adv748x_csi2 *tx); int adv748x_csi2_init(struct adv748x_state *state, struct adv748x_csi2 *tx);
void adv748x_csi2_cleanup(struct adv748x_csi2 *tx); void adv748x_csi2_cleanup(struct adv748x_csi2 *tx);
int adv748x_csi2_set_virtual_channel(struct adv748x_csi2 *tx, unsigned int vc);
int adv748x_csi2_set_pixelrate(struct v4l2_subdev *sd, s64 rate); int adv748x_csi2_set_pixelrate(struct v4l2_subdev *sd, s64 rate);
int adv748x_hdmi_init(struct adv748x_hdmi *hdmi); int adv748x_hdmi_init(struct adv748x_hdmi *hdmi);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment