~ruther/qmk_firmware

84d5198ef9b4106fe61530211b5b5bb1a2fc52c8 — Joel Challis 3 years ago 1fb2a0c
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
M docs/feature_ps2_mouse.md => docs/feature_ps2_mouse.md +8 -26
@@ 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 */

M docs/ja/feature_ps2_mouse.md => docs/ja/feature_ps2_mouse.md +7 -24
@@ 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 を入力としてスレーブに設定 */

M keyboards/converter/ibm_terminal/config.h => keyboards/converter/ibm_terminal/config.h +6 -27
@@ 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

M keyboards/evyd13/gh80_3700/keymaps/ps2/config.h => keyboards/evyd13/gh80_3700/keymaps/ps2/config.h +2 -8
@@ 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 */

M keyboards/handwired/108key_trackpoint/config.h => keyboards/handwired/108key_trackpoint/config.h +2 -8
@@ 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 */

M keyboards/handwired/promethium/config.h => keyboards/handwired/promethium/config.h +6 -24
@@ 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 */

M keyboards/handwired/trackpoint/config.h => keyboards/handwired/trackpoint/config.h +2 -8
@@ 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 */

M keyboards/kapcave/paladin64/config.h => keyboards/kapcave/paladin64/config.h +4 -16
@@ 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) |      \

M tmk_core/protocol/ps2_interrupt.c => tmk_core/protocol/ps2_interrupt.c +9 -9
@@ 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


M tmk_core/protocol/ps2_io_avr.c => tmk_core/protocol/ps2_io_avr.c +21 -28
@@ 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);
}

M tmk_core/protocol/ps2_io_chibios.c => tmk_core/protocol/ps2_io_chibios.c +14 -14
@@ 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);
}

M tmk_core/protocol/ps2_usart.c => tmk_core/protocol/ps2_usart.c +13 -0
@@ 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)) { \