@ -898,14 +898,29 @@ static const uint8_t backlight_pin = BACKLIGHT_PIN;
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// depending on the pin, we use a different output compare unit
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# if BACKLIGHT_PIN == B7 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define COM1x1 COM1C1 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define OCR1x  OCR1C 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define TCCRxA TCCR1A 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define TCCRxB TCCR1B 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define COMxx1 COM1C1 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define OCRxx  OCR1C 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define ICRx   ICR1 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# elif BACKLIGHT_PIN == B6 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define COM1x1 COM1B1 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define OCR1x  OCR1B 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define TCCRxA TCCR1A 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define TCCRxB TCCR1B 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define COMxx1 COM1B1 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define OCRxx  OCR1B 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define ICRx   ICR1 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# elif BACKLIGHT_PIN == B5 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define COM1x1 COM1A1 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define OCR1x  OCR1A 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define TCCRxA TCCR1A 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define TCCRxB TCCR1B 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define COMxx1 COM1A1 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define OCRxx  OCR1A 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define ICRx   ICR1 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# elif BACKLIGHT_PIN == C6 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define TCCRxA TCCR3A 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define TCCRxB TCCR3B 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define COMxx1 COM1A1 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define OCRxx  OCR3A 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define ICRx   ICR3 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# else 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define NO_HARDWARE_PWM 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# endif 
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -987,7 +1002,7 @@ static uint16_t cie_lightness(uint16_t v) {
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// range for val is [0..TIMER_TOP]. PWM pin is high while the timer count is below val.
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  inline  void  set_pwm ( uint16_t  val )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  OCR1  x =  val ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						OCRx  x =  val ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# ifndef BACKLIGHT_CUSTOM_DRIVER 
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -998,10 +1013,10 @@ void backlight_set(uint8_t level) {
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  if  ( level  = =  0 )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    // Turn off PWM control on backlight pin
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    TCCR 1A & =  ~ ( _BV ( COM1  x1) ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    TCCR xA & =  ~ ( _BV ( COMx  x1) ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  }  else  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    // Turn on PWM control of backlight pin
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    TCCR 1A | =  _BV ( COM1  x1) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    TCCR xA | =  _BV ( COMx  x1) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  } 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  // Set the brightness
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  set_pwm ( cie_lightness ( TIMER_TOP  *  ( uint32_t ) level  /  BACKLIGHT_LEVELS ) ) ; 
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -1149,11 +1164,10 @@ void backlight_init_ports(void)
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  " In fast PWM mode, the compare units allow generation of PWM waveforms on the OCnx pins. Setting the COMnx1:0 bits to two will produce a non-inverted PWM [..]. " 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  " In fast PWM mode the counter is incremented until the counter value matches either one of the fixed values 0x00FF, 0x01FF, or 0x03FF (WGMn3:0 = 5, 6, or 7), the value in ICRn (WGMn3:0 = 14), or the value in OCRnA (WGMn3:0 = 15). " 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  */ 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  TCCR1A  =  _BV ( COM1x1 )  |  _BV ( WGM11 ) ;  // = 0b00001010;
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  TCCR1B  =  _BV ( WGM13 )  |  _BV ( WGM12 )  |  _BV ( CS10 ) ;  // = 0b00011001;
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  TCCRxA  =  _BV ( COMxx1 )  |  _BV ( WGM11 ) ;  // = 0b00001010;
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  TCCRxB  =  _BV ( WGM13 )  |  _BV ( WGM12 )  |  _BV ( CS10 ) ;  // = 0b00011001;
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  // Use full 16-bit resolution. Counter counts to ICR1 before reset to 0.
 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  ICR 1  =  TIMER_TOP ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  ICR x  =  TIMER_TOP ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  backlight_init ( ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  # ifdef BACKLIGHT_BREATHING