File Index
Files and directories
Sign in
FILE

rkisp1-common.c

File preview with syntax highlighting.

linux-6.19.14/drivers/media/platform/rockchip/rkisp1/rkisp1-common.c C
  1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
  2/*
  3 * Rockchip ISP1 Driver - Common definitions
  4 *
  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}
~/ Read-only file preview.