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