media: rkisp1: Save info pointer in rkisp1_device
authorPaul Elder <paul.elder@ideasonboard.com>
Tue, 14 Jun 2022 19:10:39 +0000 (20:10 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Sun, 17 Jul 2022 11:00:33 +0000 (12:00 +0100)
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@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Dafna Hirschfeld <dafna@fastmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c

index 4243ff5..7dca59f 100644 (file)
@@ -92,6 +92,26 @@ enum rkisp1_isp_pad {
 };
 
 /*
+ * 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 entries 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
  *
@@ -386,6 +406,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;
@@ -404,6 +425,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;
 };
 
 /*
index 258980e..39ae350 100644 (file)
@@ -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);
+       rkisp1->info = info;
+
        dev_set_drvdata(dev, rkisp1);
        rkisp1->dev = dev;