Re: [PATCH v12 0/8] [media] Add analog mode support for Medion MD95700

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 29 Apr 2019 18:16:51 +0200
"Maciej S. Szmigiero" <mail@xxxxxxxxxxxxxxxxxxxxx> wrote:

> This series adds support for analog part of Medion 95700 in the cxusb
> driver.
> 
> What works:
> * Video capture at various sizes with sequential fields,
> * Input switching (TV Tuner, Composite, S-Video),
> * TV and radio tuning,
> * Video standard switching and auto detection,
> * Radio mode switching (stereo / mono),
> * Unplugging while capturing,
> * DVB / analog coexistence,
> * Raw BT.656 stream support.
> 
> What does not work yet:
> * Audio,
> * VBI,
> * Picture controls.
> 
> This series (as a one patch) was submitted for inclusion few years ago,
> then waited few months in a patch queue.
> Unfortunately, by the time it was supposed to be merged there
> were enough changes in media that it was no longer mergeable.
> 
> I thought at that time that I will be able to rebase and retest it soon
> but unfortunately up till now I was never able to find enough time to do
> so.
> Also, with the passing of time the implementation diverged more and
> more from the current kernel code, necessitating even more reworking.
> 
> That last iteration can be found here:
> https://patchwork.linuxtv.org/patch/8048/
> 
> Since that version there had been the following changes:
> * Adaptation to changes in V4L2 / DVB core,
> 
> * Radio device was added, with a possibility to tune to a FM radio
> station and switch between stereo and mono modes (tested by taping
> audio signal directly at tuner output pin),
> 
> * DVB / analog coexistence was improved - resolved a few cases where
> DVB core would switch off power or reset the tuner when the device
> was still being used but in the analog mode,
> 
> * Fixed issues reported by v4l2-compliance,
> 
> * Switching to raw BT.656 mode is now done by a custom streaming
> parameter set via VIDIOC_S_PARM ioctl instead of using a
> V4L2_BUF_TYPE_PRIVATE buffer (which was removed from V4L2),
> 
> * General small code cleanups (like using BIT() or ARRAY_SIZE() macros
> instead of open coding them, code formatting improvements, etc.).
> 
> Changes from v1:
> * Only support configuration of cx25840 pins that the cxusb driver is
> actually using so there is no need for an ugly CX25840_PIN() macro,
> 
> * Split cxusb changes into two patches: first one implementing
> digital / analog coexistence in this driver, second one adding the
> actual implementation of the analog mode,
> 
> * Fix a warning reported by kbuild test robot.
> 
> Changes from v2:
> * Split out ivtv cx25840 platform data zero-initialization to a separate
> commit,
> 
> * Add kernel-doc description of struct cx25840_state,
> 
> * Make sure that all variables used in CX25840_VCONFIG_OPTION() and
> CX25840_VCONFIG_SET_BIT() macros are their explicit parameters,
> 
> * Split out some code from cxusb_medion_copy_field() and
> cxusb_medion_v_complete_work() functions to separate ones to increase
> their readability,
> 
> * Generate masks using GENMASK() and BIT() macros in cx25840.h and
> cxusb.h.
> 
> Changes from v3:
> Add SPDX tag to a newly added "cxusb-analog.c" file.
> 
> Changes from v4:
> * Make analog support conditional on a new DVB_USB_CXUSB_ANALOG Kconfig
> option,
> 
> * Use '//' comments in the header of a newly added "cxusb-analog.c"
> file,
> 
> * Don't print errors on memory allocation failures,
> 
> * Get rid of the driver MODULE_VERSION(),
> 
> * Small formating fix of a one line.
> 
> Changes from v5:
> Rebase onto current media_tree/master.
> 
> Changes from v6:
> Adapt to commit 4eb2f55728abbe changing V4L2_SUBDEV_IO_PIN_* from bit
> masks to bit numbers.
> Thanks to Dan Carpenter's kbuild bot for catching this.
> 
> Changes from v7:
> * Simplify cx25840_function_to_pad() assuming that the values of
> individual members of I/O pad enum will always match the actual
> chip register values,
> 
> * Add a comment that the above is now a requirement to the I/O pad enum,
> 
> * Don't #undef macros in the cx25840 patch,
> 
> * Change "generic_mode" variable type in struct cx25840_state to bool,
> 
> * Prefix todo-style comments added by the cx25840 patch with "TODO:",
> 
> * Add a core init op to the cx25840 driver and use it to turn the
> generic_mode on instead of doing it via the platform data,
> 
> * Use the above core init op to also provide a vconfig configuration
> to the cx25840 driver so the cxusb driver does not have to pass this
> (constant) configuration there on every video input change,
> 
> * Remove cxusb_auxbuf_advance(), cxusb_auxbuf_begin() and
> cxusb_auxbuf_isend(),
> 
> * Add a missing frame sequence counter support,
> 
> * Test the driver with v4l2-compliance with streaming tests enabled,
> 
> * Set device_caps in struct video_device during probe instead of returning
> it manually in vidioc_querycap handler,
> 
> * Don't set the format name in vidioc_enum_fmt_vid_cap handler,
> 
> * Drop various memset() zeroing in ioctl handlers, as suggested during
> last review,
> 
> * Enforce minimum buffer count via in_buffers_needed field of
> struct vb2_queue instead of doing it in queue_setup callback,
> 
> * Rewrite stream starting / stopping / configuration mechanism using a
> 'stop_streaming' flag, remove cxusb_medion_stream_busy(),
> 
> * Set the lock field in struct vb2_queue so vb2_ops_wait_prepare() /
> vb2_ops_wait_finish() helpers can be utilized,
> 
> * Split out raw (unprocessed) BT.656 stream capturing support to a
> separate patch, adapt it to a recent change introduced by
> commit 8a7c5594c020 ("v4l2-ioctl: clear fields in s_parm") that forced
> extendedmode set by VIDIOC_S_PARM to zero,
> 
> * Add a comment that if we ever need to support analog mode in similar
> hardware then this code should be made generic,
> 
> * Remove a requirement that URB length has to be less than full frame
> size,
> 
> * Limit URB length to avoid very high order memory allocations,
> 
> * Remove out-of-order incoming URB support: this can't really happen,
> 
> * Small cleanups here and there.
> 
> Changes from v8:
> Rebase onto current media_tree/master.
> 
> Changes from v9:
> * Elaborate generic mode comments in cx25840 and cxusb drivers,
> add datasheet references to cx25840 chip video output settings,
> 
> * Describe the new DVB_USB_ADAP_STREAMING_CTRL_NO_URB flag,
> 
> * Drop likely and unlikely annotations in cxusb driver from the patches,
> 
> * Exclusively use strscpy (and not strncpy, strcpy, etc.) in the patches,
> 
> * Drop zeroing of various v4l fields which should be zeroed by the
> core v4l code,
> 
> * Adapt VIDIOC_S_FMT handler so the video format can't be changed if
> buffers are allocated,
> 
> * Add VB2_DMABUF to the list of supported I/O modes.
> 
> Changes from v10:
> * Add a commit cleaning up cx25840_load_fw() and its comments
> (no functional change intended),
> 
> * Add a commit renaming cx25840 g_std operation to querystd operation
> since this is what this handler does,
> 
> * Add a commit that clamps out-of-range picture sizes in cx25840
> set_fmt subdev operation so it conforms better to the V4L2 API,
> 
> * cx25840 driver generic mode (enabled by calling its init op) is currently
> only implemented for cx2584x-family chips.
> Add a relevant comment and a warning to catch unintentional uses,
> 
> * Program cx25840 driver video timings in the generic mode to the same
> values that the chip autoconfig would set.
> 
> While improving the set_fmt subdev operation it became obvious that
> the video timings that cx25840 driver was setting resulted in a strange
> BT.656 PAL stream that had two active video areas per field (one with
> just a single line) and 580 active lines total.
> An output format with 580 active lines total meant that the most common
> PAL capture line count of 576 needed a non-identity scaling factor.
> 
> This is the reason why in the generic mode the driver now uses the same
> values that the chip autoconfig would set (read from the chip).
> These give a nice, BT.656-compliant PAL stream with 576 lines and one
> active video area per field.
> 
> cxusb raw mode, as provided by the last commit, is very useful for
> diagnosing these issues as it gives access to a raw BT.656 stream
> from the cx25840 chip where one can see line count for each field, see
> where VBI lines lie, which lines actually contain samples (as it is
> possible to have some active video lines without any samples at all and
> some VBI lines with normal line samples - cx25840 can move a VBI marker
> independently of a "start capturing samples" marker and, in fact, can have
> a slightly different VBI / active video divider between the two fields in
> a frame),
> 
> * Remove the dvb-usb framework DVB_USB_ADAP_STREAMING_CTRL_NO_URB flag
> and always assume its behaviour (always make sure that data URBs are
> not active before calling a driver streaming_ctrl callback),
> 
> * Initialize cxusb driver to PAL mode instead of trying to autodetect
> the standard,
> 
> * Change videodev->tvnorms and the currently set standard when switching
> inputs so VIDIOC_ENUMSTD and VIDIOC_G_STD correctly return a limited
> standard set for TV tuner input,
> 
> * Implement VIDIOC_QUERYSTD operation,
> 
> * Make sure to return bottom-top field order for 525-line signal
> captures.
> 
> Changes from v11:
> Add g_std operation to cx25840 driver and use it instead of querystd
> operation when determining field order in cxusb driver.
> 
>  drivers/media/i2c/cx25840/cx25840-core.c |  554 +++++-
>  drivers/media/i2c/cx25840/cx25840-core.h |   15 +
>  drivers/media/i2c/cx25840/cx25840-vbi.c  |    4 +
>  drivers/media/usb/dvb-usb/Kconfig        |   16 +-
>  drivers/media/usb/dvb-usb/Makefile       |    3 +
>  drivers/media/usb/dvb-usb/cxusb-analog.c | 1974 ++++++++++++++++++++++
>  drivers/media/usb/dvb-usb/cxusb.c        |  451 ++++-
>  drivers/media/usb/dvb-usb/cxusb.h        |  158 ++
>  drivers/media/usb/dvb-usb/dvb-usb-dvb.c  |    5 +-
>  drivers/media/usb/dvb-usb/dvb-usb-init.c |   13 +
>  drivers/media/usb/dvb-usb/dvb-usb.h      |   10 +
>  drivers/media/v4l2-core/v4l2-ioctl.c     |    3 +-
>  include/media/drv-intf/cx25840.h         |  105 +-
>  13 files changed, 3176 insertions(+), 135 deletions(-)
>  create mode 100644 drivers/media/usb/dvb-usb/cxusb-analog.c

Hi,
Any status on this?

Regards,
Lukas Straub

Attachment: pgpGU9WCR8txf.pgp
Description: OpenPGP digital signature


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux