aboutsummaryrefslogtreecommitdiff
path: root/quantum/backlight/backlight_avr.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/backlight/backlight_avr.c')
-rw-r--r--quantum/backlight/backlight_avr.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/quantum/backlight/backlight_avr.c b/quantum/backlight/backlight_avr.c
index b3e882ffe..4d66da80b 100644
--- a/quantum/backlight/backlight_avr.c
+++ b/quantum/backlight/backlight_avr.c
@@ -3,6 +3,11 @@
3#include "backlight_driver_common.h" 3#include "backlight_driver_common.h"
4#include "debug.h" 4#include "debug.h"
5 5
6// Maximum duty cycle limit
7#ifndef BACKLIGHT_LIMIT_VAL
8# define BACKLIGHT_LIMIT_VAL 255
9#endif
10
6// This logic is a bit complex, we support 3 setups: 11// This logic is a bit complex, we support 3 setups:
7// 12//
8// 1. Hardware PWM when backlight is wired to a PWM pin. 13// 1. Hardware PWM when backlight is wired to a PWM pin.
@@ -240,6 +245,9 @@ static uint16_t cie_lightness(uint16_t v) {
240 } 245 }
241} 246}
242 247
248// rescale the supplied backlight value to be in terms of the value limit
249static uint32_t rescale_limit_val(uint32_t val) { return (val * (BACKLIGHT_LIMIT_VAL + 1)) / 256; }
250
243// range for val is [0..TIMER_TOP]. PWM pin is high while the timer count is below val. 251// range for val is [0..TIMER_TOP]. PWM pin is high while the timer count is below val.
244static inline void set_pwm(uint16_t val) { OCRxx = val; } 252static inline void set_pwm(uint16_t val) { OCRxx = val; }
245 253
@@ -269,7 +277,7 @@ void backlight_set(uint8_t level) {
269#endif 277#endif
270 } 278 }
271 // Set the brightness 279 // Set the brightness
272 set_pwm(cie_lightness(TIMER_TOP * (uint32_t)level / BACKLIGHT_LEVELS)); 280 set_pwm(cie_lightness(rescale_limit_val(TIMER_TOP * (uint32_t)level / BACKLIGHT_LEVELS)));
273} 281}
274 282
275void backlight_task(void) {} 283void backlight_task(void) {}
@@ -375,7 +383,7 @@ ISR(TIMERx_OVF_vect)
375 breathing_interrupt_disable(); 383 breathing_interrupt_disable();
376 } 384 }
377 385
378 set_pwm(cie_lightness(scale_backlight((uint16_t)pgm_read_byte(&breathing_table[index]) * 0x0101U))); 386 set_pwm(cie_lightness(rescale_limit_val(scale_backlight((uint16_t)pgm_read_byte(&breathing_table[index]) * 0x0101U))));
379} 387}
380 388
381#endif // BACKLIGHT_BREATHING 389#endif // BACKLIGHT_BREATHING