15f628053SKuninori Morimoto /* SPDX-License-Identifier: GPL-2.0+ */ 2f3af9572SLaurent Pinchart /* 3f3af9572SLaurent Pinchart * vsp1.h -- R-Car VSP1 API 4f3af9572SLaurent Pinchart * 5f3af9572SLaurent Pinchart * Copyright (C) 2015 Renesas Electronics Corporation 6f3af9572SLaurent Pinchart * 7f3af9572SLaurent Pinchart * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 8f3af9572SLaurent Pinchart */ 9f3af9572SLaurent Pinchart #ifndef __MEDIA_VSP1_H__ 10f3af9572SLaurent Pinchart #define __MEDIA_VSP1_H__ 11f3af9572SLaurent Pinchart 12f5d0f9d6SLaurent Pinchart #include <linux/scatterlist.h> 13f3af9572SLaurent Pinchart #include <linux/types.h> 14c6b013abSLaurent Pinchart #include <linux/videodev2.h> 15f3af9572SLaurent Pinchart 16f3af9572SLaurent Pinchart struct device; 17f3af9572SLaurent Pinchart 18f3af9572SLaurent Pinchart int vsp1_du_init(struct device *dev); 19f3af9572SLaurent Pinchart 2009e513e3SLaurent Pinchart #define VSP1_DU_STATUS_COMPLETE BIT(0) 21a63722aeSLaurent Pinchart #define VSP1_DU_STATUS_WRITEBACK BIT(1) 2209e513e3SLaurent Pinchart 238c71fff4SKieran Bingham /** 248c71fff4SKieran Bingham * struct vsp1_du_lif_config - VSP LIF configuration 258c71fff4SKieran Bingham * @width: output frame width 268c71fff4SKieran Bingham * @height: output frame height 27e90561d4SKieran Bingham * @interlaced: true for interlaced pipelines 28d7ade201SKieran Bingham * @callback: frame completion callback function (optional). When a callback 29d7ade201SKieran Bingham * is provided, the VSP driver guarantees that it will be called once 30d7ade201SKieran Bingham * and only once for each vsp1_du_atomic_flush() call. 31d7ade201SKieran Bingham * @callback_data: data to be passed to the frame completion callback 328c71fff4SKieran Bingham */ 338c71fff4SKieran Bingham struct vsp1_du_lif_config { 348c71fff4SKieran Bingham unsigned int width; 358c71fff4SKieran Bingham unsigned int height; 36e90561d4SKieran Bingham bool interlaced; 37d7ade201SKieran Bingham 3809e513e3SLaurent Pinchart void (*callback)(void *data, unsigned int status, u32 crc); 39d7ade201SKieran Bingham void *callback_data; 408c71fff4SKieran Bingham }; 418c71fff4SKieran Bingham 42cebd8c53SLaurent Pinchart int vsp1_du_setup_lif(struct device *dev, unsigned int pipe_index, 43cebd8c53SLaurent Pinchart const struct vsp1_du_lif_config *cfg); 44f3af9572SLaurent Pinchart 450d93d5c9SLaurent Pinchart /** 460d93d5c9SLaurent Pinchart * struct vsp1_du_atomic_config - VSP atomic configuration parameters 470d93d5c9SLaurent Pinchart * @pixelformat: plane pixel format (V4L2 4CC) 489b2798d5SKoji Matsuoka * @pitch: line pitch in bytes for the first plane 490d93d5c9SLaurent Pinchart * @mem: DMA memory address for each plane of the frame buffer 500d93d5c9SLaurent Pinchart * @src: source rectangle in the frame buffer (integer coordinates) 510d93d5c9SLaurent Pinchart * @dst: destination rectangle on the display (integer coordinates) 520d93d5c9SLaurent Pinchart * @alpha: alpha value (0: fully transparent, 255: fully opaque) 530d93d5c9SLaurent Pinchart * @zpos: Z position of the plane (from 0 to number of planes minus 1) 54*0efb6fd3STakanari Hayama * @premult: true for premultiplied alpha 550d93d5c9SLaurent Pinchart */ 56c6b013abSLaurent Pinchart struct vsp1_du_atomic_config { 57c6b013abSLaurent Pinchart u32 pixelformat; 58c6b013abSLaurent Pinchart unsigned int pitch; 59bffba473SLaurent Pinchart dma_addr_t mem[3]; 60c6b013abSLaurent Pinchart struct v4l2_rect src; 61c6b013abSLaurent Pinchart struct v4l2_rect dst; 62c6b013abSLaurent Pinchart unsigned int alpha; 63c6b013abSLaurent Pinchart unsigned int zpos; 64*0efb6fd3STakanari Hayama bool premult; 65c6b013abSLaurent Pinchart }; 66c6b013abSLaurent Pinchart 676e274b43SLaurent Pinchart /** 686e274b43SLaurent Pinchart * enum vsp1_du_crc_source - Source used for CRC calculation 696e274b43SLaurent Pinchart * @VSP1_DU_CRC_NONE: CRC calculation disabled 706e274b43SLaurent Pinchart * @VSP1_DU_CRC_PLANE: Perform CRC calculation on an input plane 716e274b43SLaurent Pinchart * @VSP1_DU_CRC_OUTPUT: Perform CRC calculation on the composed output 726e274b43SLaurent Pinchart */ 736e274b43SLaurent Pinchart enum vsp1_du_crc_source { 746e274b43SLaurent Pinchart VSP1_DU_CRC_NONE, 756e274b43SLaurent Pinchart VSP1_DU_CRC_PLANE, 766e274b43SLaurent Pinchart VSP1_DU_CRC_OUTPUT, 776e274b43SLaurent Pinchart }; 786e274b43SLaurent Pinchart 796e274b43SLaurent Pinchart /** 806e274b43SLaurent Pinchart * struct vsp1_du_crc_config - VSP CRC computation configuration parameters 816e274b43SLaurent Pinchart * @source: source for CRC calculation 826e274b43SLaurent Pinchart * @index: index of the CRC source plane (when source is set to plane) 836e274b43SLaurent Pinchart */ 846e274b43SLaurent Pinchart struct vsp1_du_crc_config { 856e274b43SLaurent Pinchart enum vsp1_du_crc_source source; 866e274b43SLaurent Pinchart unsigned int index; 876e274b43SLaurent Pinchart }; 886e274b43SLaurent Pinchart 896e274b43SLaurent Pinchart /** 90a63722aeSLaurent Pinchart * struct vsp1_du_writeback_config - VSP writeback configuration parameters 91a63722aeSLaurent Pinchart * @pixelformat: plane pixel format (V4L2 4CC) 92a63722aeSLaurent Pinchart * @pitch: line pitch in bytes for the first plane 93a63722aeSLaurent Pinchart * @mem: DMA memory address for each plane of the frame buffer 94a63722aeSLaurent Pinchart */ 95a63722aeSLaurent Pinchart struct vsp1_du_writeback_config { 96a63722aeSLaurent Pinchart u32 pixelformat; 97a63722aeSLaurent Pinchart unsigned int pitch; 98a63722aeSLaurent Pinchart dma_addr_t mem[3]; 99a63722aeSLaurent Pinchart }; 100a63722aeSLaurent Pinchart 101a63722aeSLaurent Pinchart /** 1026e274b43SLaurent Pinchart * struct vsp1_du_atomic_pipe_config - VSP atomic pipe configuration parameters 1036e274b43SLaurent Pinchart * @crc: CRC computation configuration 104a63722aeSLaurent Pinchart * @writeback: writeback configuration 1056e274b43SLaurent Pinchart */ 1066e274b43SLaurent Pinchart struct vsp1_du_atomic_pipe_config { 1076e274b43SLaurent Pinchart struct vsp1_du_crc_config crc; 108a63722aeSLaurent Pinchart struct vsp1_du_writeback_config writeback; 1096e274b43SLaurent Pinchart }; 1106e274b43SLaurent Pinchart 111cebd8c53SLaurent Pinchart void vsp1_du_atomic_begin(struct device *dev, unsigned int pipe_index); 112cebd8c53SLaurent Pinchart int vsp1_du_atomic_update(struct device *dev, unsigned int pipe_index, 113cebd8c53SLaurent Pinchart unsigned int rpf, 114c6b013abSLaurent Pinchart const struct vsp1_du_atomic_config *cfg); 1156e274b43SLaurent Pinchart void vsp1_du_atomic_flush(struct device *dev, unsigned int pipe_index, 1166e274b43SLaurent Pinchart const struct vsp1_du_atomic_pipe_config *cfg); 117f5d0f9d6SLaurent Pinchart int vsp1_du_map_sg(struct device *dev, struct sg_table *sgt); 118f5d0f9d6SLaurent Pinchart void vsp1_du_unmap_sg(struct device *dev, struct sg_table *sgt); 119f5e04e7eSLaurent Pinchart 120f3af9572SLaurent Pinchart #endif /* __MEDIA_VSP1_H__ */ 121