[media] davinci: vpfe: Add documentation and TODO

Add documentation on the Davinci VPFE driver. Document the subdevs,
and private IOTCLs the driver implements. This patch also includes
the TODO's to fit into drivers/media/ folder.

Signed-off-by: Manjunath Hadli <manjunath.hadli@ti.com>
Signed-off-by: Lad, Prabhakar <prabhakar.lad@ti.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Sakari Ailus <sakari.ailus@iki.fi>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Manjunath Hadli 2012-11-28 02:29:46 -03:00 committed by Mauro Carvalho Chehab
parent 44261e3805
commit 5a89fac7e9
2 changed files with 191 additions and 0 deletions

View File

@ -0,0 +1,37 @@
TODO (general):
==================================
- User space interface refinement
- Controls should be used when possible rather than private ioctl
- No enums should be used
- Use of MC and V4L2 subdev APIs when applicable
- Single interface header might suffice
- Current interface forces to configure everything at once
- Get rid of the dm365_ipipe_hw.[ch] layer
- Active external sub-devices defined by link configuration; no strcmp
needed
- More generic platform data (i2c adapters)
- The driver should have no knowledge of possible external subdevs; see
struct vpfe_subdev_id
- Some of the hardware control should be refactorede
- Check proper serialisation (through mutexes and spinlocks)
- Names that are visible in kernel global namespace should have a common
prefix (or a few)
- While replacing the older driver in media folder, provide a compatibility
layer and compatibility tests that warrants (using the libv4l's LD_PRELOAD
approach) there is no regression for the users using the older driver.
Building of uImage and Applications:
==================================
As of now since the interface will undergo few changes all the include
files are present in staging itself, to build for dm365 follow below steps,
- copy vpfe.h from drivers/staging/media/davinci_vpfe/ to
include/media/davinci/ folder for building the uImage.
- copy davinci_vpfe_user.h from drivers/staging/media/davinci_vpfe/ to
include/uapi/linux/davinci_vpfe.h, and add a entry in Kbuild (required
for building application).
- copy dm365_ipipeif_user.h from drivers/staging/media/davinci_vpfe/ to
include/uapi/linux/dm365_ipipeif.h and a entry in Kbuild (required
for building application).

View File

@ -0,0 +1,154 @@
Davinci Video processing Front End (VPFE) driver
Copyright (C) 2012 Texas Instruments Inc
Contacts: Manjunath Hadli <manjunath.hadli@ti.com>
Prabhakar Lad <prabhakar.lad@ti.com>
Introduction
============
This file documents the Texas Instruments Davinci Video processing Front End
(VPFE) driver located under drivers/media/platform/davinci. The original driver
exists for Davinci VPFE, which is now being changed to Media Controller
Framework.
Currently the driver has been successfully used on the following
version of Davinci:
DM365/DM368
The driver implements V4L2, Media controller and v4l2_subdev interfaces. Sensor,
lens and flash drivers using the v4l2_subdev interface in the kernel are
supported.
Split to subdevs
================
The Davinci VPFE is split into V4L2 subdevs, each of the blocks inside the VPFE
having one subdev to represent it. Each of the subdevs provide a V4L2 subdev
interface to userspace.
DAVINCI ISIF
DAVINCI IPIPEIF
DAVINCI IPIPE
DAVINCI CROP RESIZER
DAVINCI RESIZER A
DAVINCI RESIZER B
Each possible link in the VPFE is modeled by a link in the Media controller
interface. For an example program see [1].
ISIF, IPIPE, and RESIZER block IOCTLs
======================================
The Davinci Video processing Front End (VPFE) driver supports standard V4L2
IOCTLs and controls where possible and practical. Much of the functions provided
by the VPFE, however, does not fall under the standard IOCTL's.
In general, there is a private ioctl for configuring each of the blocks
containing hardware-dependent functions.
The following private IOCTLs are supported:
VIDIOC_VPFE_ISIF_[S/G]_RAW_PARAMS
VIDIOC_VPFE_IPIPE_[S/G]_CONFIG
VIDIOC_VPFE_RSZ_[S/G]_CONFIG
The parameter structures used by these ioctl's are described in
include/uapi/linux/davinci_vpfe.h.
The VIDIOC_VPFE_ISIF_S_RAW_PARAMS, VIDIOC_VPFE_IPIPE_S_CONFIG and
VIDIOC_VPFE_RSZ_S_CONFIG are used to configure, enable and disable functions in
the isif, ipipe and resizer blocks respectively. These IOCTL's control several
functions in the blocks they control. VIDIOC_VPFE_ISIF_S_RAW_PARAMS IOCTL
accepts a pointer to struct vpfe_isif_raw_config as its argument. Similarly
VIDIOC_VPFE_IPIPE_S_CONFIG accepts a pointer to struct vpfe_ipipe_config. And
VIDIOC_VPFE_RSZ_S_CONFIG accepts a pointer to struct vpfe_rsz_config as its
argument. Similarly VIDIOC_VPFE_ISIF_G_RAW_PARAMS, VIDIOC_VPFE_IPIPE_G_CONFIG
and VIDIOC_VPFE_RSZ_G_CONFIG are used to get the current configuration set in
the isif, ipipe and resizer blocks respectively.
The detailed functions of the VPFE itself related to a given VPFE block is
described in the Technical Reference Manuals (TRMs) --- see the end of the
document for those.
IPIPEIF block IOCTLs
======================================
The following private IOCTLs are supported:
VIDIOC_VPFE_IPIPEIF_[S/G]_CONFIG
The parameter structures used by these ioctl's are described in
include/uapi/linux/dm365_ipipeif.h
The VIDIOC_VPFE_IPIPEIF_S_CONFIG is used to configure the ipipeif
hardware block. The VIDIOC_VPFE_IPIPEIF_S_CONFIG and
VIDIOC_VPFE_IPIPEIF_G_CONFIG accepts a pointer to struct ipipeif_params
as its argument.
VPFE Operating Modes
==========================================
a: Continuous Modes
------------------------
1: tvp514x/tvp7002/mt9p031---> DAVINCI ISIF---> SDRAM
2: tvp514x/tvp7002/mt9p031---> DAVINCI ISIF---> DAVINCI IPIPEIF--->|
|
<--------------------<----------------<---------------------<---|
|
V
DAVINCI CROP RESIZER--->DAVINCI RESIZER [A/B]---> SDRAM
3: tvp514x/tvp7002/mt9p031---> DAVINCI ISIF---> DAVINCI IPIPEIF--->|
|
<--------------------<----------------<---------------------<---|
|
V
DAVINCI IPIPE---> DAVINCI CROP RESIZER--->DAVINCI RESIZER [A/B]---> SDRAM
a: Single Shot Modes
------------------------
1: SDRAM---> DAVINCI IPIPEIF---> DAVINCI IPIPE---> DAVINCI CROP RESIZER--->|
|
<----------------<----------------<------------------<---------------<--|
|
V
DAVINCI RESIZER [A/B]---> SDRAM
2: SDRAM---> DAVINCI IPIPEIF---> DAVINCI CROP RESIZER--->|
|
<----------------<----------------<---------------<---|
|
V
DAVINCI RESIZER [A/B]---> SDRAM
Technical reference manuals (TRMs) and other documentation
==========================================================
Davinci DM365 TRM:
<URL:http://www.ti.com/lit/ds/sprs457e/sprs457e.pdf>
Referenced MARCH 2009-REVISED JUNE 2011
Davinci DM368 TRM:
<URL:http://www.ti.com/lit/ds/sprs668c/sprs668c.pdf>
Referenced APRIL 2010-REVISED JUNE 2011
Davinci Video Processing Front End (VPFE) DM36x
<URL:http://www.ti.com/lit/ug/sprufg8c/sprufg8c.pdf>
References
==========
[1] http://git.ideasonboard.org/?p=media-ctl.git;a=summary