M drivers/chibios/i2c_master.c => drivers/chibios/i2c_master.c +5 -3
@@ 32,7 32,9 @@
static uint8_t i2c_address;
static const I2CConfig i2cconfig = {
-#ifdef USE_I2CV1
+#if defined(USE_I2CV1_CONTRIB)
+ I2C1_CLOCK_SPEED,
+#elif defined(USE_I2CV1)
I2C1_OPMODE,
I2C1_CLOCK_SPEED,
I2C1_DUTY_CYCLE,
@@ 62,8 64,8 @@ __attribute__((weak)) void i2c_init(void) {
chThdSleepMilliseconds(10);
#if defined(USE_GPIOV1)
- palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
- palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
+ palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, I2C1_SCL_PAL_MODE);
+ palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, I2C1_SDA_PAL_MODE);
#else
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
M drivers/chibios/i2c_master.h => drivers/chibios/i2c_master.h +8 -1
@@ 81,7 81,14 @@
# define I2C_DRIVER I2CD1
#endif
-#ifndef USE_GPIOV1
+#ifdef USE_GPIOV1
+# ifndef I2C1_SCL_PAL_MODE
+# define I2C1_SCL_PAL_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN
+# endif
+# ifndef I2C1_SDA_PAL_MODE
+# define I2C1_SDA_PAL_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN
+# endif
+#else
// The default PAL alternate modes are used to signal that the pins are used for I2C
# ifndef I2C1_SCL_PAL_MODE
# define I2C1_SCL_PAL_MODE 4
M drivers/oled/oled_driver.c => drivers/oled/oled_driver.c +4 -6
@@ 82,14 82,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define I2C_CMD 0x00
#define I2C_DATA 0x40
#if defined(__AVR__)
-// already defined on ARM
-# define I2C_TIMEOUT 100
-# define I2C_TRANSMIT_P(data) i2c_transmit_P((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), I2C_TIMEOUT)
+# define I2C_TRANSMIT_P(data) i2c_transmit_P((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), OLED_I2C_TIMEOUT)
#else // defined(__AVR__)
-# define I2C_TRANSMIT_P(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), I2C_TIMEOUT)
+# define I2C_TRANSMIT_P(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), OLED_I2C_TIMEOUT)
#endif // defined(__AVR__)
-#define I2C_TRANSMIT(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), I2C_TIMEOUT)
-#define I2C_WRITE_REG(mode, data, size) i2c_writeReg((OLED_DISPLAY_ADDRESS << 1), mode, data, size, I2C_TIMEOUT)
+#define I2C_TRANSMIT(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), OLED_I2C_TIMEOUT)
+#define I2C_WRITE_REG(mode, data, size) i2c_writeReg((OLED_DISPLAY_ADDRESS << 1), mode, data, size, OLED_I2C_TIMEOUT)
#define HAS_FLAGS(bits, flags) ((bits & flags) == flags)
M drivers/oled/oled_driver.h => drivers/oled/oled_driver.h +4 -0
@@ 150,6 150,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# endif
#endif
+#if !defined(OLED_I2C_TIMEOUT)
+# define OLED_I2C_TIMEOUT 100
+#endif
+
// OLED Rotation enum values are flags
typedef enum {
OLED_ROTATION_0 = 0,
M keyboards/handwired/onekey/teensy_32/config.h => keyboards/handwired/onekey/teensy_32/config.h +6 -0
@@ 22,3 22,9 @@
#define MATRIX_COL_PINS { D5 }
#define MATRIX_ROW_PINS { B2 }
#define UNUSED_PINS
+
+// i2c_master defines
+#define I2C1_SCL 0 // A2 on pinout = B0
+#define I2C1_SDA 1 // A3 on pinout = B1
+#define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
+#define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
M keyboards/handwired/onekey/teensy_32/halconf.h => keyboards/handwired/onekey/teensy_32/halconf.h +1 -1
@@ 79,7 79,7 @@
* @brief Enables the I2C subsystem.
*/
#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
-#define HAL_USE_I2C FALSE
+#define HAL_USE_I2C TRUE
#endif
/**
M keyboards/handwired/onekey/teensy_32/mcuconf.h => keyboards/handwired/onekey/teensy_32/mcuconf.h +6 -0
@@ 42,4 42,10 @@
* 5 for Teensy 3.x */
#define KINETIS_USB_USB0_IRQ_PRIORITY 5
+/*
+ * I2C driver settings
+ */
+#define KINETIS_I2C_USE_I2C0 TRUE
+#define KINETIS_I2C_I2C0_PRIORITY 4
+
#endif /* _MCUCONF_H_ */
M keyboards/handwired/onekey/teensy_lc/config.h => keyboards/handwired/onekey/teensy_lc/config.h +6 -0
@@ 22,3 22,9 @@
#define MATRIX_COL_PINS { D5 }
#define MATRIX_ROW_PINS { B2 }
#define UNUSED_PINS
+
+// i2c_master defines
+#define I2C1_SCL 0 // A2 on pinout = B0
+#define I2C1_SDA 1 // A3 on pinout = B1
+#define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
+#define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
M keyboards/handwired/onekey/teensy_lc/halconf.h => keyboards/handwired/onekey/teensy_lc/halconf.h +1 -1
@@ 79,7 79,7 @@
* @brief Enables the I2C subsystem.
*/
#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
-#define HAL_USE_I2C FALSE
+#define HAL_USE_I2C TRUE
#endif
/**
M keyboards/handwired/onekey/teensy_lc/mcuconf.h => keyboards/handwired/onekey/teensy_lc/mcuconf.h +6 -0
@@ 42,4 42,10 @@
* 5 for Teensy 3.x */
#define KINETIS_USB_USB0_IRQ_PRIORITY 2
+/*
+ * I2C driver settings
+ */
+#define KINETIS_I2C_USE_I2C0 TRUE
+#define KINETIS_I2C_I2C0_PRIORITY 4
+
#endif /* _MCUCONF_H_ */
M tmk_core/common/chibios/chibios_config.h => tmk_core/common/chibios/chibios_config.h +7 -0
@@ 22,3 22,10 @@
#if defined(STM32F1XX) || defined(STM32F2XX) || defined(STM32F4XX) || defined(STM32L1XX)
# define USE_I2CV1
#endif
+
+// teensy
+#if defined(K20x) || defined(KL2x)
+# define USE_I2CV1
+# define USE_I2CV1_CONTRIB // for some reason a bunch of ChibiOS-Contrib boards only have clock_speed
+# define USE_GPIOV1
+#endif