Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] soc_camera: Add RGB666 & RGB888 formats

Based on work done by Katsuya Matsubara.

Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Phil Edworthy and committed by
Mauro Carvalho Chehab
7b88fc08 64e171e3

+253 -12
+196 -10
Documentation/DocBook/media/v4l/subdev-formats.xml
··· 93 93 94 94 <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-rgb"> 95 95 <title>RGB formats</title> 96 - <tgroup cols="11"> 96 + <tgroup cols="27"> 97 97 <colspec colname="id" align="left" /> 98 98 <colspec colname="code" align="center"/> 99 99 <colspec colname="bit" /> 100 - <colspec colnum="4" colname="b07" align="center" /> 101 - <colspec colnum="5" colname="b06" align="center" /> 102 - <colspec colnum="6" colname="b05" align="center" /> 103 - <colspec colnum="7" colname="b04" align="center" /> 104 - <colspec colnum="8" colname="b03" align="center" /> 105 - <colspec colnum="9" colname="b02" align="center" /> 106 - <colspec colnum="10" colname="b01" align="center" /> 107 - <colspec colnum="11" colname="b00" align="center" /> 108 - <spanspec namest="b07" nameend="b00" spanname="b0" /> 100 + <colspec colnum="4" colname="b23" align="center" /> 101 + <colspec colnum="5" colname="b22" align="center" /> 102 + <colspec colnum="6" colname="b21" align="center" /> 103 + <colspec colnum="7" colname="b20" align="center" /> 104 + <colspec colnum="8" colname="b19" align="center" /> 105 + <colspec colnum="9" colname="b18" align="center" /> 106 + <colspec colnum="10" colname="b17" align="center" /> 107 + <colspec colnum="11" colname="b16" align="center" /> 108 + <colspec colnum="12" colname="b15" align="center" /> 109 + <colspec colnum="13" colname="b14" align="center" /> 110 + <colspec colnum="14" colname="b13" align="center" /> 111 + <colspec colnum="15" colname="b12" align="center" /> 112 + <colspec colnum="16" colname="b11" align="center" /> 113 + <colspec colnum="17" colname="b10" align="center" /> 114 + <colspec colnum="18" colname="b09" align="center" /> 115 + <colspec colnum="19" colname="b08" align="center" /> 116 + <colspec colnum="20" colname="b07" align="center" /> 117 + <colspec colnum="21" colname="b06" align="center" /> 118 + <colspec colnum="22" colname="b05" align="center" /> 119 + <colspec colnum="23" colname="b04" align="center" /> 120 + <colspec colnum="24" colname="b03" align="center" /> 121 + <colspec colnum="25" colname="b02" align="center" /> 122 + <colspec colnum="26" colname="b01" align="center" /> 123 + <colspec colnum="27" colname="b00" align="center" /> 124 + <spanspec namest="b23" nameend="b00" spanname="b0" /> 109 125 <thead> 110 126 <row> 111 127 <entry>Identifier</entry> ··· 133 117 <entry></entry> 134 118 <entry></entry> 135 119 <entry>Bit</entry> 120 + <entry>23</entry> 121 + <entry>22</entry> 122 + <entry>21</entry> 123 + <entry>20</entry> 124 + <entry>19</entry> 125 + <entry>18</entry> 126 + <entry>17</entry> 127 + <entry>16</entry> 128 + <entry>15</entry> 129 + <entry>14</entry> 130 + <entry>13</entry> 131 + <entry>12</entry> 132 + <entry>11</entry> 133 + <entry>10</entry> 134 + <entry>9</entry> 135 + <entry>8</entry> 136 136 <entry>7</entry> 137 137 <entry>6</entry> 138 138 <entry>5</entry> ··· 164 132 <entry>V4L2_MBUS_FMT_RGB444_2X8_PADHI_BE</entry> 165 133 <entry>0x1001</entry> 166 134 <entry></entry> 135 + &dash-ent-16; 167 136 <entry>0</entry> 168 137 <entry>0</entry> 169 138 <entry>0</entry> ··· 178 145 <entry></entry> 179 146 <entry></entry> 180 147 <entry></entry> 148 + &dash-ent-16; 181 149 <entry>g<subscript>3</subscript></entry> 182 150 <entry>g<subscript>2</subscript></entry> 183 151 <entry>g<subscript>1</subscript></entry> ··· 192 158 <entry>V4L2_MBUS_FMT_RGB444_2X8_PADHI_LE</entry> 193 159 <entry>0x1002</entry> 194 160 <entry></entry> 161 + &dash-ent-16; 195 162 <entry>g<subscript>3</subscript></entry> 196 163 <entry>g<subscript>2</subscript></entry> 197 164 <entry>g<subscript>1</subscript></entry> ··· 206 171 <entry></entry> 207 172 <entry></entry> 208 173 <entry></entry> 174 + &dash-ent-16; 209 175 <entry>0</entry> 210 176 <entry>0</entry> 211 177 <entry>0</entry> ··· 220 184 <entry>V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE</entry> 221 185 <entry>0x1003</entry> 222 186 <entry></entry> 187 + &dash-ent-16; 223 188 <entry>0</entry> 224 189 <entry>r<subscript>4</subscript></entry> 225 190 <entry>r<subscript>3</subscript></entry> ··· 234 197 <entry></entry> 235 198 <entry></entry> 236 199 <entry></entry> 200 + &dash-ent-16; 237 201 <entry>g<subscript>2</subscript></entry> 238 202 <entry>g<subscript>1</subscript></entry> 239 203 <entry>g<subscript>0</subscript></entry> ··· 248 210 <entry>V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE</entry> 249 211 <entry>0x1004</entry> 250 212 <entry></entry> 213 + &dash-ent-16; 251 214 <entry>g<subscript>2</subscript></entry> 252 215 <entry>g<subscript>1</subscript></entry> 253 216 <entry>g<subscript>0</subscript></entry> ··· 262 223 <entry></entry> 263 224 <entry></entry> 264 225 <entry></entry> 226 + &dash-ent-16; 265 227 <entry>0</entry> 266 228 <entry>r<subscript>4</subscript></entry> 267 229 <entry>r<subscript>3</subscript></entry> ··· 276 236 <entry>V4L2_MBUS_FMT_BGR565_2X8_BE</entry> 277 237 <entry>0x1005</entry> 278 238 <entry></entry> 239 + &dash-ent-16; 279 240 <entry>b<subscript>4</subscript></entry> 280 241 <entry>b<subscript>3</subscript></entry> 281 242 <entry>b<subscript>2</subscript></entry> ··· 290 249 <entry></entry> 291 250 <entry></entry> 292 251 <entry></entry> 252 + &dash-ent-16; 293 253 <entry>g<subscript>2</subscript></entry> 294 254 <entry>g<subscript>1</subscript></entry> 295 255 <entry>g<subscript>0</subscript></entry> ··· 304 262 <entry>V4L2_MBUS_FMT_BGR565_2X8_LE</entry> 305 263 <entry>0x1006</entry> 306 264 <entry></entry> 265 + &dash-ent-16; 307 266 <entry>g<subscript>2</subscript></entry> 308 267 <entry>g<subscript>1</subscript></entry> 309 268 <entry>g<subscript>0</subscript></entry> ··· 318 275 <entry></entry> 319 276 <entry></entry> 320 277 <entry></entry> 278 + &dash-ent-16; 321 279 <entry>b<subscript>4</subscript></entry> 322 280 <entry>b<subscript>3</subscript></entry> 323 281 <entry>b<subscript>2</subscript></entry> ··· 332 288 <entry>V4L2_MBUS_FMT_RGB565_2X8_BE</entry> 333 289 <entry>0x1007</entry> 334 290 <entry></entry> 291 + &dash-ent-16; 335 292 <entry>r<subscript>4</subscript></entry> 336 293 <entry>r<subscript>3</subscript></entry> 337 294 <entry>r<subscript>2</subscript></entry> ··· 346 301 <entry></entry> 347 302 <entry></entry> 348 303 <entry></entry> 304 + &dash-ent-16; 349 305 <entry>g<subscript>2</subscript></entry> 350 306 <entry>g<subscript>1</subscript></entry> 351 307 <entry>g<subscript>0</subscript></entry> ··· 360 314 <entry>V4L2_MBUS_FMT_RGB565_2X8_LE</entry> 361 315 <entry>0x1008</entry> 362 316 <entry></entry> 317 + &dash-ent-16; 363 318 <entry>g<subscript>2</subscript></entry> 364 319 <entry>g<subscript>1</subscript></entry> 365 320 <entry>g<subscript>0</subscript></entry> ··· 374 327 <entry></entry> 375 328 <entry></entry> 376 329 <entry></entry> 330 + &dash-ent-16; 377 331 <entry>r<subscript>4</subscript></entry> 378 332 <entry>r<subscript>3</subscript></entry> 379 333 <entry>r<subscript>2</subscript></entry> ··· 383 335 <entry>g<subscript>5</subscript></entry> 384 336 <entry>g<subscript>4</subscript></entry> 385 337 <entry>g<subscript>3</subscript></entry> 338 + </row> 339 + <row id="V4L2-MBUS-FMT-RGB666-1X18"> 340 + <entry>V4L2_MBUS_FMT_RGB666_1X18</entry> 341 + <entry>0x1009</entry> 342 + <entry></entry> 343 + <entry>-</entry> 344 + <entry>-</entry> 345 + <entry>-</entry> 346 + <entry>-</entry> 347 + <entry>-</entry> 348 + <entry>-</entry> 349 + <entry>r<subscript>5</subscript></entry> 350 + <entry>r<subscript>4</subscript></entry> 351 + <entry>r<subscript>3</subscript></entry> 352 + <entry>r<subscript>2</subscript></entry> 353 + <entry>r<subscript>1</subscript></entry> 354 + <entry>r<subscript>0</subscript></entry> 355 + <entry>g<subscript>5</subscript></entry> 356 + <entry>g<subscript>4</subscript></entry> 357 + <entry>g<subscript>3</subscript></entry> 358 + <entry>g<subscript>2</subscript></entry> 359 + <entry>g<subscript>1</subscript></entry> 360 + <entry>g<subscript>0</subscript></entry> 361 + <entry>b<subscript>5</subscript></entry> 362 + <entry>b<subscript>4</subscript></entry> 363 + <entry>b<subscript>3</subscript></entry> 364 + <entry>b<subscript>2</subscript></entry> 365 + <entry>b<subscript>1</subscript></entry> 366 + <entry>b<subscript>0</subscript></entry> 367 + </row> 368 + <row id="V4L2-MBUS-FMT-RGB888-1X24"> 369 + <entry>V4L2_MBUS_FMT_RGB888_1X24</entry> 370 + <entry>0x100a</entry> 371 + <entry></entry> 372 + <entry>r<subscript>7</subscript></entry> 373 + <entry>r<subscript>6</subscript></entry> 374 + <entry>r<subscript>5</subscript></entry> 375 + <entry>r<subscript>4</subscript></entry> 376 + <entry>r<subscript>3</subscript></entry> 377 + <entry>r<subscript>2</subscript></entry> 378 + <entry>r<subscript>1</subscript></entry> 379 + <entry>r<subscript>0</subscript></entry> 380 + <entry>g<subscript>7</subscript></entry> 381 + <entry>g<subscript>6</subscript></entry> 382 + <entry>g<subscript>5</subscript></entry> 383 + <entry>g<subscript>4</subscript></entry> 384 + <entry>g<subscript>3</subscript></entry> 385 + <entry>g<subscript>2</subscript></entry> 386 + <entry>g<subscript>1</subscript></entry> 387 + <entry>g<subscript>0</subscript></entry> 388 + <entry>b<subscript>7</subscript></entry> 389 + <entry>b<subscript>6</subscript></entry> 390 + <entry>b<subscript>5</subscript></entry> 391 + <entry>b<subscript>4</subscript></entry> 392 + <entry>b<subscript>3</subscript></entry> 393 + <entry>b<subscript>2</subscript></entry> 394 + <entry>b<subscript>1</subscript></entry> 395 + <entry>b<subscript>0</subscript></entry> 396 + </row> 397 + <row id="V4L2-MBUS-FMT-RGB888-2X12-BE"> 398 + <entry>V4L2_MBUS_FMT_RGB888_2X12_BE</entry> 399 + <entry>0x100b</entry> 400 + <entry></entry> 401 + &dash-ent-10; 402 + <entry>-</entry> 403 + <entry>-</entry> 404 + <entry>r<subscript>7</subscript></entry> 405 + <entry>r<subscript>6</subscript></entry> 406 + <entry>r<subscript>5</subscript></entry> 407 + <entry>r<subscript>4</subscript></entry> 408 + <entry>r<subscript>3</subscript></entry> 409 + <entry>r<subscript>2</subscript></entry> 410 + <entry>r<subscript>1</subscript></entry> 411 + <entry>r<subscript>0</subscript></entry> 412 + <entry>g<subscript>7</subscript></entry> 413 + <entry>g<subscript>6</subscript></entry> 414 + <entry>g<subscript>5</subscript></entry> 415 + <entry>g<subscript>4</subscript></entry> 416 + </row> 417 + <row> 418 + <entry></entry> 419 + <entry></entry> 420 + <entry></entry> 421 + &dash-ent-10; 422 + <entry>-</entry> 423 + <entry>-</entry> 424 + <entry>g<subscript>3</subscript></entry> 425 + <entry>g<subscript>2</subscript></entry> 426 + <entry>g<subscript>1</subscript></entry> 427 + <entry>g<subscript>0</subscript></entry> 428 + <entry>b<subscript>7</subscript></entry> 429 + <entry>b<subscript>6</subscript></entry> 430 + <entry>b<subscript>5</subscript></entry> 431 + <entry>b<subscript>4</subscript></entry> 432 + <entry>b<subscript>3</subscript></entry> 433 + <entry>b<subscript>2</subscript></entry> 434 + <entry>b<subscript>1</subscript></entry> 435 + <entry>b<subscript>0</subscript></entry> 436 + </row> 437 + <row id="V4L2-MBUS-FMT-RGB888-2X12-LE"> 438 + <entry>V4L2_MBUS_FMT_RGB888_2X12_LE</entry> 439 + <entry>0x100c</entry> 440 + <entry></entry> 441 + &dash-ent-10; 442 + <entry>-</entry> 443 + <entry>-</entry> 444 + <entry>g<subscript>3</subscript></entry> 445 + <entry>g<subscript>2</subscript></entry> 446 + <entry>g<subscript>1</subscript></entry> 447 + <entry>g<subscript>0</subscript></entry> 448 + <entry>b<subscript>7</subscript></entry> 449 + <entry>b<subscript>6</subscript></entry> 450 + <entry>b<subscript>5</subscript></entry> 451 + <entry>b<subscript>4</subscript></entry> 452 + <entry>b<subscript>3</subscript></entry> 453 + <entry>b<subscript>2</subscript></entry> 454 + <entry>b<subscript>1</subscript></entry> 455 + <entry>b<subscript>0</subscript></entry> 456 + </row> 457 + <row> 458 + <entry></entry> 459 + <entry></entry> 460 + <entry></entry> 461 + &dash-ent-10; 462 + <entry>-</entry> 463 + <entry>-</entry> 464 + <entry>r<subscript>7</subscript></entry> 465 + <entry>r<subscript>6</subscript></entry> 466 + <entry>r<subscript>5</subscript></entry> 467 + <entry>r<subscript>4</subscript></entry> 468 + <entry>r<subscript>3</subscript></entry> 469 + <entry>r<subscript>2</subscript></entry> 470 + <entry>r<subscript>1</subscript></entry> 471 + <entry>r<subscript>0</subscript></entry> 472 + <entry>g<subscript>7</subscript></entry> 473 + <entry>g<subscript>6</subscript></entry> 474 + <entry>g<subscript>5</subscript></entry> 475 + <entry>g<subscript>4</subscript></entry> 386 476 </row> 387 477 </tbody> 388 478 </tgroup>
+1
Documentation/DocBook/media_api.tmpl
··· 23 23 <!-- LinuxTV v4l-dvb repository. --> 24 24 <!ENTITY v4l-dvb "<ulink url='http://linuxtv.org/repo/'>http://linuxtv.org/repo/</ulink>"> 25 25 <!ENTITY dash-ent-10 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>"> 26 + <!ENTITY dash-ent-16 "<entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry><entry>-</entry>"> 26 27 ]> 27 28 28 29 <book id="media_api">
+42
drivers/media/platform/soc_camera/soc_mediabus.c
··· 97 97 .layout = SOC_MBUS_LAYOUT_PACKED, 98 98 }, 99 99 }, { 100 + .code = V4L2_MBUS_FMT_RGB666_1X18, 101 + .fmt = { 102 + .fourcc = V4L2_PIX_FMT_RGB32, 103 + .name = "RGB666/32bpp", 104 + .bits_per_sample = 18, 105 + .packing = SOC_MBUS_PACKING_EXTEND32, 106 + .order = SOC_MBUS_ORDER_LE, 107 + }, 108 + }, { 109 + .code = V4L2_MBUS_FMT_RGB888_1X24, 110 + .fmt = { 111 + .fourcc = V4L2_PIX_FMT_RGB32, 112 + .name = "RGB888/32bpp", 113 + .bits_per_sample = 24, 114 + .packing = SOC_MBUS_PACKING_EXTEND32, 115 + .order = SOC_MBUS_ORDER_LE, 116 + }, 117 + }, { 118 + .code = V4L2_MBUS_FMT_RGB888_2X12_BE, 119 + .fmt = { 120 + .fourcc = V4L2_PIX_FMT_RGB32, 121 + .name = "RGB888/32bpp", 122 + .bits_per_sample = 12, 123 + .packing = SOC_MBUS_PACKING_EXTEND32, 124 + .order = SOC_MBUS_ORDER_BE, 125 + }, 126 + }, { 127 + .code = V4L2_MBUS_FMT_RGB888_2X12_LE, 128 + .fmt = { 129 + .fourcc = V4L2_PIX_FMT_RGB32, 130 + .name = "RGB888/32bpp", 131 + .bits_per_sample = 12, 132 + .packing = SOC_MBUS_PACKING_EXTEND32, 133 + .order = SOC_MBUS_ORDER_LE, 134 + }, 135 + }, { 100 136 .code = V4L2_MBUS_FMT_SBGGR8_1X8, 101 137 .fmt = { 102 138 .fourcc = V4L2_PIX_FMT_SBGGR8, ··· 394 358 *numerator = 1; 395 359 *denominator = 1; 396 360 return 0; 361 + case SOC_MBUS_PACKING_EXTEND32: 362 + *numerator = 1; 363 + *denominator = 1; 364 + return 0; 397 365 case SOC_MBUS_PACKING_2X8_PADHI: 398 366 case SOC_MBUS_PACKING_2X8_PADLO: 399 367 *numerator = 2; ··· 432 392 return width * 3 / 2; 433 393 case SOC_MBUS_PACKING_VARIABLE: 434 394 return 0; 395 + case SOC_MBUS_PACKING_EXTEND32: 396 + return width * 4; 435 397 } 436 398 return -EINVAL; 437 399 }
+6 -1
include/media/soc_camera.h
··· 292 292 #define SOCAM_DATAWIDTH_8 SOCAM_DATAWIDTH(8) 293 293 #define SOCAM_DATAWIDTH_9 SOCAM_DATAWIDTH(9) 294 294 #define SOCAM_DATAWIDTH_10 SOCAM_DATAWIDTH(10) 295 + #define SOCAM_DATAWIDTH_12 SOCAM_DATAWIDTH(12) 295 296 #define SOCAM_DATAWIDTH_15 SOCAM_DATAWIDTH(15) 296 297 #define SOCAM_DATAWIDTH_16 SOCAM_DATAWIDTH(16) 298 + #define SOCAM_DATAWIDTH_18 SOCAM_DATAWIDTH(18) 299 + #define SOCAM_DATAWIDTH_24 SOCAM_DATAWIDTH(24) 297 300 298 301 #define SOCAM_DATAWIDTH_MASK (SOCAM_DATAWIDTH_4 | SOCAM_DATAWIDTH_8 | \ 299 302 SOCAM_DATAWIDTH_9 | SOCAM_DATAWIDTH_10 | \ 300 - SOCAM_DATAWIDTH_15 | SOCAM_DATAWIDTH_16) 303 + SOCAM_DATAWIDTH_12 | SOCAM_DATAWIDTH_15 | \ 304 + SOCAM_DATAWIDTH_16 | SOCAM_DATAWIDTH_18 | \ 305 + SOCAM_DATAWIDTH_24) 301 306 302 307 static inline void soc_camera_limit_side(int *start, int *length, 303 308 unsigned int start_min,
+3
include/media/soc_mediabus.h
··· 26 26 * @SOC_MBUS_PACKING_VARIABLE: compressed formats with variable packing 27 27 * @SOC_MBUS_PACKING_1_5X8: used for packed YUV 4:2:0 formats, where 4 28 28 * pixels occupy 6 bytes in RAM 29 + * @SOC_MBUS_PACKING_EXTEND32: sample width (e.g., 24 bits) has to be extended 30 + * to 32 bits 29 31 */ 30 32 enum soc_mbus_packing { 31 33 SOC_MBUS_PACKING_NONE, ··· 36 34 SOC_MBUS_PACKING_EXTEND16, 37 35 SOC_MBUS_PACKING_VARIABLE, 38 36 SOC_MBUS_PACKING_1_5X8, 37 + SOC_MBUS_PACKING_EXTEND32, 39 38 }; 40 39 41 40 /**
+5 -1
include/uapi/linux/v4l2-mediabus.h
··· 37 37 enum v4l2_mbus_pixelcode { 38 38 V4L2_MBUS_FMT_FIXED = 0x0001, 39 39 40 - /* RGB - next is 0x1009 */ 40 + /* RGB - next is 0x100d */ 41 41 V4L2_MBUS_FMT_RGB444_2X8_PADHI_BE = 0x1001, 42 42 V4L2_MBUS_FMT_RGB444_2X8_PADHI_LE = 0x1002, 43 43 V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE = 0x1003, ··· 46 46 V4L2_MBUS_FMT_BGR565_2X8_LE = 0x1006, 47 47 V4L2_MBUS_FMT_RGB565_2X8_BE = 0x1007, 48 48 V4L2_MBUS_FMT_RGB565_2X8_LE = 0x1008, 49 + V4L2_MBUS_FMT_RGB666_1X18 = 0x1009, 50 + V4L2_MBUS_FMT_RGB888_1X24 = 0x100a, 51 + V4L2_MBUS_FMT_RGB888_2X12_BE = 0x100b, 52 + V4L2_MBUS_FMT_RGB888_2X12_LE = 0x100c, 49 53 50 54 /* YUV (including grey) - next is 0x2017 */ 51 55 V4L2_MBUS_FMT_Y8_1X8 = 0x2001,