static int32_t msm_led_trigger_config(struct msm_led_flash_ctrl_t *fctrl,
	void *data)
{
	int rc = 0;
	struct msm_camera_led_cfg_t *cfg = (struct msm_camera_led_cfg_t *)data;
	CDBG("called led_state %d\n", cfg->cfgtype);
#if defined(CONFIG_MACH_VIENNA_LTE) || defined(CONFIG_MACH_PICASSO)\
	|| defined(CONFIG_MACH_MONDRIAN) || defined(CONFIG_MACH_V2_LTE)
	if (is_torch_enabled == true) {
		return rc;
	}
#endif
	if (!fctrl->led_trigger[0]) {
		pr_err("failed\n");
		return -EINVAL;
	}
	switch (cfg->cfgtype) {
#ifdef CONFIG_LEDS_MAX77803
#ifdef CONFIG_MSM_TORCH_CONTROL
	case MSM_CAMERA_LED_OFF:
	case MSM_CAMERA_LED_RELEASE:
		torch_level_set(0, 0);
		break;
	case MSM_CAMERA_LED_LOW:
		torch_level_set(0, 1);
		break;
	case MSM_CAMERA_LED_HIGH:
		torch_level_set(0, 2);
		break;
#else
	case MSM_CAMERA_LED_OFF:
		pr_err("CAM Flash OFF");
		max77803_led_en(0, 0);
		max77803_led_en(0, 1);
		break;

	case MSM_CAMERA_LED_LOW:
		pr_err("CAM Pre Flash ON");
		max77803_led_en(1, 0);
		break;

	case MSM_CAMERA_LED_HIGH:
		pr_err("CAM Flash ON");
		max77803_led_en(1, 1);
		break;
	case MSM_CAMERA_LED_RELEASE:
		pr_err("CAM Flash OFF & release");
		if (gpio_request(led_flash_en, "max77803_flash_en"))
			pr_err("can't get max77803_flash_en");
		else {
			gpio_direction_output(led_flash_en, 0);
			gpio_free(led_flash_en);
		}
		if (gpio_request(led_torch_en, "max77803_torch_en"))
			pr_err("can't get max77803_torch_en");
		else {
			gpio_direction_output(led_torch_en, 0);
			gpio_free(led_torch_en);
		}	
		break;
#endif
	case MSM_CAMERA_LED_INIT:
		break;
// Implementation KTD2692 flashIC
#elif defined(CONFIG_MACH_VIENNA_LTE) || defined(CONFIG_MACH_PICASSO)\
	|| defined(CONFIG_MACH_MONDRIAN) || defined(CONFIG_MACH_V2_LTE)
#if defined(CONFIG_MACH_LT03EUR) || defined(CONFIG_MACH_LT03SKT)\
	|| defined(CONFIG_MACH_LT03KTT)	|| defined(CONFIG_MACH_LT03LGT)\
	    || defined(CONFIG_MACH_PICASSO)|| defined(CONFIG_MACH_MONDRIAN)\
	    || defined(CONFIG_MACH_V2_LTE)
	case MSM_CAMERA_LED_OFF:
		KTD2692_set_flash(MODE_CONTROL | 0x00);
		break;
	case MSM_CAMERA_LED_LOW:
		gpio_set_value(led_torch_en, 0);
		udelay(T_RESET);
		gpio_set_value(led_torch_en, 1);
		udelay(T_RESET2);
		KTD2692_set_flash(LVP_SETTING | 0x00);
		KTD2692_set_flash(MOVIE_CURRENT | 0x04);
		KTD2692_set_flash(MODE_CONTROL | 0x01);
		break;
	case MSM_CAMERA_LED_HIGH:
		gpio_set_value(led_torch_en, 0);
		udelay(T_RESET);
		gpio_set_value(led_torch_en, 1);
		udelay(T_RESET2);
		KTD2692_set_flash(LVP_SETTING | 0x00);
		KTD2692_set_flash(FLASH_CURRENT | 0x0F);
		KTD2692_set_flash(MODE_CONTROL | 0x02);
		break;
	case MSM_CAMERA_LED_INIT:
		break;
	case MSM_CAMERA_LED_RELEASE:
		gpio_set_value(led_torch_en, 0);
		break;
#else
	case MSM_CAMERA_LED_OFF:
		if (system_rev < 0x02) { // For KTD267 flashIC
			gpio_set_value(led_flash_en, 0);
			gpio_set_value(led_torch_en, 0);
		} else { // For KTD2692 flashIC
			KTD2692_set_flash(MODE_CONTROL | 0x00);
		}
		break;
	case MSM_CAMERA_LED_LOW:
		if (system_rev < 0x02) { // For KTD267 flashIC
			gpio_set_value(led_flash_en, 1);
			gpio_set_value(led_torch_en, 1);
		} else { // For KTD2692 flashIC
			KTD2692_set_flash(LVP_SETTING | 0x00);
			KTD2692_set_flash(MOVIE_CURRENT | 0x04);
			KTD2692_set_flash(MODE_CONTROL | 0x01);
		}
		break;
	case MSM_CAMERA_LED_HIGH:
		if (system_rev < 0x02) { // For KTD267 flashIC
			gpio_set_value(led_flash_en, 1);
			gpio_set_value(led_torch_en, 1);
		} else { // For KTD2692 flashIC
			KTD2692_set_flash(LVP_SETTING | 0x00);
			KTD2692_set_flash(FLASH_CURRENT | 0x0F);
			KTD2692_set_flash(MODE_CONTROL | 0x02);
		}
		break;
	case MSM_CAMERA_LED_INIT:
		break;
	case MSM_CAMERA_LED_RELEASE:
		if (system_rev < 0x02) { // For KTD267 flashIC
		} else { // For KTD2692 flashIC
			gpio_set_value(led_torch_en, 0);
		}
		break;
#endif
#else
	case MSM_CAMERA_LED_OFF:
		led_trigger_event(fctrl->led_trigger[0], 0);
		break;

	case MSM_CAMERA_LED_LOW:
		led_trigger_event(fctrl->led_trigger[0],
			fctrl->max_current[0] / 2);
		break;

	case MSM_CAMERA_LED_HIGH:
		led_trigger_event(fctrl->led_trigger[0], fctrl->max_current[0]);
		break;

	case MSM_CAMERA_LED_INIT:
	case MSM_CAMERA_LED_RELEASE:
		led_trigger_event(fctrl->led_trigger[0], 0);
		break;
#endif
	default:
		rc = -EFAULT;
		break;
	}
	CDBG("flash_set_led_state: return %d\n", rc);
	return rc;
}
static int32_t msm_led_trigger_config(struct msm_led_flash_ctrl_t *fctrl,
                                      void *data)
{
    int rc = 0;
    struct msm_camera_led_cfg_t *cfg = (struct msm_camera_led_cfg_t *)data;
    CDBG("called led_state %d\n", cfg->cfgtype);
#if defined(CONFIG_MACH_VIENNAEUR) || defined(CONFIG_MACH_LT03EUR)\
	|| defined(CONFIG_MACH_LT03SKT)	|| defined(CONFIG_MACH_LT03KTT)\
	|| defined(CONFIG_MACH_LT03LGT)
    if (is_torch_enabled == true) {
        return rc;
    }
#endif
    if (!fctrl->led_trigger[0]) {
        pr_err("failed\n");
        return -EINVAL;
    }
#if defined(CONFIG_LEDS_MAX77803)
    switch (cfg->cfgtype) {
    case MSM_CAMERA_LED_OFF:
        pr_err("CAM Flash OFF");
        max77803_led_en(0, 0);
        max77803_led_en(0, 1);
        break;

    case MSM_CAMERA_LED_LOW:
        pr_err("CAM Pre Flash ON");
        max77803_led_en(1, 0);
        break;

    case MSM_CAMERA_LED_HIGH:
        pr_err("CAM Flash ON");
        max77803_led_en(1, 1);
        break;

    case MSM_CAMERA_LED_INIT:
    case MSM_CAMERA_LED_RELEASE:
        break;

    default:
        rc = -EFAULT;
        break;
    }
// Implementation KTD2692 flashIC
#elif defined(CONFIG_MACH_VIENNAEUR) || defined(CONFIG_MACH_LT03EUR)\
	|| defined(CONFIG_MACH_LT03SKT)	|| defined(CONFIG_MACH_LT03KTT)\
	|| defined(CONFIG_MACH_LT03LGT)
    switch (cfg->cfgtype) {
#if defined(CONFIG_MACH_LT03EUR) || defined(CONFIG_MACH_LT03SKT)\
	|| defined(CONFIG_MACH_LT03KTT)	|| defined(CONFIG_MACH_LT03LGT)
    case MSM_CAMERA_LED_OFF:
        KTD2692_set_flash(MODE_CONTROL | 0x00);
        break;
    case MSM_CAMERA_LED_LOW:
        KTD2692_set_flash(LVP_SETTING | 0x00);
        KTD2692_set_flash(MOVIE_CURRENT | 0x04);
        KTD2692_set_flash(MODE_CONTROL | 0x01);
        break;
    case MSM_CAMERA_LED_HIGH:
        KTD2692_set_flash(LVP_SETTING | 0x00);
        KTD2692_set_flash(FLASH_CURRENT | 0x0F);
        KTD2692_set_flash(MODE_CONTROL | 0x02);
        break;
    case MSM_CAMERA_LED_INIT:
        break;
    case MSM_CAMERA_LED_RELEASE:
        gpio_set_value(led_torch_en, 0);
        break;
    default:
        rc = -EFAULT;
        break;
#else
    case MSM_CAMERA_LED_OFF:
        if (system_rev < 0x02) { // For KTD267 flashIC
            gpio_set_value(led_flash_en, 0);
            gpio_set_value(led_torch_en, 0);
        } else { // For KTD2692 flashIC
            KTD2692_set_flash(MODE_CONTROL | 0x00);
        }
        break;

    case MSM_CAMERA_LED_LOW:
        if (system_rev < 0x02) { // For KTD267 flashIC
            gpio_set_value(led_flash_en, 1);
            gpio_set_value(led_torch_en, 1);
        } else { // For KTD2692 flashIC
            KTD2692_set_flash(LVP_SETTING | 0x00);
            KTD2692_set_flash(MOVIE_CURRENT | 0x04);
            KTD2692_set_flash(MODE_CONTROL | 0x01);
        }
        break;

    case MSM_CAMERA_LED_HIGH:
        if (system_rev < 0x02) { // For KTD267 flashIC
            gpio_set_value(led_flash_en, 1);
            gpio_set_value(led_torch_en, 1);
        } else { // For KTD2692 flashIC
            KTD2692_set_flash(LVP_SETTING | 0x00);
            KTD2692_set_flash(FLASH_CURRENT | 0x0F);
            KTD2692_set_flash(MODE_CONTROL | 0x02);
        }
        break;

    case MSM_CAMERA_LED_INIT:
        break;

    case MSM_CAMERA_LED_RELEASE:
        if (system_rev < 0x02) { // For KTD267 flashIC
        } else { // For KTD2692 flashIC
            gpio_set_value(led_torch_en, 0);
        }
        break;

    default:
        rc = -EFAULT;
        break;
#endif
    }
#else
    switch (cfg->cfgtype) {
    case MSM_CAMERA_LED_OFF:
        led_trigger_event(fctrl->led_trigger[0], 0);
        break;

    case MSM_CAMERA_LED_LOW:
        led_trigger_event(fctrl->led_trigger[0],
                          fctrl->max_current[0] / 2);
        break;

    case MSM_CAMERA_LED_HIGH:
        led_trigger_event(fctrl->led_trigger[0], fctrl->max_current[0]);
        break;

    case MSM_CAMERA_LED_INIT:
    case MSM_CAMERA_LED_RELEASE:
        led_trigger_event(fctrl->led_trigger[0], 0);
        break;

    default:
        rc = -EFAULT;
        break;
    }
#endif
    CDBG("flash_set_led_state: return %d\n", rc);
    return rc;
}