Lines Matching +full:off +full:- +full:on +full:- +full:delay +full:- +full:us
1 // SPDX-License-Identifier: GPL-2.0-only
6 * Partially based on Atsushi Nemoto's ledtrig-heartbeat.c.
36 struct led_classdev *led_cdev = activity_data->led_cdev; in led_activity_function()
39 int delay; in led_activity_function() local
47 if (test_and_clear_bit(LED_BLINK_BRIGHTNESS_CHANGE, &led_cdev->work_flags)) in led_activity_function()
48 led_cdev->blink_brightness = led_cdev->new_blink_brightness; in led_activity_function()
52 led_set_brightness_nosleep(led_cdev, led_cdev->blink_brightness); in led_activity_function()
74 * down to 16us, ensuring we won't overflow 32-bit computations below in led_activity_function()
75 * even up to 3k CPUs, while keeping divides cheap on smaller systems. in led_activity_function()
78 diff_boot = (curr_boot - activity_data->last_boot) >> 16; in led_activity_function()
79 diff_used = (curr_used - activity_data->last_used) >> 16; in led_activity_function()
80 activity_data->last_boot = curr_boot; in led_activity_function()
81 activity_data->last_used = curr_used; in led_activity_function()
95 * 1 - delta_idle / delta_boot in led_activity_function()
99 * (typically 10ms every second, or 10ms ON, 990ms OFF). Then we want in led_activity_function()
101 * enough to saturate one core in multi-core systems or 50% in single in led_activity_function()
103 * cycle (10ms ON, 90ms OFF). After this point, the blinking frequency in led_activity_function()
105 * the activity, up to the point where we have 90ms ON, 10ms OFF when in led_activity_function()
110 * This gives us : in led_activity_function()
111 * - a target CPU usage of min(50%, 100%/#CPU) for a 10% duty cycle in led_activity_function()
112 * (10ms ON, 90ms OFF) in led_activity_function()
113 * - below target : in led_activity_function()
115 * OFF_ms = 90 + (1 - usage/target) * 900 in led_activity_function()
116 * - above target : in led_activity_function()
117 * ON_ms = 10 + (usage-target)/(100%-target) * 80 in led_activity_function()
118 * OFF_ms = 90 - (usage-target)/(100%-target) * 80 in led_activity_function()
121 * 100 ms and keep track of the sleep time left. This allows us to in led_activity_function()
125 activity_data->time_left -= 100; in led_activity_function()
126 if (activity_data->time_left <= 0) { in led_activity_function()
127 activity_data->time_left = 0; in led_activity_function()
128 activity_data->state = !activity_data->state; in led_activity_function()
130 (activity_data->state ^ activity_data->invert) ? in led_activity_function()
131 led_cdev->blink_brightness : LED_OFF); in led_activity_function()
137 delay = activity_data->state ? in led_activity_function()
138 10 : /* ON */ in led_activity_function()
139 990 - 900 * usage / target; /* OFF */ in led_activity_function()
141 delay = activity_data->state ? in led_activity_function()
142 10 + 80 * (usage - target) / (100 - target) : /* ON */ in led_activity_function()
143 90 - 80 * (usage - target) / (100 - target); /* OFF */ in led_activity_function()
146 if (!activity_data->time_left || delay <= activity_data->time_left) in led_activity_function()
147 activity_data->time_left = delay; in led_activity_function()
149 delay = min_t(int, activity_data->time_left, 100); in led_activity_function()
150 mod_timer(&activity_data->timer, jiffies + msecs_to_jiffies(delay)); in led_activity_function()
158 return sprintf(buf, "%u\n", activity_data->invert); in led_invert_show()
173 activity_data->invert = !!state; in led_invert_store()
192 return -ENOMEM; in activity_activate()
196 activity_data->led_cdev = led_cdev; in activity_activate()
197 timer_setup(&activity_data->timer, led_activity_function, 0); in activity_activate()
198 if (!led_cdev->blink_brightness) in activity_activate()
199 led_cdev->blink_brightness = led_cdev->max_brightness; in activity_activate()
200 led_activity_function(&activity_data->timer); in activity_activate()
201 set_bit(LED_BLINK_SW, &led_cdev->work_flags); in activity_activate()
210 del_timer_sync(&activity_data->timer); in activity_deactivate()
212 clear_bit(LED_BLINK_SW, &led_cdev->work_flags); in activity_deactivate()