/*
** Called to enable amp (enable output force)
*/
IMMVIBESPIAPI VibeStatus ImmVibeSPI_ForceOut_AmpEnable(VibeUInt8 nActuatorIndex)
{
    /*printk(KERN_ERR"[VIBRATOR]ImmVibeSPI_ForceOut_AmpEnable is called\n");*/
#if 0
	if (!g_bAmpEnabled)	{
		DbgOut((KERN_DEBUG "ImmVibeSPI_ForceOut_AmpEnable.\n"));

		g_bAmpEnabled = true;

		/* Generate PWM CLK with proper frequency(ex. 22400Hz) and 50% duty cycle.*/


		/* Enable amp */

	}
#endif

	if (!g_bAmpEnabled) {
#if !defined(CONFIG_MACH_P4NOTE)
		vibtonz_en(true);
#endif

		g_bAmpEnabled = true;
		regulator_hapticmotor_enabled = 1;

		printk(KERN_DEBUG "Motor:tspdrv: %s (%d)\n", __func__,
					regulator_hapticmotor_enabled);

	}

	return VIBE_S_SUCCESS;
}
/*
** Called to disable amp (disable output force)
*/
IMMVIBESPIAPI VibeStatus ImmVibeSPI_ForceOut_AmpDisable(VibeUInt8 nActuatorIndex)
{
    /*printk(KERN_ERR"[VIBRATOR] ImmVibeSPI_ForceOut_AmpDisable is called\n");*/
#if 0
	if (g_bAmpEnabled) {
		DbgOut((KERN_DEBUG "ImmVibeSPI_ForceOut_AmpDisable.\n"));

		g_bAmpEnabled = false;

		/* Disable amp */


		/* Disable PWM CLK */

	}
#endif

	if (g_bAmpEnabled) {

		g_bAmpEnabled = false;
#if !defined(CONFIG_MACH_P4NOTE)
		vibtonz_pwm(0);
		vibtonz_en(false);
#endif
		if (regulator_hapticmotor_enabled == 1) {
			regulator_hapticmotor_enabled = 0;

			printk(KERN_DEBUG "Motor:tspdrv: %s (%d)\n", __func__,
						regulator_hapticmotor_enabled);

		}
	}

	return VIBE_S_SUCCESS;
}
/*
** Called to enable amp (enable output force)
*/
IMMVIBESPIAPI VibeStatus ImmVibeSPI_ForceOut_AmpEnable(VibeUInt8 nActuatorIndex)
{
	if (!g_bAmpEnabled) {
		vibtonz_en(true);
		g_bAmpEnabled = true;
		regulator_hapticmotor_enabled = 1;
	}

	return VIBE_S_SUCCESS;
}
/*
** Called to disable amp (disable output force)
*/
IMMVIBESPIAPI VibeStatus ImmVibeSPI_ForceOut_AmpDisable(VibeUInt8 nActuatorIndex)
{
	if (g_bAmpEnabled) {
		g_bAmpEnabled = false;
		vibtonz_pwm(0);
		vibtonz_en(false);

		if (regulator_hapticmotor_enabled == 1) {
			regulator_hapticmotor_enabled = 0;
		}
	}

	return VIBE_S_SUCCESS;
}
static int set_vibetonz(int timeout)
{
	if(!timeout) {
		printk("[VIBETONZ] DISABLE\n");
#if defined (CONFIG_KOR_MODEL_SHV_E110S)		
		if (get_hw_rev() > 0x00 ){
			vib_isa1200_onoff(0);	
			vibtonz_en(0);
		} else {
			gpio_set_value(VIB_EN, VIBRATION_OFF);	
		}		
#elif defined (CONFIG_KOR_SHV_E120L_HD720) || defined(CONFIG_KOR_MODEL_SHV_E120K) || defined(CONFIG_KOR_MODEL_SHV_E120S) || defined(CONFIG_KOR_MODEL_SHV_E160S) || defined(CONFIG_KOR_MODEL_SHV_E160K) || defined(CONFIG_KOR_MODEL_SHV_E160L) ||  defined (CONFIG_KOR_MODEL_SHV_E120L)
		vib_isa1200_onoff(0);	
		vibtonz_en(0);
#elif defined (CONFIG_USA_MODEL_SGH_T989)|| defined (CONFIG_USA_MODEL_SGH_I727) || defined (CONFIG_USA_MODEL_SGH_T769)
		if (get_hw_rev() > 0x04 ){
			vib_isa1200_onoff(0);	
			vibtonz_en(0);
		} else {
			gpio_set_value(VIB_EN, VIBRATION_OFF);	
		}		
#elif defined (CONFIG_USA_MODEL_SGH_I717) || defined(CONFIG_USA_MODEL_SGH_I757) || defined(CONFIG_USA_MODEL_SGH_I577)

        vib_isa1200_onoff(0);
        vibtonz_en(0);
        
#elif defined (CONFIG_JPN_MODEL_SC_03D)
		if (get_hw_rev() > 0x00 ){
			vib_isa1200_onoff(0);	
			vibtonz_en(0);
		} else {
			gpio_set_value(VIB_EN, VIBRATION_OFF);	
		}	
#else	
		gpio_set_value(VIB_EN, VIBRATION_OFF);	
#endif		
	} else {
		printk("[VIBETONZ] ENABLE\n");
#if defined (CONFIG_KOR_MODEL_SHV_E110S)		
		if (get_hw_rev() > 0x00 ){
			vibtonz_en(1);
			vibe_set_pwm_freq(258);
			vib_isa1200_onoff(1);							
		} else {
			gpio_set_value(VIB_EN, VIBRATION_ON);			
		}
#elif defined (CONFIG_KOR_SHV_E120L_HD720) || defined(CONFIG_KOR_MODEL_SHV_E120K) || defined(CONFIG_KOR_MODEL_SHV_E120S) || defined(CONFIG_KOR_MODEL_SHV_E160S) || defined(CONFIG_KOR_MODEL_SHV_E160K) || defined(CONFIG_KOR_MODEL_SHV_E160L) ||  defined (CONFIG_KOR_MODEL_SHV_E120L)
		vibtonz_en(1);
		vibe_set_pwm_freq(258);
		vib_isa1200_onoff(1);							
#elif defined (CONFIG_USA_MODEL_SGH_T989)|| defined (CONFIG_USA_MODEL_SGH_I727) || defined (CONFIG_USA_MODEL_SGH_T769)
		if (get_hw_rev() > 0x04 ){
			vibtonz_en(1);
			vibe_set_pwm_freq(258);
			vib_isa1200_onoff(1);	
		} else {
			gpio_set_value(VIB_EN, VIBRATION_ON);			
		}
#elif defined (CONFIG_USA_MODEL_SGH_I717) || defined(CONFIG_USA_MODEL_SGH_I757) || defined(CONFIG_USA_MODEL_SGH_I577)

        vibtonz_en(1);
        vibe_set_pwm_freq(258);
        vib_isa1200_onoff(1);   


#elif defined (CONFIG_JPN_MODEL_SC_03D)
		if (get_hw_rev() > 0x00 ){
			vibtonz_en(1);
			vibe_set_pwm_freq(258);
			vib_isa1200_onoff(1);							
		} else {
			gpio_set_value(VIB_EN, VIBRATION_ON);			
		}	
#else			
		gpio_set_value(VIB_EN, VIBRATION_ON);		
#endif
	}

	vibrator_value = timeout;
	
	return 0;
}