Hi Mauro,

Here are drivers for Sony imx319 and imx355 sensors and an unlocked version
of v4l2_ctrl_grab() which is used by the driver.

Since v1, I've rebased this on the current master --- with the fwnode
patches.

Please pull.

The diff is here and effectively the same for both drivers:

diff --git a/drivers/media/i2c/imx319.c b/drivers/media/i2c/imx319.c
index 37c31d17ecf0..329049f7e64d 100644
--- a/drivers/media/i2c/imx319.c
+++ b/drivers/media/i2c/imx319.c
@@ -2356,7 +2356,9 @@ static int imx319_init_controls(struct imx319 *imx319)
 static struct imx319_hwcfg *imx319_get_hwcfg(struct device *dev)
 {
        struct imx319_hwcfg *cfg;
-       struct v4l2_fwnode_endpoint *bus_cfg;
+       struct v4l2_fwnode_endpoint bus_cfg = {
+               .bus_type = V4L2_MBUS_CSI2_DPHY
+       };
        struct fwnode_handle *ep;
        struct fwnode_handle *fwnode = dev_fwnode(dev);
        unsigned int i;
@@ -2369,8 +2371,8 @@ static struct imx319_hwcfg *imx319_get_hwcfg(struct 
device *dev)
        if (!ep)
                return NULL;
 
-       bus_cfg = v4l2_fwnode_endpoint_alloc_parse(ep);
-       if (IS_ERR(bus_cfg))
+       ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
+       if (ret)
                goto out_err;
 
        cfg = devm_kzalloc(dev, sizeof(*cfg), GFP_KERNEL);
@@ -2391,30 +2393,30 @@ static struct imx319_hwcfg *imx319_get_hwcfg(struct 
device *dev)
                goto out_err;
        }
 
-       dev_dbg(dev, "num of link freqs: %d", bus_cfg->nr_of_link_frequencies);
-       if (!bus_cfg->nr_of_link_frequencies) {
+       dev_dbg(dev, "num of link freqs: %d", bus_cfg.nr_of_link_frequencies);
+       if (!bus_cfg.nr_of_link_frequencies) {
                dev_warn(dev, "no link frequencies defined");
                goto out_err;
        }
 
-       cfg->nr_of_link_freqs = bus_cfg->nr_of_link_frequencies;
+       cfg->nr_of_link_freqs = bus_cfg.nr_of_link_frequencies;
        cfg->link_freqs = devm_kcalloc(
-               dev, bus_cfg->nr_of_link_frequencies + 1,
+               dev, bus_cfg.nr_of_link_frequencies + 1,
                sizeof(*cfg->link_freqs), GFP_KERNEL);
        if (!cfg->link_freqs)
                goto out_err;
 
-       for (i = 0; i < bus_cfg->nr_of_link_frequencies; i++) {
-               cfg->link_freqs[i] = bus_cfg->link_frequencies[i];
+       for (i = 0; i < bus_cfg.nr_of_link_frequencies; i++) {
+               cfg->link_freqs[i] = bus_cfg.link_frequencies[i];
                dev_dbg(dev, "link_freq[%d] = %lld", i, cfg->link_freqs[i]);
        }
 
-       v4l2_fwnode_endpoint_free(bus_cfg);
+       v4l2_fwnode_endpoint_free(&bus_cfg);
        fwnode_handle_put(ep);
        return cfg;
 
 out_err:
-       v4l2_fwnode_endpoint_free(bus_cfg);
+       v4l2_fwnode_endpoint_free(&bus_cfg);
        fwnode_handle_put(ep);
        return NULL;
 }
diff --git a/drivers/media/i2c/imx355.c b/drivers/media/i2c/imx355.c
index 3baa0edc57a9..803df2a014bb 100644
--- a/drivers/media/i2c/imx355.c
+++ b/drivers/media/i2c/imx355.c
@@ -1656,7 +1656,9 @@ static int imx355_init_controls(struct imx355 *imx355)
 static struct imx355_hwcfg *imx355_get_hwcfg(struct device *dev)
 {
        struct imx355_hwcfg *cfg;
-       struct v4l2_fwnode_endpoint *bus_cfg;
+       struct v4l2_fwnode_endpoint bus_cfg = {
+               .bus_type = V4L2_MBUS_CSI2_DPHY
+       };
        struct fwnode_handle *ep;
        struct fwnode_handle *fwnode = dev_fwnode(dev);
        unsigned int i;
@@ -1669,8 +1671,8 @@ static struct imx355_hwcfg *imx355_get_hwcfg(struct 
device *dev)
        if (!ep)
                return NULL;
 
-       bus_cfg = v4l2_fwnode_endpoint_alloc_parse(ep);
-       if (IS_ERR(bus_cfg))
+       ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
+       if (ret)
                goto out_err;
 
        cfg = devm_kzalloc(dev, sizeof(*cfg), GFP_KERNEL);
@@ -1691,30 +1693,30 @@ static struct imx355_hwcfg *imx355_get_hwcfg(struct 
device *dev)
                goto out_err;
        }
 
-       dev_dbg(dev, "num of link freqs: %d", bus_cfg->nr_of_link_frequencies);
-       if (!bus_cfg->nr_of_link_frequencies) {
+       dev_dbg(dev, "num of link freqs: %d", bus_cfg.nr_of_link_frequencies);
+       if (!bus_cfg.nr_of_link_frequencies) {
                dev_warn(dev, "no link frequencies defined");
                goto out_err;
        }
 
-       cfg->nr_of_link_freqs = bus_cfg->nr_of_link_frequencies;
+       cfg->nr_of_link_freqs = bus_cfg.nr_of_link_frequencies;
        cfg->link_freqs = devm_kcalloc(
-               dev, bus_cfg->nr_of_link_frequencies + 1,
+               dev, bus_cfg.nr_of_link_frequencies + 1,
                sizeof(*cfg->link_freqs), GFP_KERNEL);
        if (!cfg->link_freqs)
                goto out_err;
 
-       for (i = 0; i < bus_cfg->nr_of_link_frequencies; i++) {
-               cfg->link_freqs[i] = bus_cfg->link_frequencies[i];
+       for (i = 0; i < bus_cfg.nr_of_link_frequencies; i++) {
+               cfg->link_freqs[i] = bus_cfg.link_frequencies[i];
                dev_dbg(dev, "link_freq[%d] = %lld", i, cfg->link_freqs[i]);
        }
 
-       v4l2_fwnode_endpoint_free(bus_cfg);
+       v4l2_fwnode_endpoint_free(&bus_cfg);
        fwnode_handle_put(ep);
        return cfg;
 
 out_err:
-       v4l2_fwnode_endpoint_free(bus_cfg);
+       v4l2_fwnode_endpoint_free(&bus_cfg);
        fwnode_handle_put(ep);
        return NULL;
 }


The following changes since commit 158bc148a31ea22a2ef8cbaf4d968476bddefbc0:

  media: rc: mce_kbd: input events via rc-core's input device (2018-10-05 
06:56:24 -0400)

are available in the git repository at:

  ssh://linuxtv.org/git/sailus/media_tree.git tags/for-4.20-10-sign-2

for you to fetch changes up to 83da403a4a89dc1990b9d0f99ba16bc6d230eb02:

  media: add imx355 camera sensor driver (2018-10-05 14:46:35 +0300)

----------------------------------------------------------------
unlocked V4L2 ctrl grab; imx319 and imx355 drivers

----------------------------------------------------------------
Bingbu Cao (2):
      media: add imx319 camera sensor driver
      media: add imx355 camera sensor driver

Sakari Ailus (2):
      v4l: ctrl: Remove old documentation from v4l2_ctrl_grab
      v4l: ctrl: Provide unlocked variant of v4l2_ctrl_grab

 MAINTAINERS                          |   14 +
 drivers/media/i2c/Kconfig            |   22 +
 drivers/media/i2c/Makefile           |    2 +
 drivers/media/i2c/imx319.c           | 2560 ++++++++++++++++++++++++++++++++++
 drivers/media/i2c/imx355.c           | 1860 ++++++++++++++++++++++++
 drivers/media/v4l2-core/v4l2-ctrls.c |   14 +-
 include/media/v4l2-ctrls.h           |   26 +-
 7 files changed, 4487 insertions(+), 11 deletions(-)
 create mode 100644 drivers/media/i2c/imx319.c
 create mode 100644 drivers/media/i2c/imx355.c


-- 
Regards,

Sakari Ailus
e-mail: sakari.ai...@iki.fi

Reply via email to