Patch "[media] v4l: tvp5150: Don't override output pinmuxing at stream on/off time" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
[media] v4l: tvp5150: Don't override output pinmuxing at stream on/off time
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
v4l-tvp5150-don-t-override-output-pinmuxing-at-stream-on-off-time.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
79d6205a3f741c9fb89cfc47dfa0eddb1526726dMon Sep 17 00:00:00 2001
From: Laurent Pinchart <[email protected]>
Date: Fri, 9 Dec 2016 09:47:19 -0200
Subject: [media] v4l: tvp5150: Don't override output pinmuxing at stream on/off time
From: Laurent Pinchart <[email protected]>
commit 79d6205a3f741c9fb89cfc47dfa0eddb1526726d upstream.
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.
--- drivers/media/i2c/tvp5150.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-)
drivers/media/i2c/tvp5150.c +18 -13
@@ -1055,22 +1055,27 @@ static const struct media_entity_operatistatic 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 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/v4l-tvp5150-reset-device-at-probe-time-not-in-get-set-format-handlers.patch queue-4.9/v4l-tvp5150-fix-comment-regarding-output-pin-muxing.patch queue-4.9/v4l-tvp5150-don-t-override-output-pinmuxing-at-stream-on-off-time.patch