This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: atomisp: gc0310: Turn into standard v4l2 sensor driver
Author:  Hans de Goede <[email protected]>
Date:    Thu May 25 20:00:58 2023 +0100

Switch the atomisp-gc0310 driver to v4l2 async device registration.

After this change this driver no longer depends on
atomisp_gmin_platform and all atomisp-isms are gone.

Link: https://lore.kernel.org/r/[email protected]

Reviewed-by: Andy Shevchenko <[email protected]>
Signed-off-by: Hans de Goede <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>

 drivers/staging/media/atomisp/i2c/atomisp-gc0310.c | 29 ++++++++++++++--------
 .../media/atomisp/pci/atomisp_csi2_bridge.c        |  2 ++
 2 files changed, 20 insertions(+), 11 deletions(-)

---

diff --git a/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c 
b/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c
index 1829ba419e3e..9a11793f34f7 100644
--- a/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c
+++ b/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c
@@ -29,8 +29,6 @@
 #include <media/v4l2-ctrls.h>
 #include <media/v4l2-device.h>
 
-#include "../include/linux/atomisp_gmin_platform.h"
-
 #define GC0310_NATIVE_WIDTH                    656
 #define GC0310_NATIVE_HEIGHT                   496
 
@@ -85,6 +83,7 @@ struct gc0310_device {
        struct mutex input_lock;
        bool is_streaming;
 
+       struct fwnode_handle *ep_fwnode;
        struct gpio_desc *reset;
        struct gpio_desc *powerdown;
 
@@ -596,11 +595,11 @@ static void gc0310_remove(struct i2c_client *client)
 
        dev_dbg(&client->dev, "gc0310_remove...\n");
 
-       atomisp_unregister_subdev(sd);
-       v4l2_device_unregister_subdev(sd);
+       v4l2_async_unregister_subdev(sd);
        media_entity_cleanup(&dev->sd.entity);
        v4l2_ctrl_handler_free(&dev->ctrls.handler);
        mutex_destroy(&dev->input_lock);
+       fwnode_handle_put(dev->ep_fwnode);
        pm_runtime_disable(&client->dev);
 }
 
@@ -613,19 +612,27 @@ static int gc0310_probe(struct i2c_client *client)
        if (!dev)
                return -ENOMEM;
 
-       ret = v4l2_get_acpi_sensor_info(&client->dev, NULL);
-       if (ret)
-               return ret;
+       /*
+        * Sometimes the fwnode graph is initialized by the bridge driver.
+        * Bridge drivers doing this may also add GPIO mappings, wait for this.
+        */
+       dev->ep_fwnode = 
fwnode_graph_get_next_endpoint(dev_fwnode(&client->dev), NULL);
+       if (!dev->ep_fwnode)
+               return dev_err_probe(&client->dev, -EPROBE_DEFER, "waiting for 
fwnode graph endpoint\n");
 
        dev->reset = devm_gpiod_get(&client->dev, "reset", GPIOD_OUT_HIGH);
-       if (IS_ERR(dev->reset))
+       if (IS_ERR(dev->reset)) {
+               fwnode_handle_put(dev->ep_fwnode);
                return dev_err_probe(&client->dev, PTR_ERR(dev->reset),
                                     "getting reset GPIO\n");
+       }
 
        dev->powerdown = devm_gpiod_get(&client->dev, "powerdown", 
GPIOD_OUT_HIGH);
-       if (IS_ERR(dev->powerdown))
+       if (IS_ERR(dev->powerdown)) {
+               fwnode_handle_put(dev->ep_fwnode);
                return dev_err_probe(&client->dev, PTR_ERR(dev->powerdown),
                                     "getting powerdown GPIO\n");
+       }
 
        mutex_init(&dev->input_lock);
        v4l2_i2c_subdev_init(&dev->sd, client, &gc0310_ops);
@@ -645,6 +652,7 @@ static int gc0310_probe(struct i2c_client *client)
        dev->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
        dev->pad.flags = MEDIA_PAD_FL_SOURCE;
        dev->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
+       dev->sd.fwnode = dev->ep_fwnode;
 
        ret = gc0310_init_controls(dev);
        if (ret) {
@@ -658,8 +666,7 @@ static int gc0310_probe(struct i2c_client *client)
                return ret;
        }
 
-       ret = atomisp_register_sensor_no_gmin(&dev->sd, 1, 
ATOMISP_INPUT_FORMAT_RAW_8,
-                                             atomisp_bayer_order_grbg);
+       ret = v4l2_async_register_subdev_sensor(&dev->sd);
        if (ret) {
                gc0310_remove(client);
                return ret;
diff --git a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c 
b/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c
index d1789f171228..b55a7ff9844e 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c
@@ -89,6 +89,8 @@ static const guid_t atomisp_dsm_guid =
  * power-management and with v4l2-async probing.
  */
 static const struct atomisp_csi2_sensor_config supported_sensors[] = {
+       /* GalaxyCore GC0310 */
+       { "INT0310", 1 },
        /* Omnivision OV2680 */
        { "OVTI2680", 1 },
 };

_______________________________________________
linuxtv-commits mailing list
[email protected]
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to