高通平台
gpio方式,涉及的文件
leds-msm-gpio-flash.c
msm_led_trigger.c
&soc { flash_SGM3780:flashlight { compatible = "qcom,leds-gpio-flash"; status = "okay"; pinctrl-names = "flash_default"; pinctrl-0 = <&SGM3780_default>; qcom,flash-en = <&msm_gpio 31 0>; qcom,flash-now = <&msm_gpio 32 0>; qcom,op-seq = "flash_en", "flash_now"; qcom,torch-seq-val = <1 0>; qcom,flash-seq-val = <0 1>; linux,name = "flashlight"; linux,default-trigger = "flashlight-trigger"; }; led_flash0: qcom,camera-led-flash { cell-index = <0>; compatible = "qcom,camera-led-flash"; qcom,flash-type = <3>; qcom,flash-source = <&flash_SGM3780>; qcom,torch-source = <&flash_SGM3780>; }; };qcom,op-seq = "A", "B";
qcom,torch-seq-val = <C D>;
qcom,flash-seq-val = <E F>;
对于不同芯片而言,在相应的模式下控制引脚的电平逻辑不同
A模式 ,两个引脚状态为CE
B模式 ,两个引脚状态为DF
参考电路图如下
i2c+gpio方式,如lm3642,涉及的文件
lm3642.c
msm_led_i2c_trigger.c
&tlmm_pinmux { lm3642-en-pin { qcom,pins = <&gp 31>, <&gp 86>; qcom,num-grp-pins = <2>; label = "lm3642_en_pins"; qcom,pin-func = <0>; lm3642_en_default: en-default { driver-strength = <2>; bias-disable; }; lm3642_en_suspend: en-suspend { driver-strength = <2>; bias-pull-down; }; }; }; &i2c_0 { flash_lm3642:qcom,led-flash@0 { cell-index = <0>; reg = <0x63>; qcom,slave-id = <0xC6 0x00 0x0011>; compatible = "ti,lm3642"; label = "lm3642"; qcom,flash-type = <1>; pinctrl-names = "cam_flash_default","cam_flash_suspend"; pinctrl-0 = <&lm3642_en_default>; pinctrl-1 = <&lm3642_en_suspend>; gpios = <&msm_gpio 86 0>, <&msm_gpio 31 0>; qcom,gpio-flash-en = <0>; qcom,gpio-flash-now = <1>; qcom,gpio-req-tbl-num = <0 1>; qcom,gpio-req-tbl-flags = <0 0>; qcom,gpio-req-tbl-label = "FLASH_EN", "FLASH_NOW"; }; };参考电路图如下
1flash_led_init
2flash_led_low
3flash_led_release
1、2开手电筒 3关手电筒
1flash_led_init
2flash_led_low
3flash_led_off
4flash_led_high
5flash_led_off
6flash_led_release
1打开拍照软件 2、3、4、5一次闪光灯过程 6关闭拍照软件
mtk平台,涉及的文件
kd_flashlightlist.c
Leds_strobe.c
FL_Init
FL_Enable
FLASH_IOC_SET_DUTY(设置模式)
FL_Disable
FL_Uninit