static void vibrator_enable(struct timed_output_dev *dev, int value) { /* FUJITSU:2011-12-1 mod VIB start */ #if 0 hrtimer_cancel(&vibe_timer); if (value == 0) timed_vibrator_off(dev); else { value = (value > 15000 ? 15000 : value); timed_vibrator_on(dev); hrtimer_start(&vibe_timer, ktime_set(value / 1000, (value % 1000) * 1000000), HRTIMER_MODE_REL); } #else int vibrator_time = 0; if (value == 0) { if (vibrator_timer_active()) { vibrator_time = vibrator_get_time(dev); printk("[VIB] vibrator Off(time[%d])\n", vibrator_time ); /* Put a delay of 10 ms, in case the vibrator is off immediately */ if (vibrator_time < 10 || vibrator_time > 50){ hrtimer_cancel(&vibe_timer); vibrator_time = 0; } vibrator_value = value; #if TIMED_VIBRATOR_FLAG if(timed_vibrator_flag == 1){ printk("timed_vibrator_enable off schedule cancel\n"); return; } #endif timed_vibrator_off(dev, vibrator_time + 10); } } else { printk("[VIB] vibrator On(time[%d])\n", value ); /* Provisional management */ /* Normal operation is not carried out in case of a small value. */ /* For this reason, 10 ms is used when smaller than 10 ms. */ if((0 < value )&&(value < 10)){ value = 10; } vibrator_value = (value > 15000 ? 15000 : value); hrtimer_cancel(&vibe_timer); timed_vibrator_on(dev); } #endif /* FUJITSU:2011-12-1 mod VIB end */ }
static void vibrator_enable(struct timed_output_dev *dev, int value) { int vibrator_time = 0; if (value == 0) { if (vibrator_timer_active()) { vibrator_time = vibrator_get_time(dev); // hrtimer_cancel(&vibe_timer); /* Put a delay of 10 ms, in case the vibrator is off immediately */ if (vibrator_time < 10 || vibrator_time > 50) { hrtimer_cancel(&vibe_timer); vibrator_time = 0; } vibrator_value = value; timed_vibrator_off(dev, vibrator_time + 10); } } else { vibrator_value = (value > 15000 ? 15000 : value); hrtimer_cancel(&vibe_timer); timed_vibrator_on(dev); } }