int msm_strobe_flash_ctrl(struct msm_camera_sensor_strobe_flash_data *sfdata, struct strobe_flash_ctrl_data *strobe_ctrl) { int rc = 0; switch (strobe_ctrl->type) { case STROBE_FLASH_CTRL_INIT: if (!sfdata) return -ENODEV; rc = msm_strobe_flash_xenon_init(sfdata); break; case STROBE_FLASH_CTRL_CHARGE: rc = msm_strobe_flash_xenon_charge(sfdata->flash_charge, strobe_ctrl->charge_en, sfdata->flash_recharge_duration); break; case STROBE_FLASH_CTRL_RELEASE: if (sfdata) rc = msm_strobe_flash_xenon_release(sfdata, 0); break; default: pr_err("Invalid Strobe Flash State\n"); rc = -EINVAL; } return rc; }
static void strobe_flash_xenon_recharge_handler(unsigned long data) { unsigned long flags; struct msm_camera_sensor_strobe_flash_data *sfdata = (struct msm_camera_sensor_strobe_flash_data *)data; spin_lock_irqsave(&sfdata->timer_lock, flags); msm_strobe_flash_xenon_charge(sfdata->flash_charge, 1); spin_unlock_irqrestore(&sfdata->timer_lock, flags); return; }