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); }