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

Configure Feed

Select the types of activity you want to include in your feed.

media: rcar-vin: Add support for RAW10

Some R-Car SoCs are capable of capturing RAW10. Extend the format
enumeration, validation and setup to expose and configure for this
format if the particular device supports it.

The VIN is usually capable of converting from most media bus formats to
a range of different pixel formats. However if the input media bus
format is a RAW10 format this is not possible so the corresponding pixel
output format is forced.

Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>

authored by

Niklas Söderlund and committed by
Mauro Carvalho Chehab
1b7e7240 27d23cec

+77 -1
+1
drivers/media/platform/renesas/rcar-vin/rcar-core.c
··· 1279 1279 .use_mc = true, 1280 1280 .use_isp = true, 1281 1281 .nv12 = true, 1282 + .raw10 = true, 1282 1283 .max_width = 4096, 1283 1284 .max_height = 4096, 1284 1285 };
+30
drivers/media/platform/renesas/rcar-vin/rcar-dma.c
··· 123 123 /* Video n Data Mode Register bits */ 124 124 #define VNDMR_A8BIT(n) (((n) & 0xff) << 24) 125 125 #define VNDMR_A8BIT_MASK (0xff << 24) 126 + #define VNDMR_RMODE_RAW10 (2 << 19) 126 127 #define VNDMR_YMODE_Y8 (1 << 12) 128 + #define VNDMR_YC_THR (1 << 11) 127 129 #define VNDMR_EXRGB (1 << 8) 128 130 #define VNDMR_BPSM (1 << 4) 129 131 #define VNDMR_ABIT (1 << 2) ··· 792 790 case MEDIA_BUS_FMT_Y8_1X8: 793 791 vnmc |= VNMC_INF_RAW8; 794 792 break; 793 + case MEDIA_BUS_FMT_SBGGR10_1X10: 794 + case MEDIA_BUS_FMT_SGBRG10_1X10: 795 + case MEDIA_BUS_FMT_SGRBG10_1X10: 796 + case MEDIA_BUS_FMT_SRGGB10_1X10: 797 + vnmc |= VNMC_INF_RGB666; 798 + break; 795 799 default: 796 800 break; 797 801 } ··· 905 897 } else { 906 898 dmr = 0; 907 899 } 900 + break; 901 + case V4L2_PIX_FMT_SBGGR10: 902 + case V4L2_PIX_FMT_SGBRG10: 903 + case V4L2_PIX_FMT_SGRBG10: 904 + case V4L2_PIX_FMT_SRGGB10: 905 + dmr = VNDMR_RMODE_RAW10 | VNDMR_YC_THR; 908 906 break; 909 907 default: 910 908 vin_err(vin, "Invalid pixelformat (0x%x)\n", ··· 1292 1278 break; 1293 1279 case MEDIA_BUS_FMT_Y8_1X8: 1294 1280 if (vin->format.pixelformat != V4L2_PIX_FMT_GREY) 1281 + return -EPIPE; 1282 + break; 1283 + case MEDIA_BUS_FMT_SBGGR10_1X10: 1284 + if (vin->format.pixelformat != V4L2_PIX_FMT_SBGGR10) 1285 + return -EPIPE; 1286 + break; 1287 + case MEDIA_BUS_FMT_SGBRG10_1X10: 1288 + if (vin->format.pixelformat != V4L2_PIX_FMT_SGBRG10) 1289 + return -EPIPE; 1290 + break; 1291 + case MEDIA_BUS_FMT_SGRBG10_1X10: 1292 + if (vin->format.pixelformat != V4L2_PIX_FMT_SGRBG10) 1293 + return -EPIPE; 1294 + break; 1295 + case MEDIA_BUS_FMT_SRGGB10_1X10: 1296 + if (vin->format.pixelformat != V4L2_PIX_FMT_SRGGB10) 1295 1297 return -EPIPE; 1296 1298 break; 1297 1299 default:
+43
drivers/media/platform/renesas/rcar-vin/rcar-v4l2.c
··· 86 86 .fourcc = V4L2_PIX_FMT_GREY, 87 87 .bpp = 1, 88 88 }, 89 + { 90 + .fourcc = V4L2_PIX_FMT_SBGGR10, 91 + .bpp = 4, 92 + }, 93 + { 94 + .fourcc = V4L2_PIX_FMT_SGBRG10, 95 + .bpp = 4, 96 + }, 97 + { 98 + .fourcc = V4L2_PIX_FMT_SGRBG10, 99 + .bpp = 4, 100 + }, 101 + { 102 + .fourcc = V4L2_PIX_FMT_SRGGB10, 103 + .bpp = 4, 104 + }, 89 105 }; 90 106 91 107 const struct rvin_video_format *rvin_format_from_pixel(struct rvin_dev *vin, ··· 120 104 * 5, 8, 9, 12 and 13. 121 105 */ 122 106 if (!vin->info->nv12 || !(BIT(vin->id) & 0x3333)) 107 + return NULL; 108 + break; 109 + case V4L2_PIX_FMT_SBGGR10: 110 + case V4L2_PIX_FMT_SGBRG10: 111 + case V4L2_PIX_FMT_SGRBG10: 112 + case V4L2_PIX_FMT_SRGGB10: 113 + if (!vin->info->raw10) 123 114 return NULL; 124 115 break; 125 116 default: ··· 429 406 if (f->index) 430 407 return -EINVAL; 431 408 f->pixelformat = V4L2_PIX_FMT_SRGGB8; 409 + return 0; 410 + case MEDIA_BUS_FMT_SBGGR10_1X10: 411 + if (f->index) 412 + return -EINVAL; 413 + f->pixelformat = V4L2_PIX_FMT_SBGGR10; 414 + return 0; 415 + case MEDIA_BUS_FMT_SGBRG10_1X10: 416 + if (f->index) 417 + return -EINVAL; 418 + f->pixelformat = V4L2_PIX_FMT_SGBRG10; 419 + return 0; 420 + case MEDIA_BUS_FMT_SGRBG10_1X10: 421 + if (f->index) 422 + return -EINVAL; 423 + f->pixelformat = V4L2_PIX_FMT_SGRBG10; 424 + return 0; 425 + case MEDIA_BUS_FMT_SRGGB10_1X10: 426 + if (f->index) 427 + return -EINVAL; 428 + f->pixelformat = V4L2_PIX_FMT_SRGGB10; 432 429 return 0; 433 430 default: 434 431 return -EINVAL;
+3 -1
drivers/media/platform/renesas/rcar-vin/rcar-vin.h
··· 151 151 * @model: VIN model 152 152 * @use_mc: use media controller instead of controlling subdevice 153 153 * @use_isp: the VIN is connected to the ISP and not to the CSI-2 154 - * @nv12: support outputing NV12 pixel format 154 + * @nv12: support outputting NV12 pixel format 155 + * @raw10: support outputting RAW10 pixel format 155 156 * @max_width: max input width the VIN supports 156 157 * @max_height: max input height the VIN supports 157 158 * @routes: list of possible routes from the CSI-2 recivers to ··· 164 163 bool use_mc; 165 164 bool use_isp; 166 165 bool nv12; 166 + bool raw10; 167 167 168 168 unsigned int max_width; 169 169 unsigned int max_height;