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: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
c30ed81afe
commit
42bff048f4
|
@ -530,10 +530,14 @@ static int adv748x_reset(struct adv748x_state *state)
|
|||
io_write(state, ADV748X_IO_PD, ADV748X_IO_PD_RX_EN);
|
||||
|
||||
/* Conditionally enable TXa and TXb. */
|
||||
if (is_tx_enabled(&state->txa))
|
||||
if (is_tx_enabled(&state->txa)) {
|
||||
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;
|
||||
adv748x_csi2_set_virtual_channel(&state->txb, 0);
|
||||
}
|
||||
io_write(state, ADV748X_IO_10, regval);
|
||||
|
||||
/* Use vid_std and v_freq as freerun resolution for CP */
|
||||
|
|
|
@ -14,8 +14,7 @@
|
|||
|
||||
#include "adv748x.h"
|
||||
|
||||
static int adv748x_csi2_set_virtual_channel(struct adv748x_csi2 *tx,
|
||||
unsigned int vc)
|
||||
int adv748x_csi2_set_virtual_channel(struct adv748x_csi2 *tx, unsigned int vc)
|
||||
{
|
||||
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)
|
|||
if (!is_tx_enabled(tx))
|
||||
return 0;
|
||||
|
||||
/* Initialise the virtual channel */
|
||||
adv748x_csi2_set_virtual_channel(tx, 0);
|
||||
|
||||
adv748x_subdev_init(&tx->sd, state, &adv748x_csi2_ops,
|
||||
MEDIA_ENT_F_VID_IF_BRIDGE,
|
||||
is_txa(tx) ? "txa" : "txb");
|
||||
|
|
|
@ -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);
|
||||
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_hdmi_init(struct adv748x_hdmi *hdmi);
|
||||
|
|
Loading…
Reference in New Issue