I am trying to make working IMX378 Camera on Android.
I have implemented initial version of v4l2 driver, based on existing IMX214.
Updated DTS kernel/arch/arm64/boot/dts/rockchip/rk3399-khadas-edge-android.dts for sensor
imx378f: imx378f@1a {
status = "okay";
compatible = "sony,imx378";
reg = <0x1a>;
clocks = <&cru SCLK_CIF_OUT>;
clock-names = "xvclk";
/* avdd-supply = <>; */
/* dvdd-supply = <>; */
/* dovdd-supply = <>; */
/* reset-gpios = <>; */
pwdn-gpios = <&gpio2 5 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpio2 12 GPIO_ACTIVE_HIGH>;
pinctrl-names = "rockchip,camera_default";
pinctrl-0 = <&cif_clkout>;
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "A12N02A-202";
rockchip,camera-module-lens-name = "LENS";
port {
ucam_out0: endpoint {
remote-endpoint = <&mipi_in_ucam0>;
data-lanes = <1 2 3 4>;
};
};
};
Created file hardware/rockchip/camera/etc/camera/rkisp1/imx378_A12N02A-202_LENS.xml and just copy-pasted content from hardware/rockchip/camera/etc/camera/rkisp1/imx214_YG9626-S600Y7-C_LG-50013A7.xml, then replaced resolution parameters.
Updated file hardware/rockchip/camera/etc/camera/camera3_profiles_rk3399.xml by copy-pasing of imx214 section and resolution corrections.
<Profiles cameraId="0" name="imx378" moduleId="m00">
<scaler.availableStreamConfigurations value="
BLOB,4056x3040,OUTPUT,
BLOB,3840x2160,OUTPUT,
BLOB,1920x1080,OUTPUT,
YCbCr_420_888,4056x3040,OUTPUT,
YCbCr_420_888,3840x2160,OUTPUT,
YCbCr_420_888,1920x1080,OUTPUT,
IMPLEMENTATION_DEFINED,4056x3040,OUTPUT,
IMPLEMENTATION_DEFINED,3840x2160,OUTPUT,
IMPLEMENTATION_DEFINED,1920x1080,OUTPUT"/>
<scaler.availableMinFrameDurations value="
BLOB,4056x3040,33333333,
BLOB,3840x2160,33333333,
BLOB,1920x1080,66666666,
YCbCr_420_888,4056x3040,33333333,
YCbCr_420_888,3840x2160,33333333,
YCbCr_420_888,1920x1080,66666666,
IMPLEMENTATION_DEFINED,4056x3040,33333333,
IMPLEMENTATION_DEFINED,3840x2160,33333333,
IMPLEMENTATION_DEFINED,1920x1080,66666666"/>
<scaler.availableStallDurations value="
BLOB,4056x3040,33333333" />
..............<OTHER_PARAMETERS>..............
<Hal_tuning_RKISP1> <!-- Parameters to tune the HAL and hacks for the HAL that are camera dependent -->
<flipping value="" value_v=""/> <!-- value: SENSOR_FLIP_H or "", value_v: SENSOR_FLIP_V or "" -->
<supportIsoMap value="false"/>
<supportTuningSize value="4056x3040, 3840x2160"/>
</Hal_tuning_RKISP1>
<Sensor_info_RKISP1> <!-- Information that parametrizes the behavior or qualities of the physical sensor -->
<sensorType value="SENSOR_TYPE_RAW"/> <!-- SENSOR_TYPE_SOC or SENSOR_TYPE_RAW -->
<exposure.sync value="true"/> <!-- compensate expsure sync-->
<sensor.digitalGain value="false"/> <!-- digital gain support on sensor-->
<gain.lag value="2"/> <!-- camera3 HAL CPF parameters moved here start-->
<exposure.lag value="2"/>
<fov value= "54.8" value_v="42.5"/>
<statistics.initialSkip value="1"/> <!-- camera3 HAL CPF parameters moved here end-->
<frame.initialSkip value="0"/> <!-- should equal actual skipFrames - 2 for driver dropped 2 frames -->
<isoAnalogGain1 value="75"/> <!--Pseudo ISO corresponding analog gain value 1.0. -->
<cITMaxMargin value="10"/> <!--coarse integration time max margin -->
</Sensor_info_RKISP1>
dmesg logs contains information from imx378 driver, that successfully mapped and initialized.
When I am trying to launch standard Camera2 App it seems that stream from camera started, but camera app is crashed with timeout error and dmesg receive a lot of logs with error rkisp1: MIPI mis error: 0x00000002.
Is there any documentation how to write proper parameters for rkisp driver and camera engine?
What is the error type 0x0000002 means?
Is any way to “debug” MIPI data?
Hardware: Khadas Edge-V <- Connection board <- IMX378 Sensor