aboutsummaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
Diffstat (limited to 'quantum')
-rw-r--r--quantum/backlight/backlight_avr.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/quantum/backlight/backlight_avr.c b/quantum/backlight/backlight_avr.c
index 67b551dc3..9c972ae02 100644
--- a/quantum/backlight/backlight_avr.c
+++ b/quantum/backlight/backlight_avr.c
@@ -232,19 +232,19 @@ ISR(TIMERx_OVF_vect) {
232 232
233// See http://jared.geek.nz/2013/feb/linear-led-pwm 233// See http://jared.geek.nz/2013/feb/linear-led-pwm
234static uint16_t cie_lightness(uint16_t v) { 234static uint16_t cie_lightness(uint16_t v) {
235 if (v <= ICRx / 12) // If the value is less than or equal to ~8% of max 235 if (v <= (uint32_t)ICRx / 12) // If the value is less than or equal to ~8% of max
236 { 236 {
237 return v / 9; // Same as dividing by 900% 237 return v / 9; // Same as dividing by 900%
238 } else { 238 } else {
239 // In the next two lines values are bit-shifted. This is to avoid loosing decimals in integer math. 239 // In the next two lines values are bit-shifted. This is to avoid loosing decimals in integer math.
240 uint32_t y = (((uint32_t)v + ICRx / 6) << 5) / (ICRx / 6 + ICRx); // If above 8%, add ~16% of max, and normalize with (max + ~16% max) 240 uint32_t y = (((uint32_t)v + (uint32_t)ICRx / 6) << 5) / ((uint32_t)ICRx / 6 + ICRx); // If above 8%, add ~16% of max, and normalize with (max + ~16% max)
241 uint32_t out = (y * y * y * ICRx) >> 15; // Cube it and undo the bit-shifting. (which is now three times as much due to the cubing) 241 uint32_t out = (y * y * y * ICRx) >> 15; // Cube it and undo the bit-shifting. (which is now three times as much due to the cubing)
242 242
243 if (out > ICRx) // Avoid overflows 243 if (out > ICRx) // Avoid overflows
244 { 244 {
245 out = ICRx; 245 out = ICRx;
246 } 246 }
247 return out; 247 return (uint16_t)out;
248 } 248 }
249} 249}
250 250