1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Media Bus API header 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de> 5*4882a593Smuzhiyun * (C) Copyright 2008-2017 Fuzhou Rockchip Electronics Co., Ltd 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify 8*4882a593Smuzhiyun * it under the terms of the GNU General Public License version 2 as 9*4882a593Smuzhiyun * published by the Free Software Foundation. 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef __LINUX_MEDIA_BUS_FORMAT_H 13*4882a593Smuzhiyun #define __LINUX_MEDIA_BUS_FORMAT_H 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* 16*4882a593Smuzhiyun * These bus formats uniquely identify data formats on the data bus. Format 0 17*4882a593Smuzhiyun * is reserved, MEDIA_BUS_FMT_FIXED shall be used by host-client pairs, where 18*4882a593Smuzhiyun * the data format is fixed. Additionally, "2X8" means that one pixel is 19*4882a593Smuzhiyun * transferred in two 8-bit samples, "BE" or "LE" specify in which order those 20*4882a593Smuzhiyun * samples are transferred over the bus: "LE" means that the least significant 21*4882a593Smuzhiyun * bits are transferred first, "BE" means that the most significant bits are 22*4882a593Smuzhiyun * transferred first, and "PADHI" and "PADLO" define which bits - low or high, 23*4882a593Smuzhiyun * in the incomplete high byte, are filled with padding bits. 24*4882a593Smuzhiyun * 25*4882a593Smuzhiyun * The bus formats are grouped by type, bus_width, bits per component, samples 26*4882a593Smuzhiyun * per pixel and order of subsamples. Numerical values are sorted using generic 27*4882a593Smuzhiyun * numerical sort order (8 thus comes before 10). 28*4882a593Smuzhiyun * 29*4882a593Smuzhiyun * As their value can't change when a new bus format is inserted in the 30*4882a593Smuzhiyun * enumeration, the bus formats are explicitly given a numerical value. The next 31*4882a593Smuzhiyun * free values for each category are listed below, update them when inserting 32*4882a593Smuzhiyun * new pixel codes. 33*4882a593Smuzhiyun */ 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define MEDIA_BUS_FMT_FIXED 0x0001 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* RGB - next is 0x1024 */ 38*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB444_1X12 0x1016 39*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE 0x1001 40*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB444_2X8_PADHI_LE 0x1002 41*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE 0x1003 42*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB555_2X8_PADHI_LE 0x1004 43*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB565_1X16 0x1017 44*4882a593Smuzhiyun #define MEDIA_BUS_FMT_BGR565_2X8_BE 0x1005 45*4882a593Smuzhiyun #define MEDIA_BUS_FMT_BGR565_2X8_LE 0x1006 46*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB565_2X8_BE 0x1007 47*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB565_2X8_LE 0x1008 48*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB666_1X18 0x1009 49*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RBG888_1X24 0x100e 50*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB666_1X24_CPADHI 0x1015 51*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB666_1X7X3_SPWG 0x1010 52*4882a593Smuzhiyun #define MEDIA_BUS_FMT_BGR888_1X24 0x1013 53*4882a593Smuzhiyun #define MEDIA_BUS_FMT_GBR888_1X24 0x1014 54*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB888_1X24 0x100a 55*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB888_2X12_BE 0x100b 56*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB888_2X12_LE 0x100c 57*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB888_1X7X4_SPWG 0x1011 58*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA 0x1012 59*4882a593Smuzhiyun #define MEDIA_BUS_FMT_ARGB8888_1X32 0x100d 60*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB888_1X32_PADHI 0x100f 61*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB101010_1X30 0x1018 62*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB121212_1X36 0x1019 63*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB161616_1X48 0x101a 64*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB666_1X7X3_JEIDA 0x101b 65*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SRGB888_3X8 0x101c 66*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SBGR888_3X8 0x101d 67*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SRBG888_3X8 0x101e 68*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SRGB888_DUMMY_4X8 0x101f 69*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SBGR888_DUMMY_4X8 0x1020 70*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SRBG888_DUMMY_4X8 0x1021 71*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB101010_1X7X5_SPWG 0x1022 72*4882a593Smuzhiyun #define MEDIA_BUS_FMT_RGB101010_1X7X5_JEIDA 0x1023 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* YUV (including grey) - next is 0x2026 */ 75*4882a593Smuzhiyun #define MEDIA_BUS_FMT_Y8_1X8 0x2001 76*4882a593Smuzhiyun #define MEDIA_BUS_FMT_UV8_1X8 0x2015 77*4882a593Smuzhiyun #define MEDIA_BUS_FMT_UYVY8_1_5X8 0x2002 78*4882a593Smuzhiyun #define MEDIA_BUS_FMT_VYUY8_1_5X8 0x2003 79*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YUYV8_1_5X8 0x2004 80*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YVYU8_1_5X8 0x2005 81*4882a593Smuzhiyun #define MEDIA_BUS_FMT_UYVY8_2X8 0x2006 82*4882a593Smuzhiyun #define MEDIA_BUS_FMT_VYUY8_2X8 0x2007 83*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YUYV8_2X8 0x2008 84*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YVYU8_2X8 0x2009 85*4882a593Smuzhiyun #define MEDIA_BUS_FMT_Y10_1X10 0x200a 86*4882a593Smuzhiyun #define MEDIA_BUS_FMT_UYVY10_2X10 0x2018 87*4882a593Smuzhiyun #define MEDIA_BUS_FMT_VYUY10_2X10 0x2019 88*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YUYV10_2X10 0x200b 89*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YVYU10_2X10 0x200c 90*4882a593Smuzhiyun #define MEDIA_BUS_FMT_Y12_1X12 0x2013 91*4882a593Smuzhiyun #define MEDIA_BUS_FMT_UYVY12_2X12 0x201c 92*4882a593Smuzhiyun #define MEDIA_BUS_FMT_VYUY12_2X12 0x201d 93*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YUYV12_2X12 0x201e 94*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YVYU12_2X12 0x201f 95*4882a593Smuzhiyun #define MEDIA_BUS_FMT_UYVY8_1X16 0x200f 96*4882a593Smuzhiyun #define MEDIA_BUS_FMT_VYUY8_1X16 0x2010 97*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YUYV8_1X16 0x2011 98*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YVYU8_1X16 0x2012 99*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YDYUYDYV8_1X16 0x2014 100*4882a593Smuzhiyun #define MEDIA_BUS_FMT_UYVY10_1X20 0x201a 101*4882a593Smuzhiyun #define MEDIA_BUS_FMT_VYUY10_1X20 0x201b 102*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YUYV10_1X20 0x200d 103*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YVYU10_1X20 0x200e 104*4882a593Smuzhiyun #define MEDIA_BUS_FMT_VUY8_1X24 0x2024 105*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YUV8_1X24 0x2025 106*4882a593Smuzhiyun #define MEDIA_BUS_FMT_UYYVYY8_0_5X24 0x2026 107*4882a593Smuzhiyun #define MEDIA_BUS_FMT_UYVY12_1X24 0x2020 108*4882a593Smuzhiyun #define MEDIA_BUS_FMT_VYUY12_1X24 0x2021 109*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YUYV12_1X24 0x2022 110*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YVYU12_1X24 0x2023 111*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YUV10_1X30 0x2016 112*4882a593Smuzhiyun #define MEDIA_BUS_FMT_UYYVYY10_0_5X30 0x2027 113*4882a593Smuzhiyun #define MEDIA_BUS_FMT_AYUV8_1X32 0x2017 114*4882a593Smuzhiyun #define MEDIA_BUS_FMT_UYYVYY12_0_5X36 0x2028 115*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YUV12_1X36 0x2029 116*4882a593Smuzhiyun #define MEDIA_BUS_FMT_YUV16_1X48 0x202a 117*4882a593Smuzhiyun #define MEDIA_BUS_FMT_UYYVYY16_0_5X48 0x202b 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun /* Bayer - next is 0x3019 */ 120*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SBGGR8_1X8 0x3001 121*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SGBRG8_1X8 0x3013 122*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SGRBG8_1X8 0x3002 123*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SRGGB8_1X8 0x3014 124*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SBGGR10_ALAW8_1X8 0x3015 125*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SGBRG10_ALAW8_1X8 0x3016 126*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SGRBG10_ALAW8_1X8 0x3017 127*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SRGGB10_ALAW8_1X8 0x3018 128*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8 0x300b 129*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8 0x300c 130*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8 0x3009 131*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8 0x300d 132*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_BE 0x3003 133*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_LE 0x3004 134*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SBGGR10_2X8_PADLO_BE 0x3005 135*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SBGGR10_2X8_PADLO_LE 0x3006 136*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SBGGR10_1X10 0x3007 137*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SGBRG10_1X10 0x300e 138*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SGRBG10_1X10 0x300a 139*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SRGGB10_1X10 0x300f 140*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SBGGR12_1X12 0x3008 141*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SGBRG12_1X12 0x3010 142*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SGRBG12_1X12 0x3011 143*4882a593Smuzhiyun #define MEDIA_BUS_FMT_SRGGB12_1X12 0x3012 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun /* JPEG compressed formats - next is 0x4002 */ 146*4882a593Smuzhiyun #define MEDIA_BUS_FMT_JPEG_1X8 0x4001 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun /* Vendor specific formats - next is 0x5002 */ 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun /* S5C73M3 sensor specific interleaved UYVY and JPEG */ 151*4882a593Smuzhiyun #define MEDIA_BUS_FMT_S5C_UYVY_JPEG_1X8 0x5001 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun /* HSV - next is 0x6002 */ 154*4882a593Smuzhiyun #define MEDIA_BUS_FMT_AHSV8888_1X32 0x6001 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun /* Panel Mirror control */ 157*4882a593Smuzhiyun #define DRM_MODE_FLAG_XMIRROR (1<<28) 158*4882a593Smuzhiyun #define DRM_MODE_FLAG_YMIRROR (1<<29) 159*4882a593Smuzhiyun #define DRM_MODE_FLAG_XYMIRROR (DRM_MODE_FLAG_XMIRROR | DRM_MODE_FLAG_YMIRROR) 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun #endif /* __LINUX_MEDIA_BUS_FORMAT_H */ 162