Example #1
0
static void led_timer_function(unsigned long data)
{
    struct led_classdev *led_cdev = (struct led_classdev *) data;
    struct timer_trig_data *timer_data = led_cdev->trigger_data;
    unsigned long brightness;
    unsigned long delay;

    if (!timer_data->delay_on || !timer_data->delay_off) {
        led_set_brightness(led_cdev, LED_OFF);
        return;
    }

    brightness = led_get_brightness(led_cdev);
    if (!brightness) {
        /* Time to switch the LED on. */
        brightness = timer_data->brightness_on;
        delay = timer_data->delay_on;
    } else {
        /* Store the current brightness value to be able
         * to restore it when the delay_off period is over.
         */
        timer_data->brightness_on = brightness;
        brightness = LED_OFF;
        delay = timer_data->delay_off;
    }

    led_set_brightness(led_cdev, brightness);
#if (CONFIG_RTC_LEDTRIG_TIMER==1)
    led_rtc_set_alarm(led_cdev, delay);
#elif (CONFIG_RTC_LEDTRIG_TIMER==2)
    hrtimer_start(&timer_data->hrtimer, ns_to_ktime((u64)delay*1000*1000), HRTIMER_MODE_REL);
#else
    mod_timer(&timer_data->timer, jiffies + msecs_to_jiffies(delay));
#endif
}
Example #2
0
static void led_timer_function(unsigned long data)
{
	struct led_classdev *led_cdev = (struct led_classdev *) data;
	struct notification_trig_data *timer_data = led_cdev->trigger_data;
	unsigned long brightness;
	unsigned long delay;

	if (!timer_data->delay_on || !timer_data->delay_off || !timer_data->blink_cnt) {
		led_set_brightness(led_cdev, LED_OFF);
		return;
	}

	brightness = led_get_brightness(led_cdev);
	if (!brightness) {
		/* Time to switch the LED on. */
		brightness = timer_data->brightness_on;
		delay = timer_data->delay_on;
	} else {
		/* Store the current brightness value to be able
		 * to restore it when the delay_off period is over.
		 */
		timer_data->brightness_on = brightness;
		brightness = LED_OFF;
		delay = timer_data->delay_off;

		if(timer_data->blink_cnt <= ++timer_data->current_blink_cnt) {
			timer_data->current_blink_cnt = 0;
			delay+=timer_data->off_duration;
		}
	}

	led_set_brightness(led_cdev, brightness);
	
	led_rtc_set_alarm(led_cdev, delay);
}