linux/include/media
Hans Verkuil 32804fcb61 media: cec: keep track of outstanding transmits
I noticed that repeatedly running 'cec-ctl --playback' would occasionally
select 'Playback Device 2' instead of 'Playback Device 1', even though there
were no other Playback devices in the HDMI topology. This happened both with
'real' hardware and with the vivid CEC emulation, suggesting that this was an
issue in the core code that claims a logical address.

What 'cec-ctl --playback' does is to first clear all existing logical addresses,
and immediately after that configure the new desired device type.

The core code will poll the logical addresses trying to find a free address.
When found it will issue a few standard messages as per the CEC spec and return.
Those messages are queued up and will be transmitted asynchronously.

What happens is that if you run two 'cec-ctl --playback' commands in quick
succession, there is still a message of the first cec-ctl command being transmitted
when you reconfigure the adapter again in the second cec-ctl command.

When the logical addresses are cleared, then all information about outstanding
transmits inside the CEC core is also cleared, and the core is no longer aware
that there is still a transmit in flight.

When the hardware finishes the transmit it calls transmit_done and the CEC core
thinks it is actually in response of a POLL messages that is trying to find a
free logical address. The result of all this is that the core thinks that the
logical address for Playback Device 1 is in use, when it is really an earlier
transmit that ended.

The main transmit thread looks at adap->transmitting to check if a transmit
is in progress, but that is set to NULL when the adapter is unconfigured.
adap->transmitting represents the view of userspace, not that of the hardware.
So when unconfiguring the adapter the message is marked aborted from the point
of view of userspace, but seen from the PoV of the hardware it is still ongoing.

So introduce a new bool transmit_in_progress that represents the hardware state
and use that instead of adap->transmitting. Now the CEC core waits until the
hardware finishes the transmit before starting a new transmit.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Cc: <stable@vger.kernel.org>      # for v4.18 and up
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
2018-11-23 05:56:14 -05:00
..
davinci media: davinci/vpbe: drop unused g_cropcap 2018-11-20 13:28:51 -05:00
drv-intf media: include: media: Add Renesas CEU driver interface 2018-02-26 08:59:41 -05:00
i2c media: i2c: lm3560: add support for lm3559 chip 2018-06-28 07:10:01 -04:00
tpg media: include/(uapi/)media: add SPDX license info 2018-02-14 13:23:51 -05:00
cec-notifier.h media: cec-notifier: Get notifier by device and connector name 2018-07-13 08:44:16 +01:00
cec-pin.h media: cec: add support for 5V signal testing 2018-07-25 07:11:48 -04:00
cec.h media: cec: keep track of outstanding transmits 2018-11-23 05:56:14 -05:00
demux.h media: dvb: update buffer mmaped flags and frame counter 2018-02-23 11:44:08 -05:00
dmxdev.h media: dmxdev: Fix the logic that enables DMA mmap support 2018-02-23 05:27:10 -05:00
dvb_ca_en50221.h
dvb_demux.h media: dvb: update buffer mmaped flags and frame counter 2018-02-23 11:44:08 -05:00
dvb_frontend.h media: dvb: represent min/max/step/tolerance freqs in Hz 2018-08-02 18:10:48 -04:00
dvb_math.h
dvb_net.h
dvb_ringbuffer.h
dvb_vb2.h media: dvb: update buffer mmaped flags and frame counter 2018-02-23 11:44:08 -05:00
dvb-usb-ids.h media: dvb: add alternative USB PID for Hauppauge WinTV-soloHD 2018-05-04 14:20:55 -04:00
dvbdev.h media: dvbdev: add a mutex protecting the "mdev" pointer 2018-05-11 12:09:59 -04:00
imx.h
media-device.h media: media-request: implement media requests 2018-08-31 11:04:51 -04:00
media-devnode.h
media-entity.h media: v4l2-mc: switch it to use the new approach to setup pipelines 2018-09-17 13:16:19 -04:00
media-request.h media: media-request: EPERM -> EACCES/EBUSY 2018-09-11 09:57:29 -04:00
rc-core.h media: rc: Remove init_ir_raw_event and DEFINE_IR_RAW_EVENT macros 2018-10-04 14:22:27 -04:00
rc-map.h media: rc: add driver for Xbox DVD Movie Playback Kit 2018-11-22 13:26:47 -05:00
rcar-fcp.h media: rcar-fcp: convert to SPDX identifiers 2018-09-12 09:29:03 -04:00
soc_camera.h
tuner-types.h
tuner.h
tveeprom.h
v4l2-async.h media: v4l2-core: cleanup coding style at V4L2 async/fwnode 2018-10-05 06:49:16 -04:00
v4l2-clk.h
v4l2-common.h media: v4l2-common: add V4L2_FRACT_COMPARE 2018-11-23 04:33:54 -05:00
v4l2-ctrls.h media updates for v4.20-rc1 2018-10-31 10:53:29 -07:00
v4l2-dev.h media: v4l2-ioctl: add QUIRK_INVERTED_CROP 2018-11-20 13:28:20 -05:00
v4l2-device.h media: v4l2-device.h: add v4l2_device_supports_requests() helper 2018-08-31 11:07:26 -04:00
v4l2-dv-timings.h media: cec/v4l2: move V4L2 specific CEC functions to V4L2 2018-09-24 09:11:04 -04:00
v4l2-event.h media: fix usage of whitespaces and on indentation 2018-01-04 13:12:01 -05:00
v4l2-fh.h media: v4l: event: Prevent freeing event subscriptions while accessed 2018-10-03 06:32:51 -04:00
v4l2-flash-led-class.h
v4l2-fwnode.h media: v4l2-fwnode: cleanup functions that parse endpoints 2018-10-05 06:49:24 -04:00
v4l2-image-sizes.h
v4l2-ioctl.h media: vidioc_cropcap -> vidioc_g_pixelaspect 2018-11-20 13:57:21 -05:00
v4l2-mc.h media: v4l2-mc: get rid of global pad indexes 2018-09-17 13:16:19 -04:00
v4l2-mediabus.h media: v4l2-core: cleanup coding style at V4L2 async/fwnode 2018-10-05 06:49:16 -04:00
v4l2-mem2mem.h media: Rename vb2_m2m_request_queue -> v4l2_m2m_request_queue 2018-11-06 05:24:22 -05:00
v4l2-rect.h media: v4l2-rect.h: add position and equal helpers 2018-09-17 13:25:41 -04:00
v4l2-subdev.h media: add tuner standby op, use where needed 2018-03-21 12:05:39 -04:00
videobuf2-core.h media: videobuf2-core: Rework and rename helper for request buffer count 2018-09-24 09:51:37 -04:00
videobuf2-dma-contig.h
videobuf2-dma-sg.h
videobuf2-dvb.h
videobuf2-memops.h
videobuf2-v4l2.h media: videobuf2-v4l2: add vb2_request_queue/validate helpers 2018-08-31 11:22:32 -04:00
videobuf2-vmalloc.h
videobuf-core.h MAINTAINERS & files: Canonize the e-mails I use at files 2018-05-04 06:21:06 -04:00
videobuf-dma-contig.h
videobuf-dma-sg.h MAINTAINERS & files: Canonize the e-mails I use at files 2018-05-04 06:21:06 -04:00
videobuf-vmalloc.h MAINTAINERS & files: Canonize the e-mails I use at files 2018-05-04 06:21:06 -04:00
vsp1.h media: vsp1: Fix YCbCr planar formats pitch calculation 2018-09-17 14:51:43 -04:00