Skip to content

Commit 2a68d7c

Browse files
committed
dtoverlays: camera-mux-N-port: Allow multiple simultaneous instances
The overlays had a cam0 override that changed the CSI2 and I2C interfaces, but it didn't create unique nodes for the clocks and mux nodes meaning that loading two instances simultaneously didn't work. Update them to create unique nodes, and add overrides to set the GPIOs controlling the muxes. Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
1 parent bb4863f commit 2a68d7c

3 files changed

Lines changed: 36 additions & 12 deletions

File tree

arch/arm/boot/dts/overlays/README

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,7 @@ Params: cam0-arducam-64mp Select Arducam64MP for camera on port 0
945945
cam1-sync-sink Set camera on port 1 as vsync sink
946946

947947
cam0 Connect the mux to CAM0 port (default is CAM1)
948+
gpio-sel Set the GPIO used to control the mux
948949

949950

950951
Name: camera-mux-4port
@@ -1014,6 +1015,9 @@ Params: cam0-arducam-64mp Select Arducam64MP for camera on port 0
10141015
cam3-sync-sink Set camera on port 3 as vsync sink
10151016

10161017
cam0 Connect the mux to CAM0 port (default is CAM1)
1018+
gpio-sel Set the GPIO used to control the mux select line
1019+
gpio-en1 Set the GPIO used to control the mux en1 line
1020+
gpio-en2 Set the GPIO used to control the mux en2 line
10171021

10181022

10191023
Name: cap1106

arch/arm/boot/dts/overlays/camera-mux-2port-overlay.dts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -339,15 +339,17 @@
339339
fragment@203 {
340340
target-path="/";
341341
__overlay__ {
342-
mux: mux-controller {
342+
mux: mux-controller@1 {
343343
compatible = "gpio-mux";
344+
reg = <1>;
344345
#mux-control-cells = <0>;
345346

346347
mux-gpios = <&gpio 4 GPIO_ACTIVE_HIGH>;
347348
};
348349

349-
video-mux {
350+
videomux: video-mux@1 {
350351
compatible = "video-mux";
352+
reg = <1>;
351353
mux-controls = <&mux>;
352354
#address-cells = <1>;
353355
#size-cells = <0>;
@@ -378,23 +380,23 @@
378380
};
379381
};
380382

381-
clk_24mhz: clk_24mhz {
383+
clk_24mhz: clk_24mhz_1 {
382384
compatible = "fixed-clock";
383385
#clock-cells = <0>;
384386

385387
clock-frequency = <24000000>;
386388
status = "okay";
387389
};
388390

389-
clk_25mhz: clk_25mhz {
391+
clk_25mhz: clk_25mhz_1 {
390392
compatible = "fixed-clock";
391393
#clock-cells = <0>;
392394

393395
clock-frequency = <25000000>;
394396
status = "okay";
395397
};
396398

397-
clk_imx290: clk_imx290 {
399+
clk_imx290: clk_imx290_1 {
398400
compatible = "fixed-clock";
399401
#clock-cells = <0>;
400402

@@ -535,11 +537,18 @@
535537
<&imx290_1>,"clock-frequency:0";
536538

537539
cam0 = <&i2c_frag>, "target:0=",<&i2c_csi_dsi0>,
538-
<&csi_frag>, "target:0=",<&csi0>;
540+
<&csi_frag>, "target:0=",<&csi0>,
541+
<&mux>, "reg:0=0",
542+
<&videomux>, "reg:0=0",
543+
<&clk_24mhz>, "name=clk_24mhz_0",
544+
<&clk_25mhz>, "name=clk_25mhz_0",
545+
<&clk_imx290>, "name=clk_imx290_0";
539546

540547
cam0-sync-source = <&imx477_0>, "trigger-mode:0=1";
541548
cam0-sync-sink = <&imx477_0>, "trigger-mode:0=2";
542549
cam1-sync-source = <&imx477_1>, "trigger-mode:0=1";
543550
cam1-sync-sink = <&imx477_1>, "trigger-mode:0=2";
551+
552+
gpio-sel = <&mux>, "mux-gpios:4";
544553
};
545554
};

arch/arm/boot/dts/overlays/camera-mux-4port-overlay.dts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -617,8 +617,9 @@
617617
fragment@203 {
618618
target-path="/";
619619
__overlay__ {
620-
mux: mux-controller {
620+
mux: mux-controller@1 {
621621
compatible = "gpio-mux";
622+
reg = <1>;
622623
#mux-control-cells = <0>;
623624

624625
/* SEL, En2, En1 */
@@ -627,8 +628,9 @@
627628
<&gpio 17 GPIO_ACTIVE_HIGH>;
628629
};
629630

630-
video-mux {
631+
videomux: video-mux@1 {
631632
compatible = "video-mux";
633+
reg = <1>;
632634
mux-controls = <&mux>;
633635
#address-cells = <1>;
634636
#size-cells = <0>;
@@ -684,23 +686,23 @@
684686
};
685687
};
686688

687-
clk_24mhz: clk_24mhz {
689+
clk_24mhz: clk_24mhz_1 {
688690
compatible = "fixed-clock";
689691
#clock-cells = <0>;
690692

691693
clock-frequency = <24000000>;
692694
status = "okay";
693695
};
694696

695-
clk_25mhz: clk_25mhz {
697+
clk_25mhz: clk_25mhz_1 {
696698
compatible = "fixed-clock";
697699
#clock-cells = <0>;
698700

699701
clock-frequency = <25000000>;
700702
status = "okay";
701703
};
702704

703-
clk_imx290: clk_imx290 {
705+
clk_imx290: clk_imx290_1 {
704706
compatible = "fixed-clock";
705707
#clock-cells = <0>;
706708

@@ -940,7 +942,12 @@
940942
<&imx290_3>,"clock-frequency:0";
941943

942944
cam0 = <&i2c_frag>, "target:0=",<&i2c_csi_dsi0>,
943-
<&csi_frag>, "target:0=",<&csi0>;
945+
<&csi_frag>, "target:0=",<&csi0>,
946+
<&mux>, "reg:0=0",
947+
<&videomux>, "reg:0=0",
948+
<&clk_24mhz>, "name=clk_24mhz_0",
949+
<&clk_25mhz>, "name=clk_25mhz_0",
950+
<&clk_imx290>, "name=clk_imx290_0";
944951

945952
cam0-sync-source = <&imx477_0>, "trigger-mode:0=1";
946953
cam0-sync-sink = <&imx477_0>, "trigger-mode:0=2";
@@ -950,5 +957,9 @@
950957
cam2-sync-sink = <&imx477_2>, "trigger-mode:0=2";
951958
cam3-sync-source = <&imx477_3>, "trigger-mode:0=1";
952959
cam3-sync-sink = <&imx477_3>, "trigger-mode:0=2";
960+
961+
gpio-sel = <&mux>, "mux-gpios:4";
962+
gpio-en2 = <&mux>, "mux-gpios:16";
963+
gpio-en1 = <&mux>, "mux-gpios:28";
953964
};
954965
};

0 commit comments

Comments
 (0)