Truncated data with dual ISP capturing

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Truncated data with dual ISP capturing

Jump to solution
2,593 Views
khang_letruong
Senior Contributor III

Hi Community,

We are testing the capturing of dual camera sensors behind ISP blocks in iMX8M Plus with video_test utility (included in isp-imx package).

Our sensors' resolution is 1440x1080 with RAW10 Bayer output and our custom board disposes 2GB of RAM. 

We verified each pipeline (sensorX->MIPI-CSI2x->ISPx->/dev/videoX) with test pattern and each works well, video_test could capture valid patterns.

We then launched dual capturing with video_test in separate folder (to avoid that rawdump files with same name being overridden) and observed that :

1. If we launch both captures at nearly same time, there's only one that is able to dump the files out, other does NOT,

2. If we launch 1st capture then wait until it really captures (with rawdump_1440x1080_xy.pgm), then launch the 2nd capture (also with rawdump_1440x1080_xy.pgm in different folder) then 1st capture data starts to be truncated/shifted from 10 bit to 8 bit :

Valid data of 2nd capture :

valid-data(1).png

Invalid data of 1st capture since the moment 2nd capture is launched (00 columns should <= 03, not always 00):
Invalid-data(1).png
Therefore, I would like to know if there's any limitation of ISPs and/or of video_test utility with dual capturing regarding our resolution toward the size of DDR in our custom board and/or the default CMA memory in the system, please ?

We are using BSP-5.4.70-2.3.2.

Thanks in advance and best regards,
Khang

 

 

0 Kudos
Reply
1 Solution
2,523 Views
joanxie
NXP TechSupport
NXP TechSupport

pls see the private message

View solution in original post

0 Kudos
Reply
8 Replies
2,543 Views
joanxie
NXP TechSupport
NXP TechSupport

ISP is limited to 2 camera with 1080p 60 using MIPI CSI to ISP, but your camera resolution is 1440x1080, so this is fine, as I known, we tested dual balser dtb already, how about output two camera to one display? any different? the two ISP uses the same dewarp, so you need check this too

 

 

0 Kudos
Reply
2,539 Views
khang_letruong
Senior Contributor III

Hi @joanxie,

The same phenomenon (difference in brightness/color) also happens on same display :

dual-cam-single-display.jpg

 

The 2 instances of our  ISP driver share everything from XML to .json.

We also tested on more recent BSP (5.10.52-2.1.0) release and observed the same thing : Lately launched streaming is brighter and makes the formerly launched streaming darker. More illustration is in following links

1. cam0(/dev/video2) before cam1 (/dev/video3) : https://drive.google.com/file/d/15bAhZcY6-YArsLZY2KlLv9BvKxarGGaw/view?usp=sharing

2. cam1 (/dev/video3) before cam0 (/dev/video2) : https://drive.google.com/file/d/1mluJeyFnvp8SJozEfaMsajTUi3dg6rcD/view?usp=sharing

We also output same test pattern from both sensors to avoid the dependency of external condition (light, lens).

Best regards,

Khang.

0 Kudos
Reply
2,534 Views
khang_letruong
Senior Contributor III

Hi again @joanxie

I might also have a small doubt on the behavior of gstreamer command we are using :

 

gst-launch-1.0 -v v4l2src device=/dev/videoX ! "video/x-raw,format=YUY2,width=1440,height=1080, framerate=15/1" ! queue ! imxvideoconvert_g2d ! waylandsink

 

From attached files, the difference of debug messages when calling next gst-launch on second camera (/dev/video3 mapped to imx296 2-0036) following the previous gst-launch on first camera (/dev/video2 mapped to imx296 1-001a) is below :

 

[  114.381215] imx296 1-001a: enter imx296_query_capability
[  114.381402] imx296 2-0036: enter imx296_query_capability
[  114.394979] enter isp_mi_stop
[  114.458285] imx296 2-0036: enter imx296_query_capability
[  114.458328] imx296 1-001a: enter imx296_query_capability
[  114.467034] imx296 2-0036: enter imx296_query_capability
[  114.485855] imx296 2-0036: enter imx296_query_supports
[  114.486714] imx296 2-0036: enter imx296_query_capability
[  114.486860] imx296 1-001a: enter imx296_query_capability
[  114.571087] imx296 2-0036: enter imx296_query_supports
[  114.571110] imx296 2-0036: enter imx296_get_clk
[  114.571120] imx296 2-0036: enter imx296_set_sensor_mode
[  114.571127] imx296 2-0036: enter imx296_get_sensor_mode
[  114.571134] imx296 2-0036: enter imx296_query_supports
[  114.571258] enter isp_mi_stop
[  114.576791] imx296 2-0036: enter imx296_set_fmt
[  114.576801] imx296 2-0036: I2C writing value 80 at address 0x3a00
[  114.577437] imx296 2-0036: I2C writing value f0 at address 0x3005
[  114.578038] imx296 2-0036: I2C writing value 7f at address 0x350b
[  114.578679] imx296 2-0036: I2C writing value 00 at address 0x300d
[  114.579281] imx296 2-0036: I2C writing value 58 at address 0x400e
[  114.579881] imx296 2-0036: I2C writing value 4c at address 0x3014
[  114.580473] imx296 2-0036: I2C writing value 04 at address 0x3015
[  114.581058] imx296 2-0036: I2C writing value 1c at address 0x4014
[  114.581642] imx296 2-0036: I2C writing value 77 at address 0x3516
[  114.582224] imx296 2-0036: I2C writing value 00 at address 0x321a
[  114.582808] imx296 2-0036: I2C writing value 02 at address 0x3226
[  114.583397] imx296 2-0036: I2C writing value f5 at address 0x3832
[  114.583986] imx296 2-0036: I2C writing value 00 at address 0x3833
[  114.584611] imx296 2-0036: I2C writing value 72 at address 0x3541
[  114.585267] imx296 2-0036: I2C writing value 2a at address 0x4041
[  114.586252] imx296 2-0036: I2C writing value a3 at address 0x3d48
[  114.587537] imx296 2-0036: I2C writing value 00 at address 0x3d49
[  114.588195] imx296 2-0036: I2C writing value 85 at address 0x3d4a
[  114.588865] imx296 2-0036: I2C writing value 00 at address 0x3d4b
[  114.589507] imx296 2-0036: I2C writing value 01 at address 0x3256
[  114.590155] imx296 2-0036: I2C writing value a3 at address 0x3758
[  114.590837] imx296 2-0036: I2C writing value 00 at address 0x3759
[  114.591503] imx296 2-0036: I2C writing value 85 at address 0x375a
[  114.592152] imx296 2-0036: I2C writing value 00 at address 0x375b
[  114.592795] imx296 2-0036: I2C writing value 00 at address 0x3165
[  114.593437] imx296 2-0036: I2C writing value 10 at address 0x3169
[  114.594045] imx296 2-0036: I2C writing value 02 at address 0x316a
[  114.594669] imx296 2-0036: I2C writing value 00 at address 0x4174
[  114.595288] imx296 2-0036: I2C writing value 08 at address 0x3079
[  114.595913] imx296 2-0036: I2C writing value 04 at address 0x3090
[  114.596544] imx296 2-0036: I2C writing value 04 at address 0x3094
[  114.597142] imx296 2-0036: I2C writing value 04 at address 0x3098
[  114.597729] imx296 2-0036: I2C writing value 04 at address 0x309e
[  114.598327] imx296 2-0036: I2C writing value 04 at address 0x30a0
[  114.598929] imx296 2-0036: I2C writing value 3c at address 0x30a1
[  114.599453] imx296 2-0036: I2C writing value f6 at address 0x38a2
[  114.600046] imx296 2-0036: I2C writing value 00 at address 0x38a3
[  114.600632] imx296 2-0036: I2C writing value 06 at address 0x40a2
[  114.601222] imx296 2-0036: I2C writing value 5f at address 0x30a4
[  114.601807] imx296 2-0036: I2C writing value 91 at address 0x30a8
[  114.602389] imx296 2-0036: I2C writing value 28 at address 0x30ac
[  114.604075] imx296 2-0036: I2C writing value 09 at address 0x30af
[  114.604671] imx296 2-0036: I2C writing value f6 at address 0x40c1
[  114.605280] imx296 2-0036: I2C writing value 0f at address 0x40c7
[  114.605904] imx296 2-0036: I2C writing value f3 at address 0x31c8
[  114.606742] imx296 2-0036: I2C writing value f4 at address 0x31d0
[  114.607388] imx296 2-0036: I2C writing value 00 at address 0x40c8
[  114.608037] imx296 2-0036: I2C writing value 00 at address 0x30df
[  114.608677] imx296 2-0036: I2C writing value 03 at address 0x3300
[  114.609402] imx296 2-0036: I2C writing value 08 at address 0x3310
[  114.610020] imx296 2-0036: I2C writing value 00 at address 0x3311
[  114.610619] imx296 2-0036: I2C writing value 00 at address 0x3312
[  114.611273] imx296 2-0036: I2C writing value 00 at address 0x3313
[  114.611939] imx296 2-0036: I2C writing value a0 at address 0x3314
[  114.612556] imx296 2-0036: I2C writing value 05 at address 0x3315
[  114.613160] imx296 2-0036: I2C writing value 40 at address 0x3316
[  114.613761] imx296 2-0036: I2C writing value 04 at address 0x3317
[  114.614362] imx296 2-0036: I2C writing value 00 at address 0x3204
[  114.614992] imx296 2-0036: I2C writing value 00 at address 0x3205
[  114.615602] imx296 2-0036: I2C writing value 08 at address 0x3212
[  114.616202] imx296 2-0036: I2C writing value 3c at address 0x3254
[  114.616801] imx296 2-0036: I2C writing value 00 at address 0x3255
[  114.617597] imx296 2-0036: I2C writing value 80 at address 0x3089
[  114.618200] imx296 2-0036: I2C writing value 0b at address 0x308a
[  114.618800] imx296 2-0036: I2C writing value 80 at address 0x308b
[  114.620092] imx296 2-0036: I2C writing value 08 at address 0x308c
[  114.620698] imx296 2-0036: I2C writing value 74 at address 0x418c
[  114.621302] imx296 2-0036: enter imx296_set_test_pattern
[  114.621306] imx296 2-0036: imx296_set_test_pattern:9 
[  114.621329] imx296 2-0036: enter imx296_set_fps( fps/1024=15 )
[  114.621333] imx296 2-0036: I2C writing value 01 at address 0x3008
[  114.621924] imx296 2-0036: I2C writing value 77 at address 0x308d
[  114.622509] imx296 2-0036: I2C writing value 0f at address 0x308e
[  114.623249] imx296 2-0036: I2C writing value 00 at address 0x308f
[  114.623857] imx296 2-0036: I2C writing value 00 at address 0x3008
[  114.642551] imx296 2-0036: I2C writing value 01 at address 0x3008
[  114.643161] imx296 2-0036: I2C writing value 94 at address 0x3010
[  114.643762] imx296 2-0036: I2C writing value 11 at address 0x3011
[  114.644360] imx296 2-0036: I2C writing value 00 at address 0x3012
[  114.644959] imx296 2-0036: I2C writing value 00 at address 0x3008
[  114.645566] imx296 2-0036: enter imx296_get_sensor_mode
[  114.645870] imx296 2-0036: enter imx296_set_exp( exp=4490 )
[  114.645877] imx296 2-0036: I2C writing value 01 at address 0x3008
[  114.646481] imx296 2-0036: I2C writing value 8a at address 0x308d
[  114.647103] imx296 2-0036: I2C writing value 11 at address 0x308e
[  114.647715] imx296 2-0036: I2C writing value 00 at address 0x308f
[  114.648316] imx296 2-0036: I2C writing value 00 at address 0x3008
[  114.648931] imx296 2-0036: gain = 228
[  114.648937] imx296 2-0036: I2C writing value 01 at address 0x3008
[  114.649620] imx296 2-0036: I2C writing value e4 at address 0x3204
[  114.650291] imx296 2-0036: I2C writing value 00 at address 0x3205
[  114.650907] imx296 2-0036: I2C writing value 00 at address 0x3008
[  114.652411] enter isp_s_comp
[  114.655357] enter isp_s_comp
[  114.658240] enter isp_s_comp
[  114.674969] enter wdr3_hw_init
[  114.678068] wdr3 res: 1440 1080 
[  114.682009] enter isp_mi_start
[  114.686187] imx296 2-0036: enter imx296_s_stream
[  114.715375] imx296 2-0036: TPG_REG 0x3238 : 0x17
[  114.720027] imx296 2-0036: I2C writing value 17 at address 0x3238
[  114.720626] imx296 2-0036: TPG_REG 0x3239 : 0x00
[  114.725273] imx296 2-0036: I2C writing value 00 at address 0x3239
[  114.725878] imx296 2-0036: TPG_REG 0x323a : 0x00
[  114.730538] imx296 2-0036: I2C writing value 00 at address 0x323a
[  114.731138] imx296 2-0036: TPG_REG 0x323c : 0x00
[  114.735773] imx296 2-0036: I2C writing value 00 at address 0x323c
[  114.736367] imx296 2-0036: TPG_REG 0x323d : 0x00
[  114.741017] imx296 2-0036: I2C writing value 00 at address 0x323d
[  114.741614] imx296 2-0036: TPG_REG 0x323e : 0x00
[  114.746632] imx296 2-0036: I2C writing value 00 at address 0x323e
[  114.747248] imx296 2-0036: TPG_REG 0x323f : 0x00
[  114.751906] imx296 2-0036: I2C writing value 00 at address 0x323f
[  114.752513] imx296 2-0036: TPG_REG 0x3240 : 0x01
[  114.757210] imx296 2-0036: I2C writing value 01 at address 0x3240
[  114.757825] imx296 2-0036: TPG_REG 0x3241 : 0x01
[  114.762489] imx296 2-0036: I2C writing value 01 at address 0x3241
[  114.763101] imx296 2-0036: TPG_REG 0x3244 : 0x00
[  114.767778] imx296 2-0036: I2C writing value 00 at address 0x3244
[  114.768391] imx296 2-0036: TPG_REG 0x3245 : 0x00
[  114.773075] imx296 2-0036: I2C writing value 00 at address 0x3245
[  114.773690] imx296 2-0036: TPG_REG 0x3246 : 0x00
[  114.778393] imx296 2-0036: I2C writing value 00 at address 0x3246
[  114.778990] imx296 2-0036: TPG_REG 0x3247 : 0x00
[  114.783639] imx296 2-0036: I2C writing value 00 at address 0x3247
[  114.784282] imx296 2-0036: TPG_REG 0x3249 : 0x4a
[  114.789011] imx296 2-0036: I2C writing value 4a at address 0x3249
[  114.789680] imx296 2-0036: TPG_REG 0x3254 : 0x00
[  114.794352] imx296 2-0036: I2C writing value 00 at address 0x3254
[  114.795000] imx296 2-0036: TPG_REG 0x3255 : 0x00
[  114.799648] imx296 2-0036: I2C writing value 00 at address 0x3255
[  114.800249] imx296 2-0036: TPG_REG 0x3022 : 0xf0
[  114.804887] imx296 2-0036: I2C writing value f0 at address 0x3022
[  114.805520] imx296 2-0036: imx296_set_ctrl : ctrl = {.id = 0x00980913, .val = 0x000000c8}
[  114.805530] imx296 2-0036: gain = 200
[  114.805534] imx296 2-0036: I2C writing value 01 at address 0x3008
[  114.806161] imx296 2-0036: I2C writing value c8 at address 0x3204
[  114.807005] imx296 2-0036: I2C writing value 00 at address 0x3205
[  114.807635] imx296 2-0036: I2C writing value 00 at address 0x3008
[  114.808264] imx296 2-0036: imx296_set_ctrl : ctrl = {.id = 0x00980911, .val = 0x000003e8}
[  114.808273] imx296 2-0036: I2C writing value 01 at address 0x3008
[  114.808900] imx296 2-0036: I2C writing value e8 at address 0x308d
[  114.809510] imx296 2-0036: I2C writing value 03 at address 0x308e
[  114.810134] imx296 2-0036: I2C writing value 00 at address 0x308f
[  114.811092] imx296 2-0036: I2C writing value 00 at address 0x3008
[  114.811715] imx296 2-0036: I2C writing value 00 at address 0x3000
[  114.850559] imx296 2-0036: I2C writing value 00 at address 0x300a
[  114.884800] imx296 2-0036: gain = 130
[  114.884810] imx296 2-0036: I2C writing value 01 at address 0x3008
[  114.885380] imx296 2-0036: I2C writing value 82 at address 0x3204
[  114.885977] imx296 2-0036: I2C writing value 00 at address 0x3205
[  114.886769] imx296 2-0036: I2C writing value 00 at address 0x3008
[  115.078787] imx296 2-0036: gain = 73
[  115.078798] imx296 2-0036: I2C writing value 01 at address 0x3008
[  115.079483] imx296 2-0036: I2C writing value 49 at address 0x3204
[  115.080156] imx296 2-0036: I2C writing value 00 at address 0x3205
[  115.080839] imx296 2-0036: I2C writing value 00 at address 0x3008
[  115.285077] imx296 2-0036: gain = 41
[  115.285090] imx296 2-0036: I2C writing value 01 at address 0x3008
[  115.285710] imx296 2-0036: I2C writing value 29 at address 0x3204
[  115.286327] imx296 2-0036: I2C writing value 00 at address 0x3205
[  115.286914] imx296 2-0036: I2C writing value 00 at address 0x3008
[  115.472066] imx296 2-0036: gain = 23
[  115.472085] imx296 2-0036: I2C writing value 01 at address 0x3008
[  115.472806] imx296 2-0036: I2C writing value 17 at address 0x3204
[  115.473491] imx296 2-0036: I2C writing value 00 at address 0x3205
[  115.474159] imx296 2-0036: I2C writing value 00 at address 0x3008
[  115.671961] imx296 2-0036: gain = 12
[  115.671991] imx296 2-0036: I2C writing value 01 at address 0x3008
[  115.672642] imx296 2-0036: I2C writing value 0c at address 0x3204
[  115.673262] imx296 2-0036: I2C writing value 00 at address 0x3205
[  115.673935] imx296 2-0036: I2C writing value 00 at address 0x3008
[  115.882370] imx296 2-0036: gain = 6
[  115.882381] imx296 2-0036: I2C writing value 01 at address 0x3008
[  115.884094] imx296 2-0036: I2C writing value 06 at address 0x3204
[  115.884824] imx296 2-0036: I2C writing value 00 at address 0x3205
[  115.885430] imx296 2-0036: I2C writing value 00 at address 0x3008
[  116.082000] imx296 2-0036: gain = 3
[  116.082013] imx296 2-0036: I2C writing value 01 at address 0x3008
[  116.083649] imx296 2-0036: I2C writing value 03 at address 0x3204
[  116.084262] imx296 2-0036: I2C writing value 00 at address 0x3205
[  116.084920] imx296 2-0036: I2C writing value 00 at address 0x3008
[  116.482268] imx296 2-0036: gain = 1
[  116.482281] imx296 2-0036: I2C writing value 01 at address 0x3008
[  116.483943] imx296 2-0036: I2C writing value 01 at address 0x3204
[  116.484550] imx296 2-0036: I2C writing value 00 at address 0x3205
[  116.485234] imx296 2-0036: I2C writing value 00 at address 0x3008
[  116.690356] imx296 2-0036: gain = 0
[  116.690370] imx296 2-0036: I2C writing value 01 at address 0x3008
[  116.692233] imx296 2-0036: I2C writing value 00 at address 0x3204
[  116.692835] imx296 2-0036: I2C writing value 00 at address 0x3205
[  116.693418] imx296 2-0036: I2C writing value 00 at address 0x3008

 

From the very beginning of second gst-launching of /dev/video3 (i.e. 2-0036) , it seems that /dev/video2 (i.e. 1-001a) is also queried :

[  114.381215] imx296 1-001a: enter imx296_query_capability
...
[  114.458328] imx296 1-001a: enter imx296_query_capability
...
[  114.486860] imx296 1-001a: enter imx296_query_capability

Then in the meantime there appears to be 2 isp_mi_stop calls :

[  114.394979] enter isp_mi_stop
...
[  114.571258] enter isp_mi_stop

But only one isp_mi_start call later :

[  114.652411] enter isp_s_comp
[  114.655357] enter isp_s_comp
[  114.658240] enter isp_s_comp
[  114.674969] enter wdr3_hw_init
[  114.678068] wdr3 res: 1440 1080 
[  114.682009] enter isp_mi_start

I'm not sure which isp_mi_stop or isp_mi_start belong to which ISP controller but it does not seem logical that  there are 2 stop and 1 start. Possibly one ISP is in stopping state. What do you think?

Best regards,
K.

 

0 Kudos
Reply
2,524 Views
joanxie
NXP TechSupport
NXP TechSupport

pls see the private message

0 Kudos
Reply
2,518 Views
khang_letruong
Senior Contributor III

Hi @joanxie ,

Thanks for your kind support. Really appreciate.

Best regards,
K.

0 Kudos
Reply
2,555 Views
khang_letruong
Senior Contributor III

Hi again,

To update the situation, I did 2 tests with 2 physical displays :

1. In the 1st test, I launched gst-launch-1.0 -v v4l2src device=/dev/video0 ! waylandsink for cam0 in smaller display first then gst-launch-1.0 -v v4l2src device=/dev/video1 ! waylandsink for cam1 in bigger display later : https://drive.google.com/file/d/1MaGugWX7-DRBvFiecD-BHZTlmMmd6C42/view?usp=sharing

2. In the 2nd test, I changed the camera streaming's order by launching gst-launch-1.0 -v v4l2src device=/dev/video1 ! waylandsink for cam1 in bigger display first then gst-launch-1.0 -v v4l2src device=/dev/video0 ! waylandsink for cam0 in smaller display later : https://drive.google.com/file/d/1ITv7wQPzavTaCC9Lphod_oBugAWLEQp3/view?usp=sharing

My observation is that the later GST launching/streaming impacts the former one which was initially good (i.e. in the videos the later makes the former turn blue or darker visually) and this seems to be an issue of ISP.

@joanxie, @Bio_TICFSL  : Would this be a known issue and if YES, has there's been any solution in more recent release(s), please ?

Best regards,
Khang.

0 Kudos
Reply
1,563 Views
martinty
Contributor I

Hi,

"My observation is that the later GST launching/streaming impacts the former one which was initially good (i.e. in the videos the later makes the former turn blue or darker visually) and this seems to be an issue of ISP."

Did you find a solution to this problem? I have the same problem with a dual ar1335 camera setup on the DART-MX8M-PLUS device. Running an OS build with Yocto and using layers from isp-imx and isp-vvcam.

Tags (3)
0 Kudos
Reply
1,457 Views
khang_letruong
Senior Contributor III

Hi @martinty ,

As far as I remember, the proper patch or solution for the issue has just been integrated since the BSP release lf-5.15.32-.2.0.0 : 

static void mipi_csis_imx8mp_phy_reset(struct csi_state *state)
{
	int ret = 0;
	struct v4l2_subdev *sen_sd;

	struct v4l2_subdev_mbus_code_enum code = {
		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
	};

	mipi_csis_imx8mn_phy_reset(state);
	sen_sd = csis_get_remote_subdev(state, __func__);
	if (!sen_sd)
		goto csi_phy_initial_cfg;

	ret = v4l2_subdev_call(sen_sd, pad, enum_mbus_code, NULL, &code);
	if (ret < 0 && ret != -ENOIOCTLCMD) {
		v4l2_err(&state->sd, "enum_mbus_code error !!!\n");
		return;
	} else if (ret == -ENOIOCTLCMD)
		goto csi_phy_initial_cfg;

	/* temporary place */
	if (state->mix_gpr) {
		if ((code.code == MEDIA_BUS_FMT_SRGGB8_1X8) ||
				(code.code == MEDIA_BUS_FMT_SGRBG8_1X8) ||
				(code.code == MEDIA_BUS_FMT_SGBRG8_1X8) ||
				(code.code == MEDIA_BUS_FMT_SBGGR8_1X8)) {
			mipi_csis_imx8mp_dewarp_ctl_data_type(state,
					 ISP_DEWARP_CTRL_DATA_TYPE_RAW8);
			v4l2_dbg(1, debug, &state->sd,
					"%s: bus fmt is 8 bit!\n", __func__);
		} else if ((code.code == MEDIA_BUS_FMT_SRGGB10_1X10) ||
				(code.code == MEDIA_BUS_FMT_SGRBG10_1X10) ||
				(code.code == MEDIA_BUS_FMT_SGBRG10_1X10) ||
				(code.code == MEDIA_BUS_FMT_SBGGR10_1X10)) {
			mipi_csis_imx8mp_dewarp_ctl_data_type(state,
					ISP_DEWARP_CTRL_DATA_TYPE_RAW10);
			v4l2_dbg(1, debug, &state->sd,
					"%s: bus fmt is 10 bit !\n", __func__);
		} else {
			mipi_csis_imx8mp_dewarp_ctl_data_type(state,
					ISP_DEWARP_CTRL_DATA_TYPE_RAW12);
			v4l2_dbg(1, debug, &state->sd,
					"%s: bus fmt is 12 bit !\n", __func__);
		}
		goto write_regmap;
	}

csi_phy_initial_cfg:
	mipi_csis_imx8mp_dewarp_ctl_data_type(state,
			ISP_DEWARP_CTRL_DATA_TYPE_RAW12);
	v4l2_dbg(1, debug, &state->sd,
			"%s: bus fmt is 12 bit !\n", __func__);

write_regmap:
	state->val |= ISP_DEWARP_CTRL_ID_MODE(ISP_DEWARP_CTRL_ID_MODE_012);
	mipi_csis_imx8mp_dewarp_ctl_left_just_mode(state);
	regmap_update_bits(state->mix_gpr, ISP_DEWARP_CTRL,
			state->val, state->val);

	return;
}

 

Best Regards,

Khang

0 Kudos
Reply