~ruther/qmk_firmware

3642a82d37e8c4fb34b9ee60606ab831d642c9ec — fauxpark 6 years ago c7d0262
Add support for 328P hardware backlight on B1/B2 (#6776)

2 files changed, 28 insertions(+), 10 deletions(-)

M docs/feature_backlight.md
M quantum/quantum.c
M docs/feature_backlight.md => docs/feature_backlight.md +12 -10
@@ 32,16 32,18 @@ This feature is distinct from both the [RGB underglow](feature_rgblight.md) and 

Hardware PWM is supported according to the following table:

|Backlight Pin|AT90USB64/128|ATmega16/32U4|ATmega16/32U2|ATmega32A|
|-------------|-------------|-------------|-------------|---------|
|`B5`         |Timer 1      |Timer 1      |             |         |
|`B6`         |Timer 1      |Timer 1      |             |         |
|`B7`         |Timer 1      |Timer 1      |Timer 1      |         |
|`C4`         |Timer 3      |             |             |         |
|`C5`         |Timer 3      |             |Timer 1      |         |
|`C6`         |Timer 3      |Timer 3      |Timer 1      |         |
|`D4`         |             |             |             |Timer 1  |
|`D5`         |             |             |             |Timer 1  |
|Backlight Pin|AT90USB64/128|ATmega16/32U4|ATmega16/32U2|ATmega32A|ATmega328P|
|-------------|-------------|-------------|-------------|---------|----------|
|`B1`         |             |             |             |         |Timer 1   |
|`B2`         |             |             |             |         |Timer 1   |
|`B5`         |Timer 1      |Timer 1      |             |         |          |
|`B6`         |Timer 1      |Timer 1      |             |         |          |
|`B7`         |Timer 1      |Timer 1      |Timer 1      |         |          |
|`C4`         |Timer 3      |             |             |         |          |
|`C5`         |Timer 3      |             |Timer 1      |         |          |
|`C6`         |Timer 3      |Timer 3      |Timer 1      |         |          |
|`D4`         |             |             |             |Timer 1  |          |
|`D5`         |             |             |             |Timer 1  |          |

All other pins will use software PWM. If the [Audio](feature_audio.md) feature is disabled or only using one timer, the backlight PWM can be triggered by a hardware timer:


M quantum/quantum.c => quantum/quantum.c +16 -0
@@ 1104,6 1104,22 @@ void matrix_scan_quantum() {
#            define COMxx1 COM1A1
#            define OCRxx OCR1A
#        endif
#    elif defined(__AVR_ATmega328P__) && (BACKLIGHT_PIN == B1 || BACKLIGHT_PIN == B2)
#        define HARDWARE_PWM
#        define ICRx ICR1
#        define TCCRxA TCCR1A
#        define TCCRxB TCCR1B
#        define TIMERx_OVF_vect TIMER1_OVF_vect
#        define TIMSKx TIMSK1
#        define TOIEx TOIE1

#        if BACKLIGHT_PIN == B1
#            define COMxx1 COM1A1
#            define OCRxx OCR1A
#        elif BACKLIGHT_PIN == B2
#            define COMxx1 COM1B1
#            define OCRxx OCR1B
#        endif
#    else
#        if !defined(BACKLIGHT_CUSTOM_DRIVER)
#            if !defined(B5_AUDIO) && !defined(B6_AUDIO) && !defined(B7_AUDIO)