前言:根据自己摄像头的型号,进行摄像头驱动的调试
1./vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/configs$ vim msm8953_camera.xml
<CameraConfigurationRoot>
- <CameraModuleConfig>
+ <!--CameraModuleConfig>
<CameraId>0</CameraId>
- <SensorName>s5k3p3</SensorName>
- <ActuatorName>dw9763</ActuatorName>
- <EepromName>s5k3p3_gt24c32</EepromName>
- <!--FlashName>pmic</FlashName-->
- <ChromatixName>s5k3p3_chromatix</ChromatixName>
+ <SensorName>ov5648</SensorName>
+ <ChromatixName>ov5648_chromatix</ChromatixName>
<ModesSupported>1</ModesSupported>
<Position>BACK</Position>
<MountAngle>270</MountAngle>
<CSIInfo>
<CSIDCore>0</CSIDCore>
- <LaneMask>0x1F</LaneMask>
+ <LaneMask>0x7</LaneMask>
<LaneAssign>0x4320</LaneAssign>
<ComboMode>0</ComboMode>
</CSIInfo>
<LensInfo>
- <FocalLength>3.57</FocalLength>
- <FNumber>2.0</FNumber>
+ <FocalLength>1.98</FocalLength>
+ <FNumber>2.4</FNumber>
<TotalFocusDistance>1.2</TotalFocusDistance>
- <HorizontalViewAngle>64.7</HorizontalViewAngle>
- <VerticalViewAngle>48.5</VerticalViewAngle>
+ <HorizontalViewAngle>68.0</HorizontalViewAngle>
+ <VerticalViewAngle>51.0</VerticalViewAngle>
<MinFocusDistance>0.1</MinFocusDistance>
</LensInfo>
- </CameraModuleConfig>
+ </CameraModuleConfig-->
<CameraModuleConfig>
- <CameraId>2</CameraId>
+ <CameraId>0</CameraId>
<SensorName>hi843</SensorName>
<ActuatorName>dw9714</ActuatorName>
- <!--FlashName>pmic</FlashName-->
+ <FlashName>pmic</FlashName>
<ChromatixName>hi843_chromatix</ChromatixName>
<ModesSupported>1</ModesSupported>
- <Position>FRONT</Position>
+ <Position>BACK</Position>
<MountAngle>270</MountAngle>
<CSIInfo>
- <CSIDCore>1</CSIDCore>
+ <CSIDCore>0</CSIDCore>
<LaneMask>0x07</LaneMask>
<LaneAssign>0x4320</LaneAssign>
<ComboMode>0</ComboMode>
2.添加摄像头的驱动
2.1kernel/msm-4.9/arch/arm64/boot/dts/qcom/msm8953-camera-sensor-mtp.dtsi
qcom,csiphy-sd-index = <0>;
qcom,csid-sd-index = <0>;
qcom,mount-angle = <270>;
- qcom,eeprom-src = <&eeprom0>;
+ //qcom,eeprom-src = <&eeprom0>;
+ qcom,led-flash-src = <&led_flash0>;
qcom,actuator-src = <&actuator0>;
cam_vio-supply = <&pm8953_l6>;
- cam_vdig-supply = <&pm8953_l2>;
+ cam_vdig-supply = <&pm8953_l23>;
cam_vaf-supply = <&pm8953_l17>;
cam_vana-supply = <&pm8953_l22>;
qcom,cam-vreg-name = "cam_vio", "cam_vdig", "cam_vaf",
"cam_vana";
- qcom,cam-vreg-min-voltage = <0 1100000 2850000 2800000>;
- qcom,cam-vreg-max-voltage = <0 1100000 2850000 2800000>;
+ qcom,cam-vreg-min-voltage = <0 1175000 2850000 2800000>;
+ qcom,cam-vreg-max-voltage = <0 1175000 2850000 2800000>;
qcom,cam-vreg-op-mode = <0 105000 100000 80000>;
pinctrl-names = "cam_default", "cam_suspend";
pinctrl-0 = <&cam_sensor_mclk0_default
@@ -217,17 +218,14 @@
&cam_sensor_rear_vana_sleep>;
gpios = <&tlmm 26 0>,
<&tlmm 40 0>,
- <&tlmm 39 0>,
- <&tlmm 3 0>;
+ <&tlmm 39 0>;
qcom,gpio-reset = <1>;
qcom,gpio-standby = <2>;
- qcom,gpio-vdig = <3>;
- qcom,gpio-req-tbl-num = <0 1 2 3>;
- qcom,gpio-req-tbl-flags = <1 0 0 0>;
+ qcom,gpio-req-tbl-num = <0 1 2>;
+ qcom,gpio-req-tbl-flags = <1 0 0>;
qcom,gpio-req-tbl-label = "CAMIF_MCLK0",
"CAM_RESET0",
- "CAM_STANDBY0",
- "CAM_VDIG";
+ "CAM_STANDBY0";
qcom,sensor-position = <0>;
qcom,sensor-mode = <0>;
qcom,cci-master = <0>;
2.2kernel/msm-4.9/arch/arm64/boot/dts/qcom/msm8953-pinctrl.dtsi
cam_sensor_rear_default: cam_sensor_rear_default {
/* RESET, STANDBY */
mux {
pins = "gpio40", "gpio39";
function = "gpio";
};
config {
pins = "gpio40","gpio39";
bias-disable; /* No PULL */
drive-strength = <2>; /* 2 MA */
};
};
cam_sensor_rear_sleep: cam_sensor_rear_sleep {
/* RESET, STANDBY */
mux {
pins = "gpio40","gpio39";
function = "gpio";
};
config {
pins = "gpio40","gpio39";
bias-disable; /* No PULL */
drive-strength = <2>; /* 2 MA */
};
};
3.闪光灯驱动
3.1/kernel/msm-4.9/arch/arm64/boot/dts/qcom/msm8953.dtsi
led_flash0: qcom,camera-flash {
cell-index = <0>;
compatible = "qcom,camera-flash";
qcom,flash-type = <2>;
qcom,flash-en = <&tlmm 0 0x00>;
qcom,flash-now = <&tlmm 3 0x00>;
};
3.2/kernel/msm-4.9/drivers/media/platform/msm/camera_v2/sensor/flash/msm_flash.c
if(gpio_is_valid(flash_ctrl->gpio_flash_en)){
rc = gpio_request(flash_ctrl->gpio_flash_en, "qcom,flash-en");
if(rc){
pr_err("%s:%d request flash en gpio failed!\n", __func__, __LINE__);
return rc;
}
rc = gpio_direction_output(flash_ctrl->gpio_flash_en, 0);
if(rc){
pr_err("%s:%d flash en gpio set output failed!\n", __func__, __LINE__);
return rc;
}
rc = gpio_request(flash_ctrl->gpio_flash_now, "qcom,flash-now");
if(rc){
pr_err("%s:%d request flash en gpio failed!\n", __func__, __LINE__);
return rc;
}
rc = gpio_direction_output(flash_ctrl->gpio_flash_now, 0);
if(rc){
pr_err("%s:%d flash en gpio set output failed!\n", __func__, __LINE__);
return rc;
}
}