brintos

brintos / linux-shallow public Read only

0
0
Text · 5.3 KiB · 60c97bb Raw
195 lines · c
1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)2/*3 * Rockchip ISP1 Driver - Common definitions4 *5 * Copyright (C) 2019 Collabora, Ltd.6 */7 8#include <media/mipi-csi2.h>9#include <media/v4l2-rect.h>10 11#include "rkisp1-common.h"12 13static const struct rkisp1_mbus_info rkisp1_formats[] = {14	{15		.mbus_code	= MEDIA_BUS_FMT_YUYV8_2X8,16		.pixel_enc	= V4L2_PIXEL_ENC_YUV,17		.direction	= RKISP1_ISP_SD_SRC,18	}, {19		.mbus_code	= MEDIA_BUS_FMT_SRGGB10_1X10,20		.pixel_enc	= V4L2_PIXEL_ENC_BAYER,21		.mipi_dt	= MIPI_CSI2_DT_RAW10,22		.bayer_pat	= RKISP1_RAW_RGGB,23		.bus_width	= 10,24		.direction	= RKISP1_ISP_SD_SINK | RKISP1_ISP_SD_SRC,25	}, {26		.mbus_code	= MEDIA_BUS_FMT_SBGGR10_1X10,27		.pixel_enc	= V4L2_PIXEL_ENC_BAYER,28		.mipi_dt	= MIPI_CSI2_DT_RAW10,29		.bayer_pat	= RKISP1_RAW_BGGR,30		.bus_width	= 10,31		.direction	= RKISP1_ISP_SD_SINK | RKISP1_ISP_SD_SRC,32	}, {33		.mbus_code	= MEDIA_BUS_FMT_SGBRG10_1X10,34		.pixel_enc	= V4L2_PIXEL_ENC_BAYER,35		.mipi_dt	= MIPI_CSI2_DT_RAW10,36		.bayer_pat	= RKISP1_RAW_GBRG,37		.bus_width	= 10,38		.direction	= RKISP1_ISP_SD_SINK | RKISP1_ISP_SD_SRC,39	}, {40		.mbus_code	= MEDIA_BUS_FMT_SGRBG10_1X10,41		.pixel_enc	= V4L2_PIXEL_ENC_BAYER,42		.mipi_dt	= MIPI_CSI2_DT_RAW10,43		.bayer_pat	= RKISP1_RAW_GRBG,44		.bus_width	= 10,45		.direction	= RKISP1_ISP_SD_SINK | RKISP1_ISP_SD_SRC,46	}, {47		.mbus_code	= MEDIA_BUS_FMT_SRGGB12_1X12,48		.pixel_enc	= V4L2_PIXEL_ENC_BAYER,49		.mipi_dt	= MIPI_CSI2_DT_RAW12,50		.bayer_pat	= RKISP1_RAW_RGGB,51		.bus_width	= 12,52		.direction	= RKISP1_ISP_SD_SINK | RKISP1_ISP_SD_SRC,53	}, {54		.mbus_code	= MEDIA_BUS_FMT_SBGGR12_1X12,55		.pixel_enc	= V4L2_PIXEL_ENC_BAYER,56		.mipi_dt	= MIPI_CSI2_DT_RAW12,57		.bayer_pat	= RKISP1_RAW_BGGR,58		.bus_width	= 12,59		.direction	= RKISP1_ISP_SD_SINK | RKISP1_ISP_SD_SRC,60	}, {61		.mbus_code	= MEDIA_BUS_FMT_SGBRG12_1X12,62		.pixel_enc	= V4L2_PIXEL_ENC_BAYER,63		.mipi_dt	= MIPI_CSI2_DT_RAW12,64		.bayer_pat	= RKISP1_RAW_GBRG,65		.bus_width	= 12,66		.direction	= RKISP1_ISP_SD_SINK | RKISP1_ISP_SD_SRC,67	}, {68		.mbus_code	= MEDIA_BUS_FMT_SGRBG12_1X12,69		.pixel_enc	= V4L2_PIXEL_ENC_BAYER,70		.mipi_dt	= MIPI_CSI2_DT_RAW12,71		.bayer_pat	= RKISP1_RAW_GRBG,72		.bus_width	= 12,73		.direction	= RKISP1_ISP_SD_SINK | RKISP1_ISP_SD_SRC,74	}, {75		.mbus_code	= MEDIA_BUS_FMT_SRGGB8_1X8,76		.pixel_enc	= V4L2_PIXEL_ENC_BAYER,77		.mipi_dt	= MIPI_CSI2_DT_RAW8,78		.bayer_pat	= RKISP1_RAW_RGGB,79		.bus_width	= 8,80		.direction	= RKISP1_ISP_SD_SINK | RKISP1_ISP_SD_SRC,81	}, {82		.mbus_code	= MEDIA_BUS_FMT_SBGGR8_1X8,83		.pixel_enc	= V4L2_PIXEL_ENC_BAYER,84		.mipi_dt	= MIPI_CSI2_DT_RAW8,85		.bayer_pat	= RKISP1_RAW_BGGR,86		.bus_width	= 8,87		.direction	= RKISP1_ISP_SD_SINK | RKISP1_ISP_SD_SRC,88	}, {89		.mbus_code	= MEDIA_BUS_FMT_SGBRG8_1X8,90		.pixel_enc	= V4L2_PIXEL_ENC_BAYER,91		.mipi_dt	= MIPI_CSI2_DT_RAW8,92		.bayer_pat	= RKISP1_RAW_GBRG,93		.bus_width	= 8,94		.direction	= RKISP1_ISP_SD_SINK | RKISP1_ISP_SD_SRC,95	}, {96		.mbus_code	= MEDIA_BUS_FMT_SGRBG8_1X8,97		.pixel_enc	= V4L2_PIXEL_ENC_BAYER,98		.mipi_dt	= MIPI_CSI2_DT_RAW8,99		.bayer_pat	= RKISP1_RAW_GRBG,100		.bus_width	= 8,101		.direction	= RKISP1_ISP_SD_SINK | RKISP1_ISP_SD_SRC,102	}, {103		.mbus_code	= MEDIA_BUS_FMT_YUYV8_1X16,104		.pixel_enc	= V4L2_PIXEL_ENC_YUV,105		.mipi_dt	= MIPI_CSI2_DT_YUV422_8B,106		.yuv_seq	= RKISP1_CIF_ISP_ACQ_PROP_YCBYCR,107		.bus_width	= 16,108		.direction	= RKISP1_ISP_SD_SINK,109	}, {110		.mbus_code	= MEDIA_BUS_FMT_YVYU8_1X16,111		.pixel_enc	= V4L2_PIXEL_ENC_YUV,112		.mipi_dt	= MIPI_CSI2_DT_YUV422_8B,113		.yuv_seq	= RKISP1_CIF_ISP_ACQ_PROP_YCRYCB,114		.bus_width	= 16,115		.direction	= RKISP1_ISP_SD_SINK,116	}, {117		.mbus_code	= MEDIA_BUS_FMT_UYVY8_1X16,118		.pixel_enc	= V4L2_PIXEL_ENC_YUV,119		.mipi_dt	= MIPI_CSI2_DT_YUV422_8B,120		.yuv_seq	= RKISP1_CIF_ISP_ACQ_PROP_CBYCRY,121		.bus_width	= 16,122		.direction	= RKISP1_ISP_SD_SINK,123	}, {124		.mbus_code	= MEDIA_BUS_FMT_VYUY8_1X16,125		.pixel_enc	= V4L2_PIXEL_ENC_YUV,126		.mipi_dt	= MIPI_CSI2_DT_YUV422_8B,127		.yuv_seq	= RKISP1_CIF_ISP_ACQ_PROP_CRYCBY,128		.bus_width	= 16,129		.direction	= RKISP1_ISP_SD_SINK,130	},131};132 133const struct rkisp1_mbus_info *rkisp1_mbus_info_get_by_index(unsigned int index)134{135	if (index >= ARRAY_SIZE(rkisp1_formats))136		return NULL;137 138	return &rkisp1_formats[index];139}140 141const struct rkisp1_mbus_info *rkisp1_mbus_info_get_by_code(u32 mbus_code)142{143	unsigned int i;144 145	for (i = 0; i < ARRAY_SIZE(rkisp1_formats); i++) {146		const struct rkisp1_mbus_info *fmt = &rkisp1_formats[i];147 148		if (fmt->mbus_code == mbus_code)149			return fmt;150	}151 152	return NULL;153}154 155static const struct v4l2_rect rkisp1_sd_min_crop = {156	.width = RKISP1_ISP_MIN_WIDTH,157	.height = RKISP1_ISP_MIN_HEIGHT,158	.top = 0,159	.left = 0,160};161 162void rkisp1_sd_adjust_crop_rect(struct v4l2_rect *crop,163				const struct v4l2_rect *bounds)164{165	v4l2_rect_set_min_size(crop, &rkisp1_sd_min_crop);166	v4l2_rect_map_inside(crop, bounds);167}168 169void rkisp1_sd_adjust_crop(struct v4l2_rect *crop,170			   const struct v4l2_mbus_framefmt *bounds)171{172	struct v4l2_rect crop_bounds = {173		.left = 0,174		.top = 0,175		.width = bounds->width,176		.height = bounds->height,177	};178 179	rkisp1_sd_adjust_crop_rect(crop, &crop_bounds);180}181 182void rkisp1_bls_swap_regs(enum rkisp1_fmt_raw_pat_type pattern,183			  const u32 input[4], u32 output[4])184{185	static const unsigned int swap[4][4] = {186		[RKISP1_RAW_RGGB] = { 0, 1, 2, 3 },187		[RKISP1_RAW_GRBG] = { 1, 0, 3, 2 },188		[RKISP1_RAW_GBRG] = { 2, 3, 0, 1 },189		[RKISP1_RAW_BGGR] = { 3, 2, 1, 0 },190	};191 192	for (unsigned int i = 0; i < 4; ++i)193		output[i] = input[swap[pattern][i]];194}195