diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile index a61cefbfc58ca..50130b681b016 100644 --- a/arch/arm/boot/dts/overlays/Makefile +++ b/arch/arm/boot/dts/overlays/Makefile @@ -134,6 +134,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ ilitek251x.dtbo \ imx219.dtbo \ imx258.dtbo \ + imx283.dtbo \ imx290.dtbo \ imx296.dtbo \ imx327.dtbo \ diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README index 52729caa65920..c098700ab8a1a 100644 --- a/arch/arm/boot/dts/overlays/README +++ b/arch/arm/boot/dts/overlays/README @@ -2778,6 +2778,29 @@ Params: rotation Mounting rotation of the camera sensor (0 or Module (1, 3, 4, or 5) or Pi 5. +Name: imx283 +Info: Sony IMX283 camera module. + Uses Unicam 1, which is the standard camera connector on most Pi + variants. This sensor only supports 4 lane operation and therefore + requires a Compute Module (1, 3, 4, or 5) or Pi 5. +Load: dtoverlay=imx283,= +Params: rotation Mounting rotation of the camera sensor (0 or + 180, default 180) + orientation Sensor orientation (0 = front, 1 = rear, + 2 = external, default external) + clock-frequency Sets the clock frequency to match that used on + the board. + Known tested values include 24MHz (the default) + and 12MHz. + link-frequency Allowable link frequency values to use in Hz: + 720000000 (default), 360000000. + media-controller Configure use of Media Controller API for + configuring the sensor (default on) + cam0 Adopt the default configuration for CAM0 on a + Compute Module or Pi5 (CSI0, i2c_vc, and + cam0_reg). + + Name: imx290 Info: Sony IMX290 camera module. Uses Unicam 1, which is the standard camera connector on most Pi diff --git a/arch/arm/boot/dts/overlays/imx283-overlay.dts b/arch/arm/boot/dts/overlays/imx283-overlay.dts new file mode 100644 index 0000000000000..8445cf8f28565 --- /dev/null +++ b/arch/arm/boot/dts/overlays/imx283-overlay.dts @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Definitions for IMX283 camera module on VC I2C bus +/dts-v1/; +/plugin/; + +#include + +/{ + compatible = "brcm,bcm2835"; + + fragment@0 { + target = <&i2c0if>; + __overlay__ { + status = "okay"; + }; + }; + + clk_frag: fragment@1 { + target = <&cam1_clk>; + cam_clk: __overlay__ { + status = "okay"; + clock-frequency = <24000000>; + }; + }; + + fragment@2 { + target = <&i2c0mux>; + __overlay__ { + status = "okay"; + }; + }; + + reg_frag: fragment@3 { + target = <&cam1_reg>; + cam_reg: __overlay__ { + startup-delay-us = <200000>; + off-on-delay-us = <30000>; + regulator-min-microvolt = <2900000>; + regulator-max-microvolt = <2900000>; + }; + }; + + i2c_frag: fragment@100 { + target = <&i2c_csi_dsi>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + + #include "imx283.dtsi" + }; + }; + + csi_frag: fragment@101 { + target = <&csi1>; + csi: __overlay__ { + status = "okay"; + brcm,media-controller; + + port { + csi_ep: endpoint { + remote-endpoint = <&cam_endpoint>; + clock-lanes = <0>; + data-lanes = <1 2 3 4>; + clock-noncontinuous; + }; + }; + }; + }; + + __overrides__ { + clock-frequency = <&cam_clk>,"clock-frequency:0"; + rotation = <&cam_node>,"rotation:0"; + orientation = <&cam_node>,"orientation:0"; + media-controller = <&csi>,"brcm,media-controller?"; + cam0 = <&i2c_frag>, "target:0=",<&i2c_csi_dsi0>, + <&csi_frag>, "target:0=",<&csi0>, + <&clk_frag>, "target:0=",<&cam0_clk>, + <®_frag>, "target:0=",<&cam0_reg>, + <&cam_node>, "clocks:0=",<&cam0_clk>, + <&cam_node>, "vadd-supply:0=",<&cam0_reg>; + link-frequency = <&cam_endpoint>,"link-frequencies#0"; + }; +}; + +&cam_node { + status = "okay"; +}; + +&cam_endpoint { + remote-endpoint = <&csi_ep>; +}; diff --git a/arch/arm/boot/dts/overlays/imx283.dtsi b/arch/arm/boot/dts/overlays/imx283.dtsi new file mode 100644 index 0000000000000..07ba72379f36d --- /dev/null +++ b/arch/arm/boot/dts/overlays/imx283.dtsi @@ -0,0 +1,26 @@ +// Fragment that configures a Sony IMX283 + +cam_node: imx283@1a { + compatible = "sony,imx283"; + reg = <0x1a>; + status = "disabled"; + + clocks = <&cam1_clk>; + clock-names = "xclk"; + + vadd-supply = <&cam1_reg>; /* Analog power supply (2.9v) */ + vdd1-supply = <&cam_dummy_reg>; /* Interface power supply (1.8V) */ + vdd2-supply = <&cam_dummy_reg>; /* Digital power supply (1.2V) */ + + rotation = <180>; + orientation = <2>; + + port { + cam_endpoint: endpoint { + clock-lanes = <0>; + data-lanes = <1 2 3 4>; + clock-noncontinuous; + link-frequencies = /bits/ 64 <720000000>; + }; + }; +}; diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig index c166adfa2dc2e..ae2f9043eacfd 100644 --- a/arch/arm/configs/bcm2709_defconfig +++ b/arch/arm/configs/bcm2709_defconfig @@ -942,6 +942,7 @@ CONFIG_VIDEO_ARDUCAM_64MP=m CONFIG_VIDEO_ARDUCAM_PIVARIETY=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX283=m CONFIG_VIDEO_IMX290=m CONFIG_VIDEO_IMX296=m CONFIG_VIDEO_IMX335=m diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig index 48395bb5d2ffe..6787d7b549a0b 100644 --- a/arch/arm/configs/bcm2711_defconfig +++ b/arch/arm/configs/bcm2711_defconfig @@ -971,6 +971,7 @@ CONFIG_VIDEO_ARDUCAM_64MP=m CONFIG_VIDEO_ARDUCAM_PIVARIETY=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX283=m CONFIG_VIDEO_IMX290=m CONFIG_VIDEO_IMX296=m CONFIG_VIDEO_IMX335=m diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig index 58550341939d2..a2a6df81d067b 100644 --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig @@ -935,6 +935,7 @@ CONFIG_VIDEO_ARDUCAM_64MP=m CONFIG_VIDEO_ARDUCAM_PIVARIETY=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX283=m CONFIG_VIDEO_IMX290=m CONFIG_VIDEO_IMX296=m CONFIG_VIDEO_IMX335=m diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig index 984b90c8cef2e..f49aa217e466a 100644 --- a/arch/arm64/configs/bcm2711_defconfig +++ b/arch/arm64/configs/bcm2711_defconfig @@ -1020,6 +1020,7 @@ CONFIG_VIDEO_ARDUCAM_64MP=m CONFIG_VIDEO_ARDUCAM_PIVARIETY=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX283=m CONFIG_VIDEO_IMX290=m CONFIG_VIDEO_IMX296=m CONFIG_VIDEO_IMX335=m diff --git a/arch/arm64/configs/bcm2711_rt_defconfig b/arch/arm64/configs/bcm2711_rt_defconfig index 2eb7ac68cabc4..53721526d51e5 100644 --- a/arch/arm64/configs/bcm2711_rt_defconfig +++ b/arch/arm64/configs/bcm2711_rt_defconfig @@ -1020,6 +1020,7 @@ CONFIG_VIDEO_ARDUCAM_64MP=m CONFIG_VIDEO_ARDUCAM_PIVARIETY=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX283=m CONFIG_VIDEO_IMX290=m CONFIG_VIDEO_IMX296=m CONFIG_VIDEO_IMX335=m diff --git a/arch/arm64/configs/bcm2712_defconfig b/arch/arm64/configs/bcm2712_defconfig index 41ea59f68d35d..4567d1afb3702 100644 --- a/arch/arm64/configs/bcm2712_defconfig +++ b/arch/arm64/configs/bcm2712_defconfig @@ -1022,6 +1022,7 @@ CONFIG_VIDEO_ARDUCAM_64MP=m CONFIG_VIDEO_ARDUCAM_PIVARIETY=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX283=m CONFIG_VIDEO_IMX290=m CONFIG_VIDEO_IMX296=m CONFIG_VIDEO_IMX335=m