I try to use a grayscale sensor with l4t 28.2.1, but I came to the conclusion that this is not supported :
In drivers/media/platform/tegra/camera/sensor_common.c, extract_pixel_format seems to support only bayer pixel types.
In drivers/media/platform/tegra/camera/vi/vi4_format.h static const struct tegra_video_format vi4_video_formats seems to support only bayer pixel types.
I’d need 8-bits, 10-bits and 12-bits grayscale support.
Is a patch available ?
I then added the following entry to ‘static const struct tegra_video_format vi4_video_formats’ in drivers/media/platform/tegra/camera/vi/vi4_formats.h
static const struct tegra_video_format vi4_video_formats = {
/* RAW 6: TODO */
/* RAW 7: TODO */
TEGRA_VIDEO_FORMAT(RAW8, 8, Y8_1X8, 1, 1, T_L8,
RAW8, GREY, "GRAY8"),
TEGRA_VIDEO_FORMAT(RAW10, 10, Y10_1X10, 2, 1, T_R16_I,
RAW10, Y10, "GRAY10"),
/* RAW 8 */
TEGRA_VIDEO_FORMAT(RAW8, 8, SRGGB8_1X8, 1, 1, T_L8,
RAW8, SRGGB8, "RGRG.. GBGB.."),
TEGRA_VIDEO_FORMAT(RAW8, 8, SGRBG8_1X8, 1, 1, T_L8,
RAW8, SGRBG8, "GRGR.. BGBG.."),
TEGRA_VIDEO_FORMAT(RAW8, 8, SGBRG8_1X8, 1, 1, T_L8,
RAW8, SGBRG8, "GBGB.. RGRG.."),
TEGRA_VIDEO_FORMAT(RAW8, 8, SBGGR8_1X8, 1, 1, T_L8,
RAW8, SBGGR8, "BGBG.. GRGR.."),
}
and New media bus format(s) in camera_common.c:
static const struct camera_common_colorfmt camera_common_color_fmts = {
{
MEDIA_BUS_FMT_Y8_1X8, // Gray 8-bit
V4L2_COLORSPACE_RAW,
V4L2_PIX_FMT_GREY,
},
{
MEDIA_BUS_FMT_Y10_1X10, // Gray 10-bit
V4L2_COLORSPACE_RAW,
V4L2_PIX_FMT_Y10,
},
/*
* The below two formats are not supported by VI4,
* keep them at the last to ensure they get discarded
*/
{
MEDIA_BUS_FMT_XRGGB10P_3X10,
V4L2_COLORSPACE_SRGB,
V4L2_PIX_FMT_XRGGB10P,
},
};
last New device-tree pixel formats in sensor_common.c:
static int extract_pixel_format(
const char *pixel_t, u32 *format)
{
else if (strncmp(pixel_t, “bayer_xrggb10p”, size) == 0)
*format = V4L2_PIX_FMT_XRGGB10P;
else if (strncmp(pixel_t, “raw_uyvy”, size) == 0)//shchoi add
*format = V4L2_PIX_FMT_UYVY;
else if (strncmp(pixel_t, “gray”, size) == 0)
*format = V4L2_PIX_FMT_GREY;
else if (strncmp(pixel_t, “y10”, size) == 0)
*format = V4L2_PIX_FMT_Y10;
}
and kernel build and flashing after booting
$ $ v4l2-ctl -d /dev/video0 --list-formats
run and ioctl: VIDIOC_ENUM_FMT is not GREY format.
why???