MTK 6573フラッシュテスト

6102 ワード

/*******************************************************************************/
以下のコードはkd_に加算されます.flashlightlist.cのprobe関数の中にあります.
LDO関数宣言を開く
	extern void upmu_ldo_enable(upmu_ldo_list_enum ldo, kal_bool enable);
		extern void upmu_ldo_vol_sel(upmu_ldo_list_enum ldo, upmu_ldo_vol_enum vol);


//PMUの電源を入れて、cameraモジュールインタフェースを有効にします.これで私たちのGPIO 95が開くことができて、前にこのLDOを開かなかったので、試してみましたがだめです.
PMUモジュールの給電原理の設計はやはり悪くなくて、省電力です!
	upmu_ldo_vol_sel(MT65XX_POWER_LDO_VCAMD2, VOL_1800);


	upmu_ldo_enable(MT65XX_POWER_LDO_VCAMD2, KAL_TRUE);




	upmu_ldo_vol_sel(MT65XX_POWER_LDO_VCAMD, VOL_1500);


	upmu_ldo_enable(MT65XX_POWER_LDO_VCAMD, KAL_TRUE);


	upmu_ldo_vol_sel(MT65XX_POWER_LDO_VCAMA, VOL_1800);


	upmu_ldo_enable(MT65XX_POWER_LDO_VCAMA, KAL_TRUE);

//BBのGPIO定義によると、GPIO 95というピンが使われています.またGPIOの動作モード、方向、出力値を設定します.これは一時的な構成で、
fixme: when dct is done!
注意:この定義は一時的であり、DCTの構成ツールでIoポートに対してGPIOモードに構成する.cmflashモードではありません!
#define GPIO_CAMERA_FLASH_EN_PIN  GPIO95 // 46
	 
 	mt_set_gpio_mode(GPIO_CAMERA_FLASH_EN_PIN, GPIO_CTP_EN_PIN_M_GPIO);
    mt_set_gpio_dir(GPIO_CAMERA_FLASH_EN_PIN, GPIO_DIR_OUT);
	mt_set_gpio_out(GPIO_CAMERA_FLASH_EN_PIN, GPIO_OUT_ONE);
while (1)
	 {

	 , flashlight  probe 。 。
		mt_set_gpio_out(GPIO_CAMERA_FLASH_EN_PIN,GPIO_OUT_ONE);
		mdelay(20);
		mt_set_gpio_out(GPIO_CAMERA_FLASH_EN_PIN,GPIO_OUT_ZERO);
		mdelay(20);
		mt_set_gpio_out(GPIO_CAMERA_FLASH_EN_PIN,GPIO_OUT_ONE);
		mdelay(20);
		mt_set_gpio_out(GPIO_CAMERA_FLASH_EN_PIN,GPIO_OUT_ZERO);
	 }
	 

 //******************************************************************************
追加:DCT構成後のパラメータ.このパラメータを使用する場合は、ヘッダファイルcust_を追加してください.gpio_usage.h
#define GPIO_CAMERA_FLASH_EN_PIN         GPIO95 #define GPIO_CAMERA_FLASH_EN_PIN_M_GPIO   GPIO_MODE_00 #define GPIO_CAMERA_FLASH_EN_PIN_M_EINT   GPIO_MODE_03 #define GPIO_CAMERA_FLASH_EN_PIN_M_PWM   GPIO_MODE_02 #define GPIO_CAMERA_FLASH_EN_PIN_M_CMFLASH   GPIO_MODE_01
これは具体的なモデルの駆動です.総makefileに配置されているのは
CUSTOM_KERNEL_FLASHLIGHT = constant_flashlight
 mediatech/common/kernel/flashlight/   。

ssize_t gpio_FL_Enable(void) {
    //Enable
    if(mt_set_gpio_out(GPIO_CAMERA_FLASH_EN,GPIO_OUT_ONE)){PK_DBG(" set gpio failed!! 
");} // return 0; } #define FL_Enable() gpio_FL_Enable() 。 static int constant_flashlight_ioctl(MUINT32 cmd, MUINT32 arg) { int i4RetValue = 0; int iFlashType = (int)FLASHLIGHT_NONE; //PK_DBG(" start
"); //when ON state , only disable command is permitted. if ( (TRUE == g_strobe_On) && !((FLASHLIGHTIOC_T_ENABLE == cmd) && (0 == arg)) ) { PK_DBG(" is already ON OR check parameters!
"); //goto strobe_ioctl_error; return i4RetValue; } switch(cmd) { case FLASHLIGHTIOC_T_ENABLE : if ( arg && strobe_width ) { if ( (FLASHLIGHTDRV_STATE_PREVIEW == strobe_eState ) || \ (FLASHLIGHTDRV_STATE_STILL == strobe_eState && KD_FLASHLIGHT_FLASH_MODE_STROBE_WIDTH != strobe_width) ) { \ //enable strobe watchDog timer. \ strobe_WDTConfig(); if (FLASH_LIGHT_WDT_DISABLE != g_WDTTimeout_ms) { strobe_WDTStart(); } FL_Enable(); // ioctl 。 。 g_strobe_On = TRUE; PK_DBG(" FLASHLIGHTIOC_T_ENABLE(1)
"); } else { PK_DBG(" FLASHLIGHTIOC_T_ENABLE(1) skip due to FLASH mode
"); } } else{ //reset to LED low current torch mode FL_Init(); if(FL_Disable()){ PK_ERR(" FL_Disable fail!
"); goto strobe_ioctl_error; } g_strobe_On = FALSE; PK_DBG(" FLASHLIGHTIOC_T_ENABLE(0)
"); //disable strobe watchDog timer. strobe_WDTStop(); } break; case FLASHLIGHTIOC_T_LEVEL: PK_DBG(" level:%x
",(int)arg); if (KD_FLASHLIGHT_FLASH_MODE_STROBE_WIDTH == arg) { //set high current flash mode strobe_width = KD_FLASHLIGHT_FLASH_MODE_STROBE_WIDTH; FL_Flash_Mode(); PK_DBG(" FL_Flash_Mode()
"); } else { if(arg>32) {arg=32;} strobe_width = arg; if (arg > 0) { //reset to LED low current torch mode FL_Init(); if(FL_dim_duty((kal_int8)arg-1)){ //0(weak)~31(strong) PK_ERR(" FL_dim_duty fail!
"); //i4RetValue = -EINVAL; goto strobe_ioctl_error; } } } break; case FLASHLIGHTIOC_T_FLASHTIME: strobe_Timeus = (u32)arg; PK_DBG(" strobe_Timeus:%d
",(int)strobe_Timeus); break; case FLASHLIGHTIOC_T_STATE: strobe_eState = (eFlashlightState)arg; break; case FLASHLIGHTIOC_G_FLASHTYPE: iFlashType = FLASHLIGHT_LED_CONSTANT; if(copy_to_user((void __user *) arg , (void*)&iFlashType , _IOC_SIZE(cmd))) { PK_DBG(" ioctl copy to user failed
"); return -EFAULT; } break; default : PK_DBG(" No such command
"); i4RetValue = -EPERM; break; } //PK_DBG(" done
"); return i4RetValue; strobe_ioctl_error: PK_DBG(" Error or ON state!
"); return -EPERM; }