devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sakari Ailus <sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
To: linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: niklas.soderlund-1zkq55x86MTxsAP9Fp7wbw@public.gmane.org,
	maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org,
	robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	hverkuil-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org,
	laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	pavel-+ZI9xUNit7I@public.gmane.org,
	sre-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Subject: [PATCH v12 22/26] smiapp: Add support for flash and lens devices
Date: Tue, 12 Sep 2017 16:41:56 +0300	[thread overview]
Message-ID: <20170912134200.19556-23-sakari.ailus@linux.intel.com> (raw)
In-Reply-To: <20170912134200.19556-1-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>

Parse async sub-devices by using
v4l2_subdev_fwnode_reference_parse_sensor_common().

These types devices aren't directly related to the sensor, but are
nevertheless handled by the smiapp driver due to the relationship of these
component to the main part of the camera module --- the sensor.

This does not yet address providing the user space with information on how
to associate the sensor or lens devices but the kernel now has the
necessary information to do that.

Signed-off-by: Sakari Ailus <sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Acked-by: Hans Verkuil <hans.verkuil-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
Acked-by: Pavel Machek <pavel-+ZI9xUNit7I@public.gmane.org>
---
 drivers/media/i2c/smiapp/smiapp-core.c | 38 +++++++++++++++++++++++++++-------
 drivers/media/i2c/smiapp/smiapp.h      |  4 +++-
 2 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/drivers/media/i2c/smiapp/smiapp-core.c b/drivers/media/i2c/smiapp/smiapp-core.c
index 700f433261d0..a4735a96ea41 100644
--- a/drivers/media/i2c/smiapp/smiapp-core.c
+++ b/drivers/media/i2c/smiapp/smiapp-core.c
@@ -31,7 +31,7 @@
 #include <linux/regulator/consumer.h>
 #include <linux/slab.h>
 #include <linux/smiapp.h>
-#include <linux/v4l2-mediabus.h>
+#include <media/v4l2-async.h>
 #include <media/v4l2-fwnode.h>
 #include <media/v4l2-device.h>
 
@@ -2887,17 +2887,24 @@ static int smiapp_probe(struct i2c_client *client,
 	v4l2_i2c_subdev_init(&sensor->src->sd, client, &smiapp_ops);
 	sensor->src->sd.internal_ops = &smiapp_internal_src_ops;
 
+	rval = v4l2_async_notifier_parse_fwnode_sensor_common(
+		&client->dev, &sensor->notifier);
+	if (rval < 0)
+		return rval;
+
 	sensor->vana = devm_regulator_get(&client->dev, "vana");
 	if (IS_ERR(sensor->vana)) {
 		dev_err(&client->dev, "could not get regulator for vana\n");
-		return PTR_ERR(sensor->vana);
+		rval = PTR_ERR(sensor->vana);
+		goto out_release_async_notifier;
 	}
 
 	sensor->ext_clk = devm_clk_get(&client->dev, NULL);
 	if (IS_ERR(sensor->ext_clk)) {
 		dev_err(&client->dev, "could not get clock (%ld)\n",
 			PTR_ERR(sensor->ext_clk));
-		return -EPROBE_DEFER;
+		rval = -EPROBE_DEFER;
+		goto out_release_async_notifier;
 	}
 
 	rval = clk_set_rate(sensor->ext_clk, sensor->hwcfg->ext_clk);
@@ -2905,17 +2912,19 @@ static int smiapp_probe(struct i2c_client *client,
 		dev_err(&client->dev,
 			"unable to set clock freq to %u\n",
 			sensor->hwcfg->ext_clk);
-		return rval;
+		goto out_release_async_notifier;
 	}
 
 	sensor->xshutdown = devm_gpiod_get_optional(&client->dev, "xshutdown",
 						    GPIOD_OUT_LOW);
-	if (IS_ERR(sensor->xshutdown))
-		return PTR_ERR(sensor->xshutdown);
+	if (IS_ERR(sensor->xshutdown)) {
+		rval = PTR_ERR(sensor->xshutdown);
+		goto out_release_async_notifier;
+	}
 
 	rval = smiapp_power_on(&client->dev);
 	if (rval < 0)
-		return rval;
+		goto out_release_async_notifier;
 
 	rval = smiapp_identify_module(sensor);
 	if (rval) {
@@ -3092,9 +3101,14 @@ static int smiapp_probe(struct i2c_client *client,
 	if (rval < 0)
 		goto out_media_entity_cleanup;
 
+	rval = v4l2_async_subdev_notifier_register(&sensor->src->sd,
+						   &sensor->notifier);
+	if (rval)
+		goto out_media_entity_cleanup;
+
 	rval = v4l2_async_register_subdev(&sensor->src->sd);
 	if (rval < 0)
-		goto out_media_entity_cleanup;
+		goto out_unregister_async_notifier;
 
 	pm_runtime_set_active(&client->dev);
 	pm_runtime_get_noresume(&client->dev);
@@ -3105,6 +3119,9 @@ static int smiapp_probe(struct i2c_client *client,
 
 	return 0;
 
+out_unregister_async_notifier:
+	v4l2_async_notifier_unregister(&sensor->notifier);
+
 out_media_entity_cleanup:
 	media_entity_cleanup(&sensor->src->sd.entity);
 
@@ -3114,6 +3131,9 @@ static int smiapp_probe(struct i2c_client *client,
 out_power_off:
 	smiapp_power_off(&client->dev);
 
+out_release_async_notifier:
+	v4l2_async_notifier_release(&sensor->notifier);
+
 	return rval;
 }
 
@@ -3124,6 +3144,8 @@ static int smiapp_remove(struct i2c_client *client)
 	unsigned int i;
 
 	v4l2_async_unregister_subdev(subdev);
+	v4l2_async_notifier_unregister(&sensor->notifier);
+	v4l2_async_notifier_release(&sensor->notifier);
 
 	pm_runtime_disable(&client->dev);
 	if (!pm_runtime_status_suspended(&client->dev))
diff --git a/drivers/media/i2c/smiapp/smiapp.h b/drivers/media/i2c/smiapp/smiapp.h
index f74d695018b9..be92cb5713f4 100644
--- a/drivers/media/i2c/smiapp/smiapp.h
+++ b/drivers/media/i2c/smiapp/smiapp.h
@@ -20,9 +20,10 @@
 #define __SMIAPP_PRIV_H_
 
 #include <linux/mutex.h>
+#include <media/i2c/smiapp.h>
+#include <media/v4l2-async.h>
 #include <media/v4l2-ctrls.h>
 #include <media/v4l2-subdev.h>
-#include <media/i2c/smiapp.h>
 
 #include "smiapp-pll.h"
 #include "smiapp-reg.h"
@@ -172,6 +173,7 @@ struct smiapp_subdev {
  * struct smiapp_sensor - Main device structure
  */
 struct smiapp_sensor {
+	struct v4l2_async_notifier notifier;
 	/*
 	 * "mutex" is used to serialise access to all fields here
 	 * except v4l2_ctrls at the end of the struct. "mutex" is also
-- 
2.11.0

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2017-09-12 13:41 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-12 13:41 [PATCH v12 00/30] Unified fwnode endpoint parser, async sub-device notifier support, N9 flash DTS Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 03/26] v4l: async: Use more intuitive names for internal functions Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 04/26] v4l: async: Add V4L2 async documentation to the documentation build Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 05/26] v4l: fwnode: Support generic parsing of graph endpoints in a device Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 06/26] v4l: fwnode: Support generic parsing of graph endpoints, per port Sakari Ailus
2017-09-13  7:01   ` Hans Verkuil
2017-09-13  7:06     ` Hans Verkuil
     [not found]       ` <a6cdf6cb-6abc-ac3b-274d-e8b43e2ac2c6-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
2017-09-13  8:18         ` Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 08/26] rcar-vin: Use generic parser for parsing fwnode endpoints Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 09/26] omap3isp: Fix check for our own sub-devices Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 10/26] omap3isp: Print the name of the entity where no source pads could be found Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 12/26] v4l: async: Introduce helpers for calling async ops callbacks Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 14/26] v4l: async: Allow async notifier register call succeed with no subdevs Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 15/26] v4l: async: Allow binding notifiers to sub-devices Sakari Ailus
     [not found]   ` <20170912134200.19556-16-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-09-13  7:17     ` Hans Verkuil
     [not found]       ` <575bf15b-62d2-3a51-d550-d462578471f7-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
2017-09-13  8:29         ` Sakari Ailus
     [not found]           ` <20170913082901.fbxxphn7s3ljn3mc-S+BSfZ9RZZmRSg0ZkenSGLdO1Tsj/99ntUK59QYPAWc@public.gmane.org>
2017-09-13  9:25             ` Hans Verkuil
     [not found] ` <20170912134200.19556-1-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-09-12 13:41   ` [PATCH v12 01/26] v4l: fwnode: Move KernelDoc documentation to the header Sakari Ailus
2017-09-12 13:41   ` [PATCH v12 02/26] v4l: async: Remove re-probing support Sakari Ailus
2017-09-12 13:41   ` [PATCH v12 07/26] omap3isp: Use generic parser for parsing fwnode endpoints Sakari Ailus
2017-09-12 13:41   ` [PATCH v12 11/26] v4l: async: Move async subdev notifier operations to a separate structure Sakari Ailus
2017-09-12 13:41   ` [PATCH v12 13/26] v4l: async: Register sub-devices before calling bound callback Sakari Ailus
2017-09-12 13:41   ` [PATCH v12 16/26] dt: bindings: Add a binding for flash LED devices associated to a sensor Sakari Ailus
2017-09-12 13:41   ` [PATCH v12 17/26] dt: bindings: Add lens-focus binding for image sensors Sakari Ailus
2017-09-12 13:41   ` [PATCH v12 18/26] v4l: fwnode: Add a helper function for parsing generic references Sakari Ailus
     [not found]     ` <20170912134200.19556-19-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-09-13  7:27       ` Hans Verkuil
     [not found]         ` <020b9c86-dd73-3516-4a0e-827db9680b55-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
2017-09-13  9:24           ` Sakari Ailus
     [not found]             ` <20170913092430.cbdgerkhiuxakbxv-S+BSfZ9RZZmRSg0ZkenSGLdO1Tsj/99ntUK59QYPAWc@public.gmane.org>
2017-09-13  9:28               ` Hans Verkuil
2017-09-13 10:07                 ` Sakari Ailus
2017-09-13 10:32                   ` Hans Verkuil
2017-09-15 14:05                     ` Sakari Ailus
2017-09-12 13:41   ` [PATCH v12 19/26] v4l: fwnode: Add a helper function to obtain device / interger references Sakari Ailus
     [not found]     ` <20170912134200.19556-20-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-09-13  7:57       ` Hans Verkuil
2017-09-13 10:04         ` Sakari Ailus
2017-09-12 13:41   ` Sakari Ailus [this message]
2017-09-12 13:41   ` [PATCH v12 24/26] ov5670: Add support for flash and lens devices Sakari Ailus
2017-09-12 13:41   ` [PATCH v12 25/26] ov13858: " Sakari Ailus
2017-09-12 13:42   ` [PATCH v12 26/26] arm: dts: omap3: N9/N950: Add flash references to the camera Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 20/26] v4l: fwnode: Add convenience function for parsing common external refs Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 21/26] dt: bindings: smiapp: Document lens-focus and flash-leds properties Sakari Ailus
2017-09-12 13:41 ` [PATCH v12 23/26] et8ek8: Add support for flash and lens devices Sakari Ailus
     [not found]   ` <20170912134200.19556-24-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-09-13  7:59     ` Hans Verkuil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170912134200.19556-23-sakari.ailus@linux.intel.com \
    --to=sakari.ailus-vuqaysv1563yd54fqh9/ca@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=hverkuil-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org \
    --cc=laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \
    --cc=linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
    --cc=niklas.soderlund-1zkq55x86MTxsAP9Fp7wbw@public.gmane.org \
    --cc=pavel-+ZI9xUNit7I@public.gmane.org \
    --cc=robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=sre-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).