[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