forked from markstos/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
RGB Matrix refactoring to open up for new drivers (qmk#3913)
* rgb_matrix: use a driver ops struct This is intended to avoid #ifdef proliferation on adding more drivers, eg. model01, which use different architectures. * rgb_matrix: document driver struct members * rgb_matrix: remove unused LED testing code * rgb_matrix: don't build into IS31x drivers unless being used * rgb_matrix: refactor make config options This ensures that the necessary files are included for any custom RGB_MATRIX_ENABLE value, without having to add entries here for specific boards. This particularly affects model01 because its controller is integrated and won't be used anywhere else, so it's preferable not to put it in common_features.mk. This now validates the value of RGB_MATRIX_ENABLE. It was necessary to fix an error in ergodox_ez rules.mk using the wrong comment separator, yielding an invalid value. * IS31x drivers: don't write the control registers all the time This is only needed when they are changed. This is done in init() and board- or keymap-specific code is free to make further changes. * rgb_matrix: move structs from chip drivers to rgb_matrix_drivers.c This approach is specific to the rgb_matrix functionality, so keep it neatly separated from the raw chip drivers.
- Loading branch information
1 parent
12ad59f
commit f70f45e
Showing
7 changed files
with
113 additions
and
129 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -268,4 +268,3 @@ void IS31FL3731_update_led_control_registers( uint8_t addr1, uint8_t addr2 ) | |
} | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
/* Copyright 2018 James Laird-Wah | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#include "rgb_matrix.h" | ||
|
||
/* Each driver needs to define the struct | ||
* const rgb_matrix_driver_t rgb_matrix_driver; | ||
* All members must be provided. | ||
* Keyboard custom drivers can define this in their own files, it should only | ||
* be here if shared between boards. | ||
*/ | ||
|
||
#if defined(IS31FL3731) || defined(IS31FL3733) | ||
|
||
#include "i2c_master.h" | ||
|
||
static void init( void ) | ||
{ | ||
i2c_init(); | ||
#ifdef IS31FL3731 | ||
IS31FL3731_init( DRIVER_ADDR_1 ); | ||
IS31FL3731_init( DRIVER_ADDR_2 ); | ||
#else | ||
IS31FL3733_init( DRIVER_ADDR_1 ); | ||
#endif | ||
for ( int index = 0; index < DRIVER_LED_TOTAL; index++ ) { | ||
bool enabled = true; | ||
// This only caches it for later | ||
#ifdef IS31FL3731 | ||
IS31FL3731_set_led_control_register( index, enabled, enabled, enabled ); | ||
#else | ||
IS31FL3733_set_led_control_register( index, enabled, enabled, enabled ); | ||
#endif | ||
} | ||
// This actually updates the LED drivers | ||
#ifdef IS31FL3731 | ||
IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); | ||
#else | ||
IS31FL3733_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); | ||
#endif | ||
} | ||
|
||
#ifdef IS31FL3731 | ||
static void flush( void ) | ||
{ | ||
IS31FL3731_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); | ||
} | ||
|
||
const rgb_matrix_driver_t rgb_matrix_driver = { | ||
.init = init, | ||
.flush = flush, | ||
.set_color = IS31FL3731_set_color, | ||
.set_color_all = IS31FL3731_set_color_all, | ||
}; | ||
#else | ||
static void flush( void ) | ||
{ | ||
IS31FL3733_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); | ||
} | ||
|
||
const rgb_matrix_driver_t rgb_matrix_driver = { | ||
.init = init, | ||
.flush = flush, | ||
.set_color = IS31FL3733_set_color, | ||
.set_color_all = IS31FL3733_set_color_all, | ||
}; | ||
#endif | ||
|
||
#endif |