示例#1
0
static int irrc_pwmon(int PWM_CLK, int duty)
{
	if((PWM_CLK==0)||(duty==100)){
		printk(KERN_INFO "no frequency signal!\n");
		cancel_delayed_work_sync(&ts->input_GPIO_off_work);
		gpio_tlmm_config(GPIO_CFG(GPIO_IRRC_PWM, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_4MA), GPIO_CFG_ENABLE);
		gpio_set_value(GPIO_IRRC_PWM, 1);
    	gpio_set=1;
	}
	else if((PWM_CLK<23)||(PWM_CLK>1200)||(duty>60)||(duty<20) ){
		printk(KERN_INFO "Out of range ! \n");
	}
	else{
		cancel_delayed_work_sync(&ts->input_PWM_off_work);
		gpio_tlmm_config(GPIO_CFG(GPIO_IRRC_PWM, GPIO_FUNCTION, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_4MA), GPIO_CFG_ENABLE);
		irrc_pwm_set(1,PWM_CLK,duty);
    	gpio_set=0;
	}
	return 0;
}
static void irrc_pwmoff_work_func(struct work_struct *work)
{
	irrc_pwm_set(0,38,30);
	msm_xo_mode_vote(irrc_clock, MSM_XO_MODE_OFF);
}