xref: /OK3568_Linux_fs/kernel/drivers/video/rockchip/vehicle/vehicle_flinger.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * drivers/video/rockchip/flinger/flinger.c
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2022 Rockchip Electronics Co.Ltd
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun #ifndef __VEHICLE_FLINGER_H
9*4882a593Smuzhiyun #define __VEHICLE_FLINGER_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include "vehicle_cfg.h"
12*4882a593Smuzhiyun #include "../rga3/include/rga.h"
13*4882a593Smuzhiyun #include <linux/types.h>
14*4882a593Smuzhiyun #include <linux/dma-mapping.h>
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun int vehicle_flinger_init(struct device *dev, struct vehicle_cfg *v_cfg);
17*4882a593Smuzhiyun int vehicle_flinger_deinit(void);
18*4882a593Smuzhiyun int vehicle_flinger_reverse_open(struct vehicle_cfg *cfg,
19*4882a593Smuzhiyun 				bool android_already);
20*4882a593Smuzhiyun int vehicle_flinger_reverse_close(bool android_already);
21*4882a593Smuzhiyun unsigned long vehicle_flinger_request_cif_buffer(void);
22*4882a593Smuzhiyun void vehicle_flinger_commit_cif_buffer(u32 buf_phy_addr);
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun enum {
25*4882a593Smuzhiyun 	RGA_TRANSFORM_ROT_MASK   =   0x0000000F,
26*4882a593Smuzhiyun 	RGA_TRANSFORM_ROT_0      =   0x00000000,
27*4882a593Smuzhiyun 	RGA_TRANSFORM_ROT_90     =   0x00000001,
28*4882a593Smuzhiyun 	RGA_TRANSFORM_ROT_180    =   0x00000002,
29*4882a593Smuzhiyun 	RGA_TRANSFORM_ROT_270    =   0x00000004,
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun 	RGA_TRANSFORM_FLIP_MASK  =   0x000000F0,
32*4882a593Smuzhiyun 	RGA_TRANSFORM_FLIP_H     =   0x00000020,
33*4882a593Smuzhiyun 	RGA_TRANSFORM_FLIP_V     =   0x00000010,
34*4882a593Smuzhiyun };
35*4882a593Smuzhiyun /*
36*4882a593Smuzhiyun  * pixel format definitions,this is copy from android/system/core/include/system/graphics.h
37*4882a593Smuzhiyun  */
38*4882a593Smuzhiyun enum {
39*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_RGBA_8888 = 1,
40*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_RGBX_8888 = 2,
41*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_RGB_888 = 3,
42*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_RGB_565 = 4,
43*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_BGRA_8888 = 5,
44*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_RGBA_5551 = 6,
45*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_RGBA_4444 = 7,
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun 	/* 0x8 - 0xFF range unavailable */
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun 	/*
50*4882a593Smuzhiyun 	 * 0x100 - 0x1FF
51*4882a593Smuzhiyun 	 *
52*4882a593Smuzhiyun 	 * This range is reserved for pixel formats that are specific to the HAL
53*4882a593Smuzhiyun 	 * implementation.  Implementations can use any value in this range to
54*4882a593Smuzhiyun 	 * communicate video pixel formats between their HAL modules.  These formats
55*4882a593Smuzhiyun 	 * must not have an alpha channel.  Additionally, an EGLimage created from a
56*4882a593Smuzhiyun 	 * gralloc buffer of one of these formats must be supported for use with the
57*4882a593Smuzhiyun 	 * GL_OES_EGL_image_external OpenGL ES extension.
58*4882a593Smuzhiyun 	 */
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun 	/*
61*4882a593Smuzhiyun 	 * Android YUV format:
62*4882a593Smuzhiyun 	 *
63*4882a593Smuzhiyun 	 * This format is exposed outside of the HAL to software decoders and
64*4882a593Smuzhiyun 	 * applications.  EGLImageKHR must support it in conjunction with the
65*4882a593Smuzhiyun 	 * OES_EGL_image_external extension.
66*4882a593Smuzhiyun 	 *
67*4882a593Smuzhiyun 	 * YV12 is a 4:2:0 YCrCb planar format comprised of a WxH Y plane followed
68*4882a593Smuzhiyun 	 * by (W/2) x (H/2) Cr and Cb planes.
69*4882a593Smuzhiyun 	 *
70*4882a593Smuzhiyun 	 * This format assumes
71*4882a593Smuzhiyun 	 * - an even width
72*4882a593Smuzhiyun 	 * - an even height
73*4882a593Smuzhiyun 	 * - a horizontal stride multiple of 16 pixels
74*4882a593Smuzhiyun 	 * - a vertical stride equal to the height
75*4882a593Smuzhiyun 	 *
76*4882a593Smuzhiyun 	 *   y_size = stride * height
77*4882a593Smuzhiyun 	 *   c_size = ALIGN(stride/2, 16) * height/2
78*4882a593Smuzhiyun 	 *   size = y_size + c_size * 2
79*4882a593Smuzhiyun 	 *   cr_offset = y_size
80*4882a593Smuzhiyun 	 *   cb_offset = y_size + c_size
81*4882a593Smuzhiyun 	 *
82*4882a593Smuzhiyun 	 */
83*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_YV12 = 0x32315659, // YCrCb 4:2:0 Planar
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun 	/* Legacy formats (deprecated), used by ImageFormat.java */
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun 	/*
88*4882a593Smuzhiyun 	 *YCbCr format default is BT601.
89*4882a593Smuzhiyun 	 */
90*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_YCbCr_422_SP = 0x10,   // NV16
91*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_YCrCb_420_SP = 0x11,   // NV21
92*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_YCbCr_422_I = 0x14,    // YUY2
93*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_YCrCb_NV12 = 0x20, // YUY2
94*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_YCrCb_NV12_VIDEO = 0x21,   // YUY2
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_YCrCb_NV12_10      = 0x22, // YUV420_1obit
97*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_YCbCr_422_SP_10    = 0x23, // YUV422_1obit
98*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_YCrCb_444_SP_10    = 0x24, //YUV444_1obit
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_YCrCb_444 = 0x25,  //yuv444
101*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_FBDC_RGB565    = 0x26,
102*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_FBDC_U8U8U8U8  = 0x27, /*ARGB888*/
103*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_FBDC_U8U8U8    = 0x28, /*RGBP888*/
104*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_FBDC_RGBA888   = 0x29, /*ABGR888*/
105*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_BGRX_8888 = 0x30,
106*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_BGR_888 = 0x31,
107*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_BGR_565 = 0x32,
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_YUYV422 = 0x33,
110*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_YUYV420 = 0x34,
111*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_UYVY422 = 0x35,
112*4882a593Smuzhiyun 	HAL_PIXEL_FORMAT_UYVY420 = 0x36,
113*4882a593Smuzhiyun };
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun #endif
116