[{"id":14571,"web_url":"https://patchwork.libcamera.org/comment/14571/","msgid":"<d7b012a6-d6ca-daa6-fa7b-d756ec016720@ideasonboard.com>","date":"2021-01-18T09:59:55","subject":"Re: [libcamera-devel] [PATCH v7 01/10] libcamera: Document sensor\n\tdriver requirements","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn 15/01/2021 17:00, Jacopo Mondi wrote:\n> Document the feature an image sensor driver has to provide to be\n> fully libcamera-compliant.\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n>  Documentation/index.rst                      |  1 +\n>  Documentation/meson.build                    |  1 +\n>  Documentation/sensor_driver_requirements.rst | 64 ++++++++++++++++++++\n>  3 files changed, 66 insertions(+)\n>  create mode 100644 Documentation/sensor_driver_requirements.rst\n> \n> diff --git a/Documentation/index.rst b/Documentation/index.rst\n> index c49db18d52bd..285ca7c3e5ae 100644\n> --- a/Documentation/index.rst\n> +++ b/Documentation/index.rst\n> @@ -18,3 +18,4 @@\n>     Pipeline Handler Writer's Guide <guides/pipeline-handler>\n>     Tracing guide <guides/tracing>\n>     Environment variables <environment_variables>\n> +   Sensor driver requirements <sensor_driver_requirements>\n> diff --git a/Documentation/meson.build b/Documentation/meson.build\n> index b1f5bb52474c..9950465ded6e 100644\n> --- a/Documentation/meson.build\n> +++ b/Documentation/meson.build\n> @@ -57,6 +57,7 @@ if sphinx.found()\n>          'guides/pipeline-handler.rst',\n>          'guides/tracing.rst',\n>          'index.rst',\n> +        'sensor_driver_requirements.rst',\n>         '../README.rst',\n>      ]\n>  \n> diff --git a/Documentation/sensor_driver_requirements.rst b/Documentation/sensor_driver_requirements.rst\n> new file mode 100644\n> index 000000000000..0e658aaa03b5\n> --- /dev/null\n> +++ b/Documentation/sensor_driver_requirements.rst\n> @@ -0,0 +1,64 @@\n> +.. SPDX-License-Identifier: CC-BY-SA-4.0\n> +\n> +.. _sensor-driver-requirements:\n> +\n> +Sensor Driver Requirements\n> +==========================\n> +\n> +libcamera handles imaging devices in the CameraSensor class and defines\n> +through its API a consistent interface towards other library components.\n\nOptional change:\n\n'and defines a consistent interface through it's API towards other'\n\n> +\n> +The CameraSensor class uses the V4L2 subdev kernel API to interface with the\n> +camera sensor through one or multiple sub-devices exposed in userspace by\n> +the sensor driver.\n> +\n> +In order for libcamera to be fully operational and provide to applications and\n> +pipeline handlers all the required information to interface with the camera\n\nAnother re-order:\n\n'and provide all the required information to interface with the camera\nsensor to applications,'\n\n\nBoth of those are perfectly understandable as you have written them,\nit's just that we wouldn't write it in that order in English ;-)\n\nNo idea why or what the grammar rules are, that's just a pure 'I'd write\nthat the other way' warning light fired in my head.\n\n\nSo - no need to change if you don't want to.\n\n> +sensor, a set of mandatory and optional features the driver has to support\n> +has been defined.\n> +\n> +Mandatory Requirements\n> +----------------------\n> +\n> +The sensor driver is assumed to be fully compliant with the V4L2 specification.\n> +\n> +The sensor driver shall support the following V4L2 controls:\n> +\n> +* `V4L2_CID_HBLANK`_\n> +* `V4L2_CID_PIXEL_RATE`_\n> +\n> +.. _V4L2_CID_HBLANK: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-source.html\n> +.. _V4L2_CID_PIXEL_RATE: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-process.html\n> +\n> +Both controls are used to compute the sensor output timings.\n> +\n> +Optional Requirements\n> +---------------------\n> +\n> +The sensor driver should support the following V4L2 controls:\n> +\n> +* `V4L2_CID_CAMERA_ORIENTATION`_\n> +* `V4L2_CID_CAMERA_SENSOR_ROTATION`_\n> +\n> +.. _V4L2_CID_CAMERA_ORIENTATION: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-camera.html\n> +.. _V4L2_CID_CAMERA_SENSOR_ROTATION: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-process.html\n> +\n> +The controls are used to register the camera location and orientation.\n\nShould that read the camera location and rotation?\n\nGiven the above and the definition of V4L2_CID_CAMERA_ORIENTATION, I\nthink the orientation is the 'location'...\n\n\nWith those updated or not as you see fit:\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> +\n> +The sensor driver should implement support for the V4L2 Selection API,\n> +specifically it should implement support for the\n> +`VIDIOC_SUBDEV_G_SELECTION`_ ioctl with support for the following selection\n> +targets:\n> +\n> +.. _VIDIOC_SUBDEV_G_SELECTION: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-subdev-g-selection.html?highlight=g_selection#c.V4L.VIDIOC_SUBDEV_G_SELECTION\n> +\n> +* `V4L2_SEL_TGT_CROP_BOUNDS`_ to report the readable pixel array area size\n> +* `V4L2_SEL_TGT_CROP_DEFAULT`_ to report the active pixel array area size\n> +* `V4L2_SEL_TGT_CROP`_ to report the analogue selection rectangle\n> +\n> +Support for the selection API is scheduled to become a mandatory feature in\n> +the near future.\n> +\n> +.. _V4L2_SEL_TGT_CROP_BOUNDS: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2-selection-targets.html\n> +.. _V4L2_SEL_TGT_CROP_DEFAULT: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2-selection-targets.html\n> +.. _V4L2_SEL_TGT_CROP: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2-selection-targets.html\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id B28FCC0F1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 18 Jan 2021 10:00:02 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 472816811A;\n\tMon, 18 Jan 2021 11:00:02 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 63EC160314\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 18 Jan 2021 11:00:00 +0100 (CET)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DF9002BB;\n\tMon, 18 Jan 2021 10:59:59 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"fJh7SZfI\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1610964000;\n\tbh=JR9X4KPknwgLg8nj20xFu6QILx7ezdD23RQMT2GYZ0A=;\n\th=Reply-To:Subject:To:References:From:Date:In-Reply-To:From;\n\tb=fJh7SZfIqEMw05Q6SHYw5GwX1aGXZwXSdxon8g4SO1ma+KmcoDHLjEWcogjFseoBJ\n\tu+bC8S96lcCZlTHNNoZolS9rc0agXI508N/5fiOVPXvRuVFXOaL1wYsKo6FHK1qX2q\n\t+dJ5BGQFEHt154EKC7t39vJRdBR5EPTlkrCaFjsg=","To":"Jacopo Mondi <jacopo@jmondi.org>, libcamera-devel@lists.libcamera.org","References":"<20210115170033.27124-1-jacopo@jmondi.org>\n\t<20210115170033.27124-2-jacopo@jmondi.org>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<d7b012a6-d6ca-daa6-fa7b-d756ec016720@ideasonboard.com>","Date":"Mon, 18 Jan 2021 09:59:55 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20210115170033.27124-2-jacopo@jmondi.org>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v7 01/10] libcamera: Document sensor\n\tdriver requirements","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Reply-To":"kieran.bingham@ideasonboard.com","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":14573,"web_url":"https://patchwork.libcamera.org/comment/14573/","msgid":"<20210118100814.ltq74jkz5lgyrhcs@uno.localdomain>","date":"2021-01-18T10:08:14","subject":"Re: [libcamera-devel] [PATCH v7 01/10] libcamera: Document sensor\n\tdriver requirements","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran,\n\nOn Mon, Jan 18, 2021 at 09:59:55AM +0000, Kieran Bingham wrote:\n> Hi Jacopo,\n\nThe series has just been pushed.\n\nI can work on-top\n\n>\n> On 15/01/2021 17:00, Jacopo Mondi wrote:\n> > Document the feature an image sensor driver has to provide to be\n> > fully libcamera-compliant.\n> >\n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> > ---\n> >  Documentation/index.rst                      |  1 +\n> >  Documentation/meson.build                    |  1 +\n> >  Documentation/sensor_driver_requirements.rst | 64 ++++++++++++++++++++\n> >  3 files changed, 66 insertions(+)\n> >  create mode 100644 Documentation/sensor_driver_requirements.rst\n> >\n> > diff --git a/Documentation/index.rst b/Documentation/index.rst\n> > index c49db18d52bd..285ca7c3e5ae 100644\n> > --- a/Documentation/index.rst\n> > +++ b/Documentation/index.rst\n> > @@ -18,3 +18,4 @@\n> >     Pipeline Handler Writer's Guide <guides/pipeline-handler>\n> >     Tracing guide <guides/tracing>\n> >     Environment variables <environment_variables>\n> > +   Sensor driver requirements <sensor_driver_requirements>\n> > diff --git a/Documentation/meson.build b/Documentation/meson.build\n> > index b1f5bb52474c..9950465ded6e 100644\n> > --- a/Documentation/meson.build\n> > +++ b/Documentation/meson.build\n> > @@ -57,6 +57,7 @@ if sphinx.found()\n> >          'guides/pipeline-handler.rst',\n> >          'guides/tracing.rst',\n> >          'index.rst',\n> > +        'sensor_driver_requirements.rst',\n> >         '../README.rst',\n> >      ]\n> >\n> > diff --git a/Documentation/sensor_driver_requirements.rst b/Documentation/sensor_driver_requirements.rst\n> > new file mode 100644\n> > index 000000000000..0e658aaa03b5\n> > --- /dev/null\n> > +++ b/Documentation/sensor_driver_requirements.rst\n> > @@ -0,0 +1,64 @@\n> > +.. SPDX-License-Identifier: CC-BY-SA-4.0\n> > +\n> > +.. _sensor-driver-requirements:\n> > +\n> > +Sensor Driver Requirements\n> > +==========================\n> > +\n> > +libcamera handles imaging devices in the CameraSensor class and defines\n> > +through its API a consistent interface towards other library components.\n>\n> Optional change:\n>\n> 'and defines a consistent interface through it's API towards other'\n>\n> > +\n> > +The CameraSensor class uses the V4L2 subdev kernel API to interface with the\n> > +camera sensor through one or multiple sub-devices exposed in userspace by\n> > +the sensor driver.\n> > +\n> > +In order for libcamera to be fully operational and provide to applications and\n> > +pipeline handlers all the required information to interface with the camera\n>\n> Another re-order:\n>\n> 'and provide all the required information to interface with the camera\n> sensor to applications,'\n>\n>\n> Both of those are perfectly understandable as you have written them,\n> it's just that we wouldn't write it in that order in English ;-)\n>\n> No idea why or what the grammar rules are, that's just a pure 'I'd write\n> that the other way' warning light fired in my head.\n>\n>\n> So - no need to change if you don't want to.\n>\n> > +sensor, a set of mandatory and optional features the driver has to support\n> > +has been defined.\n> > +\n> > +Mandatory Requirements\n> > +----------------------\n> > +\n> > +The sensor driver is assumed to be fully compliant with the V4L2 specification.\n> > +\n> > +The sensor driver shall support the following V4L2 controls:\n> > +\n> > +* `V4L2_CID_HBLANK`_\n> > +* `V4L2_CID_PIXEL_RATE`_\n> > +\n> > +.. _V4L2_CID_HBLANK: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-source.html\n> > +.. _V4L2_CID_PIXEL_RATE: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-process.html\n> > +\n> > +Both controls are used to compute the sensor output timings.\n> > +\n> > +Optional Requirements\n> > +---------------------\n> > +\n> > +The sensor driver should support the following V4L2 controls:\n> > +\n> > +* `V4L2_CID_CAMERA_ORIENTATION`_\n> > +* `V4L2_CID_CAMERA_SENSOR_ROTATION`_\n> > +\n> > +.. _V4L2_CID_CAMERA_ORIENTATION: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-camera.html\n> > +.. _V4L2_CID_CAMERA_SENSOR_ROTATION: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-process.html\n> > +\n> > +The controls are used to register the camera location and orientation.\n>\n> Should that read the camera location and rotation?\n>\n> Given the above and the definition of V4L2_CID_CAMERA_ORIENTATION, I\n> think the orientation is the 'location'...\n>\n>\n> With those updated or not as you see fit:\n>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>\n> > +\n> > +The sensor driver should implement support for the V4L2 Selection API,\n> > +specifically it should implement support for the\n> > +`VIDIOC_SUBDEV_G_SELECTION`_ ioctl with support for the following selection\n> > +targets:\n> > +\n> > +.. _VIDIOC_SUBDEV_G_SELECTION: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-subdev-g-selection.html?highlight=g_selection#c.V4L.VIDIOC_SUBDEV_G_SELECTION\n> > +\n> > +* `V4L2_SEL_TGT_CROP_BOUNDS`_ to report the readable pixel array area size\n> > +* `V4L2_SEL_TGT_CROP_DEFAULT`_ to report the active pixel array area size\n> > +* `V4L2_SEL_TGT_CROP`_ to report the analogue selection rectangle\n> > +\n> > +Support for the selection API is scheduled to become a mandatory feature in\n> > +the near future.\n> > +\n> > +.. _V4L2_SEL_TGT_CROP_BOUNDS: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2-selection-targets.html\n> > +.. _V4L2_SEL_TGT_CROP_DEFAULT: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2-selection-targets.html\n> > +.. _V4L2_SEL_TGT_CROP: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2-selection-targets.html\n> >\n>\n> --\n> Regards\n> --\n> Kieran","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 98B67BD808\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 18 Jan 2021 10:07:57 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 53A7A6811D;\n\tMon, 18 Jan 2021 11:07:57 +0100 (CET)","from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net\n\t[217.70.183.193])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D15AD60314\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 18 Jan 2021 11:07:55 +0100 (CET)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 3330F24000B;\n\tMon, 18 Jan 2021 10:07:54 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Mon, 18 Jan 2021 11:08:14 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20210118100814.ltq74jkz5lgyrhcs@uno.localdomain>","References":"<20210115170033.27124-1-jacopo@jmondi.org>\n\t<20210115170033.27124-2-jacopo@jmondi.org>\n\t<d7b012a6-d6ca-daa6-fa7b-d756ec016720@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<d7b012a6-d6ca-daa6-fa7b-d756ec016720@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v7 01/10] libcamera: Document sensor\n\tdriver requirements","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":14574,"web_url":"https://patchwork.libcamera.org/comment/14574/","msgid":"<c0895423-2518-5885-1b86-1db92a67071e@ideasonboard.com>","date":"2021-01-18T10:26:05","subject":"Re: [libcamera-devel] [PATCH v7 01/10] libcamera: Document sensor\n\tdriver requirements","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn 18/01/2021 10:08, Jacopo Mondi wrote:\n> Hi Kieran,\n> \n> On Mon, Jan 18, 2021 at 09:59:55AM +0000, Kieran Bingham wrote:\n>> Hi Jacopo,\n> \n> The series has just been pushed.\n> \n\naha, I'd checked the series wasn't in before I hit send. Looks like I\nshould have taken a mutex ;-)\n\n> I can work on-top\n\nI think it's only the camera location that sounds like it might be\ninaccurate. The other two don't matter at all.\n\nKieran\n\n\n>>\n>> On 15/01/2021 17:00, Jacopo Mondi wrote:\n>>> Document the feature an image sensor driver has to provide to be\n>>> fully libcamera-compliant.\n>>>\n>>> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>>> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n>>> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n>>> ---\n>>>  Documentation/index.rst                      |  1 +\n>>>  Documentation/meson.build                    |  1 +\n>>>  Documentation/sensor_driver_requirements.rst | 64 ++++++++++++++++++++\n>>>  3 files changed, 66 insertions(+)\n>>>  create mode 100644 Documentation/sensor_driver_requirements.rst\n>>>\n>>> diff --git a/Documentation/index.rst b/Documentation/index.rst\n>>> index c49db18d52bd..285ca7c3e5ae 100644\n>>> --- a/Documentation/index.rst\n>>> +++ b/Documentation/index.rst\n>>> @@ -18,3 +18,4 @@\n>>>     Pipeline Handler Writer's Guide <guides/pipeline-handler>\n>>>     Tracing guide <guides/tracing>\n>>>     Environment variables <environment_variables>\n>>> +   Sensor driver requirements <sensor_driver_requirements>\n>>> diff --git a/Documentation/meson.build b/Documentation/meson.build\n>>> index b1f5bb52474c..9950465ded6e 100644\n>>> --- a/Documentation/meson.build\n>>> +++ b/Documentation/meson.build\n>>> @@ -57,6 +57,7 @@ if sphinx.found()\n>>>          'guides/pipeline-handler.rst',\n>>>          'guides/tracing.rst',\n>>>          'index.rst',\n>>> +        'sensor_driver_requirements.rst',\n>>>         '../README.rst',\n>>>      ]\n>>>\n>>> diff --git a/Documentation/sensor_driver_requirements.rst b/Documentation/sensor_driver_requirements.rst\n>>> new file mode 100644\n>>> index 000000000000..0e658aaa03b5\n>>> --- /dev/null\n>>> +++ b/Documentation/sensor_driver_requirements.rst\n>>> @@ -0,0 +1,64 @@\n>>> +.. SPDX-License-Identifier: CC-BY-SA-4.0\n>>> +\n>>> +.. _sensor-driver-requirements:\n>>> +\n>>> +Sensor Driver Requirements\n>>> +==========================\n>>> +\n>>> +libcamera handles imaging devices in the CameraSensor class and defines\n>>> +through its API a consistent interface towards other library components.\n>>\n>> Optional change:\n>>\n>> 'and defines a consistent interface through it's API towards other'\n>>\n>>> +\n>>> +The CameraSensor class uses the V4L2 subdev kernel API to interface with the\n>>> +camera sensor through one or multiple sub-devices exposed in userspace by\n>>> +the sensor driver.\n>>> +\n>>> +In order for libcamera to be fully operational and provide to applications and\n>>> +pipeline handlers all the required information to interface with the camera\n>>\n>> Another re-order:\n>>\n>> 'and provide all the required information to interface with the camera\n>> sensor to applications,'\n>>\n>>\n>> Both of those are perfectly understandable as you have written them,\n>> it's just that we wouldn't write it in that order in English ;-)\n>>\n>> No idea why or what the grammar rules are, that's just a pure 'I'd write\n>> that the other way' warning light fired in my head.\n>>\n>>\n>> So - no need to change if you don't want to.\n>>\n>>> +sensor, a set of mandatory and optional features the driver has to support\n>>> +has been defined.\n>>> +\n>>> +Mandatory Requirements\n>>> +----------------------\n>>> +\n>>> +The sensor driver is assumed to be fully compliant with the V4L2 specification.\n>>> +\n>>> +The sensor driver shall support the following V4L2 controls:\n>>> +\n>>> +* `V4L2_CID_HBLANK`_\n>>> +* `V4L2_CID_PIXEL_RATE`_\n>>> +\n>>> +.. _V4L2_CID_HBLANK: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-source.html\n>>> +.. _V4L2_CID_PIXEL_RATE: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-process.html\n>>> +\n>>> +Both controls are used to compute the sensor output timings.\n>>> +\n>>> +Optional Requirements\n>>> +---------------------\n>>> +\n>>> +The sensor driver should support the following V4L2 controls:\n>>> +\n>>> +* `V4L2_CID_CAMERA_ORIENTATION`_\n>>> +* `V4L2_CID_CAMERA_SENSOR_ROTATION`_\n>>> +\n>>> +.. _V4L2_CID_CAMERA_ORIENTATION: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-camera.html\n>>> +.. _V4L2_CID_CAMERA_SENSOR_ROTATION: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-process.html\n>>> +\n>>> +The controls are used to register the camera location and orientation.\n>>\n>> Should that read the camera location and rotation?\n>>\n>> Given the above and the definition of V4L2_CID_CAMERA_ORIENTATION, I\n>> think the orientation is the 'location'...\n>>\n>>\n>> With those updated or not as you see fit:\n>>\n>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>\n>>> +\n>>> +The sensor driver should implement support for the V4L2 Selection API,\n>>> +specifically it should implement support for the\n>>> +`VIDIOC_SUBDEV_G_SELECTION`_ ioctl with support for the following selection\n>>> +targets:\n>>> +\n>>> +.. _VIDIOC_SUBDEV_G_SELECTION: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-subdev-g-selection.html?highlight=g_selection#c.V4L.VIDIOC_SUBDEV_G_SELECTION\n>>> +\n>>> +* `V4L2_SEL_TGT_CROP_BOUNDS`_ to report the readable pixel array area size\n>>> +* `V4L2_SEL_TGT_CROP_DEFAULT`_ to report the active pixel array area size\n>>> +* `V4L2_SEL_TGT_CROP`_ to report the analogue selection rectangle\n>>> +\n>>> +Support for the selection API is scheduled to become a mandatory feature in\n>>> +the near future.\n>>> +\n>>> +.. _V4L2_SEL_TGT_CROP_BOUNDS: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2-selection-targets.html\n>>> +.. _V4L2_SEL_TGT_CROP_DEFAULT: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2-selection-targets.html\n>>> +.. _V4L2_SEL_TGT_CROP: https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2-selection-targets.html\n>>>\n>>\n>> --\n>> Regards\n>> --\n>> Kieran","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id A42ECC0F1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 18 Jan 2021 10:26:11 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 189E468120;\n\tMon, 18 Jan 2021 11:26:11 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 54E9960314\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 18 Jan 2021 11:26:09 +0100 (CET)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C07522BB;\n\tMon, 18 Jan 2021 11:26:08 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"lB38izjK\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1610965568;\n\tbh=N6U7ngRdPO620mn6pImYxV7I4sw0PiFv/7rXGb05W50=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=lB38izjKzT0UNrNg873TOye1daprHujQyy0XYuIDtPNCSXKz0nYR2Z8fDRq8q9KC+\n\tYatBm1a1BDBLM9ieOIgRsQWe0TOTCBgIbL06xDKL4A0i/Gc70dXUMP4EK9hUdO6p8X\n\tFYJ975qRf5rBqtVaS+7qWuUOp9lqW4MWSxRbnoX4=","To":"Jacopo Mondi <jacopo@jmondi.org>","References":"<20210115170033.27124-1-jacopo@jmondi.org>\n\t<20210115170033.27124-2-jacopo@jmondi.org>\n\t<d7b012a6-d6ca-daa6-fa7b-d756ec016720@ideasonboard.com>\n\t<20210118100814.ltq74jkz5lgyrhcs@uno.localdomain>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<c0895423-2518-5885-1b86-1db92a67071e@ideasonboard.com>","Date":"Mon, 18 Jan 2021 10:26:05 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20210118100814.ltq74jkz5lgyrhcs@uno.localdomain>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v7 01/10] libcamera: Document sensor\n\tdriver requirements","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Reply-To":"kieran.bingham@ideasonboard.com","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]