[media] v4l: tvp5150: Don't override output pinmuxing at stream on/off time
The s_stream() handler incorrectly writes the whole MISC_CTL register to enable or disable the outputs, overriding the output pinmuxing configuration. Fix it to only touch the output enable bits. The CONF_SHARED_PIN register is also written by the same function, resulting in muxing the INTREQ signal instead of the VBLK/GPCL signal on the INTREQ/GPCL/VBLK pin. As the driver doesn't support interrupts this is obviously incorrect, and breaks operation on other devices. Fix it by removing the write. Cc: stable@vger.kernel.org # For Kernel 4.5 and upper Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
b4b2de386b
commit
79d6205a3f
|
@ -1058,22 +1058,27 @@ static const struct media_entity_operations tvp5150_sd_media_ops = {
|
|||
static int tvp5150_s_stream(struct v4l2_subdev *sd, int enable)
|
||||
{
|
||||
struct tvp5150 *decoder = to_tvp5150(sd);
|
||||
/* Output format: 8-bit ITU-R BT.656 with embedded syncs */
|
||||
int val = TVP5150_MISC_CTL_YCBCR_OE | TVP5150_MISC_CTL_CLOCK_OE;
|
||||
int val;
|
||||
|
||||
/* Output format: 8-bit 4:2:2 YUV with discrete sync */
|
||||
if (decoder->mbus_type == V4L2_MBUS_PARALLEL)
|
||||
val = TVP5150_MISC_CTL_YCBCR_OE | TVP5150_MISC_CTL_SYNC_OE
|
||||
| TVP5150_MISC_CTL_CLOCK_OE;
|
||||
/* Enable or disable the video output signals. */
|
||||
val = tvp5150_read(sd, TVP5150_MISC_CTL);
|
||||
if (val < 0)
|
||||
return val;
|
||||
|
||||
/* Initializes TVP5150 to its default values */
|
||||
/* # set PCLK (27MHz) */
|
||||
tvp5150_write(sd, TVP5150_CONF_SHARED_PIN, 0x00);
|
||||
val &= ~(TVP5150_MISC_CTL_YCBCR_OE | TVP5150_MISC_CTL_SYNC_OE |
|
||||
TVP5150_MISC_CTL_CLOCK_OE);
|
||||
|
||||
if (enable)
|
||||
tvp5150_write(sd, TVP5150_MISC_CTL, val);
|
||||
else
|
||||
tvp5150_write(sd, TVP5150_MISC_CTL, 0x00);
|
||||
if (enable) {
|
||||
/*
|
||||
* Enable the YCbCr and clock outputs. In discrete sync mode
|
||||
* (non-BT.656) additionally enable the the sync outputs.
|
||||
*/
|
||||
val |= TVP5150_MISC_CTL_YCBCR_OE | TVP5150_MISC_CTL_CLOCK_OE;
|
||||
if (decoder->mbus_type == V4L2_MBUS_PARALLEL)
|
||||
val |= TVP5150_MISC_CTL_SYNC_OE;
|
||||
}
|
||||
|
||||
tvp5150_write(sd, TVP5150_MISC_CTL, val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue