android_kernel_samsung_sm8650/drivers/media
James Hutchinson 981fbe3da2 media: m88ds3103: serialize reset messages in m88ds3103_set_frontend
Ref: https://bugzilla.kernel.org/show_bug.cgi?id=199323

Users are experiencing problems with the DVBSky S960/S960C USB devices
since the following commit:

9d659ae: ("locking/mutex: Add lock handoff to avoid starvation")

The device malfunctions after running for an indeterminable period of
time, and the problem can only be cleared by rebooting the machine.

It is possible to encourage the problem to surface by blocking the
signal to the LNB.

Further debugging revealed the cause of the problem.

In the following capture:
- thread #1325 is running m88ds3103_set_frontend
- thread #42 is running ts2020_stat_work

a> [1325] usb 1-1: dvb_usb_v2_generic_io: >>> 08 68 02 07 80
   [1325] usb 1-1: dvb_usb_v2_generic_io: <<< 08
   [42] usb 1-1: dvb_usb_v2_generic_io: >>> 09 01 01 68 3f
   [42] usb 1-1: dvb_usb_v2_generic_io: <<< 08 ff
   [42] usb 1-1: dvb_usb_v2_generic_io: >>> 08 68 02 03 11
   [42] usb 1-1: dvb_usb_v2_generic_io: <<< 07
   [42] usb 1-1: dvb_usb_v2_generic_io: >>> 09 01 01 60 3d
   [42] usb 1-1: dvb_usb_v2_generic_io: <<< 07 ff
b> [1325] usb 1-1: dvb_usb_v2_generic_io: >>> 08 68 02 07 00
   [1325] usb 1-1: dvb_usb_v2_generic_io: <<< 07
   [42] usb 1-1: dvb_usb_v2_generic_io: >>> 08 68 02 03 11
   [42] usb 1-1: dvb_usb_v2_generic_io: <<< 07
   [42] usb 1-1: dvb_usb_v2_generic_io: >>> 09 01 01 60 21
   [42] usb 1-1: dvb_usb_v2_generic_io: <<< 07 ff
   [42] usb 1-1: dvb_usb_v2_generic_io: >>> 08 68 02 03 11
   [42] usb 1-1: dvb_usb_v2_generic_io: <<< 07
   [42] usb 1-1: dvb_usb_v2_generic_io: >>> 09 01 01 60 66
   [42] usb 1-1: dvb_usb_v2_generic_io: <<< 07 ff
   [1325] usb 1-1: dvb_usb_v2_generic_io: >>> 08 68 02 03 11
   [1325] usb 1-1: dvb_usb_v2_generic_io: <<< 07
   [1325] usb 1-1: dvb_usb_v2_generic_io: >>> 08 60 02 10 0b
   [1325] usb 1-1: dvb_usb_v2_generic_io: <<< 07

Two i2c messages are sent to perform a reset in m88ds3103_set_frontend:

  a. 0x07, 0x80
  b. 0x07, 0x00

However, as shown in the capture, the regmap mutex is being handed over
to another thread (ts2020_stat_work) in between these two messages.

>From here, the device responds to every i2c message with an 07 message,
and will only return to normal operation following a power cycle.

Use regmap_multi_reg_write to group the two reset messages, ensuring
both are processed before the regmap mutex is unlocked.

Signed-off-by: James Hutchinson <jahutchinson99@googlemail.com>
Reviewed-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
2019-03-19 16:43:18 -04:00
..
cec media: cec: fill in cec chardev kobject to ease debugging 2019-03-19 13:19:49 -04:00
common media: videobuf2: Return error after allocation failure 2019-03-19 14:03:55 -04:00
dvb-core media: dvb-core: fix several typos 2019-03-01 09:28:08 -05:00
dvb-frontends media: m88ds3103: serialize reset messages in m88ds3103_set_frontend 2019-03-19 16:43:18 -04:00
firewire media: firewire: Fix app_info parameter type in avc_ca{,_app}_info 2018-12-05 05:34:33 -05:00
i2c media: i2c: adv748x: select V4L2_FWNODE 2019-03-19 16:35:09 -04:00
mmc media: siano: use GFP_DMA only for smssdio 2018-05-15 08:04:42 -04:00
pci media: cx18: update *pos correctly in cx18_read_pos() 2019-03-19 14:00:03 -04:00
platform media: vimc: stream: init/terminate the first entity 2019-03-19 16:33:07 -04:00
radio media: wl128x: Fix an error code in fm_download_firmware() 2019-03-19 16:38:37 -04:00
rc media: rc: fix several typos 2019-03-01 09:39:39 -05:00
spi media: cxd2880-spi: fix two memory leaks of dvb_spi 2019-01-16 11:44:29 -05:00
tuners media: tuners: fix several typos 2019-03-01 09:40:29 -05:00
usb media: dvbsky: Avoid leaking dvb frontend 2019-03-19 16:42:24 -04:00
v4l2-core media: strscpy() returns a negative value on failure unlike strlcpy(). 2019-03-19 16:33:46 -04:00
Kconfig media: Add a Kconfig option for the Request API 2018-12-05 13:07:43 -05:00
Makefile media: media-request: implement media requests 2018-08-31 11:04:51 -04:00
media-device.c media: Add a Kconfig option for the Request API 2018-12-05 13:07:43 -05:00
media-devnode.c media: media-devnode: fill in media chardev kobject to ease debugging 2019-03-19 13:21:16 -04:00
media-entity.c media: replace WARN_ON in __media_pipeline_start() 2019-03-19 14:01:08 -04:00
media-request.c media: media-request: fix epoll() by calling poll_wait first 2019-02-18 14:45:33 -05:00