linux/include/media/vsp1.h
<<
>>
Prefs
   1/*
   2 * vsp1.h  --  R-Car VSP1 API
   3 *
   4 * Copyright (C) 2015 Renesas Electronics Corporation
   5 *
   6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com)
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License as published by
  10 * the Free Software Foundation; either version 2 of the License, or
  11 * (at your option) any later version.
  12 */
  13#ifndef __MEDIA_VSP1_H__
  14#define __MEDIA_VSP1_H__
  15
  16#include <linux/scatterlist.h>
  17#include <linux/types.h>
  18#include <linux/videodev2.h>
  19
  20struct device;
  21
  22int vsp1_du_init(struct device *dev);
  23
  24/**
  25 * struct vsp1_du_lif_config - VSP LIF configuration
  26 * @width: output frame width
  27 * @height: output frame height
  28 * @callback: frame completion callback function (optional). When a callback
  29 *            is provided, the VSP driver guarantees that it will be called once
  30 *            and only once for each vsp1_du_atomic_flush() call.
  31 * @callback_data: data to be passed to the frame completion callback
  32 */
  33struct vsp1_du_lif_config {
  34        unsigned int width;
  35        unsigned int height;
  36
  37        void (*callback)(void *data, bool completed, u32 crc);
  38        void *callback_data;
  39};
  40
  41int vsp1_du_setup_lif(struct device *dev, unsigned int pipe_index,
  42                      const struct vsp1_du_lif_config *cfg);
  43
  44/**
  45 * struct vsp1_du_atomic_config - VSP atomic configuration parameters
  46 * @pixelformat: plane pixel format (V4L2 4CC)
  47 * @pitch: line pitch in bytes, for all planes
  48 * @mem: DMA memory address for each plane of the frame buffer
  49 * @src: source rectangle in the frame buffer (integer coordinates)
  50 * @dst: destination rectangle on the display (integer coordinates)
  51 * @alpha: alpha value (0: fully transparent, 255: fully opaque)
  52 * @zpos: Z position of the plane (from 0 to number of planes minus 1)
  53 */
  54struct vsp1_du_atomic_config {
  55        u32 pixelformat;
  56        unsigned int pitch;
  57        dma_addr_t mem[3];
  58        struct v4l2_rect src;
  59        struct v4l2_rect dst;
  60        unsigned int alpha;
  61        unsigned int zpos;
  62};
  63
  64/**
  65 * enum vsp1_du_crc_source - Source used for CRC calculation
  66 * @VSP1_DU_CRC_NONE: CRC calculation disabled
  67 * @VSP1_DU_CRC_PLANE: Perform CRC calculation on an input plane
  68 * @VSP1_DU_CRC_OUTPUT: Perform CRC calculation on the composed output
  69 */
  70enum vsp1_du_crc_source {
  71        VSP1_DU_CRC_NONE,
  72        VSP1_DU_CRC_PLANE,
  73        VSP1_DU_CRC_OUTPUT,
  74};
  75
  76/**
  77 * struct vsp1_du_crc_config - VSP CRC computation configuration parameters
  78 * @source: source for CRC calculation
  79 * @index: index of the CRC source plane (when source is set to plane)
  80 */
  81struct vsp1_du_crc_config {
  82        enum vsp1_du_crc_source source;
  83        unsigned int index;
  84};
  85
  86/**
  87 * struct vsp1_du_atomic_pipe_config - VSP atomic pipe configuration parameters
  88 * @crc: CRC computation configuration
  89 */
  90struct vsp1_du_atomic_pipe_config {
  91        struct vsp1_du_crc_config crc;
  92};
  93
  94void vsp1_du_atomic_begin(struct device *dev, unsigned int pipe_index);
  95int vsp1_du_atomic_update(struct device *dev, unsigned int pipe_index,
  96                          unsigned int rpf,
  97                          const struct vsp1_du_atomic_config *cfg);
  98void vsp1_du_atomic_flush(struct device *dev, unsigned int pipe_index,
  99                          const struct vsp1_du_atomic_pipe_config *cfg);
 100int vsp1_du_map_sg(struct device *dev, struct sg_table *sgt);
 101void vsp1_du_unmap_sg(struct device *dev, struct sg_table *sgt);
 102
 103#endif /* __MEDIA_VSP1_H__ */
 104