The pixel_phase attribute is not in effect

hi!

I set different modes for the camera sensor in the device tree, but only the pixel_phase property in the first mode works. When I switch modes, pixel_phase is still the value set in the first mode.

Here is my device tree code:

 i2c@3180000 {
	imx586_a@34 {
		compatible = "nvidia,imx586";
		/* I2C device address */
		reg = <0x1A>;

		/* V4L2 device node location */
		devnode = "video1";

		/* Physical dimensions of sensor */
		physical_w = "6.4";
		physical_h = "4.8";

		sensor_model ="imx586";
		
		/* Define any required hw resources needed by driver */
		/* ie. clocks, io pins, power sources */
		avdd-reg = "vana";
		iovdd-reg = "vif";
		dvdd-reg = "vdig";
		
		/* Sensor output flip settings */
		vertical-flip = "true";

		/* Defines number of frames to be dropped by driver internally after applying */
		/* sensor crop settings. Some sensors send corrupt frames after applying */
		/* crop co-ordinates */
		post_crop_frame_drop = "0";
	
		/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
		use_decibel_gain = "true";

		/* if true, delay gain setting by one frame to be in sync with exposure */
		delayed_gain = "true";

		/* enable CID_SENSOR_MODE_ID for sensor modes selection */
		use_sensor_mode_id = "true";
	
		/**
		* A modeX node is required to support v4l2 driver
		* implementation with NVIDIA camera software stack
		*
		* mclk_khz = "";
		* Standard MIPI driving clock, typically 24MHz
		*
		* num_lanes = "";
		* Number of lane channels sensor is programmed to output
		*
		* tegra_sinterface = "";
		* The base tegra serial interface lanes are connected to
		* Incase of virtual HW devices, use virtual
		* For SW emulated devices, use host
		* must be set to the CSI port where the sensor is connected
		*
		* phy_mode = "";
		* PHY mode used by the MIPI lanes for this device
		*
		* discontinuous_clk = "";
		* The sensor is programmed to use a discontinuous clock on MIPI lanes
		*
		* dpcm_enable = "true";
		* The sensor is programmed to use a DPCM modes
		*
		* cil_settletime = "";
		* MIPI lane settle time value.
		* A "0" value attempts to autocalibrate based on mclk_multiplier
		*
		*
		*
		*
		* active_w = "";
		* Pixel active region width
		*
		* active_h = "";
		* Pixel active region height
		*
		* pixel_t = "";
		* The sensor readout pixel pattern
		*
		* readout_orientation = "0";
		* Based on camera module orientation.
		* Only change readout_orientation if you specifically
		* Program a different readout order for this mode
		*
		* line_length = "";
		* Pixel line length (width) for sensor mode.
		* This is used to calibrate features in our camera stack.
		*
		* mclk_multiplier = "";
		* Multiplier to MCLK to help time hardware capture sequence
		* TODO: Assign to PLL_Multiplier as well until fixed in core
		*
		* pix_clk_hz = "";
		* Sensor pixel clock used for calculations like exposure and framerate
		*
		*
		*
		*
		* inherent_gain = "";
		* Gain obtained inherently from mode (ie. pixel binning)
		*
		* == Source Control Settings ==
		*
		* Gain factor used to convert fixed point integer to float
		* Gain range [min_gain/gain_factor, max_gain/gain_factor]
		* Gain step [step_gain/gain_factor is the smallest step that can be configured]
		* Default gain [Default gain to be initialized for the control.
		*     use min_gain_val as default for optimal results]
		* Framerate factor used to convert fixed point integer to float
		* Framerate range [min_framerate/framerate_factor, max_framerate/framerate_factor]
		* Framerate step [step_framerate/framerate_factor is the smallest step that can be configured]
		* Default Framerate [Default framerate to be initialized for the control.
		*     use max_framerate to get required performance]
		* Exposure factor used to convert fixed point integer to float
		* For convenience use 1 sec = 1000000us as conversion factor
		* Exposure range [min_exp_time/exposure_factor, max_exp_time/exposure_factor]
		* Exposure step [step_exp_time/exposure_factor is the smallest step that can be configured]
		* Default Exposure Time [Default exposure to be initialized for the control.
		*     Set default exposure based on the default_framerate for optimal exposure settings]
		*
		* gain_factor = ""; (integer factor used for floating to fixed point conversion)
		* min_gain_val = ""; (ceil to integer)
		* max_gain_val = ""; (ceil to integer)
		* step_gain_val = ""; (ceil to integer)
		* default_gain = ""; (ceil to integer)
		* Gain limits for mode
		*
		* exposure_factor = ""; (integer factor used for floating to fixed point conversion)
		* min_exp_time = ""; (ceil to integer)
		* max_exp_time = ""; (ceil to integer)
		* step_exp_time = ""; (ceil to integer)
		* default_exp_time = ""; (ceil to integer)
		* Exposure Time limits for mode (us)
		*
		*
		* min_hdr_ratio = "";
		* max_hdr_ratio = "";
		* HDR Ratio limits for mode
		*
		* framerate_factor = ""; (integer factor used for floating to fixed point conversion)
		* min_framerate = "";
		* max_framerate = "";
		* step_framerate = ""; (ceil to integer)
		* default_framerate = ""; (ceil to integer)
		* Framerate limits for mode (fps)
		*
		* embedded_metadata_height = "";
		* Sensor embedded metadata height in units of rows.
		* If sensor does not support embedded metadata value should be 0.
		*/
		mode0 {/*mode IMX586_MODE_4000X3000_HDR_30FPS*/
			mclk_khz = "24000";
			num_lanes = "4";
			tegra_sinterface = "serial_a";
			phy_mode = "DPHY";
			discontinuous_clk = "no";
			dpcm_enable = "false";
			cil_settletime = "0";
			dynamic_pixel_bit_depth = "10";
			csi_pixel_bit_depth = "10";
			mode_type = "bayer";
			pixel_phase = "rggb";
			//pixel_phase = "bggr";
			
			active_w = "4000";
			active_h = "3000";
			readout_orientation = "0";
			line_length = "9440";
			inherent_gain = "1";
			mclk_multiplier = "1042";
			pix_clk_hz = "1718400000";
			
			//gain
			gain_factor = "10";
			min_gain_val = "10"; /* 1dB */
			max_gain_val = "240"; /* 24dB */
			step_gain_val = "10"; /* 1 */
			default_gain = "10";

			min_hdr_ratio = "1";
			max_hdr_ratio = "1";
			
			//framerate
			framerate_factor = "1000000";
			min_framerate = "1000000"; 	// 1.0
			max_framerate = "30003939";	// 30.0039390646258		
			step_framerate = "1";
			default_framerate = "30003939";
			
			//exposure	
			exposure_factor = "1000000";
			min_exp_time = "32"; /* us, 6 lines */
			max_exp_time = "33333"; /* us */
			step_exp_time = "2";
			default_exp_time = "33333";/* us */

			embedded_metadata_height = "0";
		};
		mode1 {/*mode IMX586_MODE_4000X3000_NOR_35FPS*/
			mclk_khz = "24000";
			num_lanes = "4";
			tegra_sinterface = "serial_a";
			phy_mode = "DPHY";
			discontinuous_clk = "no";
			dpcm_enable = "false";
			cil_settletime = "0";
			dynamic_pixel_bit_depth = "10";
			csi_pixel_bit_depth = "10";
			mode_type = "bayer";
			pixel_phase = "rggb";
			//pixel_phase = "bggr";
			
			active_w = "4000";
			active_h = "3000";
			readout_orientation = "0";
			line_length = "7872";
			inherent_gain = "1";
			//mclk_multiplier = "400";
			//pix_clk_hz = "597600000";
			//pix_clk_hz = "741600000";
			mclk_multiplier = "625";
			pix_clk_hz = "864000000";
			
			//gain
			gain_factor = "10";
			min_gain_val = "10"; /* 1dB */
			max_gain_val = "360"; /* 36dB */
			step_gain_val = "10"; /* 1 */
			default_gain = "10";

			min_hdr_ratio = "1";
			max_hdr_ratio = "1";
			
			//framerate
			framerate_factor = "1000000";
			//min_framerate = "1500000"; // 1.5 
			//max_framerate = "24808704";	// 24.808704
			min_framerate = "1000000"; 	// 1.0
			//max_framerate = "30786704";	// 30.78670492587279
			//max_framerate = "35668739";	// 35.66873904033158
			max_framerate = "35868005";	// 35.86800573888092	
			step_framerate = "1";
			//default_framerate = "24088320";
			//default_framerate = "30786704";
			//default_framerate = "35668739";
			default_framerate = "35868005";
			
			//exposure	
			exposure_factor = "1000000";
			min_exp_time = "56"; /* us, 6 lines */
			max_exp_time = "28571";	//"28036"; /* us */
			step_exp_time = "2";
			default_exp_time = "28571";/* us */

			embedded_metadata_height = "0";
		};
		mode2 {/*mode IMX586_MODE_4000X3000_HDR_30FPS_mirror*/
			mclk_khz = "24000";
			num_lanes = "4";
			tegra_sinterface = "serial_a";
			phy_mode = "DPHY";
			discontinuous_clk = "no";
			dpcm_enable = "false";
			cil_settletime = "0";
			dynamic_pixel_bit_depth = "10";
			csi_pixel_bit_depth = "10";
			mode_type = "bayer";
			pixel_phase = "grbg";
			//pixel_phase = "grbg";
			
			active_w = "4000";
			active_h = "3000";
			readout_orientation = "0";
			line_length = "9440";
			inherent_gain = "1";
			mclk_multiplier = "1042";
			pix_clk_hz = "1718400000";
			
			//gain
			gain_factor = "10";
			min_gain_val = "10"; /* 1dB */
			max_gain_val = "240"; /* 24dB */
			step_gain_val = "10"; /* 1 */
			default_gain = "10";

			min_hdr_ratio = "1";
			max_hdr_ratio = "1";
			
			//framerate
			framerate_factor = "1000000";
			min_framerate = "1000000"; 	// 1.0
			max_framerate = "30003939";	// 30.0039390646258		
			step_framerate = "1";
			default_framerate = "30003939";
			
			//exposure	
			exposure_factor = "1000000";
			min_exp_time = "32"; /* us, 6 lines */
			max_exp_time = "33333"; /* us */
			step_exp_time = "2";
			default_exp_time = "33333";/* us */

			embedded_metadata_height = "0";
		};	
		mode3 {/*mode IMX586_MODE_4000X3000_NOR_35FPS_mirror*/
			mclk_khz = "24000";
			num_lanes = "4";
			tegra_sinterface = "serial_a";
			phy_mode = "DPHY";
			discontinuous_clk = "no";
			dpcm_enable = "false";
			cil_settletime = "0";
			dynamic_pixel_bit_depth = "10";
			csi_pixel_bit_depth = "10";
			mode_type = "bayer";
			pixel_phase = "grbg";
			//pixel_phase = "grbg";
			
			active_w = "4000";
			active_h = "3000";
			readout_orientation = "0";
			line_length = "7872";
			inherent_gain = "1";
			//mclk_multiplier = "400";
			//pix_clk_hz = "597600000";
			//pix_clk_hz = "741600000";
			mclk_multiplier = "625";
			pix_clk_hz = "864000000";
			
			//gain
			gain_factor = "10";
			min_gain_val = "10"; /* 1dB */
			max_gain_val = "360"; /* 36dB */
			step_gain_val = "10"; /* 1 */
			default_gain = "10";

			min_hdr_ratio = "1";
			max_hdr_ratio = "1";
			
			//framerate
			framerate_factor = "1000000";
			//min_framerate = "1500000"; // 1.5 
			//max_framerate = "24808704";	// 24.808704
			min_framerate = "1000000"; 	// 1.0
			//max_framerate = "30786704";	// 30.78670492587279
			//max_framerate = "35668739";	// 35.66873904033158
			max_framerate = "35868005";	// 35.86800573888092	
			step_framerate = "1";
			//default_framerate = "24088320";
			//default_framerate = "30786704";
			//default_framerate = "35668739";
			default_framerate = "35868005";
			
			//exposure	
			exposure_factor = "1000000";
			min_exp_time = "56"; /* us, 6 lines */
			max_exp_time = "28571";	//"28036"; /* us */
			step_exp_time = "2";
			default_exp_time = "28571";/* us */

			embedded_metadata_height = "0";
		};
		mode4 {/*mode IMX586_MODE_4000X3000_HDR_30FPS_flip*/
			mclk_khz = "24000";
			num_lanes = "4";
			tegra_sinterface = "serial_a";
			phy_mode = "DPHY";
			discontinuous_clk = "no";
			dpcm_enable = "false";
			cil_settletime = "0";
			dynamic_pixel_bit_depth = "10";
			csi_pixel_bit_depth = "10";
			mode_type = "bayer";
			pixel_phase = "gbrg";
			//pixel_phase = "grbg";
			
			active_w = "4000";
			active_h = "3000";
			readout_orientation = "0";
			line_length = "9440";
			inherent_gain = "1";
			mclk_multiplier = "1042";
			pix_clk_hz = "1718400000";
			
			//gain
			gain_factor = "10";
			min_gain_val = "10"; /* 1dB */
			max_gain_val = "240"; /* 24dB */
			step_gain_val = "10"; /* 1 */
			default_gain = "10";

			min_hdr_ratio = "1";
			max_hdr_ratio = "1";
			
			//framerate
			framerate_factor = "1000000";
			min_framerate = "1000000"; 	// 1.0
			max_framerate = "30003939";	// 30.0039390646258		
			step_framerate = "1";
			default_framerate = "30003939";
			
			//exposure	
			exposure_factor = "1000000";
			min_exp_time = "32"; /* us, 6 lines */
			max_exp_time = "33333"; /* us */
			step_exp_time = "2";
			default_exp_time = "33333";/* us */

			embedded_metadata_height = "0";
		};			
		mode5 {/*mode IMX586_MODE_4000X3000_NOR_35FPS_flip*/
			mclk_khz = "24000";
			num_lanes = "4";
			tegra_sinterface = "serial_a";
			phy_mode = "DPHY";
			discontinuous_clk = "no";
			dpcm_enable = "false";
			cil_settletime = "0";
			dynamic_pixel_bit_depth = "10";
			csi_pixel_bit_depth = "10";
			mode_type = "bayer";
			pixel_phase = "gbrg";
			//pixel_phase = "grbg";
			
			active_w = "4000";
			active_h = "3000";
			readout_orientation = "0";
			line_length = "7872";
			inherent_gain = "1";
			//mclk_multiplier = "400";
			//pix_clk_hz = "597600000";
			//pix_clk_hz = "741600000";
			mclk_multiplier = "625";
			pix_clk_hz = "864000000";
			
			//gain
			gain_factor = "10";
			min_gain_val = "10"; /* 1dB */
			max_gain_val = "360"; /* 36dB */
			step_gain_val = "10"; /* 1 */
			default_gain = "10";

			min_hdr_ratio = "1";
			max_hdr_ratio = "1";
			
			//framerate
			framerate_factor = "1000000";
			//min_framerate = "1500000"; // 1.5 
			//max_framerate = "24808704";	// 24.808704
			min_framerate = "1000000"; 	// 1.0
			//max_framerate = "30786704";	// 30.78670492587279
			//max_framerate = "35668739";	// 35.66873904033158
			max_framerate = "35868005";	// 35.86800573888092	
			step_framerate = "1";
			//default_framerate = "24088320";
			//default_framerate = "30786704";
			//default_framerate = "35668739";
			default_framerate = "35868005";
			
			//exposure	
			exposure_factor = "1000000";
			min_exp_time = "56"; /* us, 6 lines */
			max_exp_time = "28571";	//"28036"; /* us */
			step_exp_time = "2";
			default_exp_time = "28571";/* us */

			embedded_metadata_height = "0";
		};
		mode6 {/*mode IMX586_MODE_4000X3000_HDR_30FPS_mirror_flip*/
			mclk_khz = "24000";
			num_lanes = "4";
			tegra_sinterface = "serial_a";
			phy_mode = "DPHY";
			discontinuous_clk = "no";
			dpcm_enable = "false";
			cil_settletime = "0";
			dynamic_pixel_bit_depth = "10";
			csi_pixel_bit_depth = "10";
			mode_type = "bayer";
			pixel_phase = "bggr";
			//pixel_phase = "grbg";
			
			active_w = "4000";
			active_h = "3000";
			readout_orientation = "0";
			line_length = "9440";
			inherent_gain = "1";
			mclk_multiplier = "1042";
			pix_clk_hz = "1718400000";
			
			//gain
			gain_factor = "10";
			min_gain_val = "10"; /* 1dB */
			max_gain_val = "240"; /* 24dB */
			step_gain_val = "10"; /* 1 */
			default_gain = "10";

			min_hdr_ratio = "1";
			max_hdr_ratio = "1";
			
			//framerate
			framerate_factor = "1000000";
			min_framerate = "1000000"; 	// 1.0
			max_framerate = "30003939";	// 30.0039390646258		
			step_framerate = "1";
			default_framerate = "30003939";
			
			//exposure	
			exposure_factor = "1000000";
			min_exp_time = "32"; /* us, 6 lines */
			max_exp_time = "33333"; /* us */
			step_exp_time = "2";
			default_exp_time = "33333";/* us */

			embedded_metadata_height = "0";
		};	
		mode7 {/*mode IMX586_MODE_4000X3000_NOR_35FPS_mirror_flip*/
			mclk_khz = "24000";
			num_lanes = "4";
			tegra_sinterface = "serial_a";
			phy_mode = "DPHY";
			discontinuous_clk = "no";
			dpcm_enable = "false";
			cil_settletime = "0";
			dynamic_pixel_bit_depth = "10";
			csi_pixel_bit_depth = "10";
			mode_type = "bayer";
			pixel_phase = "bggr";
			//pixel_phase = "grbg";
			
			active_w = "4000";
			active_h = "3000";
			readout_orientation = "0";
			line_length = "7872";
			inherent_gain = "1";
			//mclk_multiplier = "400";
			//pix_clk_hz = "597600000";
			//pix_clk_hz = "741600000";
			mclk_multiplier = "625";
			pix_clk_hz = "864000000";
			
			//gain
			gain_factor = "10";
			min_gain_val = "10"; /* 1dB */
			max_gain_val = "360"; /* 36dB */
			step_gain_val = "10"; /* 1 */
			default_gain = "10";

			min_hdr_ratio = "1";
			max_hdr_ratio = "1";
			
			//framerate
			framerate_factor = "1000000";
			//min_framerate = "1500000"; // 1.5 
			//max_framerate = "24808704";	// 24.808704
			min_framerate = "1000000"; 	// 1.0
			//max_framerate = "30786704";	// 30.78670492587279
			//max_framerate = "35668739";	// 35.66873904033158
			max_framerate = "35868005";	// 35.86800573888092	
			step_framerate = "1";
			//default_framerate = "24088320";
			//default_framerate = "30786704";
			//default_framerate = "35668739";
			default_framerate = "35868005";
			
			//exposure	
			exposure_factor = "1000000";
			min_exp_time = "56"; /* us, 6 lines */
			max_exp_time = "28571";	//"28036"; /* us */
			step_exp_time = "2";
			default_exp_time = "28571";/* us */

			embedded_metadata_height = "0";
		};	
		/*
		mode8 {//mode IMX586_MODE_8000X6000_FULL_19FPS/
			mclk_khz = "24000";
			num_lanes = "4";
			tegra_sinterface = "serial_a";
			phy_mode = "DPHY";
			discontinuous_clk = "no";
			dpcm_enable = "false";
			cil_settletime = "0";
			dynamic_pixel_bit_depth = "10";
			csi_pixel_bit_depth = "10";
			mode_type = "bayer";
			pixel_phase = "rggb";
			//pixel_phase = "grbg";
			
			active_w = "8000";
			active_h = "6000";
			readout_orientation = "0";
			line_length = "16000";
			inherent_gain = "1";
			mclk_multiplier = "625";
			pix_clk_hz = "1728000000";
			
			//gain
			gain_factor = "10";
			min_gain_val = "10"; // 1dB
			max_gain_val = "240"; // 24dB
			step_gain_val = "10"; // 1db
			default_gain = "10";

			min_hdr_ratio = "1";
			max_hdr_ratio = "1";
			
			//framerate
			framerate_factor = "1000000";
			min_framerate = "1500000"; // 1.5
			max_framerate = "19390000"; // 19.39
			step_framerate = "1";
			default_framerate = "19390000";
			
			//exposure	
			exposure_factor = "1000000";
			min_exp_time = "30"; // us
			max_exp_time = "28036"; // us
			step_exp_time = "1";
			default_exp_time = "3000";// us

			embedded_metadata_height = "0";
		};	
		*/		

		ports {
			#address-cells = <1>;
			#size-cells = <0>;
			port@0 {
				reg = <0>;
				status = "okay";
				liimx586_imx586_out0: endpoint {
					port-index = <0>;
					bus-width = <4>;
					remote-endpoint = <&liimx586_csi_in0>;
				};
			};
		};
	};
};

It worked fine, and the kernel logs did not report any errors.

This is the kernel log:

[   85.118266] configfs-gadget gadget: Wrong NDP SIGN
[   85.408161] [RCE] WARNING: t194/isp5.c:901 [config_channel] "All error notifications not enabled: correctable=0x00 uncorrectable=0x00"
[   85.636317] imx586_power_on: power_on
[   85.636333] imx586 2-001a: imx586_power_on: set reset gpio = 412.
[   85.636582] imx586_power_off: power_off
[   85.641151] imx586_power_on: power_on
[   85.641163] imx586 2-001a: imx586_power_on: set reset gpio = 412.
[   85.641481] imx586_power_off: power_off
[   85.662991] imx586_power_on: power_on
[   85.663005] imx586 2-001a: imx586_power_on: set reset gpio = 412.
[   85.663161] imx586_power_off: power_off
[   85.664824] imx586_power_on: power_on
[   85.664838] imx586 2-001a: imx586_power_on: set reset gpio = 412.
[   85.665057] imx586_power_off: power_off
[   85.667998] imx586_power_on: power_on
[   85.668006] imx586 2-001a: imx586_power_on: set reset gpio = 412.
[   85.668988] imx586_power_off: power_off
[   85.706262] imx586_power_on: power_on
[   85.706277] imx586 2-001a: imx586_power_on: set reset gpio = 412.
[   85.706448] imx586_power_off: power_off
[   85.708684] imx586_power_on: power_on
[   85.708697] imx586 2-001a: imx586_power_on: set reset gpio = 412.
[   85.708943] imx586_power_off: power_off
[   85.716413] FAN rising trip_level:107 cur_temp:30400 trip_temps[108]:1919248500
[   85.812137] [RCE] vi5_hwinit: firmware CL2018101701 protocol version 2.2
[   86.118365] imx586_power_on: power_on
[   86.118380] imx586 2-001a: imx586_power_on: set reset gpio = 412.
[   86.118641] imx586_set_exposure: val: 56, hdr_en: 0, 0, mode: 5
[   86.118651] imx586 2-001a: imx586_set_exposure: imx586_set_coarse_time(nor) 
[   86.118770] tegra-i2c 3180000.i2c: no acknowledge from address 0x1a
[   86.119230] imx586_set_coarse_time: val: 56, coarse_integ_time:2, def coarse time:2, max_coarse_time: 1077, fine_time: 1075, set: 52, mode: 5, num_framerates: 1, framerates: 35, frame_length: 1125, exposure_factor:1000000
[   86.119234] imx586_get_integ_coarse_time_regs, 2
[   86.119693] imx586 2-001a: imx586_set_group_hold: imx586_set_group_hold start, val :1 !!------------------
[   86.119879] imx586 2-001a: imx586_set_frame_rate: val: 35868003, calc frame_length:3060, mode: 5, pixel_clock: 864000000, framerate_factor:1000000, line_length:7872
[   86.119885] imx586 2-001a: imx586_set_frame_rate: val: 35868003, frame_length: 3060, frame_rate:35 fps
[   86.120253] imx586 2-001a: imx586_set_group_hold: imx586_set_group_hold start, val :0 !!------------------
[   86.156225] imx586 2-001a: imx586_set_group_hold: imx586_set_group_hold start, val :1 !!------------------
[   86.156512] imx586 2-001a: imx586_set_frame_rate: val: 25000000, calc frame_length:4390, mode: 5, pixel_clock: 864000000, framerate_factor:1000000, line_length:7872
[   86.156521] imx586 2-001a: imx586_set_frame_rate: val: 25000000, frame_length: 4390, frame_rate:25 fps
[   86.157069] imx586_set_exposure: val: 28570, hdr_en: 0, 0, mode: 5
[   86.157079] imx586 2-001a: imx586_set_exposure: imx586_set_coarse_time(nor) 
[   86.157348] imx586_set_coarse_time: val: 28570, coarse_integ_time:4342, def coarse time:4389, max_coarse_time: 4342, fine_time: 0, set: 52, mode: 5, num_framerates: 1, framerates: 35, frame_length: 4390, exposure_factor:1000000
[   86.157355] imx586_get_integ_coarse_time_regs, 4342
[   86.157831] imx586 2-001a: imx586_set_group_hold: imx586_set_group_hold start, val :0 !!------------------
[   86.160761] imx586 2-001a: imx586_set_mode: imx586_set_mode-----------
[   86.160768] imx586 2-001a: imx586_set_mode: imx586 set sensor_mode_id: 5
[   86.160780] imx586 2-001a: imx586_set_mode: imx586_set_mode, mode_prop_idx:5, limit_analog_gain:0, csi_port:0, numlanes:4, mode:5,fmt_width: 4000, fmt_height:3000, def_clk_freq:24000000
[   86.160786] imx586_set_mode: imx586_stand_by-----------
[   86.160791] imx586_stand_by: write table id: 11
[   86.182050] imx586 2-001a: imx586_set_mode: imx586_write_table, mode: 5-----------
[   86.201968] imx586_set_flip: flip write table id: 101
[   86.201977] imx586_set_flip: flip write value is: 02
[   86.253196] imx586_eeprom_get_dcc get dcc from eeprom
[   86.282209] imx586_eeprom_to_sensor_lrc: read reg from eeprom, Flag of SONY PDAF and SPC Calibration, addr: 0x07ae, val:1, ret: 0
[   86.418023] imx586_eeprom_to_sensor_lrc: write reg to sonsor (regaddr: 0x3e37, value: 1, err: 0)
[   86.429277] imx586 2-001a: imx586_set_gain, val:10 
[   86.429288] imx586 2-001a: imx586_set_gain, min_gain_val:10, max_gain_val:240, step_gain_val:10, gain_factor:10
[   86.429293] imx586 2-001a: imx586_set_gain: set value: 10, db gain: 1, anagle gani: 112
[   86.429299] imx586 2-001a: imx586_set_gain:  set gain,  address: 0x0204, val: 0x00
[   86.429459] imx586 2-001a: imx586_set_gain:  set gain,  address: 0x0205, val: 0x70
[   86.429621] imx586_set_exposure: val: 28570, hdr_en: 0, 0, mode: 5
[   86.429628] imx586 2-001a: imx586_set_exposure: imx586_set_coarse_time(nor) 
[   86.429639] imx586_set_coarse_time: val: 28570, coarse_integ_time:4342, def coarse time:4389, max_coarse_time: 4342, fine_time: 0, set: 52, mode: 5, num_framerates: 1, framerates: 35, frame_length: 4390, exposure_factor:1000000
[   86.429643] imx586_get_integ_coarse_time_regs, 4342
[   86.432193] imx586 2-001a: imx586_set_frame_rate: val: 25000000, calc frame_length:4390, mode: 5, pixel_clock: 864000000, framerate_factor:1000000, line_length:7872
[   86.432201] imx586 2-001a: imx586_set_frame_rate: val: 25000000, frame_length: 4390, frame_rate:25 fps
[   86.432544] imx586_start_streaming
[   86.432548] imx586_start_streaming: imx586_start_streaming-------------
[   86.432553] imx586_start_streaming: IMX586_MODE_START_STREAM, 8!!! 
[   86.836438] FAN cooling trip_level:9 cur_temp:30250 trip_temps[10]:0
[   86.884738] imx586_focus_start_kthreads: imx586_focus_start_kthreads !!! 
[   86.884880] imx586_focus_thread frame_rate: 25 fps, mode_prop_id: 5, frame_rate: 25001388, width: 4000, height: 3000
[   86.884891] imx586_pdaf_set_area: area (mode_prop_idx:5, width: 4000, height: 3000, xstart: 1667, ystart: 1250, xend: 2333, yend: 1750)
[   86.885088] imx586_pdaf_set_area: imx586_write_reg (regaddr: 0x38a3, value: 2, err: 0)
[   86.885242] imx586_pdaf_set_area: imx586_write_reg (regaddr: 0x38ac, value: 1, err: 0)
[   86.886072] imx586 2-001a: imx586_set_frame_rate: val: 35868003, calc frame_length:3060, mode: 5, pixel_clock: 864000000, framerate_factor:1000000, line_length:7872
[   86.886079] imx586 2-001a: imx586_set_frame_rate: val: 35868003, frame_length: 3060, frame_rate:35 fps
[   86.914703] imx586 2-001a: imx586_set_frame_rate: val: 25000000, calc frame_length:4390, mode: 5, pixel_clock: 864000000, framerate_factor:1000000, line_length:7872
[   86.914717] imx586 2-001a: imx586_set_frame_rate: val: 25000000, frame_length: 4390, frame_rate:25 fps
[   87.215223] imx586 2-001a: imx586_set_gain, val:20 
[   87.215236] imx586 2-001a: imx586_set_gain, min_gain_val:10, max_gain_val:240, step_gain_val:10, gain_factor:10
[   87.215241] imx586 2-001a: imx586_set_gain: set value: 20, db gain: 2, anagle gani: 211
[   87.215248] imx586 2-001a: imx586_set_gain:  set gain,  address: 0x0204, val: 0x00
[   87.215455] imx586 2-001a: imx586_set_gain:  set gain,  address: 0x0205, val: 0xd3
[   87.375219] imx586 2-001a: imx586_set_gain, val:30 
[   87.375231] imx586 2-001a: imx586_set_gain, min_gain_val:10, max_gain_val:240, step_gain_val:10, gain_factor:10
[   87.375236] imx586 2-001a: imx586_set_gain: set value: 30, db gain: 3, anagle gani: 300
[   87.375243] imx586 2-001a: imx586_set_gain:  set gain,  address: 0x0204, val: 0x01
[   87.375585] imx586 2-001a: imx586_set_gain:  set gain,  address: 0x0205, val: 0x2c
[   87.535427] imx586 2-001a: imx586_set_gain, val:40 
[   87.535439] imx586 2-001a: imx586_set_gain, min_gain_val:10, max_gain_val:240, step_gain_val:10, gain_factor:10
[   87.535572] imx586 2-001a: imx586_set_gain: set value: 40, db gain: 4, anagle gani: 378
[   87.535579] imx586 2-001a: imx586_set_gain:  set gain,  address: 0x0204, val: 0x01
[   87.535763] imx586 2-001a: imx586_set_gain:  set gain,  address: 0x0205, val: 0x7a
[   87.815151] imx586 2-001a: imx586_set_gain, val:50 
[   87.815251] imx586 2-001a: imx586_set_gain, min_gain_val:10, max_gain_val:240, step_gain_val:10, gain_factor:10
[   87.815257] imx586 2-001a: imx586_set_gain: set value: 50, db gain: 5, anagle gani: 449
[   87.815263] imx586 2-001a: imx586_set_gain:  set gain,  address: 0x0204, val: 0x01
[   87.815768] imx586 2-001a: imx586_set_gain:  set gain,  address: 0x0205, val: 0xc1
[   87.956379] FAN rising trip_level:107 cur_temp:30550 trip_temps[108]:1919248500
[   89.655066] imx586_set_exposure: val: 20000, hdr_en: 0, 0, mode: 5
[   89.655079] imx586 2-001a: imx586_set_exposure: imx586_set_coarse_time(nor) 
[   89.655090] imx586_set_coarse_time: val: 20000, coarse_integ_time:3073, def coarse time:3073, max_coarse_time: 4342, fine_time: 1269, set: 52, mode: 5, num_framerates: 1, framerates: 35, frame_length: 4390, exposure_factor:1000000
[   89.655093] imx586_get_integ_coarse_time_regs, 3073
[   89.695494] imx586 2-001a: imx586_set_gain, val:80 
[   89.695535] imx586 2-001a: imx586_set_gain, min_gain_val:10, max_gain_val:240, step_gain_val:10, gain_factor:10
[   89.695540] imx586 2-001a: imx586_set_gain: set value: 80, db gain: 8, anagle gani: 617
[   89.695546] imx586 2-001a: imx586_set_gain:  set gain,  address: 0x0204, val: 0x02
[   89.699046] imx586 2-001a: imx586_set_gain:  set gain,  address: 0x0205, val: 0x69
[   89.922344] imx586_stop_streaming: imx586_stop_streaming-------------
[   89.969183] imx586_focus_stop_kthreads: imx586_focus_stop_kthreads !!! 
[   89.969217] imx586_focus_thread: focus thread exit
[   90.010856] imx586_power_off: power_off
[   90.196422] FAN cooling trip_level:9 cur_temp:30550 trip_temps[10]:0
[   91.316447] FAN rising trip_level:107 cur_temp:30600 trip_temps[108]:1919248500

I use the Gstreamer directive:

   gst-launch-1.0 nvarguscamerasrc sensor-id=0 sensor-mode=3 ! 'video/x-raw(memory:NVMM), width=(int)4000, height=(int)3000, framerate=25/1' ! nvvidconv flip-method=0 ! 'video/x-raw, width=(int)640, height=(int)480, format=(string)I420' ! xvimagesink -e

Sorry to tell current driver design don’t support Mix pixel format.

Oh, that’s a shame!

I need this feature because the position of the pixels read will change when the image is flipped on the driver.

Sensor documentation: “When the readout direction is changed, the color of the first readout pixel (R/Gr/Gb/B) changes accordingly.”

So I need to change the pixel format.

I also tried using the Gstreamer plugin:

But it can cause the video stream to lose frames.

Do you have any good tips for video flipping?

Thanks for your reply!

Maybe you can try to implement virtual sensor driver to report different pixel format.
Like /dev/video0 report rggb and /dev/video1 report bggr

This is a good idea and I will try it.

Thank you for your prompt reply

The idea for the device tree configure those virtual sensor as different i2c address and handle them in the kernel driver. Also need handle mutex to avoid open different video node at the same time.

I need your help with two questions:

Q1:If the device tree is configured with different I2C addresses for these virtual sensors, how is the hardware location consistent? I mounted it under 0x1a of i2C-2. Now I change the hardware location of i2C-1 to 0x1A. Or do I need to change 0x1a to 0x1B or something like that?Can you explain it in detail?

Q2:I have three cameras mounted on my NX, each camera needs to be normal, flip, mirror, flip and mirror both, does that mean I need a lot of I2C addresses to configure the virtual sensor? Can so many I2C addresses be configured?

  1. Modify the slave address instead of bus number. Modify like 0x1a, 0x2a, 0x3a …
  2. There’s 2 address is virtual and it won’t cause configure actually. You need handle the virtual slave address in the sensor driver.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.