123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971 |
- /*
- * Allwinner SoCs display driver.
- *
- * Copyright (C) 2016 Allwinner.
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2. This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
- #ifndef __SUNXI_DISPLAY2_H__
- #define __SUNXI_DISPLAY2_H__
- #include <typedef.h>
- #include <stdbool.h>
- struct disp_manager;
- struct disp_device;
- struct disp_smbl;
- struct disp_enhance;
- struct disp_capture;
- struct disp_color {
- unsigned char alpha;
- unsigned char red;
- unsigned char green;
- unsigned char blue;
- };
- struct disp_rect {
- int x;
- int y;
- unsigned int width;
- unsigned int height;
- };
- struct disp_rectsz {
- unsigned int width;
- unsigned int height;
- };
- struct disp_position {
- int x;
- int y;
- };
- typedef enum disp_pixel_format {
- DISP_FORMAT_ARGB_8888 = 0x00, /* MSB A-R-G-B LSB */
- DISP_FORMAT_ABGR_8888 = 0x01,
- DISP_FORMAT_RGBA_8888 = 0x02,
- DISP_FORMAT_BGRA_8888 = 0x03,
- DISP_FORMAT_XRGB_8888 = 0x04,
- DISP_FORMAT_XBGR_8888 = 0x05,
- DISP_FORMAT_RGBX_8888 = 0x06,
- DISP_FORMAT_BGRX_8888 = 0x07,
- DISP_FORMAT_RGB_888 = 0x08,
- DISP_FORMAT_BGR_888 = 0x09,
- DISP_FORMAT_RGB_565 = 0x0a,
- DISP_FORMAT_BGR_565 = 0x0b,
- DISP_FORMAT_ARGB_4444 = 0x0c,
- DISP_FORMAT_ABGR_4444 = 0x0d,
- DISP_FORMAT_RGBA_4444 = 0x0e,
- DISP_FORMAT_BGRA_4444 = 0x0f,
- DISP_FORMAT_ARGB_1555 = 0x10,
- DISP_FORMAT_ABGR_1555 = 0x11,
- DISP_FORMAT_RGBA_5551 = 0x12,
- DISP_FORMAT_BGRA_5551 = 0x13,
- DISP_FORMAT_A2R10G10B10 = 0x14,
- DISP_FORMAT_A2B10G10R10 = 0x15,
- DISP_FORMAT_R10G10B10A2 = 0x16,
- DISP_FORMAT_B10G10R10A2 = 0x17,
- DISP_FORMAT_1bpp_palette_LE = 0x18,
- DISP_FORMAT_2bpp_palette_LE = 0x19,
- DISP_FORMAT_4bpp_palette_LE = 0x1a,
- DISP_FORMAT_8bpp_palette_LE = 0x1b,
- /*
- * SP: semi-planar
- * P:planar
- * I:interleaved
- * UVUV: U in the LSBs;
- * VUVU: V in the LSBs
- */
- DISP_FORMAT_YUV444_I_AYUV = 0x40, /* MSB A-Y-U-V LSB */
- DISP_FORMAT_YUV444_I_VUYA = 0x41, /* MSB V-U-Y-A LSB */
- DISP_FORMAT_YUV422_I_YVYU = 0x42, /* MSB Y-V-Y-U LSB */
- DISP_FORMAT_YUV422_I_YUYV = 0x43, /* MSB Y-U-Y-V LSB */
- DISP_FORMAT_YUV422_I_UYVY = 0x44, /* MSB U-Y-V-Y LSB */
- DISP_FORMAT_YUV422_I_VYUY = 0x45, /* MSB V-Y-U-Y LSB */
- DISP_FORMAT_YUV444_P = 0x46, /* MSB P3-2-1-0 LSB, YYYY UUUU VVVV */
- DISP_FORMAT_YUV422_P = 0x47, /* MSB P3-2-1-0 LSB YYYY UU VV */
- DISP_FORMAT_YUV420_P = 0x48, /* MSB P3-2-1-0 LSB YYYY U V (yu12)*/
- DISP_FORMAT_YUV411_P = 0x49, /* MSB P3-2-1-0 LSB YYYY U V */
- DISP_FORMAT_YUV422_SP_UVUV = 0x4a, /* MSB V-U-V-U LSB */
- DISP_FORMAT_YUV422_SP_VUVU = 0x4b, /* MSB U-V-U-V LSB */
- DISP_FORMAT_YUV420_SP_UVUV = 0x4c,
- DISP_FORMAT_YUV420_SP_VUVU = 0x4d,
- DISP_FORMAT_YUV411_SP_UVUV = 0x4e,
- DISP_FORMAT_YUV411_SP_VUVU = 0x4f,
- DISP_FORMAT_8BIT_GRAY = 0x50,
- DISP_FORMAT_YUV444_I_AYUV_10BIT = 0x51,
- DISP_FORMAT_YUV444_I_VUYA_10BIT = 0x52,
- DISP_FORMAT_YUV422_I_YVYU_10BIT = 0x53,
- DISP_FORMAT_YUV422_I_YUYV_10BIT = 0x54,
- DISP_FORMAT_YUV422_I_UYVY_10BIT = 0x55,
- DISP_FORMAT_YUV422_I_VYUY_10BIT = 0x56,
- DISP_FORMAT_YUV444_P_10BIT = 0x57,
- DISP_FORMAT_YUV422_P_10BIT = 0x58,
- DISP_FORMAT_YUV420_P_10BIT = 0x59,
- DISP_FORMAT_YUV411_P_10BIT = 0x5a,
- DISP_FORMAT_YUV422_SP_UVUV_10BIT = 0x5b,
- DISP_FORMAT_YUV422_SP_VUVU_10BIT = 0x5c,
- DISP_FORMAT_YUV420_SP_UVUV_10BIT = 0x5d,
- DISP_FORMAT_YUV420_SP_VUVU_10BIT = 0x5e,
- DISP_FORMAT_YUV411_SP_UVUV_10BIT = 0x5f,
- DISP_FORMAT_YUV411_SP_VUVU_10BIT = 0x60,
- DISP_FORMAT_YUV420_P_YV12 = 0x61, /* MSB P3-2-1-0 LSB YYYY V U DISP_FORMAT_YUV420_P */
- DISP_FORMAT_YUV420_P_YU12 = 0x62, /* MSB P3-2-1-0 LSB YYYY U V DISP_FORMAT_YUV420_P*/
- DISP_FORMAT_CSIRGB,
- DISP_UNKNOWN_VALUE,
- DISP_FORMAT_MAX,
- }__disp_pixel_fmt_t;
- enum disp_3d_out_mode {
- DISP_3D_OUT_MODE_CI_1 = 0x5, /* column interlaved 1 */
- DISP_3D_OUT_MODE_CI_2 = 0x6, /* column interlaved 2 */
- DISP_3D_OUT_MODE_CI_3 = 0x7, /* column interlaved 3 */
- DISP_3D_OUT_MODE_CI_4 = 0x8, /* column interlaved 4 */
- DISP_3D_OUT_MODE_LIRGB = 0x9, /* line interleaved rgb */
- DISP_3D_OUT_MODE_TB = 0x0, /* top bottom */
- DISP_3D_OUT_MODE_FP = 0x1, /* frame packing */
- DISP_3D_OUT_MODE_SSF = 0x2, /* side by side full */
- DISP_3D_OUT_MODE_SSH = 0x3, /* side by side half */
- DISP_3D_OUT_MODE_LI = 0x4, /* line interleaved */
- DISP_3D_OUT_MODE_FA = 0xa, /* field alternative */
- };
- enum disp_color_space {
- DISP_UNDEF = 0x00,
- DISP_UNDEF_F = 0x01,
- DISP_GBR = 0x100,
- DISP_BT709 = 0x101,
- DISP_FCC = 0x102,
- DISP_BT470BG = 0x103,
- DISP_BT601 = 0x104,
- DISP_SMPTE240M = 0x105,
- DISP_YCGCO = 0x106,
- DISP_BT2020NC = 0x107,
- DISP_BT2020C = 0x108,
- DISP_GBR_F = 0x200,
- DISP_BT709_F = 0x201,
- DISP_FCC_F = 0x202,
- DISP_BT470BG_F = 0x203,
- DISP_BT601_F = 0x204,
- DISP_SMPTE240M_F = 0x205,
- DISP_YCGCO_F = 0x206,
- DISP_BT2020NC_F = 0x207,
- DISP_BT2020C_F = 0x208,
- DISP_RESERVED = 0x300,
- DISP_RESERVED_F = 0x301,
- };
- typedef enum disp_color_space __disp_cs_mode_t;
- enum disp_csc_type {
- DISP_CSC_TYPE_RGB = 0,
- DISP_CSC_TYPE_YUV444 = 1,
- DISP_CSC_TYPE_YUV422 = 2,
- DISP_CSC_TYPE_YUV420 = 3,
- };
- enum disp_data_bits {
- DISP_DATA_8BITS = 0,
- DISP_DATA_10BITS = 1,
- DISP_DATA_12BITS = 2,
- DISP_DATA_16BITS = 3,
- };
- enum disp_dvi_hdmi {
- DISP_DVI_HDMI_UNDEFINED = 0,
- DISP_DVI = 1,
- DISP_HDMI = 2,
- };
- enum disp_scan_info {
- DISP_SCANINFO_NO_DATA = 0,
- OVERSCAN = 1,
- UNDERSCAN = 2,
- };
- enum disp_color_range {
- DISP_COLOR_RANGE_DEFAULT = 0, /*default*/
- DISP_COLOR_RANGE_0_255 = 1,
- DISP_COLOR_RANGE_16_235 = 2,
- };
- enum disp_output_type {
- DISP_OUTPUT_TYPE_NONE = 0,
- DISP_OUTPUT_TYPE_LCD = 1,
- DISP_OUTPUT_TYPE_TV = 2,
- DISP_OUTPUT_TYPE_HDMI = 4,
- DISP_OUTPUT_TYPE_VGA = 8,
- DISP_OUTPUT_TYPE_VDPO = 16,
- DISP_OUTPUT_TYPE_EDP = 32, /*16 for vdpo*/
- };
- enum disp_tv_mode {
- DISP_TV_MOD_480I = 0,
- DISP_TV_MOD_576I = 1,
- DISP_TV_MOD_480P = 2,
- DISP_TV_MOD_576P = 3,
- DISP_TV_MOD_720P_50HZ = 4,
- DISP_TV_MOD_720P_60HZ = 5,
- DISP_TV_MOD_1080I_50HZ = 6,
- DISP_TV_MOD_1080I_60HZ = 7,
- DISP_TV_MOD_1080P_24HZ = 8,
- DISP_TV_MOD_1080P_50HZ = 9,
- DISP_TV_MOD_1080P_60HZ = 0xa,
- DISP_TV_MOD_1080P_24HZ_3D_FP = 0x17,
- DISP_TV_MOD_720P_50HZ_3D_FP = 0x18,
- DISP_TV_MOD_720P_60HZ_3D_FP = 0x19,
- DISP_TV_MOD_1080P_25HZ = 0x1a,
- DISP_TV_MOD_1080P_30HZ = 0x1b,
- DISP_TV_MOD_PAL = 0xb,
- DISP_TV_MOD_PAL_SVIDEO = 0xc,
- DISP_TV_MOD_NTSC = 0xe,
- DISP_TV_MOD_NTSC_SVIDEO = 0xf,
- DISP_TV_MOD_PAL_M = 0x11,
- DISP_TV_MOD_PAL_M_SVIDEO = 0x12,
- DISP_TV_MOD_PAL_NC = 0x14,
- DISP_TV_MOD_PAL_NC_SVIDEO = 0x15,
- DISP_TV_MOD_3840_2160P_30HZ = 0x1c,
- DISP_TV_MOD_3840_2160P_25HZ = 0x1d,
- DISP_TV_MOD_3840_2160P_24HZ = 0x1e,
- DISP_TV_MOD_4096_2160P_24HZ = 0x1f,
- DISP_TV_MOD_4096_2160P_25HZ = 0x20,
- DISP_TV_MOD_4096_2160P_30HZ = 0x21,
- DISP_TV_MOD_3840_2160P_60HZ = 0x22,
- DISP_TV_MOD_4096_2160P_60HZ = 0x23,
- DISP_TV_MOD_3840_2160P_50HZ = 0x24,
- DISP_TV_MOD_4096_2160P_50HZ = 0x25,
- DISP_TV_MOD_2560_1440P_60HZ = 0x26,
- DISP_TV_MOD_1440_2560P_70HZ = 0x27,
- DISP_TV_MOD_1080_1920P_60HZ = 0x28,
- DISP_TV_MOD_1280_1024P_60HZ = 0x41,
- DISP_TV_MOD_1024_768P_60HZ = 0x42,
- DISP_TV_MOD_900_540P_60HZ = 0x43,
- DISP_TV_MOD_1920_720P_60HZ = 0x44,
- /* vga */
- DISP_VGA_MOD_640_480P_60 = 0x50,
- DISP_VGA_MOD_800_600P_60 = 0x51,
- DISP_VGA_MOD_1024_768P_60 = 0x52,
- DISP_VGA_MOD_1280_768P_60 = 0x53,
- DISP_VGA_MOD_1280_800P_60 = 0x54,
- DISP_VGA_MOD_1366_768P_60 = 0x55,
- DISP_VGA_MOD_1440_900P_60 = 0x56,
- DISP_VGA_MOD_1920_1080P_60 = 0x57,
- DISP_VGA_MOD_1920_1200P_60 = 0x58,
- DISP_TV_MOD_3840_1080P_30 = 0x59,
- DISP_VGA_MOD_1280_720P_60 = 0x5a,
- DISP_VGA_MOD_1600_900P_60 = 0x5b,
- DISP_VGA_MOD_MAX_NUM = 0x5c,
- DISP_TV_MODE_NUM,
- };
- enum disp_exit_mode {
- DISP_EXIT_MODE_CLEAN_ALL = 0,
- DISP_EXIT_MODE_CLEAN_PARTLY = 1, /* only clean interrupt temply */
- };
- enum disp_buffer_flags {
- DISP_BF_NORMAL = 0, /* non-stereo */
- DISP_BF_STEREO_TB = 1 << 0, /* stereo top-bottom */
- DISP_BF_STEREO_FP = 1 << 1, /* stereo frame packing */
- DISP_BF_STEREO_SSH = 1 << 2, /* stereo side by side half */
- DISP_BF_STEREO_SSF = 1 << 3, /* stereo side by side full */
- DISP_BF_STEREO_LI = 1 << 4, /* stereo line interlace */
- /*
- * 2d plus depth to convert into 3d,
- * left and right image using the same frame buffer
- */
- DISP_BF_STEREO_2D_DEPTH = 1 << 5,
- };
- enum disp_layer_mode {
- LAYER_MODE_BUFFER = 0,
- LAYER_MODE_COLOR = 1,
- };
- enum disp_scan_flags {
- DISP_SCAN_PROGRESSIVE = 0,
- DISP_SCAN_INTERLACED_ODD_FLD_FIRST = 1 << 0,
- DISP_SCAN_INTERLACED_EVEN_FLD_FIRST = 1 << 1,
- };
- enum disp_eotf {
- DISP_EOTF_RESERVED = 0x000,
- DISP_EOTF_BT709 = 0x001,
- DISP_EOTF_UNDEF = 0x002,
- DISP_EOTF_GAMMA22 = 0x004, /* SDR */
- DISP_EOTF_GAMMA28 = 0x005,
- DISP_EOTF_BT601 = 0x006,
- DISP_EOTF_SMPTE240M = 0x007,
- DISP_EOTF_LINEAR = 0x008,
- DISP_EOTF_LOG100 = 0x009,
- DISP_EOTF_LOG100S10 = 0x00a,
- DISP_EOTF_IEC61966_2_4 = 0x00b,
- DISP_EOTF_BT1361 = 0x00c,
- DISP_EOTF_IEC61966_2_1 = 0X00d,
- DISP_EOTF_BT2020_0 = 0x00e,
- DISP_EOTF_BT2020_1 = 0x00f,
- DISP_EOTF_SMPTE2084 = 0x010, /* HDR10 */
- DISP_EOTF_SMPTE428_1 = 0x011,
- DISP_EOTF_ARIB_STD_B67 = 0x012, /* HLG */
- };
- /* disp_atw_mode - mode for asynchronous time warp
- *
- * @NORMAL_MODE: dual buffer, left eye and right eye buffer is individual
- * @LEFT_RIGHT_MODE: single buffer, the left half of each line buffer
- * is for left eye, the right half is for the right eye
- * @UP_DOWN_MODE: single buffer, the first half of the total buffer
- * is for the left eye, the second half is for the right eye
- */
- enum disp_atw_mode {
- NORMAL_MODE,
- LEFT_RIGHT_MODE,
- UP_DOWN_MODE,
- };
- struct disp_output {
- unsigned int type;
- unsigned int mode;
- };
- struct disp_rect64 {
- long long x;
- long long y;
- long long width;
- long long height;
- };
- struct disp_lbc_info {
- unsigned int is_lossy;
- unsigned int rc_en;
- unsigned int pitch;
- unsigned int seg_bit;
- };
- struct disp_fb_info {
- /* address of frame buffer,
- * single addr for interleaved fomart,
- * double addr for semi-planar fomart
- * triple addr for planar format
- */
- unsigned long long addr[3];
- struct disp_rectsz size[3];
- /* align for 3 comonent,unit: bytes */
- unsigned int align[3];
- enum disp_pixel_format format;
- enum disp_color_space color_space; /* color space */
- unsigned int trd_right_addr[3]; /* right address of 3d fb */
- bool pre_multiply; /* true: pre-multiply fb */
- struct disp_rect64 crop; /* crop rectangle boundaries */
- enum disp_buffer_flags flags;
- enum disp_scan_flags scan;
- unsigned int lbc_en;
- struct disp_lbc_info lbc_info;
- };
- struct disp_layer_info {
- enum disp_layer_mode mode;
- unsigned char zorder;
- /* 0: pixel alpha; 1: global alpha; 2: global pixel alpha */
- unsigned char alpha_mode;
- unsigned char alpha_value; /* global alpha value */
- struct disp_rect screen_win; /* display window on the screen */
- bool b_trd_out; /* 3d display */
- enum disp_3d_out_mode out_trd_mode; /* 3d display mode */
- union {
- unsigned int color; /* valid when LAYER_MODE_COLOR */
- struct disp_fb_info fb; /* valid when LAYER_MODE_BUFFER */
- };
- unsigned int id; /* frame id, the id of frame display currently */
- };
- struct disp_layer_config {
- struct disp_layer_info info;
- bool enable;
- unsigned int channel;
- unsigned int layer_id;
- };
- /* disp_atw_info - asynchronous time wrap infomation
- *
- * @used: indicate if the atw funtion is used
- * @mode: atw mode
- * @b_row: the row number of the micro block
- * @b_col: the column number of the micro block
- * @cof_fd: dma_buf fd for the buffer contaied coefficient for atw
- */
- struct disp_atw_info {
- bool used;
- enum disp_atw_mode mode;
- unsigned int b_row;
- unsigned int b_col;
- int cof_fd;
- };
- /**
- * disp_vdpo_config
- */
- struct disp_vdpo_config {
- unsigned int data_seq_sel;
- unsigned int dclk_invt;
- unsigned int dclk_dly_num;
- unsigned int spl_type_u;
- unsigned int spl_type_v;
- };
- /* disp_fb_info2 - image buffer info v2
- *
- * @fd: dma_buf fd for frame buffer
- * @size: size<width,height> for each buffer, unit:pixels
- * @align: align for each buffer, unit:bytes
- * @format: pixel format
- * @color_space: color space
- * @trd_right_fd: dma_buf fd for the right-eye frame buffer,
- * valid when frame-packing 3d buffer input
- * @pre_multiply: indicate the pixel use premultiplied alpha
- * @crop: crop rectangle for buffer to be display
- * @flag: indicate stereo/non-stereo buffer
- * @scan: indicate interleave/progressive scan type, and the scan order
- * @depth: depth perception for stereo image, only valid when stereo image input
- * unit: pixel
- * @fbd_en: indicate if enable fbd function
- * @lbc_en: indicate if enable lbc function
- * @metadata_fd: dma_buf fd for the buffer contained metadata for fbc/hdr
- * @metadata_size: the size of metadata buffer, unit:bytes
- * @metadata_flag: the flag to indicate the type of metadata buffer
- * 0 : no metadata
- * 1 << 0: hdr static metadata
- * 1 << 1: hdr dynamic metadata
- * 1 << 4: frame buffer compress(fbc) metadata
- * x : all type could be "or" together
- */
- struct disp_fb_info2 {
- int fd;
- struct disp_rectsz size[3];
- unsigned int align[3];
- enum disp_pixel_format format;
- enum disp_color_space color_space;
- int trd_right_fd;
- bool pre_multiply;
- struct disp_rect64 crop;
- enum disp_buffer_flags flags;
- enum disp_scan_flags scan;
- enum disp_eotf eotf;
- int depth;
- unsigned int fbd_en;
- unsigned int lbc_en;
- struct disp_lbc_info lbc_info;
- int metadata_fd;
- unsigned int metadata_size;
- unsigned int metadata_flag;
- };
- /* disp_layer_info2 - layer info v2
- *
- * @mode: buffer/clolor mode, when in color mode, the layer is widthout buffer
- * @zorder: the zorder of layer, 0~max-layer-number
- * @alpha_mode:
- * 0: pixel alpha;
- * 1: global alpha
- * 2: mixed alpha, compositing width pixel alpha before global alpha
- * @alpha_value: global alpha value, valid when alpha_mode is not pixel alpha
- * @screen_win: the rectangle on the screen for fb to be display
- * @b_trd_out: indicate if 3d display output
- * @out_trd_mode: 3d output mode, valid when b_trd_out is true
- * @color: the color value to be display, valid when layer is in color mode
- * @fb: the framebuffer info related width the layer, valid when in buffer mode
- * @id: frame id, the user could get the frame-id display currently by
- * DISP_LAYER_GET_FRAME_ID ioctl
- * @atw: asynchronous time wrap information
- */
- struct disp_layer_info2 {
- enum disp_layer_mode mode;
- unsigned char zorder;
- unsigned char alpha_mode;
- unsigned char alpha_value;
- struct disp_rect screen_win;
- bool b_trd_out;
- enum disp_3d_out_mode out_trd_mode;
- union {
- unsigned int color;
- struct disp_fb_info2 fb;
- };
- unsigned int id;
- struct disp_atw_info atw;
- };
- /* disp_layer_config2 - layer config v2
- *
- * @info: layer info
- * @enable: indicate to enable/disable the layer
- * @channel: the channel index of the layer, 0~max-channel-number
- * @layer_id: the layer index of the layer widthin it's channel
- */
- struct disp_layer_config2 {
- struct disp_layer_info2 info;
- bool enable;
- unsigned int channel;
- unsigned int layer_id;
- };
- /* disp_palette_config - palette config
- *
- * @num: the num of palette
- * @data: the palette data, each palette data takes 4 bytes,show as below
- * bits description
- * 31:24 alpha value
- * 23:16 red value
- * 15:8 green value
- * 7:0 blue value
- * @channel: the channel index of the layer, 0~max-channel-number
- */
- struct disp_palette_config {
- unsigned int num;
- void *data;
- unsigned int channel;
- };
- /**
- * match rule: 0/1:always match;
- * 2:match if min<=color<=max;
- * 3:match if color>max or color<min
- */
- struct disp_colorkey {
- struct disp_color ck_max;
- struct disp_color ck_min;
- unsigned int red_match_rule;
- unsigned int green_match_rule;
- unsigned int blue_match_rule;
- };
- struct disp_s_frame {
- enum disp_pixel_format format;
- struct disp_rectsz size[3];
- struct disp_rect crop;
- unsigned long long addr[3];
- };
- struct disp_capture_info {
- /* capture the whole screen if window eq ZERO */
- struct disp_rect window;
- struct disp_s_frame out_frame;
- };
- /* disp_s_frame2 - display simple frame buffer
- *
- * @format: pixel format of fb
- * @size: size for each plane
- * @crop: crop zone to be fill image data
- * @fd: dma_buf fd
- */
- struct disp_s_frame2 {
- enum disp_pixel_format format;
- struct disp_rectsz size[3];
- struct disp_rect crop;
- int fd;
- };
- /* disp_capture_info2 - display capture information
- *
- * @window: the rectange on the screen to be capture
- * @out_frame: the framebuffer to be restore capture image data
- */
- struct disp_capture_info2 {
- struct disp_rect window;
- struct disp_s_frame2 out_frame;
- };
- struct disp_capture_fmt {
- enum disp_pixel_format format; /* write-back ouput format, doson't support YUV ouput yet */
- struct disp_rect window; /* source crop */
- struct disp_rect crop; /* output crop */
- };
- struct disp_capture_buffer {
- int handle; /* Unique integer id represent this buffer */
- enum disp_pixel_format format; /* write-back ouput format */
- struct disp_rect window; /* source crop */
- struct disp_rect crop; /* output crop */
- struct disp_rectsz size[3];
- int fd;
- int width; /* buffer width in pixels */
- int height; /* buffer height in pixels */
- };
- struct disp_capture_handle {
- int handle; /* unique integer id represent a capture buffer */
- int fencefd; /* fence fd for this buffer */
- };
- enum disp_capture_extend_cmd {
- DISP_CAPTURE_E_SET_FMT,
- DISP_CAPTURE_E_BUFFER_LIST_INIT,
- DISP_CAPTURE_E_BUFFER_LIST_CLEAR,
- DISP_CAPTURE_E_ACQUIRE_BUFFER,
- DISP_CAPTURE_E_RELEASE_BUFFER,
- DISP_CAPTURE_E_CTRL,
- };
- /* disp_device_config - display deivce config
- *
- * @type: output type
- * @mode: output mode
- * @format: data format
- * @bits: data bits
- * @eotf: electro-optical transfer function
- * SDR : DISP_EOTF_GAMMA22
- * HDR10: DISP_EOTF_SMPTE2084
- * HLG : DISP_EOTF_ARIB_STD_B67
- * @cs: color space type
- * DISP_BT601: SDR for SD resolution(< 720P)
- * DISP_BT709: SDR for HD resolution(>= 720P)
- * DISP_BT2020NC: HDR10 or HLG or wide-color-gamut
- * @dvi_hdmi: output mode
- * DVI: DISP_DVI
- * HDMI: DISP_HDMI
- * @range: RGB/YUV quantization range
- * DEFUALT: limited range when sending a CE video format
- * full range when sending an IT video format
- * LIMITED: color limited range from 16 to 235
- * FULL: color full range from 0 to 255
- * @scan info:
- * DISP_SCANINFO_NO_DATA: overscan if it is a CE format,
- * underscan if it is an IT format
- * OVERSCAN: composed for overscan display
- * UNDERSCAN: composed for underscan display
- * @aspect_ratio: active format aspect ratio
- */
- struct disp_device_config {
- enum disp_output_type type;
- enum disp_tv_mode mode;
- enum disp_csc_type format;
- enum disp_data_bits bits;
- enum disp_eotf eotf;
- enum disp_color_space cs;
- enum disp_dvi_hdmi dvi_hdmi;
- enum disp_color_range range;
- enum disp_scan_info scan;
- unsigned int aspect_ratio;
- unsigned int reserve1;
- };
- /* disp_device_dynamic_config - display deivce dynamic config
- *
- * @metadata_fd: dma_buf fd for the buffer contained metadata for fbc/hdr
- * @metadata_size: the size of metadata buffer, unit:bytes
- * @metadata_flag: the flag to indicate the type of metadata buffer
- * 0 : no metadata
- * 1 << 0: hdr static metadata
- * 1 << 1: hdr dynamic metadata
- * 1 << 4: frame buffer compress(fbc) metadata
- * x : all type could be "or" together
- * @vmap:vmap a block contigous phys memory into virtual space
- * @vunmap: release virtual mapping obtained by vmap()
- */
- struct disp_device_dynamic_config {
- int metadata_fd;
- unsigned int metadata_size;
- unsigned int metadata_flag;
- void *(*vmap)(unsigned long phys_addr, unsigned long size);
- void (*vunmap)(const void *vaddr);
- };
- struct disp_video_timings {
- unsigned int vic; /* video information code */
- unsigned int tv_mode;
- unsigned int pixel_clk;
- unsigned int pixel_repeat; /* pixel repeat (pixel_repeat+1) times */
- unsigned int x_res;
- unsigned int y_res;
- unsigned int hor_total_time;
- unsigned int hor_back_porch;
- unsigned int hor_front_porch;
- unsigned int hor_sync_time;
- unsigned int ver_total_time;
- unsigned int ver_back_porch;
- unsigned int ver_front_porch;
- unsigned int ver_sync_time;
- unsigned int hor_sync_polarity; /* 0: negative, 1: positive */
- unsigned int ver_sync_polarity; /* 0: negative, 1: positive */
- bool b_interlace;
- unsigned int vactive_space;
- unsigned int trd_mode;
- unsigned long dclk_rate_set; /*unit: hz */
- unsigned long long frame_period; /* unit: ns */
- int start_delay; /* unit: line */
- };
- enum disp_fb_mode {
- FB_MODE_SCREEN0 = 0,
- FB_MODE_SCREEN1 = 1,
- FB_MODE_SCREEN2 = 2,
- FB_MODE_DUAL_SAME_SCREEN_TB = 3,/* two screen, top buffer for screen0, bottom buffer for screen1 */
- FB_MODE_DUAL_DIFF_SCREEN_SAME_CONTENTS = 4,/* two screen, they have same contents; */
- };
- struct disp_fb_create_info {
- enum disp_fb_mode fb_mode;
- enum disp_layer_mode mode;
- unsigned int buffer_num;
- unsigned int width;
- unsigned int height;
- unsigned int output_width; /* used when scaler mode */
- unsigned int output_height; /* used when scaler mode */
- };
- enum disp_init_mode {
- DISP_INIT_MODE_SCREEN0 = 0, /* fb0 for screen0 */
- DISP_INIT_MODE_SCREEN1 = 1, /* fb0 for screen1 */
- DISP_INIT_MODE_SCREEN2 = 2, /* fb0 for screen1 */
- DISP_INIT_MODE_TWO_DIFF_SCREEN = 3,/* fb0 for screen0 and fb1 for screen1 */
- DISP_INIT_MODE_TWO_SAME_SCREEN = 4,/* fb0(up buffer for screen0, down buffer for screen1) */
- DISP_INIT_MODE_TWO_DIFF_SCREEN_SAME_CONTENTS = 5,/* fb0 for two different screen(screen0 layer is normal layer, screen1 layer is scaler layer); */
- };
- struct disp_tv_func {
- int (*tv_enable)(u32 sel);
- int (*tv_disable)(u32 sel);
- int (*tv_suspend)(u32 sel);
- int (*tv_resume)(u32 sel);
- int (*tv_get_mode)(u32 sel);
- int (*tv_set_mode)(u32 sel, enum disp_tv_mode tv_mod);
- int (*tv_get_input_csc)(u32 sel);
- int (*tv_get_video_timing_info)(u32 sel,
- struct disp_video_timings **
- video_info);
- int (*tv_mode_support)(u32 sel, enum disp_tv_mode mode);
- int (*tv_hot_plugging_detect)(u32 state);
- int (*tv_set_enhance_mode)(u32 sel, u32 mode);
- int (*tv_irq_enable)(u32 sel, u32 irq_id, u32 en);
- int (*tv_irq_query)(u32 sel);
- unsigned int (*tv_get_cur_line)(u32 sel);
- int (*vdpo_set_config)(u32 sel, struct disp_vdpo_config *p_cfg);
- int (*tv_get_startdelay)(u32 sel);
- void (*tv_show_builtin_patten)(u32 sel, u32 patten);
- };
- /* disp_vdevice_interface_para - vdevice interaface parameter
- *
- * @intf:interface
- * 0:hv, 1:cpu, 3:lvds, 4:dsi
- * @sub_intf: sub interface
- * rgb interface: 0:parallel hv, 8:serial hv, 10:dummy rgb
- * 11: rgb dummy, 12: ccir656
- * cpu interface: 0:18 pin, 10:9pin, 12:6pin, 8:16pin, 14:8pin
- * lvds interface:0:single link, 1:dual link
- * dsi inerafce: 0:video mode, 1:command mode, 2: video burst mode
- * @sequence:output sequence
- * rgb output: 0:rgb rgb, 1:rgb brg, 2:rgb gbr, 4:brg rgb
- * 5:brg brg, 6:brg gbr
- * 8:grb rgb, 9:grb brg, 10:grb gbr
- * yuv output:0:yuyv, 1: yvyu, 2:uyvy, 3:vyuy
- * @fdelay:yuv eav/sav F line delay
- * 0: F toggle right after active video line
- * 1: delay 2 line(CCIR NTSC)
- * 2: delay 3 line(CCIR PAL)
- * @clk_phase:clk phase
- * 0: 0 degree, 1:90 degree, 2: 180 degree, 3:270 degree
- * @sync_polarity:sync signals polarity
- * 0: vsync active low,hsync active low
- * 1: vsync active high,hsync active low
- * 2: vsync active low,hsync active high
- * 3: vsync active high,hsync active high
- */
- struct disp_vdevice_interface_para {
- unsigned int intf;
- unsigned int sub_intf;
- unsigned int sequence;
- unsigned int fdelay;
- unsigned int clk_phase;
- unsigned int sync_polarity;
- unsigned int ccir_clk_div;
- unsigned int input_csc;/*not need to config for user*/
- };
- struct disp_vdevice_source_ops {
- int (*tcon_enable)(struct disp_device *dispdev);
- int (*tcon_disable)(struct disp_device *dispdev);
- int (*tcon_simple_enable)(struct disp_device *dispdev);
- int (*tcon_simple_disable)(struct disp_device *dispdev);
- };
- struct disp_device_func {
- int (*enable)(void);
- int (*smooth_enable)(void);
- int (*disable)(void);
- int (*set_mode)(u32 mode);
- int (*mode_support)(u32 mode);
- int (*get_HPD_status)(void);
- int (*get_input_csc)(void);
- int (*get_input_color_range)(void);
- int (*get_video_timing_info)(struct disp_video_timings **video_info);
- int (*suspend)(void);
- int (*resume)(void);
- int (*early_suspend)(void);
- int (*late_resume)(void);
- int (*get_interface_para)(void *para);
- int (*set_static_config)(struct disp_device_config *config);
- int (*get_static_config)(struct disp_device_config *config);
- int (*set_dynamic_config)(struct disp_device_dynamic_config *config);
- int (*get_dynamic_config)(struct disp_device_dynamic_config *config);
- /*for hdmi cec*/
- s32 (*cec_standby_request)(void);
- s32 (*cec_send_one_touch_play)(void);
- };
- struct disp_vdevice_init_data {
- char name[32];
- u32 disp;
- u32 fix_timing;
- enum disp_output_type type;
- struct disp_device_func func;
- };
- enum disp_tv_dac_source {
- DISP_TV_DAC_SRC_COMPOSITE = 0,
- DISP_TV_DAC_SRC_LUMA = 1,
- DISP_TV_DAC_SRC_CHROMA = 2,
- DISP_TV_DAC_SRC_Y = 4,
- DISP_TV_DAC_SRC_PB = 5,
- DISP_TV_DAC_SRC_PR = 6,
- DISP_TV_DAC_SRC_NONE = 7,
- };
- enum disp_tv_output {
- DISP_TV_NONE = 0,
- DISP_TV_CVBS = 1,
- DISP_TV_YPBPR = 2,
- DISP_TV_SVIDEO = 4,
- DISP_VGA = 5,
- };
- enum tag_DISP_CMD {
- /* ----disp global---- */
- DISP_SYS_SHOW = 0x00,
- DISP_RESERVE1 = 0x01,
- DISP_SET_BKCOLOR = 0x03,
- DISP_GET_BKCOLOR = 0x04,
- DISP_SET_COLORKEY = 0x05,
- DISP_GET_COLORKEY = 0x06,
- DISP_GET_SCN_WIDTH = 0x07,
- DISP_GET_SCN_HEIGHT = 0x08,
- DISP_GET_OUTPUT_TYPE = 0x09,
- DISP_SET_EXIT_MODE = 0x0A,
- DISP_VSYNC_EVENT_EN = 0x0B,
- DISP_BLANK = 0x0C,
- DISP_SHADOW_PROTECT = 0x0D,
- DISP_HWC_COMMIT = 0x0E,
- DISP_DEVICE_SWITCH = 0x0F,
- DISP_GET_OUTPUT = 0x10,
- DISP_SET_COLOR_RANGE = 0x11,
- DISP_GET_COLOR_RANGE = 0x12,
- DISP_HWC_CUSTOM = 0x13,
- DISP_DEVICE_SET_CONFIG = 0x14,
- DISP_DEVICE_GET_CONFIG = 0x15,
- /* ----layer---- */
- DISP_LAYER_ENABLE = 0x40,
- DISP_LAYER_DISABLE = 0x41,
- DISP_LAYER_SET_INFO = 0x42,
- DISP_LAYER_GET_INFO = 0x43,
- DISP_LAYER_TOP = 0x44,
- DISP_LAYER_BOTTOM = 0x45,
- DISP_LAYER_GET_FRAME_ID = 0x46,
- DISP_LAYER_SET_CONFIG = 0x47,
- DISP_LAYER_GET_CONFIG = 0x48,
- /*
- * LAYER_S(G)ET_CONFIG2 takes disp_layer_config2,
- * it will support more featuras
- */
- DISP_LAYER_SET_CONFIG2 = 0x49,
- DISP_LAYER_GET_CONFIG2 = 0x4a,
- DISP_CHN_SET_PALETTE = 0x4b,
- /* ----hdmi---- */
- DISP_HDMI_SUPPORT_MODE = 0xc4,
- DISP_SET_TV_HPD = 0xc5,
- DISP_HDMI_GET_EDID = 0xc6,
- DISP_CEC_ONE_TOUCH_PLAY = 0xc7,
- /* ----lcd---- */
- DISP_LCD_ENABLE = 0x100,
- DISP_LCD_DISABLE = 0x101,
- DISP_LCD_SET_BRIGHTNESS = 0x102,
- DISP_LCD_GET_BRIGHTNESS = 0x103,
- DISP_LCD_BACKLIGHT_ENABLE = 0x104,
- DISP_LCD_BACKLIGHT_DISABLE = 0x105,
- DISP_LCD_SET_SRC = 0x106,
- DISP_LCD_SET_FPS = 0x107,
- DISP_LCD_GET_FPS = 0x108,
- DISP_LCD_GET_SIZE = 0x109,
- DISP_LCD_GET_MODEL_NAME = 0x10a,
- DISP_LCD_SET_GAMMA_TABLE = 0x10b,
- DISP_LCD_GAMMA_CORRECTION_ENABLE = 0x10c,
- DISP_LCD_GAMMA_CORRECTION_DISABLE = 0x10d,
- DISP_LCD_USER_DEFINED_FUNC = 0x10e,
- DISP_LCD_CHECK_OPEN_FINISH = 0x10f,
- DISP_LCD_CHECK_CLOSE_FINISH = 0x110,
- /*tv*/
- DISP_TV_SET_GAMMA_TABLE = 0x111,
- /* ---- capture --- */
- DISP_CAPTURE_START = 0x140,/* caputre screen and scaler to dram */
- DISP_CAPTURE_STOP = 0x141,
- DISP_CAPTURE_COMMIT = 0x142,
- DISP_CAPTURE_COMMIT2 = 0x143,
- DISP_CAPTURE_QUERY = 0x144,
- DISP_CAPTURE_EXTEND = 0x145,
- /* ---enhance --- */
- DISP_ENHANCE_ENABLE = 0x180,
- DISP_ENHANCE_DISABLE = 0x181,
- DISP_ENHANCE_GET_EN = 0x182,
- DISP_ENHANCE_SET_WINDOW = 0x183,
- DISP_ENHANCE_GET_WINDOW = 0x184,
- DISP_ENHANCE_SET_MODE = 0x185,
- DISP_ENHANCE_GET_MODE = 0x186,
- DISP_ENHANCE_DEMO_ENABLE = 0x187,
- DISP_ENHANCE_DEMO_DISABLE = 0x188,
- DISP_ENHANCE_SET_BRIGHT = 0x190,
- DISP_ENHANCE_GET_BRIGHT = 0x191,
- DISP_ENHANCE_SET_CONTRAST = 0x192,
- DISP_ENHANCE_GET_CONTRAST = 0x193,
- DISP_ENHANCE_SET_SATURATION = 0x194,
- DISP_ENHANCE_GET_SATURATION = 0x195,
- /* ---smart backlight --- */
- DISP_SMBL_ENABLE = 0x200,
- DISP_SMBL_DISABLE = 0x201,
- DISP_SMBL_GET_EN = 0x202,
- DISP_SMBL_SET_WINDOW = 0x203,
- DISP_SMBL_GET_WINDOW = 0x204,
- /* ---- for test */
- DISP_FB_REQUEST = 0x280,
- DISP_FB_RELEASE = 0x281,
- DISP_MEM_REQUEST = 0x2c0,
- DISP_MEM_RELEASE = 0x2c1,
- DISP_MEM_GETADR = 0x2c2,
- DISP_VDPO_SET_CONFIG = 0x2c3,
- /* --- rotation sw --- */
- DISP_ROTATION_SW_SET_ROT = 0x300,
- DISP_ROTATION_SW_GET_ROT = 0x301,
- DISP_EINK_UPDATE = 0x402,
- DISP_EINK_SET_TEMP = 0x403,
- DISP_EINK_GET_TEMP = 0x404,
- DISP_EINK_OVERLAP_SKIP = 0x405,
- DISP_EINK_UPDATE2 = 0x406,
- };
- enum {
- ROTATION_SW_0 = 0,
- ROTATION_SW_90 = 1,
- ROTATION_SW_180 = 2,
- ROTATION_SW_270 = 3,
- };
- #define FBIOGET_LAYER_HDL_0 0x4700
- #define FBIOGET_LAYER_HDL_1 0x4701
- #endif
|