| Start/ | End/ | |||
| True | False | - | Line | Source |
| 1 | /* | |||
| 2 | ||||
| 3 | bttv - Bt848 frame grabber driver | |||
| 4 | ||||
| 5 | Copyright (C) 1996,97,98 Ralph Metzler <rjkm@thp.uni-koeln.de> | |||
| 6 | & Marcus Metzler <mocm@thp.uni-koeln.de> | |||
| 7 | (c) 1999-2002 Gerd Knorr <kraxel@bytesex.org> | |||
| 8 | ||||
| 9 | some v4l2 code lines are taken from Justin's bttv2 driver which is | |||
| 10 | (c) 2000 Justin Schoeman <justin@suntiger.ee.up.ac.za> | |||
| 11 | ||||
| 12 | This program is free software; you can redistribute it and/or modify | |||
| 13 | it under the terms of the GNU General Public License as published by | |||
| 14 | the Free Software Foundation; either version 2 of the License, or | |||
| 15 | (at your option) any later version. | |||
| 16 | ||||
| 17 | This program is distributed in the hope that it will be useful, | |||
| 18 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| 19 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| 20 | GNU General Public License for more details. | |||
| 21 | ||||
| 22 | You should have received a copy of the GNU General Public License | |||
| 23 | along with this program; if not, write to the Free Software | |||
| 24 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| 25 | */ | |||
| 26 | ||||
| 27 | #include <linux/init.h> | |||
| 28 | #include <linux/module.h> | |||
| 29 | #include <linux/moduleparam.h> | |||
| 30 | #include <linux/delay.h> | |||
| 31 | #include <linux/errno.h> | |||
| 32 | #include <linux/fs.h> | |||
| 33 | #include <linux/kernel.h> | |||
| 34 | #include <linux/sched.h> | |||
| 35 | #include <linux/interrupt.h> | |||
| 36 | #include <linux/kdev_t.h> | |||
| 37 | #include "bttvp.h" | |||
| 38 | #include <media/v4l2-common.h> | |||
| 39 | ||||
| 40 | #include <linux/dma-mapping.h> | |||
| 41 | ||||
| 42 | #include <asm/io.h> | |||
| 43 | #include <asm/byteorder.h> | |||
| 44 | ||||
| 45 | #include "rds.h" | |||
| 46 | ||||
| 47 | ||||
| 48 | unsigned int bttv_num; /* number of Bt848s in use */ | |||
| 49 | struct bttv bttvs[BTTV_MAX]; | |||
| 50 | ||||
| 51 | unsigned int bttv_debug; | |||
| 52 | unsigned int bttv_verbose = 1; | |||
| 53 | unsigned int bttv_gpio; | |||
| 54 | ||||
| 55 | /* config variables */ | |||
| 56 | #ifdef __BIG_ENDIAN | |||
| 57 | static unsigned int bigendian=1; | |||
| 58 | #else | |||
| 59 | static unsigned int bigendian; | |||
| 60 | #endif | |||
| 61 | static unsigned int radio[BTTV_MAX]; | |||
| 62 | static unsigned int irq_debug; | |||
| 63 | static unsigned int gbuffers = 8; | |||
| 64 | static unsigned int gbufsize = 0x208000; | |||
| 65 | ||||
| 66 | static int video_nr = -1; | |||
| 67 | static int radio_nr = -1; | |||
| 68 | static int vbi_nr = -1; | |||
| 69 | static int debug_latency; | |||
| 70 | ||||
| 71 | static unsigned int fdsr; | |||
| 72 | ||||
| 73 | /* options */ | |||
| 74 | static unsigned int combfilter; | |||
| 75 | static unsigned int lumafilter; | |||
| 76 | static unsigned int automute = 1; | |||
| 77 | static unsigned int chroma_agc; | |||
| 78 | static unsigned int adc_crush = 1; | |||
| 79 | static unsigned int whitecrush_upper = 0xCF; | |||
| 80 | static unsigned int whitecrush_lower = 0x7F; | |||
| 81 | static unsigned int vcr_hack; | |||
| 82 | static unsigned int irq_iswitch; | |||
| 83 | static unsigned int uv_ratio = 50; | |||
| 84 | static unsigned int full_luma_range; | |||
| 85 | static unsigned int coring; | |||
| 86 | extern int no_overlay; | |||
| 87 | ||||
| 88 | /* API features (turn on/off stuff for testing) */ | |||
| 89 | static unsigned int v4l2 = 1; | |||
| 90 | ||||
| 91 | /* insmod args */ | |||
| 0 | 0 | - | 92 | module_param(bttv_verbose, int, 0644); |
| 0 | - | 92 | return ( & ( bttv_verbose ) ) | |
| 0 | 0 | - | 93 | module_param(bttv_gpio, int, 0644); |
| 0 | - | 93 | return ( & ( bttv_gpio ) ) | |
| 0 | 0 | - | 94 | module_param(bttv_debug, int, 0644); |
| 0 | - | 94 | return ( & ( bttv_debug ) ) | |
| 0 | 0 | - | 95 | module_param(irq_debug, int, 0644); |
| 0 | - | 95 | return ( & ( irq_debug ) ) | |
| 0 | 0 | - | 96 | module_param(debug_latency, int, 0644); |
| 0 | - | 96 | return ( & ( debug_latency ) ) | |
| 97 | ||||
| 0 | 0 | - | 98 | module_param(fdsr, int, 0444); |
| 0 | - | 98 | return ( & ( fdsr ) ) | |
| 0 | 0 | - | 99 | module_param(video_nr, int, 0444); |
| 0 | - | 99 | return ( & ( video_nr ) ) | |
| 0 | 0 | - | 100 | module_param(radio_nr, int, 0444); |
| 0 | - | 100 | return ( & ( radio_nr ) ) | |
| 0 | 0 | - | 101 | module_param(vbi_nr, int, 0444); |
| 0 | - | 101 | return ( & ( vbi_nr ) ) | |
| 0 | 0 | - | 102 | module_param(gbuffers, int, 0444); |
| 0 | - | 102 | return ( & ( gbuffers ) ) | |
| 0 | 0 | - | 103 | module_param(gbufsize, int, 0444); |
| 0 | - | 103 | return ( & ( gbufsize ) ) | |
| 104 | ||||
| 0 | 0 | - | 105 | module_param(v4l2, int, 0644); |
| 0 | - | 105 | return ( & ( v4l2 ) ) | |
| 0 | 0 | - | 106 | module_param(bigendian, int, 0644); |
| 0 | - | 106 | return ( & ( bigendian ) ) | |
| 0 | 0 | - | 107 | module_param(irq_iswitch, int, 0644); |
| 0 | - | 107 | return ( & ( irq_iswitch ) ) | |
| 0 | 0 | - | 108 | module_param(combfilter, int, 0444); |
| 0 | - | 108 | return ( & ( combfilter ) ) | |
| 0 | 0 | - | 109 | module_param(lumafilter, int, 0444); |
| 0 | - | 109 | return ( & ( lumafilter ) ) | |
| 0 | 0 | - | 110 | module_param(automute, int, 0444); |
| 0 | - | 110 | return ( & ( automute ) ) | |
| 0 | 0 | - | 111 | module_param(chroma_agc, int, 0444); |
| 0 | - | 111 | return ( & ( chroma_agc ) ) | |
| 0 | 0 | - | 112 | module_param(adc_crush, int, 0444); |
| 0 | - | 112 | return ( & ( adc_crush ) ) | |
| 0 | 0 | - | 113 | module_param(whitecrush_upper, int, 0444); |
| 0 | - | 113 | return ( & ( whitecrush_upper ) ) | |
| 0 | 0 | - | 114 | module_param(whitecrush_lower, int, 0444); |
| 0 | - | 114 | return ( & ( whitecrush_lower ) ) | |
| 0 | 0 | - | 115 | module_param(vcr_hack, int, 0444); |
| 0 | - | 115 | return ( & ( vcr_hack ) ) | |
| 0 | 0 | - | 116 | module_param(uv_ratio, int, 0444); |
| 0 | - | 116 | return ( & ( uv_ratio ) ) | |
| 0 | 0 | - | 117 | module_param(full_luma_range, int, 0444); |
| 0 | - | 117 | return ( & ( full_luma_range ) ) | |
| 0 | 0 | - | 118 | module_param(coring, int, 0444); |
| 0 | - | 118 | return ( & ( coring ) ) | |
| 119 | ||||
| 120 | module_param_array(radio, int, NULL, 0444); | |||
| 121 | ||||
| 122 | MODULE_PARM_DESC(radio,"The TV card supports radio, default is 0 (no)"); | |||
| 123 | MODULE_PARM_DESC(bigendian,"byte order of the framebuffer, default is native endian"); | |||
| 124 | MODULE_PARM_DESC(bttv_verbose,"verbose startup messages, default is 1 (yes)"); | |||
| 125 | MODULE_PARM_DESC(bttv_gpio,"log gpio changes, default is 0 (no)"); | |||
| 126 | MODULE_PARM_DESC(bttv_debug,"debug messages, default is 0 (no)"); | |||
| 127 | MODULE_PARM_DESC(irq_debug,"irq handler debug messages, default is 0 (no)"); | |||
| 128 | MODULE_PARM_DESC(gbuffers,"number of capture buffers. range 2-32, default 8"); | |||
| 129 | MODULE_PARM_DESC(gbufsize,"size of the capture buffers, default is 0x208000"); | |||
| 130 | MODULE_PARM_DESC(automute,"mute audio on bad/missing video signal, default is 1 (yes)"); | |||
| 131 | MODULE_PARM_DESC(chroma_agc,"enables the AGC of chroma signal, default is 0 (no)"); | |||
| 132 | MODULE_PARM_DESC(adc_crush,"enables the luminance ADC crush, default is 1 (yes)"); | |||
| 133 | MODULE_PARM_DESC(whitecrush_upper,"sets the white crush upper value, default is 207"); | |||
| 134 | MODULE_PARM_DESC(whitecrush_lower,"sets the white crush lower value, default is 127"); | |||
| 135 | MODULE_PARM_DESC(vcr_hack,"enables the VCR hack (improves synch on poor VCR tapes), default is 0 (no)"); | |||
| 136 | MODULE_PARM_DESC(irq_iswitch,"switch inputs in irq handler"); | |||
| 137 | MODULE_PARM_DESC(uv_ratio,"ratio between u and v gains, default is 50"); | |||
| 138 | MODULE_PARM_DESC(full_luma_range,"use the full luma range, default is 0 (no)"); | |||
| 139 | MODULE_PARM_DESC(coring,"set the luma coring level, default is 0 (no)"); | |||
| 140 | ||||
| 141 | MODULE_DESCRIPTION("bttv - v4l/v4l2 driver module for bt848/878 based cards"); | |||
| 142 | MODULE_AUTHOR("Ralph Metzler & Marcus Metzler & Gerd Knorr"); | |||
| 143 | MODULE_LICENSE("GPL"); | |||
| 144 | ||||
| 145 | /* ----------------------------------------------------------------------- */ | |||
| 146 | /* sysfs */ | |||
| 147 | ||||
| 0 | 0 | - | 148 | static ssize_t show_card(struct class_device *cd, char *buf) |
| 149 | { | |||
| 150 | struct video_device *vfd = to_video_device(cd); | |||
| 151 | struct bttv *btv = dev_get_drvdata(vfd->dev); | |||
| 152 | return sprintf(buf, "%d\n", btv ? btv->c.type : UNSET); | |||
| 0 | 0 | - | 152 | ternary-?: btv |
| 0 | - | 152 | return sprintf ( buf , "%d\n" , btv ? btv -> c.. | |
| 153 | } | |||
| 154 | static CLASS_DEVICE_ATTR(card, S_IRUGO, show_card, NULL); | |||
| 155 | ||||
| 156 | /* ----------------------------------------------------------------------- */ | |||
| 157 | /* static data */ | |||
| 158 | ||||
| 159 | /* special timing tables from conexant... */ | |||
| 160 | static u8 SRAM_Table[][60] = | |||
| 161 | { | |||
| 162 | /* PAL digital input over GPIO[7:0] */ | |||
| 163 | { | |||
| 164 | 45, // 45 bytes following | |||
| 165 | 0x36,0x11,0x01,0x00,0x90,0x02,0x05,0x10,0x04,0x16, | |||
| 166 | 0x12,0x05,0x11,0x00,0x04,0x12,0xC0,0x00,0x31,0x00, | |||
| 167 | 0x06,0x51,0x08,0x03,0x89,0x08,0x07,0xC0,0x44,0x00, | |||
| 168 | 0x81,0x01,0x01,0xA9,0x0D,0x02,0x02,0x50,0x03,0x37, | |||
| 169 | 0x37,0x00,0xAF,0x21,0x00 | |||
| 170 | }, | |||
| 171 | /* NTSC digital input over GPIO[7:0] */ | |||
| 172 | { | |||
| 173 | 51, // 51 bytes following | |||
| 174 | 0x0C,0xC0,0x00,0x00,0x90,0x02,0x03,0x10,0x03,0x06, | |||
| 175 | 0x10,0x04,0x12,0x12,0x05,0x02,0x13,0x04,0x19,0x00, | |||
| 176 | 0x04,0x39,0x00,0x06,0x59,0x08,0x03,0x83,0x08,0x07, | |||
| 177 | 0x03,0x50,0x00,0xC0,0x40,0x00,0x86,0x01,0x01,0xA6, | |||
| 178 | 0x0D,0x02,0x03,0x11,0x01,0x05,0x37,0x00,0xAC,0x21, | |||
| 179 | 0x00, | |||
| 180 | }, | |||
| 181 | // TGB_NTSC392 // quartzsight | |||
| 182 | // This table has been modified to be used for Fusion Rev D | |||
| 183 | { | |||
| 184 | 0x2A, // size of table = 42 | |||
| 185 | 0x06, 0x08, 0x04, 0x0a, 0xc0, 0x00, 0x18, 0x08, 0x03, 0x24, | |||
| 186 | 0x08, 0x07, 0x02, 0x90, 0x02, 0x08, 0x10, 0x04, 0x0c, 0x10, | |||
| 187 | 0x05, 0x2c, 0x11, 0x04, 0x55, 0x48, 0x00, 0x05, 0x50, 0x00, | |||
| 188 | 0xbf, 0x0c, 0x02, 0x2f, 0x3d, 0x00, 0x2f, 0x3f, 0x00, 0xc3, | |||
| 189 | 0x20, 0x00 | |||
| 190 | } | |||
| 191 | }; | |||
| 192 | ||||
| 193 | const struct bttv_tvnorm bttv_tvnorms[] = { | |||
| 194 | /* PAL-BDGHI */ | |||
| 195 | /* max. active video is actually 922, but 924 is divisible by 4 and 3! */ | |||
| 196 | /* actually, max active PAL with HSCALE=0 is 948, NTSC is 768 - nil */ | |||
| 197 | { | |||
| 198 | .v4l2_id = V4L2_STD_PAL, | |||
| 199 | .name = "PAL", | |||
| 200 | .Fsc = 35468950, | |||
| 201 | .swidth = 924, | |||
| 202 | .sheight = 576, | |||
| 203 | .totalwidth = 1135, | |||
| 204 | .adelay = 0x7f, | |||
| 205 | .bdelay = 0x72, | |||
| 206 | .iform = (BT848_IFORM_PAL_BDGHI|BT848_IFORM_XT1), | |||
| 207 | .scaledtwidth = 1135, | |||
| 208 | .hdelayx1 = 186, | |||
| 209 | .hactivex1 = 924, | |||
| 210 | .vdelay = 0x20, | |||
| 211 | .vbipack = 255, | |||
| 212 | .sram = 0, | |||
| 213 | /* ITU-R frame line number of the first VBI line | |||
| 214 | we can capture, of the first and second field. */ | |||
| 215 | .vbistart = { 7,320 }, | |||
| 216 | },{ | |||
| 217 | .v4l2_id = V4L2_STD_NTSC_M | V4L2_STD_NTSC_M_KR, | |||
| 218 | .name = "NTSC", | |||
| 219 | .Fsc = 28636363, | |||
| 220 | .swidth = 768, | |||
| 221 | .sheight = 480, | |||
| 222 | .totalwidth = 910, | |||
| 223 | .adelay = 0x68, | |||
| 224 | .bdelay = 0x5d, | |||
| 225 | .iform = (BT848_IFORM_NTSC|BT848_IFORM_XT0), | |||
| 226 | .scaledtwidth = 910, | |||
| 227 | .hdelayx1 = 128, | |||
| 228 | .hactivex1 = 910, | |||
| 229 | .vdelay = 0x1a, | |||
| 230 | .vbipack = 144, | |||
| 231 | .sram = 1, | |||
| 232 | .vbistart = { 10, 273 }, | |||
| 233 | },{ | |||
| 234 | .v4l2_id = V4L2_STD_SECAM, | |||
| 235 | .name = "SECAM", | |||
| 236 | .Fsc = 35468950, | |||
| 237 | .swidth = 924, | |||
| 238 | .sheight = 576, | |||
| 239 | .totalwidth = 1135, | |||
| 240 | .adelay = 0x7f, | |||
| 241 | .bdelay = 0xb0, | |||
| 242 | .iform = (BT848_IFORM_SECAM|BT848_IFORM_XT1), | |||
| 243 | .scaledtwidth = 1135, | |||
| 244 | .hdelayx1 = 186, | |||
| 245 | .hactivex1 = 922, | |||
| 246 | .vdelay = 0x20, | |||
| 247 | .vbipack = 255, | |||
| 248 | .sram = 0, /* like PAL, correct? */ | |||
| 249 | .vbistart = { 7, 320 }, | |||
| 250 | },{ | |||
| 251 | .v4l2_id = V4L2_STD_PAL_Nc, | |||
| 252 | .name = "PAL-Nc", | |||
| 253 | .Fsc = 28636363, | |||
| 254 | .swidth = 640, | |||
| 255 | .sheight = 576, | |||
| 256 | .totalwidth = 910, | |||
| 257 | .adelay = 0x68, | |||
| 258 | .bdelay = 0x5d, | |||
| 259 | .iform = (BT848_IFORM_PAL_NC|BT848_IFORM_XT0), | |||
| 260 | .scaledtwidth = 780, | |||
| 261 | .hdelayx1 = 130, | |||
| 262 | .hactivex1 = 734, | |||
| 263 | .vdelay = 0x1a, | |||
| 264 | .vbipack = 144, | |||
| 265 | .sram = -1, | |||
| 266 | .vbistart = { 7, 320 }, | |||
| 267 | },{ | |||
| 268 | .v4l2_id = V4L2_STD_PAL_M, | |||
| 269 | .name = "PAL-M", | |||
| 270 | .Fsc = 28636363, | |||
| 271 | .swidth = 640, | |||
| 272 | .sheight = 480, | |||
| 273 | .totalwidth = 910, | |||
| 274 | .adelay = 0x68, | |||
| 275 | .bdelay = 0x5d, | |||
| 276 | .iform = (BT848_IFORM_PAL_M|BT848_IFORM_XT0), | |||
| 277 | .scaledtwidth = 780, | |||
| 278 | .hdelayx1 = 135, | |||
| 279 | .hactivex1 = 754, | |||
| 280 | .vdelay = 0x1a, | |||
| 281 | .vbipack = 144, | |||
| 282 | .sram = -1, | |||
| 283 | .vbistart = { 10, 273 }, | |||
| 284 | },{ | |||
| 285 | .v4l2_id = V4L2_STD_PAL_N, | |||
| 286 | .name = "PAL-N", | |||
| 287 | .Fsc = 35468950, | |||
| 288 | .swidth = 768, | |||
| 289 | .sheight = 576, | |||
| 290 | .totalwidth = 1135, | |||
| 291 | .adelay = 0x7f, | |||
| 292 | .bdelay = 0x72, | |||
| 293 | .iform = (BT848_IFORM_PAL_N|BT848_IFORM_XT1), | |||
| 294 | .scaledtwidth = 944, | |||
| 295 | .hdelayx1 = 186, | |||
| 296 | .hactivex1 = 922, | |||
| 297 | .vdelay = 0x20, | |||
| 298 | .vbipack = 144, | |||
| 299 | .sram = -1, | |||
| 300 | .vbistart = { 7, 320}, | |||
| 301 | },{ | |||
| 302 | .v4l2_id = V4L2_STD_NTSC_M_JP, | |||
| 303 | .name = "NTSC-JP", | |||
| 304 | .Fsc = 28636363, | |||
| 305 | .swidth = 640, | |||
| 306 | .sheight = 480, | |||
| 307 | .totalwidth = 910, | |||
| 308 | .adelay = 0x68, | |||
| 309 | .bdelay = 0x5d, | |||
| 310 | .iform = (BT848_IFORM_NTSC_J|BT848_IFORM_XT0), | |||
| 311 | .scaledtwidth = 780, | |||
| 312 | .hdelayx1 = 135, | |||
| 313 | .hactivex1 = 754, | |||
| 314 | .vdelay = 0x16, | |||
| 315 | .vbipack = 144, | |||
| 316 | .sram = -1, | |||
| 317 | .vbistart = {10, 273}, | |||
| 318 | },{ | |||
| 319 | /* that one hopefully works with the strange timing | |||
| 320 | * which video recorders produce when playing a NTSC | |||
| 321 | * tape on a PAL TV ... */ | |||
| 322 | .v4l2_id = V4L2_STD_PAL_60, | |||
| 323 | .name = "PAL-60", | |||
| 324 | .Fsc = 35468950, | |||
| 325 | .swidth = 924, | |||
| 326 | .sheight = 480, | |||
| 327 | .totalwidth = 1135, | |||
| 328 | .adelay = 0x7f, | |||
| 329 | .bdelay = 0x72, | |||
| 330 | .iform = (BT848_IFORM_PAL_BDGHI|BT848_IFORM_XT1), | |||
| 331 | .scaledtwidth = 1135, | |||
| 332 | .hdelayx1 = 186, | |||
| 333 | .hactivex1 = 924, | |||
| 334 | .vdelay = 0x1a, | |||
| 335 | .vbipack = 255, | |||
| 336 | .vtotal = 524, | |||
| 337 | .sram = -1, | |||
| 338 | .vbistart = { 10, 273 }, | |||
| 339 | } | |||
| 340 | }; | |||
| 341 | static const unsigned int BTTV_TVNORMS = ARRAY_SIZE(bttv_tvnorms); | |||
| 342 | ||||
| 343 | /* ----------------------------------------------------------------------- */ | |||
| 344 | /* bttv format list | |||
| 345 | packed pixel formats must come first */ | |||
| 346 | static const struct bttv_format bttv_formats[] = { | |||
| 347 | { | |||
| 348 | .name = "8 bpp, gray", | |||
| 349 | .palette = VIDEO_PALETTE_GREY, | |||
| 350 | .fourcc = V4L2_PIX_FMT_GREY, | |||
| 351 | .btformat = BT848_COLOR_FMT_Y8, | |||
| 352 | .depth = 8, | |||
| 353 | .flags = FORMAT_FLAGS_PACKED, | |||
| 354 | },{ | |||
| 355 | .name = "8 bpp, dithered color", | |||
| 356 | .palette = VIDEO_PALETTE_HI240, | |||
| 357 | .fourcc = V4L2_PIX_FMT_HI240, | |||
| 358 | .btformat = BT848_COLOR_FMT_RGB8, | |||
| 359 | .depth = 8, | |||
| 360 | .flags = FORMAT_FLAGS_PACKED | FORMAT_FLAGS_DITHER, | |||
| 361 | },{ | |||
| 362 | .name = "15 bpp RGB, le", | |||
| 363 | .palette = VIDEO_PALETTE_RGB555, | |||
| 364 | .fourcc = V4L2_PIX_FMT_RGB555, | |||
| 365 | .btformat = BT848_COLOR_FMT_RGB15, | |||
| 366 | .depth = 16, | |||
| 367 | .flags = FORMAT_FLAGS_PACKED, | |||
| 368 | },{ | |||
| 369 | .name = "15 bpp RGB, be", | |||
| 370 | .palette = -1, | |||
| 371 | .fourcc = V4L2_PIX_FMT_RGB555X, | |||
| 372 | .btformat = BT848_COLOR_FMT_RGB15, | |||
| 373 | .btswap = 0x03, /* byteswap */ | |||
| 374 | .depth = 16, | |||
| 375 | .flags = FORMAT_FLAGS_PACKED, | |||
| 376 | },{ | |||
| 377 | .name = "16 bpp RGB, le", | |||
| 378 | .palette = VIDEO_PALETTE_RGB565, | |||
| 379 | .fourcc = V4L2_PIX_FMT_RGB565, | |||
| 380 | .btformat = BT848_COLOR_FMT_RGB16, | |||
| 381 | .depth = 16, | |||
| 382 | .flags = FORMAT_FLAGS_PACKED, | |||
| 383 | },{ | |||
| 384 | .name = "16 bpp RGB, be", | |||
| 385 | .palette = -1, | |||
| 386 | .fourcc = V4L2_PIX_FMT_RGB565X, | |||
| 387 | .btformat = BT848_COLOR_FMT_RGB16, | |||
| 388 | .btswap = 0x03, /* byteswap */ | |||
| 389 | .depth = 16, | |||
| 390 | .flags = FORMAT_FLAGS_PACKED, | |||
| 391 | },{ | |||
| 392 | .name = "24 bpp RGB, le", | |||
| 393 | .palette = VIDEO_PALETTE_RGB24, | |||
| 394 | .fourcc = V4L2_PIX_FMT_BGR24, | |||
| 395 | .btformat = BT848_COLOR_FMT_RGB24, | |||
| 396 | .depth = 24, | |||
| 397 | .flags = FORMAT_FLAGS_PACKED, | |||
| 398 | },{ | |||
| 399 | .name = "32 bpp RGB, le", | |||
| 400 | .palette = VIDEO_PALETTE_RGB32, | |||
| 401 | .fourcc = V4L2_PIX_FMT_BGR32, | |||
| 402 | .btformat = BT848_COLOR_FMT_RGB32, | |||
| 403 | .depth = 32, | |||
| 404 | .flags = FORMAT_FLAGS_PACKED, | |||
| 405 | },{ | |||
| 406 | .name = "32 bpp RGB, be", | |||
| 407 | .palette = -1, | |||
| 408 | .fourcc = V4L2_PIX_FMT_RGB32, | |||
| 409 | .btformat = BT848_COLOR_FMT_RGB32, | |||
| 410 | .btswap = 0x0f, /* byte+word swap */ | |||
| 411 | .depth = 32, | |||
| 412 | .flags = FORMAT_FLAGS_PACKED, | |||
| 413 | },{ | |||
| 414 | .name = "4:2:2, packed, YUYV", | |||
| 415 | .palette = VIDEO_PALETTE_YUV422, | |||
| 416 | .fourcc = V4L2_PIX_FMT_YUYV, | |||
| 417 | .btformat = BT848_COLOR_FMT_YUY2, | |||
| 418 | .depth = 16, | |||
| 419 | .flags = FORMAT_FLAGS_PACKED, | |||
| 420 | },{ | |||
| 421 | .name = "4:2:2, packed, YUYV", | |||
| 422 | .palette = VIDEO_PALETTE_YUYV, | |||
| 423 | .fourcc = V4L2_PIX_FMT_YUYV, | |||
| 424 | .btformat = BT848_COLOR_FMT_YUY2, | |||
| 425 | .depth = 16, | |||
| 426 | .flags = FORMAT_FLAGS_PACKED, | |||
| 427 | },{ | |||
| 428 | .name = "4:2:2, packed, UYVY", | |||
| 429 | .palette = VIDEO_PALETTE_UYVY, | |||
| 430 | .fourcc = V4L2_PIX_FMT_UYVY, | |||
| 431 | .btformat = BT848_COLOR_FMT_YUY2, | |||
| 432 | .btswap = 0x03, /* byteswap */ | |||
| 433 | .depth = 16, | |||
| 434 | .flags = FORMAT_FLAGS_PACKED, | |||
| 435 | },{ | |||
| 436 | .name = "4:2:2, planar, Y-Cb-Cr", | |||
| 437 | .palette = VIDEO_PALETTE_YUV422P, | |||
| 438 | .fourcc = V4L2_PIX_FMT_YUV422P, | |||
| 439 | .btformat = BT848_COLOR_FMT_YCrCb422, | |||
| 440 | .depth = 16, | |||
| 441 | .flags = FORMAT_FLAGS_PLANAR, | |||
| 442 | .hshift = 1, | |||
| 443 | .vshift = 0, | |||
| 444 | },{ | |||
| 445 | .name = "4:2:0, planar, Y-Cb-Cr", | |||
| 446 | .palette = VIDEO_PALETTE_YUV420P, | |||
| 447 | .fourcc = V4L2_PIX_FMT_YUV420, | |||
| 448 | .btformat = BT848_COLOR_FMT_YCrCb422, | |||
| 449 | .depth = 12, | |||
| 450 | .flags = FORMAT_FLAGS_PLANAR, | |||
| 451 | .hshift = 1, | |||
| 452 | .vshift = 1, | |||
| 453 | },{ | |||
| 454 | .name = "4:2:0, planar, Y-Cr-Cb", | |||
| 455 | .palette = -1, | |||
| 456 | .fourcc = V4L2_PIX_FMT_YVU420, | |||
| 457 | .btformat = BT848_COLOR_FMT_YCrCb422, | |||
| 458 | .depth = 12, | |||
| 459 | .flags = FORMAT_FLAGS_PLANAR | FORMAT_FLAGS_CrCb, | |||
| 460 | .hshift = 1, | |||
| 461 | .vshift = 1, | |||
| 462 | },{ | |||
| 463 | .name = "4:1:1, planar, Y-Cb-Cr", | |||
| 464 | .palette = VIDEO_PALETTE_YUV411P, | |||
| 465 | .fourcc = V4L2_PIX_FMT_YUV411P, | |||
| 466 | .btformat = BT848_COLOR_FMT_YCrCb411, | |||
| 467 | .depth = 12, | |||
| 468 | .flags = FORMAT_FLAGS_PLANAR, | |||
| 469 | .hshift = 2, | |||
| 470 | .vshift = 0, | |||
| 471 | },{ | |||
| 472 | .name = "4:1:0, planar, Y-Cb-Cr", | |||
| 473 | .palette = VIDEO_PALETTE_YUV410P, | |||
| 474 | .fourcc = V4L2_PIX_FMT_YUV410, | |||
| 475 | .btformat = BT848_COLOR_FMT_YCrCb411, | |||
| 476 | .depth = 9, | |||
| 477 | .flags = FORMAT_FLAGS_PLANAR, | |||
| 478 | .hshift = 2, | |||
| 479 | .vshift = 2, | |||
| 480 | },{ | |||
| 481 | .name = "4:1:0, planar, Y-Cr-Cb", | |||
| 482 | .palette = -1, | |||
| 483 | .fourcc = V4L2_PIX_FMT_YVU410, | |||
| 484 | .btformat = BT848_COLOR_FMT_YCrCb411, | |||
| 485 | .depth = 9, | |||
| 486 | .flags = FORMAT_FLAGS_PLANAR | FORMAT_FLAGS_CrCb, | |||
| 487 | .hshift = 2, | |||
| 488 | .vshift = 2, | |||
| 489 | },{ | |||
| 490 | .name = "raw scanlines", | |||
| 491 | .palette = VIDEO_PALETTE_RAW, | |||
| 492 | .fourcc = -1, | |||
| 493 | .btformat = BT848_COLOR_FMT_RAW, | |||
| 494 | .depth = 8, | |||
| 495 | .flags = FORMAT_FLAGS_RAW, | |||
| 496 | } | |||