xasm
Posts: 34
Joined: Mon Nov 19, 2018 8:28 am

Two cameras (CM3) question

Tue Nov 20, 2018 3:44 pm

Hi, 6by9!

So, the new thread. )

I'm trying to get 2 video signals using 2 B102 modules. The modules are connected to CAM0 and CAM1. I thought that it's possible to run 2 instances of mplayer and get video from 2 sources at the same time.

So, as I mentioned here: viewtopic.php?f=38&t=120702&start=475, one camera works perfectly. The question is how to start the second camera, because it seems that I have a hardware conflict somewhere.

vcgencmd get_camera reports Supported=2 connected=1

no dev/video1

I connected:

CD1_SDA ==> 28
CD1_SCL ==> 29
CD0_SDA ==> 44
CD0_SCL ==> 45

/boot/config.txt has line

dtoverlay=tc358743,i2c_pins_28_29=1

The question is, how to reconfigure the system and make it work?

aBUGSworstnightmare
Posts: 1513
Joined: Tue Jun 30, 2015 1:35 pm

Re: Two cameras (CM3) question

Tue Nov 20, 2018 5:10 pm

You're on a Compute module, so question: do you have a dtblob.bin in place (configurimg your camera interface)? Enabling I2C only is not enough...

https://www.raspberrypi.org/documentati ... /README.md

Why didn't you post in Compute Module Section?

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 7578
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: Two cameras (CM3) question

Tue Nov 20, 2018 9:15 pm

Your reference to connecting a second camera worried me that you were attaching a Pi camera module in addition to the tc358743. I'm glad that's not the case.
You do NOT need a dt-blob.bin if you are using the Linux kernel driver to talk to the sensor. However the existing overlays are only set up for using CAM0. As a second issue there is no current configuration that allows dynamic remuxing of i2c0 to different pins which is what you need to talk to 2 B102 boards. However there is nothing fundamentally stopping it if you write some device tree config.

Taking https://github.com/raspberrypi/linux/bl ... verlay.dts as a base, replace references to csi1 to csi0.

The easiest answer for i2c, either replace references to i2c_vc to i2c_arm and use GPIOs 2&3.

Alternatively there is a module i2c_mux_pinctrl that does allow dynamic pinmuxing. I had got most of it working on https://github.com/raspberrypi/linux/pull/2578, but trying to retain backwards compatibility was the issue. Each set of pins shows up as an individual /dev/i2cN device, with GPIOs 0&1 showing up as i2c0 and hopefully whatever is connected to the camera/display ports as i2c4 (tagged in the kernel as i2c_csi_dsi). There is a quirk that the base i2c controller still exists but not attached to any pins (it'll retain the last pin muxing). In the PR it shifts that away to i2c10 to be ignored.

You don't need to worry about backwards compatibility so can hack the DT around as much as you like. Configure it to have at least two sets of pins, name them as you see fit, and configure one tc358743 attached to each of the busses.
Software Engineer at Raspberry Pi Trading. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

xasm
Posts: 34
Joined: Mon Nov 19, 2018 8:28 am

Re: Two cameras (CM3) question

Wed Nov 21, 2018 1:49 pm

6by9, thank you for the reply.

I made the custom dts file (replaced i2c_vc with i2c_arm, csi1 with csi0, and i2c0 with i2c1. Additionally, I changed brcm,pins = <28 29>brcm,pins = <2 3> and connected CD0_SDA,CD0_SCL to pins 2,3). Full new dts file below:

Code: Select all

// Definitions for Toshiba TC358743 HDMI to CSI2 bridge on VC I2C bus
/dts-v1/;
/plugin/;

/{
	compatible = "brcm,bcm2708";

	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			#address-cells = <1>;
			#size-cells = <0>;
			status = "okay";

			[email protected] {
				compatible = "toshiba,tc358743";
				reg = <0x0f>;
				status = "okay";

				clocks = <&tc358743_clk>;
				clock-names = "refclk";

				tc358743_clk: bridge-clk {
					compatible = "fixed-clock";
					#clock-cells = <0>;
					clock-frequency = <27000000>;
				};

				port {
					tc358743: endpoint {
						remote-endpoint = <&csi0_ep>;
						clock-lanes = <0>;
						clock-noncontinuous;
						link-frequencies =
							/bits/ 64 <486000000>;
					};
				};
			};
		};
	};

	[email protected] {
		target = <&csi0>;
		__overlay__ {
			status = "okay";

			port {
				csi0_ep: endpoint {
					remote-endpoint = <&tc358743>;
				};
			};
		};
	};

	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			[email protected] {
				port {
					endpoint {
						data-lanes = <1 2>;
					};
				};
			};
		};
	};

	[email protected] {
		target = <&i2c_arm>;
		__dormant__ {
			[email protected] {
				port {
					endpoint {
						data-lanes = <1 2 3 4>;
					};
				};
			};
		};
	};

	[email protected] {
		target = <&i2c1_pins>;
		__dormant__ {
			brcm,pins = <2 3>;
			brcm,function = <4>; /* alt0 */
		};
	};
	[email protected] {
		target = <&i2c1_pins>;
		__overlay__ {
			brcm,pins = <44 45>;
			brcm,function = <5>; /* alt1 */
		};
	};
	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			status = "okay";
		};
	};

	__overrides__ {
		i2c_pins_2_3 = <0>,"+4-5";
		4lane = <0>, "-2+3";
	        link-frequency = <&tc358743>,"link-frequencies#0";
	};
};
I compiled the dts:

dtc -I dts -O dtb -o dt-blob-2cam.dtb dt-blob-2cam.dts
sudo cp dt-blob-2cam.dtb /boot/dt-blob.bin

Then, I added a line to /boot/config.txt

dtparam=i2c_arm=on
dtoverlay=tc358743,i2c_pins_28_29=1,i2c_pins_2_3=1

Video from the first B102 comes fine. But still no dev/video1

I'm sure that I did something wrong, could you please take a look? Thank you!

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 7578
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: Two cameras (CM3) question

Wed Nov 21, 2018 2:09 pm

You need two overlays (*) - one to connect to csi1 and i2c_vc, and one to connect to csi0 and i2c_arm (or a mux).
The two overlays need to have different names to distinguish between them.

Overall you need to provide the config for all the devices - at the moment you've used my overlay for one B102, and your modified one for the other B102. Now load both together and you should get two /dev/video* devices.

(*) or one combined overlay. Up to you.
Software Engineer at Raspberry Pi Trading. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

xasm
Posts: 34
Joined: Mon Nov 19, 2018 8:28 am

Re: Two cameras (CM3) question

Wed Nov 21, 2018 2:17 pm

Hmm, different names - do you mean dt-blob.bin and for example dt-blob-2.bin?

I'll try. Actually, I expected that new overlay for i2c_arm kills settings for i2c_vc, but the first B102 still working good. So I suspect, that the overlay doesn't work as expected.

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 7578
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: Two cameras (CM3) question

Wed Nov 21, 2018 2:32 pm

xasm wrote:
Wed Nov 21, 2018 2:17 pm
Hmm, different names - do you mean dt-blob.bin and for example dt-blob-2.bin?
IGNORE dt-blob.bin / dt-blob.dts.. They are not relevant when driving everything from the Linux kernel.

Copy your modified tc358743-overlay.dts file to tc358743-csi0-overlays.dts.
Compile it, and copy the resulting tc358743-csi0.dtbo to /boot/overlays
Add "dtoverlay=tc358743-csi0" to /boot/config.txt
xasm wrote:I'll try. Actually, I expected that new overlay for i2c_arm kills settings for i2c_vc, but the first B102 still working good. So I suspect, that the overlay doesn't work as expected.
Add "dtdebug=1" to /boot/config.txt and reboot. Run "sudo vcdbg log msg" and it will dump out the firmware log from where it was parsing the dtoverlays etc. I get lines like

Code: Select all

000757.678: brfs: File read: /mfs/sd/cmdline.txt
000757.783: Read command line from file 'cmdline.txt':
000757.851: 'cma=256M dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/nfs nfsroot=192.168.2.1:/nfs/pi2_stretch_kms rw ip=dhcp rootwait elevator=deadline earlyprintk'
000758.213: brfs: File read: 171 bytes
001190.746: brfs: File read: /mfs/sd/kernel7.img
001190.815: Loading 'kernel7.img' to 0x8000 size 0x4e9ff0
001195.265: No kernel trailer - assuming DT-capable
001195.342: Trying Device Tree file 'bcm2710-rpi-3-b-plus.dtb'
001195.413: brfs: File read: 5152752 bytes
001200.991: brfs: File read: /mfs/sd/bcm2710-rpi-3-b-plus.dtb
001201.062: Loading 'bcm2710-rpi-3-b-plus.dtb' to 0x4f1ff0 size 0x6410
001234.261: dtdebug: delete_node(/__local_fixups__)
001250.225: dtdebug: /aliases:i2c_vc=i2c0
001267.757: dtdebug: /__symbols__:i2c_vc=i2c0
001280.681: dtdebug: /__overrides__:i2c_vc=i2c0
001306.736: dtdebug: /__overrides__:i2c_vc_baudrate=i2c0_baudrate
001312.115: dtdebug: /aliases:i2c=i2c1
001330.016: dtdebug: /__symbols__:i2c=i2c1
001343.080: dtdebug: /__overrides__:i2c=i2c1
001348.544: dtdebug: /aliases:i2c_arm=i2c1
001366.509: dtdebug: /__symbols__:i2c_arm=i2c1
001379.655: dtdebug: /__overrides__:i2c_arm=i2c1
001406.026: dtdebug: /__overrides__:i2c_baudrate=i2c1_baudrate
001432.462: dtdebug: /__overrides__:i2c_arm_baudrate=i2c1_baudrate
001442.010: dtparam: uart0_clkrate=48000000
001452.695: dtdebug: /__overrides__ has no uart0_clkrate property
001452.710: Unknown dtparam 'uart0_clkrate' - ignored
001452.779: brfs: File read: 25616 bytes
001454.748: brfs: File read: /mfs/sd/config.txt
001455.487: dtparam: spi=off
001465.714: dtdebug: Found override spi
001465.754: dtdebug:   override spi: string target 'status'
001481.576: brfs: File read: 3294 bytes
001488.184: dtdebug: Opened overlay file 'overlays/tc358743.dtbo'
001489.740: brfs: File read: /mfs/sd/overlays/tc358743.dtbo
001539.995: Loaded overlay 'tc358743'
001540.131: dtdebug: Found fragment 0 (offset 36)
001561.910: dtdebug: merge_fragment(/soc/[email protected],/[email protected]/__overlay__)
001561.953: dtdebug:   +prop(#address-cells)
001564.061: dtdebug:   +prop(#size-cells)
001566.173: dtdebug:   +prop(status)
001578.400: dtdebug: merge_fragment(/soc/[email protected]/[email protected],/[email protected]/__overlay__/[email protected])
001578.446: dtdebug:   +prop(compatible)
001580.482: dtdebug:   +prop(reg)
001582.623: dtdebug:   +prop(status)
001584.788: dtdebug:   +prop(clocks)
001587.043: dtdebug:   +prop(clock-names)
001599.496: dtdebug: merge_fragment(/soc/[email protected]/[email protected]/bridge-clk,/[email protected]/__overlay__/[email protected]/bridge-clk)
001599.541: dtdebug:   +prop(compatible)
001601.564: dtdebug:   +prop(#clock-cells)
001603.731: dtdebug:   +prop(clock-frequency)
001606.003: dtdebug:   +prop(phandle)
001608.202: dtdebug: merge_fragment() end
001618.581: dtdebug: merge_fragment(/soc/[email protected]/[email protected]/port,/[email protected]/__overlay__/[email protected]/port)
001628.763: dtdebug: merge_fragment(/soc/[email protected]/[email protected]/port/endpoint,/[email protected]/__overlay__/[email protected]/port/endpoint)
001628.803: dtdebug:   +prop(remote-endpoint)
001631.551: dtdebug:   +prop(clock-lanes)
001634.321: dtdebug:   +prop(clock-noncontinuous)
001637.134: dtdebug:   +prop(link-frequencies)
001639.949: dtdebug:   +prop(phandle)
001642.182: dtdebug: merge_fragment() end
001642.236: dtdebug: merge_fragment() end
001642.317: dtdebug: merge_fragment() end
001642.496: dtdebug: merge_fragment() end
001642.799: dtdebug: Found fragment 1 (offset 476)
001671.280: dtdebug: merge_fragment(/soc/[email protected],/[email protected]/__overlay__)
001671.324: dtdebug:   +prop(status)
001683.560: dtdebug: merge_fragment(/soc/[email protected]/port,/[email protected]/__overlay__/port)
001694.010: dtdebug: merge_fragment(/soc/[email protected]/port/endpoint,/[email protected]/__overlay__/port/endpoint)
001694.050: dtdebug:   +prop(remote-endpoint)
001696.528: dtdebug:   +prop(phandle)
001698.375: dtdebug: merge_fragment() end
001698.418: dtdebug: merge_fragment() end
001698.487: dtdebug: merge_fragment() end
001698.662: dtdebug: Found fragment 2 (offset 620)
001721.012: dtdebug: merge_fragment(/soc/[email protected],/[email protected]/__overlay__)
001729.617: dtdebug: merge_fragment(/soc/[email protected]/[email protected],/[email protected]/__overlay__/[email protected])
001738.263: dtdebug: merge_fragment(/soc/[email protected]/[email protected]/port,/[email protected]/__overlay__/[email protected]/port)
001746.963: dtdebug: merge_fragment(/soc/[email protected]/[email protected]/port/endpoint,/[email protected]/__overlay__/[email protected]/port/endpoint)
001747.006: dtdebug:   +prop(data-lanes)
001749.404: dtdebug: merge_fragment() end
001749.444: dtdebug: merge_fragment() end
001749.507: dtdebug: merge_fragment() end
001749.599: dtdebug: merge_fragment() end
001749.801: dtdebug: Found fragment 3 (offset 752)
001750.010: dtdebug: fragment 3 disabled
001750.212: dtdebug: Found fragment 4 (offset 892)
001750.340: dtdebug: fragment 4 disabled
001750.461: dtdebug: Found fragment 5 (offset 984)
001769.073: dtdebug: merge_fragment(/soc/[email protected]/i2c0,/[email protected]/__overlay__)
001769.119: dtdebug:   +prop(brcm,pins)
001771.423: dtdebug:   +prop(brcm,function)
001773.762: dtdebug: merge_fragment() end
001773.885: dtdebug: Found fragment 6 (offset 1076)
001797.032: dtdebug: merge_fragment(/soc/[email protected],/[email protected]/__overlay__)
001797.077: dtdebug:   +prop(status)
001799.271: dtdebug: merge_fragment() end
001799.990: brfs: File read: 2316 bytes
001807.947: dtdebug: Opened overlay file 'overlays/tc358743-audio.dtbo'
001809.438: brfs: File read: /mfs/sd/overlays/tc358743-audio.dtbo
001847.477: Loaded overlay 'tc358743-audio'
001847.869: dtdebug: Found fragment 0 (offset 36)
001868.183: dtdebug: merge_fragment(/soc/[email protected],/[email protected]/__overlay__)
001868.229: dtdebug:   +prop(status)
001870.494: dtdebug: merge_fragment() end
001870.612: dtdebug: Found fragment 1 (offset 112)
001870.923: dtdebug: merge_fragment(/,/[email protected]/__overlay__)
001896.668: dtdebug: merge_fragment(/tc358743-codec,/[email protected]/__overlay__/tc358743-codec)
001896.715: dtdebug:   +prop(#sound-dai-cells)
001900.023: dtdebug:   +prop(compatible)
001903.159: dtdebug:   +prop(status)
001906.466: dtdebug:   +prop(phandle)
001909.763: dtdebug: merge_fragment() end
001909.822: dtdebug: merge_fragment() end
001909.996: dtdebug: Found fragment 2 (offset 272)
001946.918: dtdebug: merge_fragment(/soc/sound,/[email protected]/__overlay__)
001946.962: dtdebug:   +prop(compatible)
001948.284: dtdebug:   +prop(simple-audio-card,format)
001950.353: dtdebug:   +prop(simple-audio-card,name)
001952.457: dtdebug:   +prop(simple-audio-card,bitclock-master)
001954.591: dtdebug:   +prop(simple-audio-card,frame-master)
001956.799: dtdebug:   +prop(status)
001972.712: dtdebug: merge_fragment(/soc/sound/simple-audio-card,cpu,/[email protected]/__overlay__/simple-audio-card,cpu)
001972.769: dtdebug:   +prop(sound-dai)
001974.871: dtdebug:   +prop(dai-tdm-slot-num)
001977.017: dtdebug:   +prop(dai-tdm-slot-width)
001979.215: dtdebug: merge_fragment() end
001994.067: dtdebug: merge_fragment(/soc/sound/simple-audio-card,codec,/[email protected]/__overlay__/simple-audio-card,codec)
001994.126: dtdebug:   +prop(sound-dai)
001996.290: dtdebug:   +prop(phandle)
001997.795: dtdebug: merge_fragment() end
001997.855: dtdebug: merge_fragment() end
001998.586: brfs: File read: 1529 bytes
So I can see that my tc358743 and tc35874-audio overlays are loaded correctly.
Software Engineer at Raspberry Pi Trading. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

xasm
Posts: 34
Joined: Mon Nov 19, 2018 8:28 am

Re: Two cameras (CM3) question

Wed Nov 21, 2018 3:02 pm

Thank you for the reply! Please find the log attached:

Code: Select all

001970.730: dtdebug: Opened overlay file 'overlays/tc358743-overlay-csi0.dtbo'
001972.366: brfs: File read: /mfs/sd/overlays/tc358743-overlay-csi0.dtbo
001996.782: Loaded overlay 'tc358743-overlay-csi0'
001996.898: dtdebug: Found fragment 0 (offset 36)
002012.097: dtdebug: merge_fragment(/soc/[email protected],/[email protected]/__overlay__)
002012.124: dtdebug:   +prop(#address-cells)
002013.713: dtdebug:   +prop(#size-cells)
002015.301: dtdebug:   +prop(status)
002023.887: dtdebug: merge_fragment(/soc/[email protected]/[email protected],/[email protected]/__overlay__/[email protected])
002023.915: dtdebug:   +prop(compatible)
002025.451: dtdebug:   +prop(reg)
002027.097: dtdebug:   +prop(status)
002028.811: dtdebug:   +prop(clocks)
002030.500: dtdebug:   +prop(clock-names)
002039.230: dtdebug: merge_fragment(/soc/[email protected]/[email protected]/bridge-clk,/[email protected]/__overlay__/[email protected]/bridge-clk)
002039.258: dtdebug:   +prop(compatible)
002040.803: dtdebug:   +prop(#clock-cells)
002042.463: dtdebug:   +prop(clock-frequency)
002044.216: dtdebug:   +prop(linux,phandle)
002046.430: dtdebug:   +prop(phandle)
002048.106: dtdebug: merge_fragment() end
002055.227: dtdebug: merge_fragment(/soc/[email protected]/[email protected]/port,/[email protected]/__overlay__/[email protected]/port)
002062.261: dtdebug: merge_fragment(/soc/[email protected]/[email protected]/port/endpoint,/[email protected]/__overlay__/[email protected]/port/endpoint)
002062.289: dtdebug:   +prop(remote-endpoint)
002064.452: dtdebug:   +prop(clock-lanes)
002066.654: dtdebug:   +prop(clock-noncontinuous)
002068.859: dtdebug:   +prop(link-frequencies)
002071.070: dtdebug:   +prop(linux,phandle)
002073.313: dtdebug:   +prop(phandle)
002075.013: dtdebug: merge_fragment() end
002075.045: dtdebug: merge_fragment() end
002075.088: dtdebug: merge_fragment() end
002075.169: dtdebug: merge_fragment() end
002075.303: dtdebug: Found fragment 1 (offset 508)
002089.848: dtdebug: merge_fragment(/soc/[email protected],/[email protected]/__overlay__)
002089.875: dtdebug:   +prop(status)
002096.852: dtdebug: merge_fragment(/soc/[email protected]/port,/[email protected]/__overlay__/port)
002102.126: dtdebug: merge_fragment(/soc/[email protected]/port/endpoint,/[email protected]/__overlay__/port/endpoint)
002102.151: dtdebug:   +prop(remote-endpoint)
002104.426: dtdebug:   +prop(linux,phandle)
002106.750: dtdebug:   +prop(phandle)
002108.518: dtdebug: merge_fragment() end
002108.545: dtdebug: merge_fragment() end
002108.583: dtdebug: merge_fragment() end
002108.665: dtdebug: Found fragment 2 (offset 668)
002124.176: dtdebug: merge_fragment(/soc/[email protected],/[email protected]/__overlay__)
002129.810: dtdebug: merge_fragment(/soc/[email protected]/[email protected],/[email protected]/__overlay__/[email protected])
002135.488: dtdebug: merge_fragment(/soc/[email protected]/[email protected]/port,/[email protected]/__overlay__/[email protected]/port)
002141.207: dtdebug: merge_fragment(/soc/[email protected]/[email protected]/port/endpoint,/[email protected]/__overlay__/[email protected]/port/endpoint)
002141.235: dtdebug:   +prop(data-lanes)
002143.077: dtdebug: merge_fragment() end
002143.102: dtdebug: merge_fragment() end
002143.135: dtdebug: merge_fragment() end
002143.180: dtdebug: merge_fragment() end
002143.271: dtdebug: Found fragment 3 (offset 800)
002143.363: dtdebug: fragment 3 disabled
002143.454: dtdebug: Found fragment 4 (offset 940)
002143.515: dtdebug: fragment 4 disabled
002143.576: dtdebug: Found fragment 5 (offset 1032)
002153.400: dtdebug: merge_fragment(/soc/[email protected]/i2c1,/[email protected]/__overlay__)
002153.427: dtdebug:   +prop(brcm,pins)
002155.619: dtdebug:   +prop(brcm,function)
002157.814: dtdebug: merge_fragment() end
002157.873: dtdebug: Found fragment 6 (offset 1124)
002173.668: dtdebug: merge_fragment(/soc/[email protected],/[email protected]/__overlay__)
002173.694: dtdebug:   +prop(status)
002175.342: dtdebug: merge_fragment() end
002175.616: brfs: File read: 2143 bytes

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 7578
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: Two cameras (CM3) question

Wed Nov 21, 2018 3:09 pm

That all looks good.
You can confirm by looking in /proc/device-tree which gives a directory style tree for the DT description.
Have a check under /proc/device-tree/soc/[email protected]/ for i2c_arm (should have a [email protected]/ directory), and /proc/device-tree/soc/[email protected]/ for Unicam0. Check the status nodes (use cat). Some of the entries are binary, so use xxd or similar to view them.
Check what's logged in dmesg whilst loading the modules. From what you've posted I'm expecting the B102 connected to CAM0 to be working with this.
Software Engineer at Raspberry Pi Trading. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

xasm
Posts: 34
Joined: Mon Nov 19, 2018 8:28 am

Re: Two cameras (CM3) question

Wed Nov 21, 2018 3:27 pm

Hmmm, this is a problem I guess:

[email protected] has no tc358743 directories, but I found the dir in [email protected] and in [email protected]

I see both /proc/device-tree/soc/[email protected]/ and /proc/device-tree/soc/[email protected]/ directories.

I guess, I missed changing something in the tc358743-overlay.dts.

Also, should I add i2c_pins_2_3=1 to config.txt? (actually, I tried, the result is the same - no /dev/video1)

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 7578
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: Two cameras (CM3) question

Wed Nov 21, 2018 3:37 pm

xasm wrote:
Wed Nov 21, 2018 3:27 pm
Hmmm, this is a problem I guess:

[email protected] has no tc358743 directories, but I found the dir in [email protected] and in [email protected]
Typo on my part. There are 3 I2C controllers:
- [email protected] is i2c0
- [email protected] is i2c1
- [email protected] is i2c2, used by the HDMI (do not touch it!)
Check the "status" fields of each driver (although I'd be surprised if they weren't enabled).
Use "i2cdetect -y 0" and "i2cdetect -y 1" to confirm that your devices are responding on the appropriate busses. If the tc358743 kernel driver is loaded then it will have claimed the address and it will show as UU. "sudo rmmod bcm2835-unicam" "sudo rmmod tc358743" should release them and confirm if the devices respond.
Check the kernel log using dmesg for error messages.
xasm wrote:I see both /proc/device-tree/soc/[email protected]/ and /proc/device-tree/soc/[email protected]/ directories.
OK, good.
xasm wrote:I guess, I missed changing something in the tc358743-overlay.dts.

Also, should I add i2c_pins_2_3=1 to config.txt? (actually, I tried, the result is the same - no /dev/video1)
If you've defined the pin configuration to match where you've wired the devices to, then for your overlay you don't need to worry.
We add them to the generic overlays as people choose to wire things up differently.

I do have a B102 and B101 that I can try hooking up to see what I get. There should be no interdependencies between two instances of the same driver, but I've not tried it with these particular ones.
Software Engineer at Raspberry Pi Trading. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 7578
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: Two cameras (CM3) question

Wed Nov 21, 2018 3:48 pm

Hang on

Code: Select all

	[email protected] {
		target = <&i2c1_pins>;
		__overlay__ {
			brcm,pins = <44 45>;
			brcm,function = <5>; /* alt1 */
		};
	};
Nope, that will remap i2c0 to those pins whilst we want to remux i2c1.

Code: Select all

	[email protected] {
		target = <&i2c1_pins>;
		__overlay__ {
			brcm,pins = <2 3>;
			brcm,function = <4>; /* alt0 */
		};
	};
or

Code: Select all

	[email protected] {
		target = <&i2c1_pins>;
		__overlay__ {
			brcm,pins = <44 45>;
			brcm,function = <6>; /* alt2 */
		};
	};
depending on where you've connected it to.
DT should be throwing out the configuration for already claimed pins.
Software Engineer at Raspberry Pi Trading. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

xasm
Posts: 34
Joined: Mon Nov 19, 2018 8:28 am

Re: Two cameras (CM3) question

Wed Nov 21, 2018 4:15 pm

well, I changed dts:

Code: Select all

// Definitions for Toshiba TC358743 HDMI to CSI2 bridge on VC I2C bus
/dts-v1/;
/plugin/;

/{
	compatible = "brcm,bcm2708";

	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			#address-cells = <1>;
			#size-cells = <0>;
			status = "okay";

			[email protected] {
				compatible = "toshiba,tc358743";
				reg = <0x0f>;
				status = "okay";

				clocks = <&tc358743_clk>;
				clock-names = "refclk";

				tc358743_clk: bridge-clk {
					compatible = "fixed-clock";
					#clock-cells = <0>;
					clock-frequency = <27000000>;
				};

				port {
					tc358743: endpoint {
						remote-endpoint = <&csi0_ep>;
						clock-lanes = <0>;
						clock-noncontinuous;
						link-frequencies =
							/bits/ 64 <486000000>;
					};
				};
			};
		};
	};

	[email protected] {
		target = <&csi0>;
		__overlay__ {
			status = "okay";

			port {
				csi0_ep: endpoint {
					remote-endpoint = <&tc358743>;
				};
			};
		};
	};

	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			[email protected] {
				port {
					endpoint {
						data-lanes = <1 2>;
					};
				};
			};
		};
	};

	[email protected] {
		target = <&i2c_arm>;
		__dormant__ {
			[email protected] {
				port {
					endpoint {
						data-lanes = <1 2 3 4>;
					};
				};
			};
		};
	};

	[email protected] {
		target = <&i2c1_pins>;
		__dormant__ {
			brcm,pins = <2 3>;
			brcm,function = <4>; /* alt0 */
		};
	};
	[email protected] {
		target = <&i2c1_pins>;
		__overlay__ {
			brcm,pins = <2 3>;
			brcm,function = <4>; /* alt1 */
		};
	};
	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			status = "okay";
		};
	};

	__overrides__ {
		i2c_pins_2_3 = <0>,"+4-5";
		4lane = <0>, "-2+3";
	        link-frequency = <&tc358743>,"link-frequencies#0";
	};
};
Now I have 2 similar fragments - 4 and 5.

compile (dtc -O dtb -o tc358743-csi0.dtbo tc358743-overlay-csi0.dts)
copy: sudo cp tc358743-csi0.dtbo /boot/overlays
reboot

no /dev/video1

i2cdetect reports:

Code: Select all

[email protected]:~ $ i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- UU 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
[email protected]:~ $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- 0f 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- 
If you've defined the pin configuration to match where you've wired the devices to, then for your overlay you don't need to worry.
Hmm, I wired CD0_SDA==>2, CD0_CLS==>3 and I thought that i2c_pins_2_3-1 is the option. Should I configure the pins somewhere else?

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 7578
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: Two cameras (CM3) question

Wed Nov 21, 2018 4:37 pm

I've created my own overlay based on yours/the original

Code: Select all

// SPDX-License-Identifier: GPL-2.0-only
// Definitions for Toshiba TC358743 HDMI to CSI2 bridge on ARM I2C bus
/dts-v1/;
/plugin/;

/{
	compatible = "brcm,bcm2708";

	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			#address-cells = <1>;
			#size-cells = <0>;
			status = "okay";

			[email protected] {
				compatible = "toshiba,tc358743";
				reg = <0x0f>;
				status = "okay";

				clocks = <&tc358743_0_clk>;
				clock-names = "refclk";

				tc358743_0_clk: bridge-clk {
					compatible = "fixed-clock";
					#clock-cells = <0>;
					clock-frequency = <27000000>;
				};

				port {
					tc358743_0: endpoint {
						remote-endpoint = <&csi0_ep>;
						clock-lanes = <0>;
						clock-noncontinuous;
						link-frequencies =
							/bits/ 64 <486000000>;
					};
				};
			};
		};
	};

	[email protected] {
		target = <&csi0>;
		__overlay__ {
			status = "okay";

			port {
				csi0_ep: endpoint {
					remote-endpoint = <&tc358743_0>;
				};
			};
		};
	};

	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			[email protected] {
				port {
					endpoint {
						data-lanes = <1 2>;
					};
				};
			};
		};
	};

	[email protected] {
		target = <&i2c1_pins>;
		__dormant__ {
			brcm,pins = <2 3>;
			brcm,function = <4>; /* alt0 */
		};
	};
	[email protected] {
		target = <&i2c1_pins>;
		__overlay__ {
			brcm,pins = <44 45>;
			brcm,function = <6>; /* alt2 */
		};
	};
	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			status = "okay";
		};
	};

	__overrides__ {
		i2c_pins_2_3 = <0>,"+3-4";
		link-frequency = <&tc358743_0>,"link-frequencies#0";
	};
};
Load that (I'm using GPIOs 44&45 with i2c1) and I get the B101 connected to CAM0 working.

Add in the overlay for the tc358743 on CAM1 and I see log lines saying they've all loaded, but it never completes the initialisation.

I think there may be something squiffy in the core code. V4L2 provides this thing called asynchronous subdevice registration. The CSI2 driver starts up and says it needs to wait for the TC358743 driver that it's been configured with, and the TC358743 driver says it needs to wait for the CSI driver. When both bits are loaded then it makes a callback to each of them and off we go.
That's working fine with one instance of each. When we have two identical instances it isn't triggering the callbacks for the second set.

I've just tried the tc358743-csi0 overlay with the adv7282m overlay (analogue video to CSI2), both load and I get /dev/video0 and /dev/video1.

It's going to require a modest amount of poking about in the kernel to work out what is going on. I will say that I'm on the 4.19 kernel that is being prepared for general use, but I'm seeing issues too. You can update too by using "sudo BRANCH=next rpi-update", but there's probably little point.
Software Engineer at Raspberry Pi Trading. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 7578
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: Two cameras (CM3) question

Wed Nov 21, 2018 4:49 pm

To crank up the log level, create /etc/modprobe.d/bcm2835-unicam.conf (or similar named file) with the contents:

Code: Select all

options bcm2835-unicam debug=5
and /etc/modprobe.d/tc358743.conf with:

Code: Select all

options tc358743 debug=5
In dmesg I see

Code: Select all

[    5.853904] unicam 3f800000.csi0: ep_node is endpoint
[    5.853962] unicam 3f800000.csi0: sensor_node is tc358743
[    5.853979] unicam 3f800000.csi0: remote_ep is endpoint
[    5.853999] unicam 3f800000.csi0: parsed remote_ep to endpoint. nr_of_link_frequencies 0, bus_type 4
[    5.854006] unicam 3f800000.csi0: bus_type is 4
[    5.854014] unicam 3f800000.csi0: v4l2-endpoint: CSI2
[    5.854019] unicam 3f800000.csi0: Virtual Channel=0
[    5.854026] unicam 3f800000.csi0: flags=0x00000200
[    5.854031] unicam 3f800000.csi0: num_data_lanes=2
[    5.854036] unicam 3f800000.csi0: found sub-device tc358743
[    5.854594] unicam 3f801000.csi1: ep_node is endpoint
[    5.854627] unicam 3f801000.csi1: sensor_node is tc358743
[    5.854639] unicam 3f801000.csi1: remote_ep is endpoint
[    5.854657] unicam 3f801000.csi1: parsed remote_ep to endpoint. nr_of_link_frequencies 0, bus_type 4
[    5.854663] unicam 3f801000.csi1: bus_type is 4
[    5.854668] unicam 3f801000.csi1: v4l2-endpoint: CSI2
[    5.854673] unicam 3f801000.csi1: Virtual Channel=0
[    5.854682] unicam 3f801000.csi1: flags=0x00000200
[    5.854687] unicam 3f801000.csi1: num_data_lanes=4
[    5.854693] unicam 3f801000.csi1: found sub-device tc358743
[    5.944253] snd_bcm2835: module is from the staging directory, the quality is unknown, you have been warned.
[    5.951489] bcm2835_alsa bcm2835_alsa: card created with 8 channels
[    6.324717] tc358743 0-000f: chip found @ 0x1e (bcm2835 I2C adapter)
[    6.330208] unicam 3f801000.csi1: Using sensor tc358743 0-000f for capture
[    6.330221] unicam 3f801000.csi1: Get supported formats...
[    6.330240] unicam 3f801000.csi1: subdev tc358743 0-000f: code: 100a idx: 0
[    6.330255] unicam 3f801000.csi1: fmt 100a returned as 7f207670, V4L2 FOURCC 33424752, csi_dt 24
[    6.330265] unicam 3f801000.csi1: matched fourcc: RGB3: code: 100a idx: 0
[    6.330273] unicam 3f801000.csi1: subdev tc358743 0-000f: code: 200f idx: 1
[    6.330281] unicam 3f801000.csi1: fmt 200f returned as 7f20761c, V4L2 FOURCC 59565955, csi_dt 1E
[    6.330289] unicam 3f801000.csi1: matched fourcc: UYVY: code: 200f idx: 1
[    6.330297] unicam 3f801000.csi1: subdev->enum_mbus_code idx 2 returned -22 - continue
[    6.330302] unicam 3f801000.csi1: Done all formats
[    6.330312] unicam 3f801000.csi1: active_fmt[0] (b40b4548) is code 100a, fourcc RGB3, depth 24
[    6.330321] unicam 3f801000.csi1: active_fmt[1] (b40b4554) is code 200f, fourcc UYVY, depth 16
[    6.331785] unicam 3f801000.csi1: __subdev_get_format 0x0 code:100a
[    6.339970] unicam 3f801000.csi1: __subdev_get_format 0x0 code:100a
[    6.339992] unicam 3f801000.csi1: unicam_calc_format_size_bpl: fourcc: RGB3 size: 16x16 bpl:48 img_size:768
(load of I2C writes)
[    6.563504] tc358743 0-000f: tc358743 found @ 0x1e (bcm2835 I2C adapter)
[    6.563793] tc358743 1-000f: chip found @ 0x1e (bcm2835 I2C adapter)
and that's the last I see from tc358743 1-000f.
More logging needed for what happens when the register callbacks are made, as the second one is obviously being ignored.
Software Engineer at Raspberry Pi Trading. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

xasm
Posts: 34
Joined: Mon Nov 19, 2018 8:28 am

Re: Two cameras (CM3) question

Wed Nov 21, 2018 5:09 pm

Hi

Yes, I made the same tests - I just commented the dtoverlay of CAM1 - and camera CAM0 works perfectly.

Please find a complete log attached.

Code: Select all

0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.14.80-v7+ ([email protected]) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611)) #1161 SMP Mon Nov 12 18:51:43 GMT 2018
[    0.000000] CPU: ARMv7 Processor [410fd034] revision 4 (ARMv7), cr=10c5383d
[    0.000000] CPU: div instructions available: patching division code
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: Raspberry Pi Compute Module 3 Rev 1.0
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] cma: Reserved 32 MiB at 0x36000000
[    0.000000] On node 0 totalpages: 229376
[    0.000000] free_area_init_node: node 0, pgdat 80c85280, node_mem_map b5808000
[    0.000000]   Normal zone: 2016 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 229376 pages, LIFO batch:31
[    0.000000] percpu: Embedded 17 pages/cpu @b57b0000 s38720 r8192 d22720 u69632
[    0.000000] pcpu-alloc: s38720 r8192 d22720 u69632 alloc=17*4096
[    0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 227360
[    0.000000] Kernel command line: bcm2708_fb.fbwidth=800 bcm2708_fb.fbheight=600 bcm2708_fb.fbswap=1 smsc95xx.macaddr=B8:27:EB:CE:76:84 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=PARTUUID=c36a536a-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cma=32M
[    0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Memory: 862824K/917504K available (7168K kernel code, 576K rwdata, 2076K rodata, 1024K init, 698K bss, 21912K reserved, 32768K cma-reserved)
[    0.000000] Virtual kernel memory layout:
                   vector  : 0xffff0000 - 0xffff1000   (   4 kB)
                   fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
                   vmalloc : 0xb8800000 - 0xff800000   (1136 MB)
                   lowmem  : 0x80000000 - 0xb8000000   ( 896 MB)
                   modules : 0x7f000000 - 0x80000000   (  16 MB)
                     .text : 0x80008000 - 0x80800000   (8160 kB)
                     .init : 0x80b00000 - 0x80c00000   (1024 kB)
                     .data : 0x80c00000 - 0x80c9017c   ( 577 kB)
                      .bss : 0x80c97f04 - 0x80d468b0   ( 699 kB)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] ftrace: allocating 25288 entries in 75 pages
[    0.000000] Hierarchical RCU implementation.
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] arch_timer: cp15 timer(s) running at 19.20MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x46d987e47, max_idle_ns: 440795202767 ns
[    0.000007] sched_clock: 56 bits at 19MHz, resolution 52ns, wraps every 4398046511078ns
[    0.000018] Switching to timer-based delay loop, resolution 52ns
[    0.000263] Console: colour dummy device 80x30
[    0.000280] console [tty1] enabled
[    0.000305] Calibrating delay loop (skipped), value calculated using timer frequency.. 38.40 BogoMIPS (lpj=192000)
[    0.000320] pid_max: default: 32768 minimum: 301
[    0.000638] Mount-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000651] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.001583] Disabling memory control group subsystem
[    0.001659] CPU: Testing write buffer coherency: ok
[    0.002078] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.002477] Setting up static identity map for 0x100000 - 0x10003c
[    0.002597] Hierarchical SRCU implementation.
[    0.003268] smp: Bringing up secondary CPUs ...
[    0.004052] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[    0.004903] CPU2: thread -1, cpu 2, socket 0, mpidr 80000002
[    0.005727] CPU3: thread -1, cpu 3, socket 0, mpidr 80000003
[    0.005831] smp: Brought up 1 node, 4 CPUs
[    0.005841] SMP: Total of 4 processors activated (153.60 BogoMIPS).
[    0.005847] CPU: All CPU(s) started in HYP mode.
[    0.005851] CPU: Virtualization extensions available.
[    0.006765] devtmpfs: initialized
[    0.017104] random: get_random_u32 called from bucket_table_alloc+0xfc/0x24c with crng_init=0
[    0.017896] VFP support v0.3: implementor 41 architecture 3 part 40 variant 3 rev 4
[    0.018121] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.018137] futex hash table entries: 1024 (order: 4, 65536 bytes)
[    0.019651] pinctrl core: initialized pinctrl subsystem
[    0.020483] NET: Registered protocol family 16
[    0.023300] DMA: preallocated 1024 KiB pool for atomic coherent allocations
[    0.028238] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
[    0.028245] hw-breakpoint: maximum watchpoint size is 8 bytes.
[    0.028468] Serial: AMBA PL011 UART driver
[    0.030278] bcm2835-mbox 3f00b880.mailbox: mailbox enabled
[    0.063255] bcm2835-dma 3f007000.dma: DMA legacy API manager at b8813000, dmachans=0x1
[    0.064668] SCSI subsystem initialized
[    0.064892] usbcore: registered new interface driver usbfs
[    0.064950] usbcore: registered new interface driver hub
[    0.065037] usbcore: registered new device driver usb
[    0.070084] raspberrypi-firmware soc:firmware: Attached to firmware from 2018-11-04 16:35
[    0.071526] clocksource: Switched to clocksource arch_sys_counter
[    0.148663] VFS: Disk quotas dquot_6.6.0
[    0.148748] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.148933] FS-Cache: Loaded
[    0.149136] CacheFiles: Loaded
[    0.157978] NET: Registered protocol family 2
[    0.158698] TCP established hash table entries: 8192 (order: 3, 32768 bytes)
[    0.158808] TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
[    0.158993] TCP: Hash tables configured (established 8192 bind 8192)
[    0.159121] UDP hash table entries: 512 (order: 2, 16384 bytes)
[    0.159165] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
[    0.159389] NET: Registered protocol family 1
[    0.159844] RPC: Registered named UNIX socket transport module.
[    0.159850] RPC: Registered udp transport module.
[    0.159855] RPC: Registered tcp transport module.
[    0.159860] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.161558] hw perfevents: enabled with armv7_cortex_a7 PMU driver, 7 counters available
[    0.164282] workingset: timestamp_bits=14 max_order=18 bucket_order=4
[    0.172331] FS-Cache: Netfs 'nfs' registered for caching
[    0.172935] NFS: Registering the id_resolver key type
[    0.172964] Key type id_resolver registered
[    0.172969] Key type id_legacy registered
[    0.172984] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    0.174893] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
[    0.175024] io scheduler noop registered
[    0.175031] io scheduler deadline registered (default)
[    0.175204] io scheduler cfq registered
[    0.175211] io scheduler mq-deadline registered
[    0.175218] io scheduler kyber registered
[    0.177964] BCM2708FB: allocated DMA memory f6110000
[    0.177991] BCM2708FB: allocated DMA channel 0 @ b8813000
[    0.192099] Console: switching to colour frame buffer device 100x37
[    0.201372] bcm2835-rng 3f104000.rng: hwrng registered
[    0.201539] vc-mem: phys_addr:0x00000000 mem_base=0x3ec00000 mem_size:0x40000000(1024 MiB)
[    0.202034] vc-sm: Videocore shared memory driver
[    0.202318] gpiomem-bcm2835 3f200000.gpiomem: Initialised: Registers at 0x3f200000
[    0.211929] brd: module loaded
[    0.220592] loop: module loaded
[    0.220605] Loading iSCSI transport class v2.0-870.
[    0.221240] libphy: Fixed MDIO Bus: probed
[    0.221338] usbcore: registered new interface driver lan78xx
[    0.221391] usbcore: registered new interface driver smsc95xx
[    0.221405] dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
[    0.249353] dwc_otg 3f980000.usb: base=0xf0980000
[    0.449580] Core Release: 2.80a
[    0.449590] Setting default values for core params
[    0.449621] Finished setting default values for core params
[    0.649866] Using Buffer DMA mode
[    0.649872] Periodic Transfer Interrupt Enhancement - disabled
[    0.649877] Multiprocessor Interrupt Enhancement - disabled
[    0.649883] OTG VER PARAM: 0, OTG VER FLAG: 0
[    0.649893] Dedicated Tx FIFOs mode
[    0.650289] WARN::dwc_otg_hcd_init:1046: FIQ DMA bounce buffers: virt = 0xb6104000 dma = 0xf6104000 len=9024
[    0.650313] FIQ FSM acceleration enabled for :
               Non-periodic Split Transactions
               Periodic Split Transactions
               High-Speed Isochronous Endpoints
               Interrupt/Control Split Transaction hack enabled
[    0.650320] dwc_otg: Microframe scheduler enabled
[    0.650367] WARN::hcd_init_fiq:459: FIQ on core 1 at 0x805ea4bc
[    0.650378] WARN::hcd_init_fiq:460: FIQ ASM at 0x805ea824 length 36
[    0.650390] WARN::hcd_init_fiq:486: MPHI regs_base at 0xf0006000
[    0.650441] dwc_otg 3f980000.usb: DWC OTG Controller
[    0.650472] dwc_otg 3f980000.usb: new USB bus registered, assigned bus number 1
[    0.650502] dwc_otg 3f980000.usb: irq 62, io mem 0x00000000
[    0.650550] Init: Port Power? op_state=1
[    0.650555] Init: Power Port (0)
[    0.650752] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    0.650763] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    0.650771] usb usb1: Product: DWC OTG Controller
[    0.650780] usb usb1: Manufacturer: Linux 4.14.80-v7+ dwc_otg_hcd
[    0.650788] usb usb1: SerialNumber: 3f980000.usb
[    0.651371] hub 1-0:1.0: USB hub found
[    0.651409] hub 1-0:1.0: 1 port detected
[    0.651938] dwc_otg: FIQ enabled
[    0.651943] dwc_otg: NAK holdoff enabled
[    0.651948] dwc_otg: FIQ split-transaction FSM enabled
[    0.651958] Module dwc_common_port init
[    0.652191] usbcore: registered new interface driver usb-storage
[    0.652355] mousedev: PS/2 mouse device common for all mice
[    0.652425] IR NEC protocol handler initialized
[    0.652430] IR RC5(x/sz) protocol handler initialized
[    0.652435] IR RC6 protocol handler initialized
[    0.652440] IR JVC protocol handler initialized
[    0.652445] IR Sony protocol handler initialized
[    0.652451] IR SANYO protocol handler initialized
[    0.652456] IR Sharp protocol handler initialized
[    0.652461] IR MCE Keyboard/mouse protocol handler initialized
[    0.652466] IR XMP protocol handler initialized
[    0.653166] bcm2835-wdt 3f100000.watchdog: Broadcom BCM2835 watchdog timer
[    0.653427] bcm2835-cpufreq: min=600000 max=1200000
[    0.653790] sdhci: Secure Digital Host Controller Interface driver
[    0.653795] sdhci: Copyright(c) Pierre Ossman
[    0.654162] sdhost-bcm2835 3f202000.mmc: could not get clk, deferring probe
[    0.654277] sdhci-pltfm: SDHCI platform and OF driver helper
[    0.654691] ledtrig-cpu: registered to indicate activity on CPUs
[    0.654772] hidraw: raw HID events driver (C) Jiri Kosina
[    0.654912] usbcore: registered new interface driver usbhid
[    0.654916] usbhid: USB HID core driver
[    0.655509] vchiq: vchiq_init_state: slot_zero = b6180000, is_master = 0
[    0.656954] [vc_sm_connected_init]: start
[    0.665666] [vc_sm_connected_init]: end - returning 0
[    0.666282] Initializing XFRM netlink socket
[    0.666304] NET: Registered protocol family 17
[    0.666395] Key type dns_resolver registered
[    0.666952] Registering SWP/SWPB emulation handler
[    0.667521] registered taskstats version 1
[    0.673410] uart-pl011 3f201000.serial: cts_event_workaround enabled
[    0.673478] 3f201000.serial: ttyAMA0 at MMIO 0x3f201000 (irq = 87, base_baud = 0) is a PL011 rev2
[    0.673527] console [ttyAMA0] enabled
[    0.675405] sdhost: log_buf @ b6107000 (f6107000)
[    0.751554] mmc0: sdhost-bcm2835 loaded - DMA enabled (>1)
[    0.752591] of_cfs_init
[    0.752723] of_cfs_init: OK
[    0.753217] Waiting for root device PARTUUID=c36a536a-02...
[    0.818673] mmc0: host does not support reading read-only switch, assuming write-enable
[    0.821118] mmc0: new high speed SDHC card at address 59b4
[    0.821622] mmcblk0: mmc0:59b4 USDU1 14.9 GiB
[    0.823204]  mmcblk0: p1 p2
[    0.852062] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    0.852112] VFS: Mounted root (ext4 filesystem) readonly on device 179:2.
[    0.852827] devtmpfs: mounted
[    0.856087] Freeing unused kernel memory: 1024K
[    0.871644] Indeed it is in host mode hprt0 = 00021501
[    0.956747] random: fast init done
[    1.081578] usb 1-1: new high-speed USB device number 2 using dwc_otg
[    1.083681] Indeed it is in host mode hprt0 = 00001101
[    1.331877] usb 1-1: New USB device found, idVendor=0bda, idProduct=5411
[    1.331892] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    1.331900] usb 1-1: Product: 4-Port USB 2.0 Hub
[    1.331909] usb 1-1: Manufacturer: Generic
[    1.333008] hub 1-1:1.0: USB hub found
[    1.334002] hub 1-1:1.0: 4 ports detected
[    1.345076] systemd[1]: System time before build time, advancing clock.
[    1.466644] NET: Registered protocol family 10
[    1.467779] Segment Routing with IPv6
[    1.477344] ip_tables: (C) 2000-2006 Netfilter Core Team
[    1.496461] random: systemd: uninitialized urandom read (16 bytes read)
[    1.502552] systemd[1]: systemd 232 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
[    1.503162] systemd[1]: Detected architecture arm.
[    1.503983] systemd[1]: Set hostname to <raspberrypi>.
[    1.545515] random: systemd: uninitialized urandom read (16 bytes read)
[    1.560630] uart-pl011 3f201000.serial: no DMA platform data
[    1.591664] random: systemd-sysv-ge: uninitialized urandom read (16 bytes read)
[    1.651598] usb 1-1.2: new low-speed USB device number 3 using dwc_otg
[    1.799424] usb 1-1.2: New USB device found, idVendor=1c4f, idProduct=0002
[    1.799440] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    1.799449] usb 1-1.2: Product: HCT Keyboard
[    1.799458] usb 1-1.2: Manufacturer: SEM
[    1.804934] input: SEM HCT Keyboard as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/0003:1C4F:0002.0001/input/input0
[    1.872112] hid-generic 0003:1C4F:0002.0001: input,hidraw0: USB HID v1.10 Keyboard [SEM HCT Keyboard] on usb-3f980000.usb-1.2/input0
[    1.876649] input: SEM HCT Keyboard as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.1/0003:1C4F:0002.0002/input/input1
[    1.941810] hid-generic 0003:1C4F:0002.0002: input,hidraw1: USB HID v1.10 Device [SEM HCT Keyboard] on usb-3f980000.usb-1.2/input1
[    2.041588] usb 1-1.3: new low-speed USB device number 4 using dwc_otg
[    2.064321] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[    2.065285] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.
[    2.065593] systemd[1]: Listening on udev Kernel Socket.
[    2.065867] systemd[1]: Listening on Syslog Socket.
[    2.066062] systemd[1]: Listening on fsck to fsckd communication Socket.
[    2.066769] systemd[1]: Created slice User and Session Slice.
[    2.083218] systemd[1]: Listening on Journal Socket.
[    2.178501] i2c /dev entries driver
[    2.179792] usb 1-1.3: New USB device found, idVendor=093a, idProduct=2510
[    2.179812] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    2.179820] usb 1-1.3: Product: USB OPTICAL MOUSE
[    2.179829] usb 1-1.3: Manufacturer: PIXART
[    2.187765] input: PIXART USB OPTICAL MOUSE as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/0003:093A:2510.0003/input/input2
[    2.188746] hid-generic 0003:093A:2510.0003: input,hidraw2: USB HID v1.10 Mouse [PIXART USB OPTICAL MOUSE] on usb-3f980000.usb-1.3/input0
[    2.281654] usb 1-1.4: new high-speed USB device number 5 using dwc_otg
[    2.412535] usb 1-1.4: New USB device found, idVendor=0bda, idProduct=8153
[    2.412552] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=6
[    2.412561] usb 1-1.4: Product: USB 10/100/1000 LAN
[    2.412570] usb 1-1.4: Manufacturer: Realtek
[    2.412578] usb 1-1.4: SerialNumber: 001000001
[    2.617124] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[    2.706831] systemd-journald[84]: Received request to flush runtime journal from PID 1
[    2.910260] usbcore: registered new interface driver r8152
[    2.914148] usbcore: registered new interface driver cdc_ether
[    3.001607] usb 1-1.4: reset high-speed USB device number 5 using dwc_otg
[    3.048362] Driver for 1-wire Dallas network protocol.
[    3.061852] w1-gpio [email protected]: gpio pin 4, external pullup pin -1, parasitic power 0
[    3.061886] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling
[    3.183231] r8152 1-1.4:1.0 eth0: v1.09.9
[    3.363887] media: Linux media interface: v0.10
[    3.397879] Linux video capture interface: v2.00
[    3.447395] unicam 3f800000.csi0: ep_node is endpoint
[    3.447462] unicam 3f800000.csi0: sensor_node is tc358743
[    3.447477] unicam 3f800000.csi0: remote_ep is endpoint
[    3.447498] unicam 3f800000.csi0: parsed remote_ep to endpoint. nr_of_link_frequencies 0, bus_type 4
[    3.447505] unicam 3f800000.csi0: bus_type is 4
[    3.447510] unicam 3f800000.csi0: v4l2-endpoint: CSI2
[    3.447516] unicam 3f800000.csi0: Virtual Channel=0
[    3.447522] unicam 3f800000.csi0: flags=0x00000200
[    3.447527] unicam 3f800000.csi0: num_data_lanes=2
[    3.447533] unicam 3f800000.csi0: found sub-device tc358743
[    3.448075] unicam 3f801000.csi1: ep_node is endpoint
[    3.448108] unicam 3f801000.csi1: sensor_node is tc358743
[    3.448120] unicam 3f801000.csi1: remote_ep is endpoint
[    3.448135] unicam 3f801000.csi1: parsed remote_ep to endpoint. nr_of_link_frequencies 0, bus_type 4
[    3.448141] unicam 3f801000.csi1: bus_type is 4
[    3.448146] unicam 3f801000.csi1: v4l2-endpoint: CSI2
[    3.448151] unicam 3f801000.csi1: Virtual Channel=0
[    3.448158] unicam 3f801000.csi1: flags=0x00000200
[    3.448164] unicam 3f801000.csi1: num_data_lanes=2
[    3.448169] unicam 3f801000.csi1: found sub-device tc358743
[    3.501972] snd_bcm2835: module is from the staging directory, the quality is unknown, you have been warned.
[    3.522210] bcm2835_alsa bcm2835_alsa: card created with 8 channels
[    3.699415] tc358743 0-000f: chip found @ 0x1e (bcm2835 I2C adapter)
[    3.703095] unicam 3f801000.csi1: Using sensor tc358743 0-000f for capture
[    3.703106] unicam 3f801000.csi1: Get supported formats...
[    3.703116] unicam 3f801000.csi1: subdev tc358743 0-000f: code: 100a idx: 0
[    3.703127] unicam 3f801000.csi1: fmt 100a returned as 7f2b6670, V4L2 FOURCC 33424752, csi_dt 24
[    3.703135] unicam 3f801000.csi1: matched fourcc: RGB3: code: 100a idx: 0
[    3.703142] unicam 3f801000.csi1: subdev tc358743 0-000f: code: 200f idx: 1
[    3.703150] unicam 3f801000.csi1: fmt 200f returned as 7f2b661c, V4L2 FOURCC 59565955, csi_dt 1E
[    3.703158] unicam 3f801000.csi1: matched fourcc: UYVY: code: 200f idx: 1
[    3.703165] unicam 3f801000.csi1: subdev->enum_mbus_code idx 2 returned -22 - continue
[    3.703170] unicam 3f801000.csi1: Done all formats
[    3.703179] unicam 3f801000.csi1: active_fmt[0] (b2a1b548) is code 100a, fourcc RGB3, depth 24
[    3.703188] unicam 3f801000.csi1: active_fmt[1] (b2a1b554) is code 200f, fourcc UYVY, depth 16
[    3.704082] unicam 3f801000.csi1: __subdev_get_format 0x0 code:100a
[    3.704935] unicam 3f801000.csi1: __subdev_get_format 0x0 code:100a
[    3.704951] unicam 3f801000.csi1: unicam_calc_format_size_bpl: fourcc: RGB3 size: 16x16 bpl:48 img_size:768
[    3.707185] tc358743 0-000f: I2C write 0x0002 = 0x0c00
[    3.708974] tc358743 0-000f: I2C write 0x0002 = 0x0f00
[    3.709812] tc358743 0-000f: I2C write 0x0002 = 0x0c00
[    3.711609] tc358743 0-000f: I2C write 0x0002 = 0x0c00
[    3.712436] tc358743 0-000f: I2C write 0x0006 = 0x0176
[    3.713114] tc358743 0-000f: I2C write 0x8540 = 0x8c
[    3.713784] tc358743 0-000f: I2C write 0x8541 = 0x0a
[    3.715297] tc358743 0-000f: I2C write 0x8531 = 0x20
[    3.716056] tc358743 0-000f: I2C write 0x85aa = 0x0e
[    3.716742] tc358743 0-000f: I2C write 0x85ab = 0x01
[    3.717424] tc358743 0-000f: I2C write 0x85ac = 0xf6
[    3.718117] tc358743 0-000f: I2C write 0x85ad = 0x06
[    3.719417] tc358743 0-000f: I2C write 0x8630 = 0xb0
[    3.720108] tc358743 0-000f: I2C write 0x8631 = 0x1e
[    3.720795] tc358743 0-000f: I2C write 0x8632 = 0x04
[    3.724139] tc358743 0-000f: I2C write 0x8670 = 0x01
[    3.725667] tc358743 0-000f: I2C write 0x8543 = 0x32
[    3.727169] tc358743 0-000f: I2C write 0x85c7 = 0x02
[    3.728675] tc358743 0-000f: I2C write 0x8534 = 0x3e
[    3.729350] tc358743 0-000f: I2C write 0x8532 = 0x80
[    3.730905] tc358743 0-000f: I2C write 0x8533 = 0x00
[    3.733851] tc358743 0-000f: I2C write 0x8536 = 0x40
[    3.734549] tc358743 0-000f: I2C write 0x853f = 0x0a
[    3.735294] tc358743 0-000f: I2C write 0x8546 = 0x2d
[    3.736860] tc358743 0-000f: I2C write 0x8552 = 0xc1
[    3.738377] tc358743 0-000f: I2C write 0x85af = 0x06
[    3.739932] tc358743 0-000f: I2C write 0x8534 = 0x3f
[    3.739944] tc358743 0-000f: tc358743_set_hdmi_hdcp: disable
[    3.741487] tc358743 0-000f: I2C write 0x8560 = 0x26
[    3.742142] tc358743 0-000f: I2C write 0x8600 = 0x00
[    3.743573] tc358743 0-000f: I2C write 0x8602 = 0xf3
[    3.749210] tc358743 0-000f: I2C write 0x8603 = 0x02
[    3.749882] tc358743 0-000f: I2C write 0x8604 = 0x0c
[    3.750532] tc358743 0-000f: I2C write 0x8606 = 0x05
[    3.751187] tc358743 0-000f: I2C write 0x8607 = 0x00
[    3.751851] tc358743 0-000f: I2C write 0x8620 = 0x22
[    3.752512] tc358743 0-000f: I2C write 0x8640 = 0x01
[    3.753179] tc358743 0-000f: I2C write 0x8641 = 0x65
[    3.753841] tc358743 0-000f: I2C write 0x8642 = 0x07
[    3.754499] tc358743 0-000f: I2C write 0x8652 = 0x02
[    3.755197] tc358743 0-000f: I2C write 0x8665 = 0x10
[    3.756973] tc358743 0-000f: I2C write 0x0004 = 0x0c14
[    3.757640] tc358743 0-000f: I2C write 0x8709 = 0xff
[    3.758301] tc358743 0-000f: I2C write 0x870b = 0x2c
[    3.758959] tc358743 0-000f: I2C write 0x870c = 0x53
[    3.759613] tc358743 0-000f: I2C write 0x870d = 0x01
[    3.760263] tc358743 0-000f: I2C write 0x870e = 0x30
[    3.760917] tc358743 0-000f: I2C write 0x9007 = 0x10
[    3.765732] tc358743 0-000f: I2C write 0x8570 = 0xe6
[    3.767232] tc358743 0-000f: I2C write 0x8573 = 0x81
[    3.767900] tc358743 0-000f: I2C write 0x8574 = 0x08
[    3.767917] tc358743 0-000f: tc358743_s_dv_timings: 640x480p59.94 (800x525)
[    3.767926] tc358743 0-000f: enable_stream: disable
[    3.769021] tc358743 0-000f: I2C write 0x857f = 0xd0
[    3.770787] tc358743 0-000f: I2C write 0x0004 = 0x0c14
[    3.772759] tc358743 0-000f: tc358743_set_pll:
[    3.772777] tc358743 0-000f: tc358743_set_csi:
[    3.774564] tc358743 0-000f: I2C write 0x0002 = 0x0e00
[    3.775362] tc358743 0-000f: I2C write 0x0002 = 0x0c00
[    3.776448] tc358743 0-000f: I2C write 0x0148 = 0x00000001
[    3.777530] tc358743 0-000f: I2C write 0x014c = 0x00000001
[    3.778611] tc358743 0-000f: I2C write 0x0150 = 0x00000001
[    3.779693] tc358743 0-000f: I2C write 0x0210 = 0x00001b58
[    3.780774] tc358743 0-000f: I2C write 0x0214 = 0x00000007
[    3.781866] tc358743 0-000f: I2C write 0x0218 = 0x00002806
[    3.782949] tc358743 0-000f: I2C write 0x021c = 0x00000000
[    3.784057] tc358743 0-000f: I2C write 0x0220 = 0x00000806
[    3.785150] tc358743 0-000f: I2C write 0x0224 = 0x00004268
[    3.786234] tc358743 0-000f: I2C write 0x0228 = 0x00000008
[    3.787317] tc358743 0-000f: I2C write 0x022c = 0x00000005
[    3.788398] tc358743 0-000f: I2C write 0x0230 = 0x00000000
[    3.789479] tc358743 0-000f: I2C write 0x0234 = 0x00000003
[    3.790559] tc358743 0-000f: I2C write 0x0238 = 0x00000000
[    3.791642] tc358743 0-000f: I2C write 0x0204 = 0x00000001
[    3.792729] tc358743 0-000f: I2C write 0x0518 = 0x00000001
[    3.793843] tc358743 0-000f: I2C write 0x0500 = 0xa3008080
[    3.796001] tc358743 0-000f: I2C write 0x0500 = 0xb4000312
[    3.797095] tc358743 0-000f: I2C write 0x0500 = 0xd5000012
[    3.798178] tc358743 0-000f: I2C write 0x0500 = 0xa6000004
[    3.798187] tc358743 0-000f: tc358743_set_csi_color_space: RGB 888 24-bit
[    3.799674] tc358743 0-000f: I2C write 0x8573 = 0x01
[    3.801139] tc358743 0-000f: I2C write 0x8576 = 0x00
[    3.804483] tc358743 0-000f: I2C write 0x0004 = 0x0c14
[    3.805152] tc358743 0-000f: I2C write 0x8502 = 0xff
[    3.805846] tc358743 0-000f: I2C write 0x8503 = 0xff
[    3.806530] tc358743 0-000f: I2C write 0x8504 = 0xff
[    3.807198] tc358743 0-000f: I2C write 0x8505 = 0xff
[    3.807859] tc358743 0-000f: I2C write 0x8506 = 0xff
[    3.808533] tc358743 0-000f: I2C write 0x8507 = 0xff
[    3.809189] tc358743 0-000f: I2C write 0x8508 = 0xff
[    3.809853] tc358743 0-000f: I2C write 0x8509 = 0xff
[    3.810509] tc358743 0-000f: I2C write 0x850a = 0xff
[    3.811156] tc358743 0-000f: I2C write 0x850b = 0xff
[    3.812770] tc358743 0-000f: I2C write 0x850c = 0xff
[    3.813440] tc358743 0-000f: I2C write 0x850d = 0xff
[    3.814094] tc358743 0-000f: I2C write 0x850e = 0xff
[    3.814741] tc358743 0-000f: I2C write 0x850f = 0xff
[    3.815533] tc358743 0-000f: I2C write 0x0014 = 0xffff
[    3.816365] tc358743 0-000f: tc358743_enable_interrupts: cable connected = 1
[    3.817011] tc358743 0-000f: I2C write 0x8512 = 0xce
[    3.821810] tc358743 0-000f: I2C write 0x8513 = 0xdf
[    3.822477] tc358743 0-000f: I2C write 0x8515 = 0x3d
[    3.823128] tc358743 0-000f: I2C write 0x8516 = 0xfe
[    3.823775] tc358743 0-000f: I2C write 0x851b = 0xfd
[    3.824575] tc358743 0-000f: I2C write 0x0016 = 0xfcff
[    3.824589] tc358743 0-000f: tc358743 found @ 0x1e (bcm2835 I2C adapter)
[    3.824806] tc358743 1-000f: chip found @ 0x1e (bcm2835 I2C adapter)
[    4.874031] tc358743 0-000f: tc358743_isr: IntStatus = 0x0200
[    4.878067] tc358743 0-000f: I2C write 0x8502 = 0x01
[    4.878081] tc358743 0-000f: tc358743_hdmi_sys_int_handler: SYS_INT = 0x01
[    4.878923] tc358743 0-000f: tc358743_hdmi_sys_int_handler: Tx 5V power present: yes
[    4.878931] tc358743 0-000f: tc358743_enable_edid: no EDID -> no hotplug
[    4.880699] tc358743 0-000f: I2C write 0x0014 = 0x0200
[    5.029239] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[    5.048768] r8152 1-1.4:1.0 eth0: carrier on
[    5.048949] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[    5.736729] w1_master_driver w1_bus_master1: w1_search: max_slave_count 64 reached, will continue next search.
[    5.875119] Adding 102396k swap on /var/swap.  Priority:-2 extents:1 across:102396k SSFS
[    5.912623] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[    6.952158] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[    7.992544] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[    8.732292] random: crng init done
[    8.732301] random: 7 urandom warning(s) missed due to ratelimiting
[    9.032169] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   10.072603] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   11.112168] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   11.176367] fuse init (API version 7.26)
[   12.152196] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   13.192224] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   14.232560] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   15.272182] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   16.312188] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   17.352554] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   18.392151] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   19.432587] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   20.472571] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   21.512626] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   22.552157] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   23.592618] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   24.632156] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   25.672556] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   26.712568] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   27.752166] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   28.792578] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   29.832189] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   30.872549] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   31.912556] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   32.952568] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   33.992569] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   35.032555] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   36.072561] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   37.112534] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   38.152164] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   39.192571] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   40.232558] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   41.272575] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   42.312540] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   43.352545] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   44.392538] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   45.432577] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   46.472575] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   47.512576] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   48.552545] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   49.592547] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   50.632536] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   51.672539] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   52.712545] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   53.752546] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   54.792533] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   55.832543] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   56.396390] w1_master_driver w1_bus_master1: Attaching one wire slave 00.800000000000 crc 8c
[   56.401264] w1_master_driver w1_bus_master1: Family 0 for 00.800000000000.8c is not registered.
[   56.401578] tc358743 1-000f: chip found @ 0x1e (bcm2835 I2C adapter)
[   56.872540] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   57.912540] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   58.952540] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   59.992556] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   61.032544] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
[   62.072533] tc358743 0-000f: tc358743_isr: IntStatus = 0x0000
I hope it helps in investigation. Please, provide me a patch or a temporary solution as soon as you got it. And feel free to ask about some tests if needed.

Thank you again!

xasm
Posts: 34
Joined: Mon Nov 19, 2018 8:28 am

Re: Two cameras (CM3) question

Thu Nov 22, 2018 9:21 am

Hi, 6by9!

I just made another one test and got a quite strange result.

I changed dtoverlay lines - now the first one is dtoverlay=tc358743-csi0 and the second is dtoverlay=tc358743,i2c_pins_28_29=1

I expected that CAM0 will work and CAM1 will not. But in reality, I still see dev/video0 only and video still comes from CAM1. :shock:

Probably the issue is not in the kernel, but in dts file?

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 7578
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: Two cameras (CM3) question

Thu Nov 22, 2018 10:04 am

xasm wrote:
Thu Nov 22, 2018 9:21 am
Hi, 6by9!

I just made another one test and got a quite strange result.

I changed dtoverlay lines - now the first one is dtoverlay=tc358743-csi0 and the second is dtoverlay=tc358743,i2c_pins_28_29=1

I expected that CAM0 will work and CAM1 will not. But in reality, I still see dev/video0 only and video still comes from CAM1. :shock:

Probably the issue is not in the kernel, but in dts file?
I don't believe so. Life is a touch complicated in that an overlay is just that - updating/overlaying an existing DT. The order of i2c0/i2c1 and csi0/csi1 will be the same whichever way around the overlays are specified, therefore the order that the kernel parses them in will be the same.
If there were something fundamentally wrong in the DT then just loading tc358743-csi0 wouldn't work.

You'll always get nodes numbered as /dev/video0 and incrementing. The function called is video_register_device, which takes a parameter of the preferred node number, or -1 for "use the next one". Some drivers do offer the option to specify their preferred node number, but relying on the ordering is not recommended. If I have a usb webcam plugged in at the same time as using tc358743 then the tc358743 is /dev/video2. If I'd requested video0 then I wouldn't get it as it was in use, and it would still be video2.

Minor error earlier - I'd switched Pis and was actually still on 4.14.79. Now I've rebuilt I'm on 4.19.2, but still the same issue.
Software Engineer at Raspberry Pi Trading. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 7578
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: Two cameras (CM3) question

Thu Nov 22, 2018 1:06 pm

Found. It was the dt overlay file. Both instances were calling their clock "bridge-clk", and even though one was under i2c_arm and one under i2c_vc they got confused/merged. The second tc358743 was therefore failing waiting for the clock to probe. When only one overlay was loaded there was no collision on the clock names, therefore it loaded OK.

Code: Select all

// SPDX-License-Identifier: GPL-2.0-only
// Definitions for Toshiba TC358743 HDMI to CSI2 bridge on ARM I2C bus
/dts-v1/;
/plugin/;

/{
	compatible = "brcm,bcm2708";

	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			#address-cells = <1>;
			#size-cells = <0>;
			status = "okay";

			[email protected] {
				compatible = "toshiba,tc358743";
				reg = <0x0f>;
				status = "okay";

				clocks = <&tc358743_0_clk>;
				clock-names = "refclk";

				tc358743_0_clk: bridge-clk-0 {
					compatible = "fixed-clock";
					#clock-cells = <0>;
					clock-frequency = <27000000>;
				};

				port {
					tc358743_0: endpoint {
						remote-endpoint = <&csi0_ep>;
						clock-lanes = <0>;
						clock-noncontinuous;
						link-frequencies =
							/bits/ 64 <486000000>;
					};
				};
			};
		};
	};

	[email protected] {
		target = <&csi0>;
		__overlay__ {
			status = "okay";

			port {
				csi0_ep: endpoint {
					remote-endpoint = <&tc358743_0>;
				};
			};
		};
	};

	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			[email protected] {
				port {
					endpoint {
						data-lanes = <1 2>;
					};
				};
			};
		};
	};

	[email protected] {
		target = <&i2c1_pins>;
		__dormant__ {
			brcm,pins = <2 3>;
			brcm,function = <4>; /* alt0 */
		};
	};
	[email protected] {
		target = <&i2c1_pins>;
		__overlay__ {
			brcm,pins = <44 45>;
			brcm,function = <6>; /* alt2 */
		};
	};
	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			status = "okay";
		};
	};

	__overrides__ {
		i2c_pins_2_3 = <0>,"+3-4";
		link-frequency = <&tc358743_0>,"link-frequencies#0";
	};
};
is now working for me.
Wow, that took a while to dig through!
Software Engineer at Raspberry Pi Trading. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 7578
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: Two cameras (CM3) question

Thu Nov 22, 2018 1:43 pm

Tested further and can confirm that I can run yavta on both instances simultaneously (having found out that my DVD player doesn't seem to give an HDMI feed that the TC358743 can reliably lock on to!)
Software Engineer at Raspberry Pi Trading. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

xasm
Posts: 34
Joined: Mon Nov 19, 2018 8:28 am

Re: Two cameras (CM3) question

Thu Nov 22, 2018 4:09 pm

6by9, you are the best!

Everything works perfectly! Thank you for the fast and reliable support!

xasm
Posts: 34
Joined: Mon Nov 19, 2018 8:28 am

Re: Two cameras (CM3) question

Fri Feb 15, 2019 1:15 pm

Hi 6by9!

You helped me wit 2xB102 2 months ago. Now, I'm trying to setup the system again, but something doesn't work.

As you menthioned, I didn't use dt-blob files, but it seems that something important was there

I made the following (with your last dts file):

Code: Select all

dtc -I dts -O dtb -o tc358743-overlay-csi0.dtb tc358743-overlay-csi0.dts
sudo cp tc358743-overlay-csi0.dtb /boot/ tc358743-overlay-csi0.bin

dtc -O dtb -o tc358743-csi0.dtbo tc358743-overlay-csi0.dts
sudo cp tc358743-csi0.dtbo /boot/overlays
To config.txt:

Code: Select all

dtparam=i2c_arm=on
dtoverlay=tc358743,i2c_pins_28_29=1
dtoverlay=tc358743-csi0
There are no video1, but it seems that second i2c is misconfigured - I see only "--" in i2cdetect -y 1 report.

Could you give me some advice how to fix it? Thank you!

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 7578
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: Two cameras (CM3) question

Fri Feb 15, 2019 1:28 pm

First step is to confirm which of the two is actually probing - the first to fully probe will become /dev/video0 no matter which order you specify them in. Remove one dtoverlay line at a time from config.txt to confirm which is working and which isn't.

dtparam=i2c_arm=on shouldn't be needed as the overlay using i2c-1 should enable that anyway. Check that /dev/i2c-0 and /dev/i2c-1 both exist.

Use "raspi-gpio get" to confirm the pinmuxing. I'd expect
28 = SDA0
29 = SCL0
44 = SDA1
45 = SCL1
No other pins should report those functions.

Add "dtdebug=1" to config.txt, and then "sudo vcdbg log msg" will dump out a load of information from merging the overlays.

Anything useful in dmesg?
Software Engineer at Raspberry Pi Trading. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

xasm
Posts: 34
Joined: Mon Nov 19, 2018 8:28 am

Re: Two cameras (CM3) question

Fri Feb 15, 2019 1:39 pm

I connect:

28 = SDA0
29 = SCL0
2 = SDA1
3 = SCL1

/dev/i2c-0 and /dev/i2c-1 exist.

According the log both overlays are loaded.

I guess I missed something with installation process

xasm
Posts: 34
Joined: Mon Nov 19, 2018 8:28 am

Re: Two cameras (CM3) question

Fri Feb 15, 2019 1:54 pm

Hmmm

When I commented "dtoverlay=tc358743-csi0" I got both correct reports with i2cdetect

Does it mean that dts file is not correct?

I'm using this one:

Code: Select all

// SPDX-License-Identifier: GPL-2.0-only
// Definitions for Toshiba TC358743 HDMI to CSI2 bridge on ARM I2C bus
/dts-v1/;
/plugin/;

/{
	compatible = "brcm,bcm2708";

	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			#address-cells = <1>;
			#size-cells = <0>;
			status = "okay";

			[email protected] {
				compatible = "toshiba,tc358743";
				reg = <0x0f>;
				status = "okay";

				clocks = <&tc358743_0_clk>;
				clock-names = "refclk";

				tc358743_0_clk: bridge-clk-0 {
					compatible = "fixed-clock";
					#clock-cells = <0>;
					clock-frequency = <27000000>;
				};

				port {
					tc358743_0: endpoint {
						remote-endpoint = <&csi0_ep>;
						clock-lanes = <0>;
						clock-noncontinuous;
						link-frequencies =
							/bits/ 64 <486000000>;
					};
				};
			};
		};
	};

	[email protected] {
		target = <&csi0>;
		__overlay__ {
			status = "okay";

			port {
				csi0_ep: endpoint {
					remote-endpoint = <&tc358743_0>;
				};
			};
		};
	};

	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			[email protected] {
				port {
					endpoint {
						data-lanes = <1 2>;
					};
				};
			};
		};
	};

	[email protected] {
		target = <&i2c1_pins>;
		__dormant__ {
			brcm,pins = <2 3>;
			brcm,function = <4>; /* alt0 */
		};
	};
	[email protected] {
		target = <&i2c1_pins>;
		__overlay__ {
			brcm,pins = <44 45>;
			brcm,function = <6>; /* alt2 */
		};
	};
	[email protected] {
		target = <&i2c_arm>;
		__overlay__ {
			status = "okay";
		};
	};

	__overrides__ {
		i2c_pins_2_3 = <0>,"+3-4";
		link-frequency = <&tc358743_0>,"link-frequencies#0";
	};
};

Return to “Graphics, sound and multimedia”