Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
bb025a3
dt-bindings: media: i2c: Add Sony IMX355
flamingradian Mar 24, 2026
db911e7
media: i2c: imx355: Support devicetree and power management
flamingradian Mar 24, 2026
87967ec
media: i2c: imx355: Restrict data lanes to 4
flamingradian Mar 24, 2026
b7ff2c2
media: i2c: imx355: Add support for 24 MHz external clock
okias Apr 14, 2026
445bda1
dt-bindings: media: imx355: Allow 2 CSI2 data lane output
6by9 May 14, 2026
be11c54
media: imx355: Remove duplicated registers from the mode tables
6by9 Apr 15, 2026
574888d
media: imx355: Remove setting FRM_LENGTH_LINES in the mode regs
6by9 Apr 15, 2026
adfc096
media: imx355: Programmatically set the crop parameters for each mode
6by9 Apr 15, 2026
0b5a0d3
media: imx355: Set register LINE_LENGTH_PCK programmatically
6by9 Apr 15, 2026
37f1f82
media: imx355: Set binning mode registers programmatically
6by9 Apr 15, 2026
daeeb02
media: imx355: Remove link_freq_index from each mode as ununsed
6by9 Apr 29, 2026
d19a29a
media: imx355: pixel_rate never changes, so don't recompute
6by9 Apr 29, 2026
d89db53
media: imx355: Remove redundant fll_min, and implement fixed offset
6by9 Apr 29, 2026
4be95c8
media: imx355: Add support for get_selection
6by9 Apr 15, 2026
cbca281
media: imx355: Use pm_runtime autosuspend_delay
6by9 Apr 15, 2026
5bf3317
media: imx355: Convert to new CCI register access helpers
6by9 Apr 29, 2026
265f8eb
media: imx355: Set the colorspace in the format
6by9 May 11, 2026
6899126
media: imx355: Define the exposure offset, and use that define
6by9 May 12, 2026
3e93c73
media: imx355: Use NULL ctrl_ops for HBLANK as it is a read-only control
6by9 Jun 17, 2026
010519b
media: imx355: Compute link frequency from PLL setup
6by9 Jun 30, 2026
2e544e0
media: imx355: Support 2 lane readout.
6by9 Apr 15, 2026
100cd91
media: imx355: Switch to using the subdev state.
6by9 May 11, 2026
cda4910
media: imx355: Remove storing cur_mode in the state
6by9 May 11, 2026
7ffd515
media: imx355: Make V4L2_CID_HBLANK controllable
6by9 May 12, 2026
54c69f6
arm: defconfigs: Add IMX355 to Pi defconfigs
6by9 Jun 18, 2026
533ec61
arm64: defconfig: Add IMX355 to Pi configurations
6by9 Apr 28, 2026
3fa26be
dtoverlays: Add overlay for imx355 image sensor
6by9 Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 118 additions & 0 deletions Documentation/devicetree/bindings/media/i2c/sony,imx355.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/media/i2c/sony,imx355.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Sony IMX355 Sensor

maintainers:
- Richard Acayan <mailingradian@gmail.com>

description:
The IMX355 sensor is a 3280x2464 image sensor, commonly found as the front
camera in smartphones.

allOf:
- $ref: /schemas/media/video-interface-devices.yaml#

properties:
compatible:
const: sony,imx355

reg:
maxItems: 1

clocks:
maxItems: 1

avdd-supply:
description: Analog power supply.

dvdd-supply:
description: Digital power supply.

dovdd-supply:
description: Interface power supply.

reset-gpios:
description: Reset GPIO (active low).
maxItems: 1

port:
$ref: /schemas/graph.yaml#/$defs/port-base
additionalProperties: false

properties:
endpoint:
$ref: /schemas/media/video-interfaces.yaml
unevaluatedProperties: false

properties:
data-lanes:
oneOf:
- items:
- const: 1
- const: 2
- const: 3
- const: 4
- items:
- const: 1
- const: 2

required:
- link-frequencies

required:
- endpoint

required:
- compatible
- reg
- clocks
- avdd-supply
- dvdd-supply
- dovdd-supply
- port

unevaluatedProperties: false

examples:
- |
#include <dt-bindings/clock/qcom,camcc-sdm845.h>
#include <dt-bindings/gpio/gpio.h>

i2c {
#address-cells = <1>;
#size-cells = <0>;

camera@1a {
compatible = "sony,imx355";
reg = <0x1a>;

clocks = <&camcc CAM_CC_MCLK2_CLK>;

assigned-clocks = <&camcc CAM_CC_MCLK2_CLK>;
assigned-clock-rates = <24000000>;

reset-gpios = <&tlmm 9 GPIO_ACTIVE_LOW>;

avdd-supply = <&cam_front_ldo>;
dvdd-supply = <&cam_front_ldo>;
dovdd-supply = <&cam_vio_ldo>;

pinctrl-names = "default";
pinctrl-0 = <&cam_front_default>;

rotation = <270>;
orientation = <0>;

port {
cam_front_endpoint: endpoint {
data-lanes = <1 2 3 4>;
link-frequencies = /bits/ 64 <360000000>;
remote-endpoint = <&camss_endpoint1>;
};
};
};
};
1 change: 1 addition & 0 deletions arch/arm/boot/dts/overlays/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
imx296.dtbo \
imx327.dtbo \
imx335.dtbo \
imx355.dtbo \
imx378.dtbo \
imx415.dtbo \
imx462.dtbo \
Expand Down
18 changes: 18 additions & 0 deletions arch/arm/boot/dts/overlays/README
Original file line number Diff line number Diff line change
Expand Up @@ -2977,6 +2977,24 @@ Params: orientation Sensor orientation (0 = front, 1 = rear,
Module (1, 3, 4, or 5) or Pi 5.


Name: imx355
Info: Sony IMX355 camera module.
Uses Unicam 1, which is the standard camera connector on most Pi
variants.
Load: dtoverlay=imx355,<param>
Params: orientation Sensor orientation (0 = front, 1 = rear,
2 = external, default external)
rotation Mounting rotation of the camera sensor (0 or
180, default 0)
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 (CSI0, i2c_vc, and cam0_reg).
4lane Enable 4 CSI2 lanes. This requires a Compute
Module (1, 3, 4, or 5) or Pi 5.
vcm Configure a VCM focus drive on the sensor.


Name: imx378
Info: Sony IMX378 camera module.
Uses Unicam 1, which is the standard camera connector on most Pi
Expand Down
111 changes: 111 additions & 0 deletions arch/arm/boot/dts/overlays/imx355-overlay.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
// SPDX-License-Identifier: GPL-2.0-only
// Definitions for IMX355 camera module on VC I2C bus
/dts-v1/;
/plugin/;

#include <dt-bindings/gpio/gpio.h>

/{
compatible = "brcm,bcm2835";

fragment@0 {
target = <&i2c0if>;
__overlay__ {
status = "okay";
};
};

clk_frag: fragment@1 {
target = <&cam1_clk>;
__overlay__ {
status = "okay";
clock-frequency = <24000000>;
};
};

fragment@2 {
target = <&i2c0mux>;
__overlay__ {
status = "okay";
};
};

i2c_frag: fragment@100 {
target = <&i2c_csi_dsi>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";

#include "imx355.dtsi"

vcm: ad5398@c {
compatible = "adi,ad5398";
reg = <0x0c>;
status = "disabled";
VANA-supply = <&cam1_reg>;
};
};
};

csi_frag: fragment@101 {
target = <&csi1>;
csi: __overlay__ {
status = "okay";

port {
csi_ep: endpoint {
remote-endpoint = <&cam_endpoint>;
clock-lanes = <0>;
data-lanes = <1 2>;
};
};
};
};

fragment@102 {
target = <&csi1>;
__dormant__ {
compatible = "brcm,bcm2835-unicam-legacy";
};
};

fragment@201 {
target = <&csi_ep>;
__dormant__ {
data-lanes = <1 2 3 4>;
};
};

fragment@202 {
target = <&cam_endpoint>;
__dormant__ {
data-lanes = <1 2 3 4>;
link-frequencies =
/bits/ 64 <360000000>;
};
};

__overrides__ {
rotation = <&cam_node>,"rotation:0";
orientation = <&cam_node>,"orientation:0";
media-controller = <0>,"!102";
cam0 = <&i2c_frag>, "target:0=",<&i2c_csi_dsi0>,
<&csi_frag>, "target:0=",<&csi0>,
<&clk_frag>, "target:0=",<&cam0_clk>,
<&cam_node>, "clocks:0=",<&cam0_clk>,
<&cam_node>, "avdd-supply:0=",<&cam0_reg>,
<&vcm>, "VANA-supply:0=", <&cam0_reg>;
vcm = <&vcm>, "status=okay",
<&cam_node>,"lens-focus:0=", <&vcm>;
4lane = <0>, "+201+202";
};
};

&cam_node {
status = "okay";
};

&cam_endpoint {
remote-endpoint = <&csi_ep>;
};
26 changes: 26 additions & 0 deletions arch/arm/boot/dts/overlays/imx355.dtsi
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Fragment that configures an imx355

cam_node: imx219@1a {
compatible = "sony,imx355";
reg = <0x1a>;
status = "disabled";

clocks = <&cam1_clk>;
clock-names = "xclk";

avdd-supply = <&cam1_reg>; /* 2.8v */
dvdd-supply = <&cam_dummy_reg>; /* 1.8v */
dovdd-supply = <&cam_dummy_reg>;/* 1.2v */

rotation = <180>;
orientation = <2>;

port {
cam_endpoint: endpoint {
clock-lanes = <0>;
data-lanes = <1 2>;
link-frequencies =
/bits/ 64 <444000000>;
};
};
};
1 change: 1 addition & 0 deletions arch/arm/configs/bcm2709_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -942,6 +942,7 @@ CONFIG_VIDEO_IMX283=m
CONFIG_VIDEO_IMX290=m
CONFIG_VIDEO_IMX296=m
CONFIG_VIDEO_IMX335=m
CONFIG_VIDEO_IMX355=m
CONFIG_VIDEO_IMX415=m
CONFIG_VIDEO_IMX477=m
CONFIG_VIDEO_IMX500=m
Expand Down
1 change: 1 addition & 0 deletions arch/arm/configs/bcmrpi_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -935,6 +935,7 @@ CONFIG_VIDEO_IMX283=m
CONFIG_VIDEO_IMX290=m
CONFIG_VIDEO_IMX296=m
CONFIG_VIDEO_IMX335=m
CONFIG_VIDEO_IMX355=m
CONFIG_VIDEO_IMX415=m
CONFIG_VIDEO_IMX477=m
CONFIG_VIDEO_IMX500=m
Expand Down
1 change: 1 addition & 0 deletions arch/arm64/configs/bcm2711_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -1043,6 +1043,7 @@ CONFIG_VIDEO_IMX283=m
CONFIG_VIDEO_IMX290=m
CONFIG_VIDEO_IMX296=m
CONFIG_VIDEO_IMX335=m
CONFIG_VIDEO_IMX355=m
CONFIG_VIDEO_IMX415=m
CONFIG_VIDEO_IMX477=m
CONFIG_VIDEO_IMX500=m
Expand Down
1 change: 1 addition & 0 deletions arch/arm64/configs/bcm2712_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -1045,6 +1045,7 @@ CONFIG_VIDEO_IMX283=m
CONFIG_VIDEO_IMX290=m
CONFIG_VIDEO_IMX296=m
CONFIG_VIDEO_IMX335=m
CONFIG_VIDEO_IMX355=m
CONFIG_VIDEO_IMX415=m
CONFIG_VIDEO_IMX477=m
CONFIG_VIDEO_IMX500=m
Expand Down
1 change: 1 addition & 0 deletions drivers/media/i2c/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ config VIDEO_IMX335

config VIDEO_IMX355
tristate "Sony IMX355 sensor support"
select V4L2_CCI_I2C
help
This is a Video4Linux2 sensor driver for the Sony
IMX355 camera.
Expand Down
Loading
Loading