Browse Source

Align PS/2 GPIO defines (#14745)

* Align PS/2 GPIO

* Align PS/2 GPIO

* refactor more keyboards

* Remove more defines

* Put back avr/chibios split

* format
Joel Challis 3 years ago
parent
commit
84d5198ef9

+ 8 - 26
docs/feature_ps2_mouse.md

@@ -39,14 +39,8 @@ In your keyboard config.h:
 
 ```c
 #ifdef PS2_USE_BUSYWAIT
-#   define PS2_CLOCK_PORT  PORTD
-#   define PS2_CLOCK_PIN   PIND
-#   define PS2_CLOCK_DDR   DDRD
-#   define PS2_CLOCK_BIT   1
-#   define PS2_DATA_PORT   PORTD
-#   define PS2_DATA_PIN    PIND
-#   define PS2_DATA_DDR    DDRD
-#   define PS2_DATA_BIT    2
+#   define PS2_CLOCK_PIN   D1
+#   define PS2_DATA_PIN    D2
 #endif
 ```
 
@@ -65,14 +59,8 @@ In your keyboard config.h:
 
 ```c
 #ifdef PS2_USE_INT
-#define PS2_CLOCK_PORT  PORTD
-#define PS2_CLOCK_PIN   PIND
-#define PS2_CLOCK_DDR   DDRD
-#define PS2_CLOCK_BIT   2
-#define PS2_DATA_PORT   PORTD
-#define PS2_DATA_PIN    PIND
-#define PS2_DATA_DDR    DDRD
-#define PS2_DATA_BIT    5
+#define PS2_CLOCK_PIN   D2
+#define PS2_DATA_PIN    D5
 
 #define PS2_INT_INIT()  do {    \
     EICRA |= ((1<<ISC21) |      \
@@ -102,8 +90,8 @@ PS2_USE_INT = yes
 In your keyboard config.h:
 
 ```c
-#define PS2_CLOCK A8
-#define PS2_DATA  A9
+#define PS2_CLOCK_PIN A8
+#define PS2_DATA_PIN  A9
 ```
 
 And in the chibios specifig halconf.h:
@@ -127,14 +115,8 @@ In your keyboard config.h:
 
 ```c
 #ifdef PS2_USE_USART
-#define PS2_CLOCK_PORT  PORTD
-#define PS2_CLOCK_PIN   PIND
-#define PS2_CLOCK_DDR   DDRD
-#define PS2_CLOCK_BIT   5
-#define PS2_DATA_PORT   PORTD
-#define PS2_DATA_PIN    PIND
-#define PS2_DATA_DDR    DDRD
-#define PS2_DATA_BIT    2
+#define PS2_CLOCK_PIN   D5
+#define PS2_DATA_PIN    D2
 
 /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
 /* set DDR of CLOCK as input to be slave */

+ 7 - 24
docs/ja/feature_ps2_mouse.md

@@ -43,14 +43,8 @@ PS2_USE_BUSYWAIT = yes
 
 ```c
 #ifdef PS2_USE_BUSYWAIT
-#   define PS2_CLOCK_PORT  PORTD
-#   define PS2_CLOCK_PIN   PIND
-#   define PS2_CLOCK_DDR   DDRD
-#   define PS2_CLOCK_BIT   1
-#   define PS2_DATA_PORT   PORTD
-#   define PS2_DATA_PIN    PIND
-#   define PS2_DATA_DDR    DDRD
-#   define PS2_DATA_BIT    2
+#   define PS2_CLOCK_PIN   D1
+#   define PS2_DATA_PIN    D2
 #endif
 ```
 
@@ -69,14 +63,8 @@ PS2_USE_INT = yes
 
 ```c
 #ifdef PS2_USE_INT
-#define PS2_CLOCK_PORT  PORTD
-#define PS2_CLOCK_PIN   PIND
-#define PS2_CLOCK_DDR   DDRD
-#define PS2_CLOCK_BIT   2
-#define PS2_DATA_PORT   PORTD
-#define PS2_DATA_PIN    PIND
-#define PS2_DATA_DDR    DDRD
-#define PS2_DATA_BIT    5
+#define PS2_CLOCK_PIN   D2
+#define PS2_DATA_PIN    D5
 
 #define PS2_INT_INIT()  do {    \
     EICRA |= ((1<<ISC21) |      \
@@ -107,14 +95,9 @@ PS2_USE_USART = yes
 
 ```c
 #ifdef PS2_USE_USART
-#define PS2_CLOCK_PORT  PORTD
-#define PS2_CLOCK_PIN   PIND
-#define PS2_CLOCK_DDR   DDRD
-#define PS2_CLOCK_BIT   5
-#define PS2_DATA_PORT   PORTD
-#define PS2_DATA_PIN    PIND
-#define PS2_DATA_DDR    DDRD
-#define PS2_DATA_BIT    2
+#ifdef PS2_USE_USART
+#define PS2_CLOCK_PIN   D5
+#define PS2_DATA_PIN    D2
 
 /* 同期、奇数パリティ、1-bit ストップ、8-bit データ、立ち下がりエッジでサンプル */
 /* CLOCK の DDR を入力としてスレーブに設定 */

+ 6 - 27
keyboards/converter/ibm_terminal/config.h

@@ -45,15 +45,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #ifdef PS2_USE_USART
 /* XCK for clock line */
-#define PS2_CLOCK_PORT  PORTD
-#define PS2_CLOCK_PIN   PIND
-#define PS2_CLOCK_DDR   DDRD
-#define PS2_CLOCK_BIT   5
-/* RXD for data line */
-#define PS2_DATA_PORT   PORTD
-#define PS2_DATA_PIN    PIND
-#define PS2_DATA_DDR    DDRD
-#define PS2_DATA_BIT    2
+#define PS2_CLOCK_PIN   D5
+#define PS2_DATA_PIN    D2
 
 /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
 /* set DDR of CLOCK as input to be slave */
@@ -93,15 +86,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #ifdef PS2_USE_INT
 /* uses INT1 for clock line(ATMega32U4) */
-#define PS2_CLOCK_PORT  PORTD
-#define PS2_CLOCK_PIN   PIND
-#define PS2_CLOCK_DDR   DDRD
-#define PS2_CLOCK_BIT   1
-
-#define PS2_DATA_PORT   PORTD
-#define PS2_DATA_PIN    PIND
-#define PS2_DATA_DDR    DDRD
-#define PS2_DATA_BIT    0
+#define PS2_CLOCK_PIN   D1
+#define PS2_DATA_PIN    D0
 
 #define PS2_INT_INIT()  do {    \
     EICRA |= ((1<<ISC11) |      \
@@ -121,13 +107,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PS/2 Busywait configuration
  */
 #ifdef PS2_USE_BUSYWAIT
-#define PS2_CLOCK_PORT  PORTD
-#define PS2_CLOCK_PIN   PIND
-#define PS2_CLOCK_DDR   DDRD
-#define PS2_CLOCK_BIT   1
-
-#define PS2_DATA_PORT   PORTD
-#define PS2_DATA_PIN    PIND
-#define PS2_DATA_DDR    DDRD
-#define PS2_DATA_BIT    0
+#define PS2_CLOCK_PIN   D1
+#define PS2_DATA_PIN    D0
 #endif

+ 2 - 8
keyboards/evyd13/gh80_3700/keymaps/ps2/config.h

@@ -17,14 +17,8 @@
 #pragma once
 
 #ifdef PS2_USE_USART
-#define PS2_CLOCK_PORT  PORTD
-#define PS2_CLOCK_PIN   PIND
-#define PS2_CLOCK_DDR   DDRD
-#define PS2_CLOCK_BIT   5
-#define PS2_DATA_PORT   PORTD
-#define PS2_DATA_PIN    PIND
-#define PS2_DATA_DDR    DDRD
-#define PS2_DATA_BIT    2
+#define PS2_CLOCK_PIN   D5
+#define PS2_DATA_PIN    D2
 
 /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
 /* set DDR of CLOCK as input to be slave */

+ 2 - 8
keyboards/handwired/108key_trackpoint/config.h

@@ -12,14 +12,8 @@
 #define MATRIX_COLS 23
 
 #ifdef PS2_USE_USART
-  #define PS2_CLOCK_PORT  PORTD
-  #define PS2_CLOCK_PIN   PIND
-  #define PS2_CLOCK_DDR   DDRD
-  #define PS2_CLOCK_BIT   5
-  #define PS2_DATA_PORT   PORTD
-  #define PS2_DATA_PIN    PIND
-  #define PS2_DATA_DDR    DDRD
-  #define PS2_DATA_BIT    2
+#define PS2_CLOCK_PIN   D5
+#define PS2_DATA_PIN    D2
 
   /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
   /* set DDR of CLOCK as input to be slave */

+ 6 - 24
keyboards/handwired/promethium/config.h

@@ -224,27 +224,15 @@ enum led_sequence {
 
 /* PS/2 mouse */
 #ifdef PS2_USE_BUSYWAIT
-#    define PS2_CLOCK_PORT PORTD
-#    define PS2_CLOCK_PIN  PIND
-#    define PS2_CLOCK_DDR  DDRD
-#    define PS2_CLOCK_BIT  3
-#    define PS2_DATA_PORT  PORTD
-#    define PS2_DATA_PIN   PIND
-#    define PS2_DATA_DDR   DDRD
-#    define PS2_DATA_BIT   2
+#    define PS2_CLOCK_PIN  D3
+#    define PS2_DATA_PIN   D2
 #endif
 
 /* PS/2 mouse interrupt version */
 #ifdef PS2_USE_INT
 /* uses INT1 for clock line(ATMega32U4) */
-#    define PS2_CLOCK_PORT PORTD
-#    define PS2_CLOCK_PIN  PIND
-#    define PS2_CLOCK_DDR  DDRD
-#    define PS2_CLOCK_BIT  3
-#    define PS2_DATA_PORT  PORTD
-#    define PS2_DATA_PIN   PIND
-#    define PS2_DATA_DDR   DDRD
-#    define PS2_DATA_BIT   2
+#    define PS2_CLOCK_PIN  D3
+#    define PS2_DATA_PIN   D2
 
 #    define PS2_INT_INIT()                          \
         do {                                        \
@@ -264,14 +252,8 @@ enum led_sequence {
 /* PS/2 mouse USART version */
 #ifdef PS2_USE_USART
 /* XCK for clock line and RXD for data line */
-#    define PS2_CLOCK_PORT PORTD
-#    define PS2_CLOCK_PIN  PIND
-#    define PS2_CLOCK_DDR  DDRD
-#    define PS2_CLOCK_BIT  5
-#    define PS2_DATA_PORT  PORTD
-#    define PS2_DATA_PIN   PIND
-#    define PS2_DATA_DDR   DDRD
-#    define PS2_DATA_BIT   2
+#define PS2_CLOCK_PIN   D5
+#define PS2_DATA_PIN    D2
 
 /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
 /* set DDR of CLOCK as input to be slave */

+ 2 - 8
keyboards/handwired/trackpoint/config.h

@@ -12,14 +12,8 @@
 #define MATRIX_COLS 3
 
 #ifdef PS2_USE_USART
-    #define PS2_CLOCK_PORT  PORTD
-    #define PS2_CLOCK_PIN   PIND
-    #define PS2_CLOCK_DDR   DDRD
-    #define PS2_CLOCK_BIT   5
-    #define PS2_DATA_PORT   PORTD
-    #define PS2_DATA_PIN    PIND
-    #define PS2_DATA_DDR    DDRD
-    #define PS2_DATA_BIT    2
+#define PS2_CLOCK_PIN   D5
+#define PS2_DATA_PIN    D2
 
     /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
     /* set DDR of CLOCK as input to be slave */

+ 4 - 16
keyboards/kapcave/paladin64/config.h

@@ -34,14 +34,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* Only required if you add in a trackpoint hardware to the pcb */
 #ifdef PS2_USE_USART
-    #define PS2_CLOCK_PORT  PORTD
-    #define PS2_CLOCK_PIN   PIND
-    #define PS2_CLOCK_DDR   DDRD
-    #define PS2_CLOCK_BIT   5
-    #define PS2_DATA_PORT   PORTD
-    #define PS2_DATA_PIN    PIND
-    #define PS2_DATA_DDR    DDRD
-    #define PS2_DATA_BIT    2
+#define PS2_CLOCK_PIN   D5
+#define PS2_DATA_PIN    D2
 
     /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling
      * edge */
@@ -77,14 +71,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #endif
 
 #ifdef PS2_USE_INT
-#define PS2_CLOCK_PORT  PORTD
-#define PS2_CLOCK_PIN   PIND
-#define PS2_CLOCK_DDR   DDRD
-#define PS2_CLOCK_BIT   2
-#define PS2_DATA_PORT   PORTD
-#define PS2_DATA_PIN    PIND
-#define PS2_DATA_DDR    DDRD
-#define PS2_DATA_BIT    5
+#define PS2_CLOCK_PIN   D2
+#define PS2_DATA_PIN    D5
 
     #define PS2_INT_INIT()  do {    \
         EICRA |= ((1<<ISC21) |      \

+ 9 - 9
tmk_core/protocol/ps2_interrupt.c

@@ -73,17 +73,17 @@ static inline void    pbuf_clear(void);
 void ps2_interrupt_service_routine(void);
 void palCallback(void *arg) { ps2_interrupt_service_routine(); }
 
-#    define PS2_INT_INIT()                             \
-        { palSetLineMode(PS2_CLOCK, PAL_MODE_INPUT); } \
+#    define PS2_INT_INIT()                                 \
+        { palSetLineMode(PS2_CLOCK_PIN, PAL_MODE_INPUT); } \
         while (0)
-#    define PS2_INT_ON()                                                \
-        {                                                               \
-            palEnableLineEvent(PS2_CLOCK, PAL_EVENT_MODE_FALLING_EDGE); \
-            palSetLineCallback(PS2_CLOCK, palCallback, NULL);           \
-        }                                                               \
+#    define PS2_INT_ON()                                                    \
+        {                                                                   \
+            palEnableLineEvent(PS2_CLOCK_PIN, PAL_EVENT_MODE_FALLING_EDGE); \
+            palSetLineCallback(PS2_CLOCK_PIN, palCallback, NULL);           \
+        }                                                                   \
         while (0)
-#    define PS2_INT_OFF()                   \
-        { palDisableLineEvent(PS2_CLOCK); } \
+#    define PS2_INT_OFF()                       \
+        { palDisableLineEvent(PS2_CLOCK_PIN); } \
         while (0)
 #endif  // PROTOCOL_CHIBIOS
 

+ 21 - 28
tmk_core/protocol/ps2_io_avr.c

@@ -1,14 +1,15 @@
 #include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
+#include "ps2_io.h"
+#include "gpio.h"
+#include "wait.h"
 
 /* Check port settings for clock and data line */
-#if !(defined(PS2_CLOCK_PORT) && defined(PS2_CLOCK_PIN) && defined(PS2_CLOCK_DDR) && defined(PS2_CLOCK_BIT))
-#    error "PS/2 clock port setting is required in config.h"
+#if !(defined(PS2_CLOCK_PIN))
+#    error "PS/2 clock setting is required in config.h"
 #endif
 
-#if !(defined(PS2_DATA_PORT) && defined(PS2_DATA_PIN) && defined(PS2_DATA_DDR) && defined(PS2_DATA_BIT))
-#    error "PS/2 data port setting is required in config.h"
+#if !(defined(PS2_DATA_PIN))
+#    error "PS/2 data setting is required in config.h"
 #endif
 
 /*
@@ -17,21 +18,17 @@
 void clock_init(void) {}
 
 void clock_lo(void) {
-    PS2_CLOCK_PORT &= ~(1 << PS2_CLOCK_BIT);
-    PS2_CLOCK_DDR |= (1 << PS2_CLOCK_BIT);
+    // Transition from input with pull-up to output low via Hi-Z instead of output high
+    writePinLow(PS2_CLOCK_PIN);
+    setPinOutput(PS2_CLOCK_PIN);
 }
 
-void clock_hi(void) {
-    /* input with pull up */
-    PS2_CLOCK_DDR &= ~(1 << PS2_CLOCK_BIT);
-    PS2_CLOCK_PORT |= (1 << PS2_CLOCK_BIT);
-}
+void clock_hi(void) { setPinInputHigh(PS2_CLOCK_PIN); }
 
 bool clock_in(void) {
-    PS2_CLOCK_DDR &= ~(1 << PS2_CLOCK_BIT);
-    PS2_CLOCK_PORT |= (1 << PS2_CLOCK_BIT);
-    _delay_us(1);
-    return PS2_CLOCK_PIN & (1 << PS2_CLOCK_BIT);
+    setPinInputHigh(PS2_CLOCK_PIN);
+    wait_us(1);
+    return readPin(PS2_CLOCK_PIN);
 }
 
 /*
@@ -40,19 +37,15 @@ bool clock_in(void) {
 void data_init(void) {}
 
 void data_lo(void) {
-    PS2_DATA_PORT &= ~(1 << PS2_DATA_BIT);
-    PS2_DATA_DDR |= (1 << PS2_DATA_BIT);
+    // Transition from input with pull-up to output low via Hi-Z instead of output high
+    writePinLow(PS2_DATA_PIN);
+    setPinOutput(PS2_DATA_PIN);
 }
 
-void data_hi(void) {
-    /* input with pull up */
-    PS2_DATA_DDR &= ~(1 << PS2_DATA_BIT);
-    PS2_DATA_PORT |= (1 << PS2_DATA_BIT);
-}
+void data_hi(void) { setPinInputHigh(PS2_DATA_PIN); }
 
 bool data_in(void) {
-    PS2_DATA_DDR &= ~(1 << PS2_DATA_BIT);
-    PS2_DATA_PORT |= (1 << PS2_DATA_BIT);
-    _delay_us(1);
-    return PS2_DATA_PIN & (1 << PS2_DATA_BIT);
+    setPinInputHigh(PS2_DATA_PIN);
+    wait_us(1);
+    return readPin(PS2_DATA_PIN);
 }

+ 14 - 14
tmk_core/protocol/ps2_io_chibios.c

@@ -6,11 +6,11 @@
 #include "hal.h"
 
 /* Check port settings for clock and data line */
-#if !(defined(PS2_CLOCK))
+#if !(defined(PS2_CLOCK_PIN))
 #    error "PS/2 clock setting is required in config.h"
 #endif
 
-#if !(defined(PS2_DATA))
+#if !(defined(PS2_DATA_PIN))
 #    error "PS/2 data setting is required in config.h"
 #endif
 
@@ -20,18 +20,18 @@
 void clock_init(void) {}
 
 void clock_lo(void) {
-    palSetLineMode(PS2_CLOCK, PAL_MODE_OUTPUT_OPENDRAIN);
-    palWriteLine(PS2_CLOCK, PAL_LOW);
+    palSetLineMode(PS2_CLOCK_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
+    palWriteLine(PS2_CLOCK_PIN, PAL_LOW);
 }
 
 void clock_hi(void) {
-    palSetLineMode(PS2_CLOCK, PAL_MODE_OUTPUT_OPENDRAIN);
-    palWriteLine(PS2_CLOCK, PAL_HIGH);
+    palSetLineMode(PS2_CLOCK_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
+    palWriteLine(PS2_CLOCK_PIN, PAL_HIGH);
 }
 
 bool clock_in(void) {
-    palSetLineMode(PS2_CLOCK, PAL_MODE_INPUT);
-    return palReadLine(PS2_CLOCK);
+    palSetLineMode(PS2_CLOCK_PIN, PAL_MODE_INPUT);
+    return palReadLine(PS2_CLOCK_PIN);
 }
 
 /*
@@ -40,16 +40,16 @@ bool clock_in(void) {
 void data_init(void) {}
 
 void data_lo(void) {
-    palSetLineMode(PS2_DATA, PAL_MODE_OUTPUT_OPENDRAIN);
-    palWriteLine(PS2_DATA, PAL_LOW);
+    palSetLineMode(PS2_DATA_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
+    palWriteLine(PS2_DATA_PIN, PAL_LOW);
 }
 
 void data_hi(void) {
-    palSetLineMode(PS2_DATA, PAL_MODE_OUTPUT_OPENDRAIN);
-    palWriteLine(PS2_DATA, PAL_HIGH);
+    palSetLineMode(PS2_DATA_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
+    palWriteLine(PS2_DATA_PIN, PAL_HIGH);
 }
 
 bool data_in(void) {
-    palSetLineMode(PS2_DATA, PAL_MODE_INPUT);
-    return palReadLine(PS2_DATA);
+    palSetLineMode(PS2_DATA_PIN, PAL_MODE_INPUT);
+    return palReadLine(PS2_DATA_PIN);
 }

+ 13 - 0
tmk_core/protocol/ps2_usart.c

@@ -46,6 +46,19 @@ POSSIBILITY OF SUCH DAMAGE.
 #include "ps2_io.h"
 #include "print.h"
 
+#ifndef PS2_CLOCK_DDR
+#    define PS2_CLOCK_DDR PORTx_ADDRESS(PS2_CLOCK_PIN)
+#endif
+#ifndef PS2_CLOCK_BIT
+#    define PS2_CLOCK_BIT (PS2_CLOCK_PIN & 0xF)
+#endif
+#ifndef PS2_DATA_DDR
+#    define PS2_DATA_DDR PORTx_ADDRESS(PS2_DATA_PIN)
+#endif
+#ifndef PS2_DATA_BIT
+#    define PS2_DATA_BIT (PS2_DATA_PIN & 0xF)
+#endif
+
 #define WAIT(stat, us, err)     \
     do {                        \
         if (!wait_##stat(us)) { \