20. FlashLight调试日志

来源:互联网 发布:mac 制作吉他谱的软件 编辑:程序博客网 时间:2024/06/09 16:56
零、闪光灯配置步骤(以真闪IC:DIO5151为例):1. 查看硬件原理图,得知闪关灯IC接在cpu的哪两个GPIO上:main_flashlight:(后闪)enable: GPIO43mode: GPIO80(H-flashlight模式  L-torch手电筒模式)sub_flashlight:(前摄)enable: GPIO422. dws配置pin脚:EintMode|Def.ModeM0|M1|M2|M3|M4|M5|M6|M7|InPull En|InPull SelHigh|Def.Dir|In|Out|OutHigh|VarName1GPIO430:GPIO801  0  0  1  1  0  1  0  1  0 OUT 010GPIO_CAMERA_FLASH_EN_PINGPIO800:GPIO801  0  0  0  0  0  0  0  1  0 OUT 010GPIO_CAMERA_FLASH_MOOD_PIN3. dts配置gpio控制接口:/* STROBE GPIO standardization */&pio {strobe_intpin_default: strobedefaultcfg {};main_strobe_oh: mainstrobe@1 {pins_cmd_dat {pins = <PINMUX_GPIO43__FUNC_GPIO43>;slew-rate = <1>;output-high;};};main_strobe_ol: mainstrobe@2 {pins_cmd_dat {pins = <PINMUX_GPIO43__FUNC_GPIO43>;slew-rate = <1>;output-low;};};main_strobe_flash_oh: mainstrobe_flash@1 {pins_cmd_dat {pins = <PINMUX_GPIO80__FUNC_GPIO80>;slew-rate = <1>;output-high;};};main_strobe_flash_ol: mainstrobe_flash@2 {pins_cmd_dat {pins = <PINMUX_GPIO80__FUNC_GPIO80>;slew-rate = <1>;output-low;};};sub_strobe_oh: substrobe@1 {pins_cmd_dat {pins = <PINMUX_GPIO42__FUNC_GPIO42>;slew-rate = <1>;output-high;};};sub_strobe_ol: substrobe@2 {pins_cmd_dat {pins = <PINMUX_GPIO42__FUNC_GPIO42>;slew-rate = <1>;output-low;};};};&strobe {pinctrl-names = "default", "main_strobe_oh", "main_strobe_ol", "main_strobe_flash_oh", "main_strobe_flash_ol", "sub_strobe_oh", "sub_strobe_ol";pinctrl-0 = <&strobe_intpin_default>;pinctrl-1 = <&main_strobe_oh>;pinctrl-2 = <&main_strobe_ol>;pinctrl-3 = <&main_strobe_flash_oh>;pinctrl-4 = <&main_strobe_flash_ol>;pinctrl-5 = <&sub_strobe_oh>;pinctrl-6 = <&sub_strobe_ol>;status = "okay";};4. 配置: alps\kernel-3.18\arch\arm64\configs\xxx_debug_defconfigCONFIG_MTK_FLASHLIGHT=yCONFIG_CUSTOM_KERNEL_FLASHLIGHT="constant_flashlight"5. 配置: alps\device\xxx\xxx\ProjectConfig.mkCUSTOM_KERNEL_FLASHLIGHT=constant_flashlightCUSTOM_HAL_FLASHLIGHT=constant_flashlight==========通常以上步骤配置好了即ok(驱动代码ok的前提下)============驱动代码: alps\kernel-3.18\drivers\misc\mediatek\flashlight\如若闪光灯还是无功能: 检查驱动代码,最好是先找一个ok的工程,从那边移植过来一、FlashLight(strobe)概要1.FlashLiht分为真闪和假闪,真闪: 需要一个IC - 查bom可知v618上贴的是DIO5151(10pin)假闪: 由一个三极管实现电流放大兼容: 通常硬件上对真闪假闪做了兼容,即真假闪的电路都实现,二者使能脚为同一引脚,  贴ic为真闪,不贴即为假闪(软件不需要作区分)2.真闪可以选择模式(闪光灯/手电筒),通过对ic的GPIO_FLASH_STROBE引脚操作(HIGH - 闪光灯  LOW - 手电筒)闪关灯: 电流可为500mA手电筒: 电流应该限制为100mA怎切换:HIGH - 闪光灯  LOW - 手电筒3.驱动中实现了一个定时器来控制闪光灯的时长,闪光灯亮20s就自动灭,实测: camera拍照闪光灯的关闭由上层ioctl关闭(log显示)实测: 手电筒不会20s自动灭 - ???二、调试1.真假闪均可以通过PWM的占空比控制闪光的亮度 - 已验证okalps\kernel-3.18\drivers\misc\mediatek\flashlight\src\mt6735\constant_flashlight\leds_strobe.cenum hrtimer_restart ledPWMTimeOutCallback(struct hrtimer *timer){    if(g_enble_led == true) {strobe_gpio_set(0);g_timePWMOutTimeMs=2;// 低电平(灭灯)占空比2/10ktime = ktime_set( 0, g_timePWMOutTimeMs*800000 ); //1sg_enble_led = false;}else if(g_enble_led == false) {strobe_gpio_set(1);g_timePWMOutTimeMs=8;// 高电平(亮灯)占空比8/10ktime = ktime_set( 0, g_timePWMOutTimeMs*800000 ); //1sg_enble_led = true;}hrtimer_forward(&g_timePWMOutTimer, g_timePWMOutTimer.base->get_time(), ktime);return HRTIMER_RESTART;}2. 方便测量电流 - 控制循环闪烁alps\kernel-3.18\drivers\misc\mediatek\flashlight\src\mt6735\constant_flashlight\leds_strobe.ccase FLASH_IOC_SET_ONOFF:PK_DBG("FLASHLIGHT_ONOFF: %d\n", (int)arg);printk("201707 [%s] [%d] FLASH_IOC_SET_ONOFF: %d \n", __func__, __LINE__, (int)arg);if (arg == 1) {int s;int ms;/*//==============================int i  = 0;for(i = 0 ; i < 3; i++){printk("201707 [%s] [%d] set(LEDS_TORCH_MODE) \n", __func__, __LINE__);strobe_mode_gpio_set(LEDS_TORCH_MODE);// 手电筒模式mdelay(5);strobe_gpio_set(1);// 输出1 - 亮mdelay(10000);strobe_gpio_set(0);// 输出0 - 灭mdelay(1000);printk("201707 [%s] [%d] set(LEDS_FLASH_MODE) \n", __func__, __LINE__);strobe_mode_gpio_set(LEDS_FLASH_MODE);// 闪光灯模式mdelay(5);strobe_gpio_set(1);// 输出1 - 亮mdelay(4000);strobe_gpio_set(0);// 输出0 - 灭mdelay(1000);}//==============================*/案例一:真闪IC:DIO5151(10pin) - 400ma的闪光灯电流只持续400ms,过后自动变小更换pin对pin的另一个闪光灯IC(SGM3141B), 电流正常


原创粉丝点击