vsp1.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. #include <linux/scatterlist.h>
  16. #include <linux/types.h>
  17. #include <linux/videodev2.h>
  18. struct device;
  19. int vsp1_du_init(struct device *dev);
  20. /**
  21. * struct vsp1_du_lif_config - VSP LIF configuration
  22. * @width: output frame width
  23. * @height: output frame height
  24. * @interlaced: true for interlaced pipelines
  25. * @callback: frame completion callback function (optional). When a callback
  26. * is provided, the VSP driver guarantees that it will be called once
  27. * and only once for each vsp1_du_atomic_flush() call.
  28. * @callback_data: data to be passed to the frame completion callback
  29. */
  30. struct vsp1_du_lif_config {
  31. unsigned int width;
  32. unsigned int height;
  33. bool interlaced;
  34. void (*callback)(void *data, bool completed, u32 crc);
  35. void *callback_data;
  36. };
  37. int vsp1_du_setup_lif(struct device *dev, unsigned int pipe_index,
  38. const struct vsp1_du_lif_config *cfg);
  39. /**
  40. * struct vsp1_du_atomic_config - VSP atomic configuration parameters
  41. * @pixelformat: plane pixel format (V4L2 4CC)
  42. * @pitch: line pitch in bytes for the first plane
  43. * @mem: DMA memory address for each plane of the frame buffer
  44. * @src: source rectangle in the frame buffer (integer coordinates)
  45. * @dst: destination rectangle on the display (integer coordinates)
  46. * @alpha: alpha value (0: fully transparent, 255: fully opaque)
  47. * @zpos: Z position of the plane (from 0 to number of planes minus 1)
  48. */
  49. struct vsp1_du_atomic_config {
  50. u32 pixelformat;
  51. unsigned int pitch;
  52. dma_addr_t mem[3];
  53. struct v4l2_rect src;
  54. struct v4l2_rect dst;
  55. unsigned int alpha;
  56. unsigned int zpos;
  57. };
  58. /**
  59. * enum vsp1_du_crc_source - Source used for CRC calculation
  60. * @VSP1_DU_CRC_NONE: CRC calculation disabled
  61. * @VSP1_DU_CRC_PLANE: Perform CRC calculation on an input plane
  62. * @VSP1_DU_CRC_OUTPUT: Perform CRC calculation on the composed output
  63. */
  64. enum vsp1_du_crc_source {
  65. VSP1_DU_CRC_NONE,
  66. VSP1_DU_CRC_PLANE,
  67. VSP1_DU_CRC_OUTPUT,
  68. };
  69. /**
  70. * struct vsp1_du_crc_config - VSP CRC computation configuration parameters
  71. * @source: source for CRC calculation
  72. * @index: index of the CRC source plane (when source is set to plane)
  73. */
  74. struct vsp1_du_crc_config {
  75. enum vsp1_du_crc_source source;
  76. unsigned int index;
  77. };
  78. /**
  79. * struct vsp1_du_atomic_pipe_config - VSP atomic pipe configuration parameters
  80. * @crc: CRC computation configuration
  81. */
  82. struct vsp1_du_atomic_pipe_config {
  83. struct vsp1_du_crc_config crc;
  84. };
  85. void vsp1_du_atomic_begin(struct device *dev, unsigned int pipe_index);
  86. int vsp1_du_atomic_update(struct device *dev, unsigned int pipe_index,
  87. unsigned int rpf,
  88. const struct vsp1_du_atomic_config *cfg);
  89. void vsp1_du_atomic_flush(struct device *dev, unsigned int pipe_index,
  90. const struct vsp1_du_atomic_pipe_config *cfg);
  91. int vsp1_du_map_sg(struct device *dev, struct sg_table *sgt);
  92. void vsp1_du_unmap_sg(struct device *dev, struct sg_table *sgt);
  93. #endif /* __MEDIA_VSP1_H__ */