Message ID | 20201018123106.14917-1-kholk11@gmail.com |
---|---|
Headers | show |
Series | Add support for the Sony Exmor-RS IMX300 camera sensor | expand |
On Sun, 18 Oct 2020 at 14:36, <kholk11@gmail.com> wrote: > > From: AngeloGioacchino Del Regno <kholk11@gmail.com> > > Add YAML device tree binding for IMX300 CMOS image sensor, and > the relevant MAINTAINERS entries. > > Signed-off-by: AngeloGioacchino Del Regno <kholk11@gmail.com> > --- > .../devicetree/bindings/media/i2c/imx300.yaml | 115 ++++++++++++++++++ > MAINTAINERS | 8 ++ > 2 files changed, 123 insertions(+) > create mode 100644 Documentation/devicetree/bindings/media/i2c/imx300.yaml > > diff --git a/Documentation/devicetree/bindings/media/i2c/imx300.yaml b/Documentation/devicetree/bindings/media/i2c/imx300.yaml > new file mode 100644 > index 000000000000..82fb19c5018c > --- /dev/null > +++ b/Documentation/devicetree/bindings/media/i2c/imx300.yaml > @@ -0,0 +1,115 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/media/i2c/imx300.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Sony 1/2.3-Inch 8Mpixel Stacked CMOS Digital Image Sensor > + > +maintainers: > + - AngeloGioacchino Del Regno <kholk11@gmail.com> > + > +description: |- > + The Sony IMX300 is a 1/2.3-inch Stacked CMOS (Exmor-RS) digital image > + sensor with a pixel size of 1.08um and an active array size of > + 5948H x 4140V. It is programmable through I2C interface at address 0x10. > + Image data is sent through MIPI CSI-2, which is configured as either 2 or > + 4 data lanes. > + > +properties: > + compatible: > + const: sony,imx300 > + > + reg: > + description: I2C device address Skip the description, it is obvious. > + maxItems: 1 > + > + clocks: > + maxItems: 1 > + > + VDIG-supply: > + description: > + Digital I/O voltage supply, 1.15-1.20 volts > + > + VANA-supply: > + description: > + Analog voltage supply, 2.2 volts > + > + VDDL-supply: Lower-case for all three supplies. > + description: > + Digital core voltage supply, 1.8 volts > + > + reset-gpios: > + description: |- > + Reference to the GPIO connected to the xclr pin, if any. > + Must be released (set high) after all supplies are applied. > + > + # See ../video-interfaces.txt for more details > + port: > + type: object > + properties: > + endpoint: > + type: object > + properties: > + data-lanes: > + description: |- > + The sensor supports either two-lane, or four-lane operation. > + If this property is omitted four-lane operation is assumed. > + For four-lane operation the property must be set to <0 1 2 3>. > + items: > + - const: 0 > + - const: 1 > + - const: 2 > + - const: 3 You miss here two-lane option (oneOf). Seems there is a default, so you could add here "default: <0 1 2 3> > + > + clock-noncontinuous: > + type: boolean > + description: |- > + MIPI CSI-2 clock is non-continuous if this property is present, > + otherwise it's continuous. > + > + link-frequencies: > + $ref: /schemas/types.yaml#/definitions/uint64-array > + description: > + Allowed data bus frequencies. > + > + required: > + - link-frequencies > + > +required: > + - compatible > + - reg > + - clocks > + - VANA-supply > + - VDIG-supply > + - VDDL-supply > + - port > + > +additionalProperties: false > + > +examples: > + - | > + i2c0 { > + #address-cells = <1>; > + #size-cells = <0>; > + > + imx300: sensor@10 { > + compatible = "sony,imx300"; > + reg = <0x10>; > + clocks = <&imx300_xclk>; > + VANA-supply = <&imx300_vana>; /* 2.2v */ > + VDIG-supply = <&imx300_vdig>; /* 1.2v */ > + VDDL-supply = <&imx300_vddl>; /* 1.8v */ > + > + port { > + imx300_0: endpoint { > + remote-endpoint = <&csi1_ep>; > + data-lanes = <0 1 2 3>; > + clock-noncontinuous; > + link-frequencies = /bits/ 64 <780000000 480000000>; > + }; > + }; > + }; > + }; > + > +... > diff --git a/MAINTAINERS b/MAINTAINERS > index c66710dd7e0a..231937d9d16a 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -16279,6 +16279,14 @@ T: git git://linuxtv.org/media_tree.git > F: Documentation/devicetree/bindings/media/i2c/imx290.txt > F: drivers/media/i2c/imx290.c > > +SONY IMX300 SENSOR DRIVER > +M: AngeloGioacchino Del Regno <kholk11@gmail.com> > +L: linux-media@vger.kernel.org > +S: Maintained > +T: git git://linuxtv.org/media_tree.git Skip the Git tree, unless you manage it. Best regards, Krzysztof
On Sun, Oct 18, 2020 at 02:31:06PM +0200, kholk11@gmail.com wrote: > From: AngeloGioacchino Del Regno <kholk11@gmail.com> > > Add YAML device tree binding for IMX300 CMOS image sensor, and > the relevant MAINTAINERS entries. > > Signed-off-by: AngeloGioacchino Del Regno <kholk11@gmail.com> > --- > .../devicetree/bindings/media/i2c/imx300.yaml | 115 ++++++++++++++++++ sony,imx300.yaml > MAINTAINERS | 8 ++ > 2 files changed, 123 insertions(+) > create mode 100644 Documentation/devicetree/bindings/media/i2c/imx300.yaml > > diff --git a/Documentation/devicetree/bindings/media/i2c/imx300.yaml b/Documentation/devicetree/bindings/media/i2c/imx300.yaml > new file mode 100644 > index 000000000000..82fb19c5018c > --- /dev/null > +++ b/Documentation/devicetree/bindings/media/i2c/imx300.yaml > @@ -0,0 +1,115 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/media/i2c/imx300.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Sony 1/2.3-Inch 8Mpixel Stacked CMOS Digital Image Sensor > + > +maintainers: > + - AngeloGioacchino Del Regno <kholk11@gmail.com> > + > +description: |- > + The Sony IMX300 is a 1/2.3-inch Stacked CMOS (Exmor-RS) digital image > + sensor with a pixel size of 1.08um and an active array size of > + 5948H x 4140V. It is programmable through I2C interface at address 0x10. > + Image data is sent through MIPI CSI-2, which is configured as either 2 or > + 4 data lanes. > + > +properties: > + compatible: > + const: sony,imx300 > + > + reg: > + description: I2C device address > + maxItems: 1 > + > + clocks: > + maxItems: 1 > + > + VDIG-supply: > + description: > + Digital I/O voltage supply, 1.15-1.20 volts > + > + VANA-supply: > + description: > + Analog voltage supply, 2.2 volts > + > + VDDL-supply: > + description: > + Digital core voltage supply, 1.8 volts > + > + reset-gpios: > + description: |- > + Reference to the GPIO connected to the xclr pin, if any. > + Must be released (set high) after all supplies are applied. > + > + # See ../video-interfaces.txt for more details > + port: > + type: object > + properties: > + endpoint: > + type: object > + properties: > + data-lanes: > + description: |- > + The sensor supports either two-lane, or four-lane operation. > + If this property is omitted four-lane operation is assumed. > + For four-lane operation the property must be set to <0 1 2 3>. > + items: > + - const: 0 > + - const: 1 > + - const: 2 > + - const: 3 > + > + clock-noncontinuous: > + type: boolean > + description: |- > + MIPI CSI-2 clock is non-continuous if this property is present, > + otherwise it's continuous. No need to redefine a common property. Just 'clock-noncontinuous: true' to indicate using it. > + > + link-frequencies: > + $ref: /schemas/types.yaml#/definitions/uint64-array > + description: > + Allowed data bus frequencies. Any constraints on frequencies? > + > + required: > + - link-frequencies > + > +required: > + - compatible > + - reg > + - clocks > + - VANA-supply > + - VDIG-supply > + - VDDL-supply > + - port > + > +additionalProperties: false > + > +examples: > + - | > + i2c0 { > + #address-cells = <1>; > + #size-cells = <0>; > + > + imx300: sensor@10 { > + compatible = "sony,imx300"; > + reg = <0x10>; > + clocks = <&imx300_xclk>; > + VANA-supply = <&imx300_vana>; /* 2.2v */ > + VDIG-supply = <&imx300_vdig>; /* 1.2v */ > + VDDL-supply = <&imx300_vddl>; /* 1.8v */ > + > + port { > + imx300_0: endpoint { > + remote-endpoint = <&csi1_ep>; > + data-lanes = <0 1 2 3>; > + clock-noncontinuous; > + link-frequencies = /bits/ 64 <780000000 480000000>; > + }; > + }; > + }; > + }; > + > +... > diff --git a/MAINTAINERS b/MAINTAINERS > index c66710dd7e0a..231937d9d16a 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -16279,6 +16279,14 @@ T: git git://linuxtv.org/media_tree.git > F: Documentation/devicetree/bindings/media/i2c/imx290.txt > F: drivers/media/i2c/imx290.c > > +SONY IMX300 SENSOR DRIVER > +M: AngeloGioacchino Del Regno <kholk11@gmail.com> > +L: linux-media@vger.kernel.org > +S: Maintained > +T: git git://linuxtv.org/media_tree.git > +F: Documentation/devicetree/bindings/media/i2c/imx300.yaml > +F: drivers/media/i2c/imx300.c > + > SONY IMX319 SENSOR DRIVER > M: Bingbu Cao <bingbu.cao@intel.com> > L: linux-media@vger.kernel.org > -- > 2.28.0 >
From: AngeloGioacchino Del Regno <kholk11@gmail.com> This patch series adds support for the IMX300 camera sensor, (one of the) first Exmor-RS Stacked CMOS sensor(s), with support for both of the supported aspect ratios (4:3 and 16:9). This driver came out from reverse engineering of so called "userspace drivers" from Sony Xperia smartphones. I tried to document all of my findings and giving a sense to the registers as much as possible, but that was only partially possible and resembles some names from the IMX219 public datasheet, even though the addresses are basically completely different. This camera sensor driver was tested with all the resolutions declared in it on two phones: Sony Xperia XA2 and XA2 Ultra, on a SDM630 SoC (camss patches for this SoC will come in a later series) and is working great. AngeloGioacchino Del Regno (2): media: i2c: Add driver for the Sony Exmor-RS IMX300 camera sensor media: dt-bindings: media: i2c: Add IMX300 CMOS sensor binding .../devicetree/bindings/media/i2c/imx300.yaml | 115 + MAINTAINERS | 8 + drivers/media/i2c/Kconfig | 13 + drivers/media/i2c/Makefile | 1 + drivers/media/i2c/imx300.c | 3087 +++++++++++++++++ 5 files changed, 3224 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/imx300.yaml create mode 100644 drivers/media/i2c/imx300.c