[PATCH 07/55] media: rkisp1: Save info pointer in rkisp1_device

Dafna Hirschfeld dafna at fastmail.com
Fri Jun 24 07:34:00 PDT 2022


On 15.06.2022 04:10, Paul Elder wrote:
>To make it possible to use the rkisp1_info after probe time (for
>instance to make code conditional on the ISP version), save it in the
>main rkisp1_device structure. To achieve this, also move the info
>structure into the common header, and document it.
>
>While at it, drop a NULL check in rkisp1_probe() for the match data as
>it can't happen.
>
>Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
>Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>---
> .../platform/rockchip/rkisp1/rkisp1-common.h  | 22 +++++++++++++++++++
> .../platform/rockchip/rkisp1/rkisp1-dev.c     | 15 +++----------
> 2 files changed, 25 insertions(+), 12 deletions(-)
>
>diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
>index a67fe7b1dfa1..50d31a254b03 100644
>--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
>+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
>@@ -91,6 +91,26 @@ enum rkisp1_isp_pad {
> 	RKISP1_ISP_PAD_MAX
> };
>
>+/*
>+ * struct rkisp1_info - Model-specific ISP Information
>+ *
>+ * @clks: array of ISP clock names
>+ * @clk_size: number of entries in the @clks array
>+ * @isrs: array of ISP interrupt descriptors
>+ * @isr_size: number of entires in the @isrs array
>+ * @isp_ver: ISP version
>+ *
>+ * This structure contains information about the ISP specific to a particular
>+ * ISP model, version, or integration in a particular SoC.
>+ */
>+struct rkisp1_info {
>+	const char * const *clks;
>+	unsigned int clk_size;
>+	const struct rkisp1_isr_data *isrs;
>+	unsigned int isr_size;
>+	enum rkisp1_cif_isp_version isp_ver;
>+};
>+
> /*
>  * struct rkisp1_sensor_async - A container for the v4l2_async_subdev to add to the notifier
>  *				of the v4l2-async API
>@@ -395,6 +415,7 @@ struct rkisp1_debug {
>  * @pipe:	   media pipeline
>  * @stream_lock:   serializes {start/stop}_streaming callbacks between the capture devices.
>  * @debug:	   debug params to be exposed on debugfs
>+ * @info:	   version-specific ISP information
>  */
> struct rkisp1_device {
> 	void __iomem *base_addr;
>@@ -413,6 +434,7 @@ struct rkisp1_device {
> 	struct media_pipeline pipe;
> 	struct mutex stream_lock; /* serialize {start/stop}_streaming cb between capture devices */
> 	struct rkisp1_debug debug;
>+	const struct rkisp1_info *info;
> };
>
> /*
>diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
>index 258980ef4783..39ae35074062 100644
>--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
>+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
>@@ -105,14 +105,6 @@ struct rkisp1_isr_data {
> 	irqreturn_t (*isr)(int irq, void *ctx);
> };
>
>-struct rkisp1_info {
>-	const char * const *clks;
>-	unsigned int clk_size;
>-	const struct rkisp1_isr_data *isrs;
>-	unsigned int isr_size;
>-	enum rkisp1_cif_isp_version isp_ver;
>-};
>-
> /* ----------------------------------------------------------------------------
>  * Sensor DT bindings
>  */
>@@ -469,14 +461,13 @@ static int rkisp1_probe(struct platform_device *pdev)
> 	int ret, irq;
> 	u32 cif_id;
>
>-	info = of_device_get_match_data(&pdev->dev);
>-	if (!info)
>-		return -ENODEV;
>-
> 	rkisp1 = devm_kzalloc(dev, sizeof(*rkisp1), GFP_KERNEL);
> 	if (!rkisp1)
> 		return -ENOMEM;
>
>+	info = of_device_get_match_data(dev);

Why did you omit the check 'if(!info)'?

thanks,
Dafna

>+	rkisp1->info = info;
>+
> 	dev_set_drvdata(dev, rkisp1);
> 	rkisp1->dev = dev;
>
>-- 
>2.30.2
>



More information about the Linux-rockchip mailing list