]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - keyboard/planck/backlight.c
switch shift and enter thumb key
[qmk_firmware.git] / keyboard / planck / backlight.c
index ee7e31ee9cfdf4d15a3203361759af40874c0557..f69364b2afb619ea591cfc2577842c9e81b00b50 100644 (file)
@@ -2,9 +2,11 @@
 #include <avr/io.h>
 #include "backlight.h"
 
+#define CHANNEL OCR1C
 
 void backlight_init_ports()
 {
+
     // Setup PB7 as output and output low.
     DDRB |= (1<<7);
     PORTB &= ~(1<<7);
@@ -24,9 +26,8 @@ void backlight_init_ports()
     
     TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
     TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
-    
-    // Default to zero duty cycle.
-    OCR1C = 0x0000;
+
+    backlight_init();
 }
 
 void backlight_set(uint8_t level)
@@ -35,12 +36,26 @@ void backlight_set(uint8_t level)
     {
         // Turn off PWM control on PB7, revert to output low.
         TCCR1A &= ~(_BV(COM1C1));
+        CHANNEL = 0x0;
+        // Prevent backlight blink on lowest level
+        PORTB &= ~(_BV(PORTB7));
     }
-    else
+    else if ( level == BACKLIGHT_LEVELS )
     {
+        // Prevent backlight blink on lowest level
+        PORTB &= ~(_BV(PORTB7));
         // Turn on PWM control of PB7
         TCCR1A |= _BV(COM1C1);
-        OCR1C = level << 12 | 0x0FFF;
+        // Set the brightness
+        CHANNEL = 0xFFFF;
     }
-}
-
+    else        
+    {
+        // Prevent backlight blink on lowest level
+        PORTB &= ~(_BV(PORTB7));
+        // Turn on PWM control of PB7
+        TCCR1A |= _BV(COM1C1);
+        // Set the brightness
+        CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
+    }
+}
\ No newline at end of file