Commit f1b8f171 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab
Browse files

media: rkisp1: Add infrastructure to support ISP features



Different ISP versions implement different sets of features. The driver
already takes the version into account in several places, but this
approach won't scale well for features that are found in different
versions. Introduce a new mechanism using a features bitmask in the
rkisp1_info structure to indicate which features the ISP support.

The first feature bit tells if the ISP has an internal CSI-2 receiver,
which is not available in all ISP versions.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarDafna Hirschfeld <dafna@fastmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent f42f4558
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -98,6 +98,19 @@ enum rkisp1_isp_pad {
	RKISP1_ISP_PAD_MAX
};

/*
 * enum rkisp1_feature - ISP features
 *
 * @RKISP1_FEATURE_MIPI_CSI2: The ISP has an internal MIPI CSI-2 receiver
 *
 * The ISP features are stored in a bitmask in &rkisp1_info.features and allow
 * the driver to implement support for features present in some ISP versions
 * only.
 */
enum rkisp1_feature {
	RKISP1_FEATURE_MIPI_CSI2 = BIT(0),
};

/*
 * struct rkisp1_info - Model-specific ISP Information
 *
@@ -106,6 +119,7 @@ enum rkisp1_isp_pad {
 * @isrs: array of ISP interrupt descriptors
 * @isr_size: number of entries in the @isrs array
 * @isp_ver: ISP version
 * @features: bitmask of rkisp1_feature features implemented by the ISP
 *
 * This structure contains information about the ISP specific to a particular
 * ISP model, version, or integration in a particular SoC.
@@ -116,6 +130,7 @@ struct rkisp1_info {
	const struct rkisp1_isr_data *isrs;
	unsigned int isr_size;
	enum rkisp1_cif_isp_version isp_ver;
	unsigned int features;
};

/*
+2 −0
Original line number Diff line number Diff line
@@ -460,6 +460,7 @@ static const struct rkisp1_info px30_isp_info = {
	.isrs = px30_isp_isrs,
	.isr_size = ARRAY_SIZE(px30_isp_isrs),
	.isp_ver = RKISP1_V12,
	.features = RKISP1_FEATURE_MIPI_CSI2,
};

static const char * const rk3399_isp_clks[] = {
@@ -478,6 +479,7 @@ static const struct rkisp1_info rk3399_isp_info = {
	.isrs = rk3399_isp_isrs,
	.isr_size = ARRAY_SIZE(rk3399_isp_isrs),
	.isp_ver = RKISP1_V10,
	.features = RKISP1_FEATURE_MIPI_CSI2,
};

static const struct of_device_id rkisp1_of_match[] = {