All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Deucher <alexdeucher@gmail.com>
To: Hans Verkuil <hansverk@cisco.com>
Cc: Tomasz Stanislawski <t.stanislaws@samsung.com>,
	linux-media@vger.kernel.org, linux-samsung-soc@vger.kernel.org,
	m.szyprowski@samsung.com, kyungmin.park@samsung.com
Subject: Re: [PATCH/RFC 0/5] HDMI driver for Samsung S5PV310 platform
Date: Tue, 8 Feb 2011 10:28:32 -0500	[thread overview]
Message-ID: <AANLkTi=A=HiAvHojWP8HcFXpjXbZpq6UdHjOnWq-8jww@mail.gmail.com> (raw)
In-Reply-To: <201102081047.17840.hansverk@cisco.com>

On Tue, Feb 8, 2011 at 4:47 AM, Hans Verkuil <hansverk@cisco.com> wrote:
> Just two quick notes. I'll try to do a full review this weekend.
>
> On Tuesday, February 08, 2011 10:30:22 Tomasz Stanislawski wrote:
>> ==============
>>  Introduction
>> ==============
>>
>> The purpose of this RFC is to discuss the driver for a TV output interface
>> available in upcoming Samsung SoC. The HW is able to generate digital and
>> analog signals. Current version of the driver supports only digital output.
>>
>> Internally the driver uses videobuf2 framework, and CMA memory allocator.
> Not
>> all of them are merged by now, but I decided to post the sources to start
>> discussion driver's design.
>>
>> ======================
>>  Hardware description
>> ======================
>>
>> The SoC contains a few HW sub-blocks:
>>
>> 1. Video Processor (VP). It is used for processing of NV12 data.  An image
>> stored in RAM is accessed by DMA. Pixels are cropped, scaled. Additionally,
>> post processing operations like brightness, sharpness and contrast
> adjustments
>> could be performed. The output in YCbCr444 format is send to Mixer.
>>
>> 2. Mixer (MXR). The piece of hardware responsible for mixing and blending
>> multiple data inputs before passing it to an output device.  The MXR is
> capable
>> of handling up to three image layers. One is the output of VP.  Other two
> are
>> images in RGB format (multiple variants are supported).  The layers are
> scaled,
>> cropped and blended with background color.  The blending factor, and layers'
>> priority are controlled by MXR's registers. The output is passed either to
> HDMI
>> or TVOUT.
>>
>> 3. HDMI. The piece of HW responsible for generation of HDMI packets. It
> takes
>> pixel data from mixer and transforms it into data frames. The output is send
>> to HDMIPHY interface.
>>
>> 4. HDMIPHY. Physical interface for HDMI. Its duties are sending HDMI packets
> to
>> HDMI connector. Basically, it contains a PLL that produces source clock for
>> Mixer, VP and HDMI during streaming.
>>
>> 5. TVOUT. Generation of TV analog signal. (driver not implemented)
>>
>> 6. VideoDAC. Modulator for TVOUT signal. (driver not implemented)
>>
>>
>> The diagram below depicts connection between all HW pieces.
>>                     +-----------+
>> NV12 data ---dma--->|   Video   |
>>                     | Processor |
>>                     +-----------+
>>                           |
>>                           V
>>                     +-----------+
>> RGB data  ---dma--->|           |
>>                     |   Mixer   |
>> RGB data  ---dma--->|           |
>>                     +-----------+
>>                           |
>>                           * dmux
>>                          /
>>                   +-----*   *------+
>>                   |                |
>>                   V                V
>>             +-----------+    +-----------+
>>             |    HDMI   |    |   TVOUT   |
>>             +-----------+    +-----------+
>>                   |                |
>>                   V                V
>>             +-----------+    +-----------+
>>             |  HDMIPHY  |    |  VideoDAC |
>>             +-----------+    +-----------+
>>                   |                |
>>                   V                V
>>                 HDMI           Composite
>>              connector         connector
>>
>>
>> ==================
>>  Driver interface
>> ==================
>>
>> The posted driver implements three V4L2 nodes. Every video node implements
> V4L2
>> output buffer. One of nodes corresponds to input of Video Processor. The
> other
>> two nodes correspond to RGB inputs of Mixer. All nodes share the same
> output.
>> It is one of the Mixer's outputs: TVOUT or HDMI. Changing output in one
> layer
>> using S_OUTPUT would change outputs of all other video nodes. The same thing
>> happens if one try to reconfigure output i.e. by calling S_DV_PRESET.
> However
>> it not possible to change or reconfigure the output while streaming. To sum
> up,
>> all features in posted version of driver goes as follows:
>>
>> 1. QUERYCAP
>> 2. S_FMT, G_FMT - single and multiplanar API
>>   a) node named video0 supports formats NV12, NV12, NV12T (tiled version of
>> NV12), NV12MT (multiplane version of NV12T).
>>   b) nodes named graph0 and graph1 support formats RGB565, ARGB1555,
> ARGB4444,
>> ARGB8888.
>
> graph0? Do you perhaps mean fb0? I haven't heard about nodes names 'graph'
> before.
>
>> 3. Buffer with USERPTR and MMAP memory.
>> 4. Streaming and buffer control. (STREAMON, STREAMOFF, REQBUF, QBUF, DQBUF)
>> 5. OUTPUT enumeration.
>> 6. DV preset control (SET, GET, ENUM). Currently modes 480P59_94, 720P59_94,
>> 1080P30, 1080P59_94 and 1080P60 work.
>> 7. Positioning layer's window on output display using S_CROP, G_GROP,
> CROPCAP.
>> 8. Positioning and cropping data in buffer using S_CROP, G_GROP, CROPCAP
> with
>> buffer type OVERLAY. *
>>
>> TODOs:
>> - add analog TVOUT driver
>> - add S_OUTPUT
>> - add S_STD ioctl
>> - add control of alpha blending / chroma keying via V4L2 controls
>> - add controls for luminance curve and sharpness in VP
>> - consider exporting all output functionalities to separate video node
>> - consider media controller framework
>> - better control over debugging
>> - fix dependency between all TV drivers
>>
>> * The need of cropping in source buffers came from problem with MFC driver
> for
>> S5P. The MFC supports only width divisible by 64. If a width of a decoded
> movie
>> is not aligned do 64 then padding pixels are filled with zeros. This is an
> ugly
>> green color in YCbCr colorspace. Filling it with zeros by a CPU is a waste
> of
>> resources since an image can be cropped in VP. Is it possible to set crops
> for
>> user data for M2M devices. V4L2 lacks such functionality of non-M2M devices.
>> Therefore cropping in buffer V4L2_BUF_TYPE_VIDEO_OVERLAY was used as an work
>> around.
>>
>> =====================
>>  Device Architecture
>> =====================
>>
>> Three drivers are added in this patch.
>>
>> 1. HDMIPHY. It is an I2C driver for HDMIPHY interface. It exports following
>> callback by V4L2 subdevice:
>> - s_power: currently stub
>> - s_stream: configures and starts/stops HDMIPHY
>> - s_dv_preset: used to choose proper frequency of clock for other TV devices
>>
>> 2. HDMI. The auxiliary driver used to control HDMI interface. It exports its
>> subdev to a subdev pool for use by other drivers. The following callbacks
> are
>> implemented:
>> - s_power: runs HDMI hardware, regulators and clocks.
>> - s_stream: runs HDMIPHY and starts generation of video frames.
>> - enum_dv_presets
>> - s_dv_preset
>> - g_mbus_format: returns information on data format expected by on HDMI
> input
>>   The driver supports an interrupt. It is used to detect plug/unplug events
> in
>> kernel debugs.  The API for detection of such an events in V4L2 API is to be
>> defined.
>
> Cisco (i.e. a few colleagues and myself) are working on this. We hope to post
> an RFC by the end of this month. We also have a proposal for CEC support in
> the pipeline.

Any reason to not use the drm kms APIs for modesetting, display
configuration, and hotplug support?  We already have the
infrastructure in place for complex display configurations and
generating events for hotplug interrupts.  It would seem to make more
sense to me to fix any deficiencies in the KMS APIs than to spin a new
API.  Things like CEC would be a natural fit since a lot of desktop
GPUs support hdmi audio/3d/etc. and are already using kms.

Alex

>
> Regards,
>
>        Hans
>
>
>>
>> 3. Mixer & Video Processor driver. It is called 's5p-mixer' because of
>> historical reasons. It was decided combine VP and MXR drivers into one
> because
>> of shared interrupt and very similar interface via V4L2 nodes. The driver is
> a
>> realization of many-to-many relation between multiple input layers and
> multiple
>> outputs. All shared resources are kept in struct mxr_device. It provides
>> utilities for management and synchronization of access to resources and
>> reference counting. The outputs are obtained from subdev pool basing on
> names
>> supplied in platform data. One layer is a single video node. Since layers
>> differs simple inheritance is applied. Every layer type implements set of
> ops.
>> There are different ops for Mixer layers and other for VP layer.
>>
>> The videobuf2 framework was used for the management of buffers and
> streaming.
>> All other V4L2 ioctls are processed in layers common interface. The CMA was
>> used as memory allocator for Mixer's buffers. It could be easily exchanged
> with
>> any other allocator integrated with videobuf2 framework.
>>
>> Driver is not yet integrated with power domain driver. Moreover one of
> mixer's
>> clocks has to change parent while entering streaming mode. Therefore all
> power
>> and clock management was moved to platform data until final solutions
> emerges.
>>
>> ===============
>>  Usage summary
>> ===============
>>
>> Follow steps below to display double-buffered animation on HDMI output.
>>
>> 01. Open video node named graph0.
>> 02. S_FMT(type = OUTPUT, pixelformat = V4L2_PIX_FMT_RGB*, width, height,
> ...)
>> 03. REQ_BUFS(type = OUTPUT, memory = MMAP, count = 2)
>> 04. MMAP(type = OUTPUT, index = 0)
>> 05. MMAP(type = OUTPUT, index = 1)
>> 06. Fill buffer 0 with data
>> 07. QBUF(type = OUTPUT, index = 0)
>> 08. STREAM_ON(type = OUTPUT)
>> 09. Fill buffer 1 with data
>> 10. QBUF(type = OUTPUT, index = 1)
>> 11. DQBUF(type = OUTPUT)
>> 12. QBUF(type = OUTPUT, index = 0)
>> 13. DQBUF(type = OUTPUT)
>> 14. Goto 09
>>
>> ===============
>>  Patch Summary
>> ===============
>>
>> Tomasz Stanislawski (5):
>>   i2c-s3c2410: fix I2C dedicated for hdmiphy
>>   universal: i2c: add I2C controller 8 (HDMIPHY)
>>   v4l: add macro for 1080p59_54 preset
>>   s5p-tv: add driver for HDMI output on S5PC210 platform
>>   s5pc210: add s5p-tv to platform devices
>>
>>  arch/arm/mach-s5pv310/Kconfig                   |    7 +
>>  arch/arm/mach-s5pv310/Makefile                  |    1 +
>>  arch/arm/mach-s5pv310/clock.c                   |  132 ++-
>>  arch/arm/mach-s5pv310/dev-tv.c                  |  450 ++++++
>>  arch/arm/mach-s5pv310/include/mach/irqs.h       |    8 +
>>  arch/arm/mach-s5pv310/include/mach/map.h        |   27 +
>>  arch/arm/mach-s5pv310/include/mach/regs-clock.h |   15 +
>>  arch/arm/plat-samsung/Kconfig                   |    5 +
>>  arch/arm/plat-samsung/Makefile                  |    1 +
>>  arch/arm/plat-samsung/dev-i2c8.c                |   68 +
>>  arch/arm/plat-samsung/include/plat/devs.h       |    3 +
>>  arch/arm/plat-samsung/include/plat/iic.h        |    1 +
>>  arch/arm/plat-samsung/include/plat/tv.h         |   36 +
>>  drivers/i2c/busses/i2c-s3c2410.c                |   36 +-
>>  drivers/media/video/Kconfig                     |    8 +
>>  drivers/media/video/Makefile                    |    1 +
>>  drivers/media/video/s5p-tv/Kconfig              |   42 +
>>  drivers/media/video/s5p-tv/Makefile             |   15 +
>>  drivers/media/video/s5p-tv/hdmi.h               |   74 +
>>  drivers/media/video/s5p-tv/hdmi_drv.c           |  795 ++++++++++
>>  drivers/media/video/s5p-tv/hdmiphy.h            |   37 +
>>  drivers/media/video/s5p-tv/hdmiphy_drv.c        |  228 +++
>>  drivers/media/video/s5p-tv/mixer.h              |  281 ++++
>>  drivers/media/video/s5p-tv/mixer_drv.c          |  362 +++++
>>  drivers/media/video/s5p-tv/mixer_grp_layer.c    |  181 +++
>>  drivers/media/video/s5p-tv/mixer_reg.c          |  532 +++++++
>>  drivers/media/video/s5p-tv/mixer_reg.h          |   44 +
>>  drivers/media/video/s5p-tv/mixer_video.c        |  834 ++++++++++
>>  drivers/media/video/s5p-tv/mixer_vp_layer.c     |  202 +++
>>  drivers/media/video/s5p-tv/regs-hdmi.h          | 1849
> +++++++++++++++++++++++
>>  drivers/media/video/s5p-tv/regs-vmx.h           |  196 +++
>>  drivers/media/video/s5p-tv/regs-vp.h            |  277 ++++
>>  drivers/media/video/v4l2-common.c               |    1 +
>>  include/linux/videodev2.h                       |    1 +
>>  34 files changed, 6748 insertions(+), 2 deletions(-)
>>  create mode 100644 arch/arm/mach-s5pv310/dev-tv.c
>>  create mode 100644 arch/arm/plat-samsung/dev-i2c8.c
>>  create mode 100644 arch/arm/plat-samsung/include/plat/tv.h
>>  create mode 100644 drivers/media/video/s5p-tv/Kconfig
>>  create mode 100644 drivers/media/video/s5p-tv/Makefile
>>  create mode 100644 drivers/media/video/s5p-tv/hdmi.h
>>  create mode 100644 drivers/media/video/s5p-tv/hdmi_drv.c
>>  create mode 100644 drivers/media/video/s5p-tv/hdmiphy.h
>>  create mode 100644 drivers/media/video/s5p-tv/hdmiphy_drv.c
>>  create mode 100644 drivers/media/video/s5p-tv/mixer.h
>>  create mode 100644 drivers/media/video/s5p-tv/mixer_drv.c
>>  create mode 100644 drivers/media/video/s5p-tv/mixer_grp_layer.c
>>  create mode 100644 drivers/media/video/s5p-tv/mixer_reg.c
>>  create mode 100644 drivers/media/video/s5p-tv/mixer_reg.h
>>  create mode 100644 drivers/media/video/s5p-tv/mixer_video.c
>>  create mode 100644 drivers/media/video/s5p-tv/mixer_vp_layer.c
>>  create mode 100644 drivers/media/video/s5p-tv/regs-hdmi.h
>>  create mode 100644 drivers/media/video/s5p-tv/regs-vmx.h
>>  create mode 100644 drivers/media/video/s5p-tv/regs-vp.h
>>
>> --
>> 1.7.3.5
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-media" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

  parent reply	other threads:[~2011-02-08 15:28 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-08  9:30 [PATCH/RFC 0/5] HDMI driver for Samsung S5PV310 platform Tomasz Stanislawski
2011-02-08  9:30 ` [PATCH 1/5] i2c-s3c2410: fix I2C dedicated for hdmiphy Tomasz Stanislawski
2011-02-09  7:14   ` Kukjin Kim
2011-02-08  9:30 ` [PATCH 2/5] universal: i2c: add I2C controller 8 (HDMIPHY) Tomasz Stanislawski
2011-02-09  6:54   ` Kukjin Kim
2011-02-08  9:30 ` [PATCH 3/5] v4l: add macro for 1080p59_54 preset Tomasz Stanislawski
2011-02-08  9:30 ` [PATCH 4/5] s5p-tv: add driver for HDMI output on S5PC210 platform Tomasz Stanislawski
2011-02-08  9:30 ` [PATCH 5/5] s5pc210: add s5p-tv to platform devices Tomasz Stanislawski
2011-02-09  6:40   ` Kukjin Kim
2011-02-08  9:47 ` [PATCH/RFC 0/5] HDMI driver for Samsung S5PV310 platform Hans Verkuil
2011-02-08 10:08   ` Marek Szyprowski
2011-02-08 10:21   ` Tomasz Stanislawski
2011-02-08 15:28   ` Alex Deucher [this message]
2011-02-08 22:47     ` Andy Walls
2011-02-09  7:12       ` Alex Deucher
2011-02-09 19:00         ` Matt Turner
2011-02-09 19:43           ` Hans Verkuil
2011-02-09 23:59             ` Alex Deucher
2011-02-10  0:51         ` Andy Walls
2011-02-12 18:38           ` Alex Deucher
2011-02-09  8:59     ` Hans Verkuil
2011-02-09 17:55       ` Alex Deucher
2011-02-09 18:45         ` Corbin Simpson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='AANLkTi=A=HiAvHojWP8HcFXpjXbZpq6UdHjOnWq-8jww@mail.gmail.com' \
    --to=alexdeucher@gmail.com \
    --cc=hansverk@cisco.com \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=t.stanislaws@samsung.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.