~ruther/qmk_firmware

05d6e6ca78087969d7a47862341d10b6b555c37e — Mikkel Jeppesen 5 years ago 645c5fa
Ensure setPinInput actually sets input high-Z (#6237)

* Ensure setPinInput actually sets input high-z

* Fixed _PIN_ADDRESS Macro arguments
as recommended by vomindoraan

* Fixed instances of setInput to use new behavour

* Changed kmac matrix to use input with pullups

* Update keyboards/gh60/revc/revc.h

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* Fixed input state for unselect_rows

* fixed merge conflict

* Updated all instances of older uses of setPinInput()

* Fixed naming mistake

Co-authored-by: fauxpark <fauxpark@gmail.com>
M keyboards/40percentclub/mf68/keymaps/emdarcher/keymap.c => keyboards/40percentclub/mf68/keymaps/emdarcher/keymap.c +0 -2
@@ 48,8 48,6 @@ void led_set_user(uint8_t usb_led){
    } else {
        //set to Hi-Z
        setPinInput(B0);
        writePinLow(B0);
        setPinInput(D5);
        writePinLow(D5);
    }
}

M keyboards/atreus62/keymaps/xyverz/keymap.c => keyboards/atreus62/keymaps/xyverz/keymap.c +1 -2
@@ 30,6 30,7 @@ CHANGELOG:
 0.6 - Swapped ESC and GRV in all layers.
 0.7 - Brought code up to current standards.
 0.8 - Added MACLOCK macro.
 0.9 - Updated code to correspond to new setPinInput behaviour

TODO:



@@ 124,9 125,7 @@ void matrix_init_user(void) {
#ifdef BOOTLOADER_CATERINA
   // This will disable the red LEDs on the ProMicros
   setPinInput(D5);
   writePinLow(D5);
   setPinInput(B0);
   writePinLow(B0);
#endif
};


M keyboards/atreus62/keymaps/xyverz/readme.md => keyboards/atreus62/keymaps/xyverz/readme.md +4 -0
@@ 30,6 30,10 @@ The bottom row is fairly Kinesis-ish since the Contour and Advantage keyboards h
### 0.7
 * Brought code up to new standards (as of 27 June 2019).
 * Updated this readme file.
### 0.8
 * Added MACLOCK macro.
### 0.9
 * Updated code to correspond to new setPinInput behaviour.

### TODO:


M keyboards/eco/keymaps/xyverz/keymap.c => keyboards/eco/keymaps/xyverz/keymap.c +1 -3
@@ 132,9 132,7 @@ void matrix_init_user(void) {
#ifdef BOOTLOADER_CATERINA
    // This will disable the red LEDs on the ProMicros
    setPinInput(D5);
    writePinLow(D5);
    setPinInput(B0);
    writePinLow(B0);
#endif
};



@@ 155,4 153,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
        }
    }
    return true;
}
\ No newline at end of file
}

M keyboards/gh60/revc/revc.h => keyboards/gh60/revc/revc.h +5 -5
@@ 18,11 18,11 @@ inline void gh60_fn_led_on(void)        { setPinOutput(F5); writePinLow(F5); }
inline void gh60_esc_led_on(void)       { setPinOutput(F6); writePinLow(F6); }
inline void gh60_wasd_leds_on(void)     { setPinOutput(F7); writePinLow(F7); }

inline void gh60_caps_led_off(void)     { setPinInput(B2); writePinLow(B2); }
inline void gh60_poker_leds_off(void)   { setPinInput(F4); writePinLow(F4); }
inline void gh60_fn_led_off(void)       { setPinInput(F5); writePinLow(F5); }
inline void gh60_esc_led_off(void)      { setPinInput(F6); writePinLow(F6); }
inline void gh60_wasd_leds_off(void)    { setPinInput(F7); writePinLow(F7); }
inline void gh60_caps_led_off(void)     { setPinInput(B2); }
inline void gh60_poker_leds_off(void)   { setPinInput(F4); }
inline void gh60_fn_led_off(void)       { setPinInput(F5); }
inline void gh60_esc_led_off(void)      { setPinInput(F6); }
inline void gh60_wasd_leds_off(void)    { setPinInput(F7); }

/* GH60 keymap definition macro
 * K2C, K31 and  K3C are extra keys for ISO

M keyboards/gingham/matrix.c => keyboards/gingham/matrix.c +1 -1
@@ 150,7 150,7 @@ static void unselect_row(uint8_t row)
static void unselect_rows(void)
{
    for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
        setPinInput(row_pins[x]);
        setPinInputHigh(row_pins[x]);
    }
}


M keyboards/handwired/owlet60/matrix.c => keyboards/handwired/owlet60/matrix.c +1 -4
@@ 215,10 215,7 @@ void matrix_init(void) {
    matrix_init_quantum();

    setPinInput(D5);
   writePinLow(D5);

   setPinInput(B0);
   writePinLow(B0);
    setPinInput(B0);
}

// modified for per col read matrix scan

M keyboards/hineybush/h87a/keymaps/wkl/keymap.c => keyboards/hineybush/h87a/keymaps/wkl/keymap.c +0 -2
@@ 59,7 59,6 @@ void led_set_user(uint8_t usb_led) {
    writePinLow(D5);
  } else {
    setPinInput(D5);
    writePinLow(D5);
  }

  if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {


@@ 67,7 66,6 @@ void led_set_user(uint8_t usb_led) {
    writePinLow(E6);
  } else {
    setPinInput(E6);
    writePinLow(E6);
  }

}

M keyboards/hineybush/h88/h88.c => keyboards/hineybush/h88/h88.c +0 -2
@@ 54,7 54,6 @@ void led_set_user(uint8_t usb_led) {
    writePinLow(D5);
  } else {
    setPinInput(D5);
    writePinLow(D5);
  }

  if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {


@@ 62,7 61,6 @@ void led_set_user(uint8_t usb_led) {
    writePinLow(E6);
  } else {
    setPinInput(E6);
    writePinLow(E6);
  }

}

M keyboards/kbdfans/kbd75/keymaps/tucznak/keymap.c => keyboards/kbdfans/kbd75/keymaps/tucznak/keymap.c +0 -1
@@ 85,6 85,5 @@ void led_set_user(uint8_t usb_led) {
        writePinLow(B2);
    } else {
        setPinInput(B2);
        writePinLow(B2);
    }
}

M keyboards/kmac/matrix.c => keyboards/kmac/matrix.c +1 -1
@@ 140,7 140,7 @@ static void select_col(uint8_t col) {
static void init_pins(void) {
    unselect_cols();
    for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
        setPinInput(row_pins[x]);
        setPinInputHigh(row_pins[x]);
    }

    setPinInputHigh(E2);

M keyboards/minidox/keymaps/xyverz/keymap.c => keyboards/minidox/keymaps/xyverz/keymap.c +1 -3
@@ 169,9 169,7 @@ void matrix_init_user(void) {
#ifdef BOOTLOADER_CATERINA
    // This will disable the red LEDs on the ProMicros
    setPinInput(D5);
    writePinLow(D5);
    setPinInput(B0);
    writePinLow(B0);
#endif
};



@@ 192,4 190,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
        }
    }
    return true;
}
\ No newline at end of file
}

M keyboards/noxary/268_2/268_2.c => keyboards/noxary/268_2/268_2.c +0 -1
@@ 21,7 21,6 @@ void led_set_kb(uint8_t usb_led) {
        writePinHigh(B0);
    } else {
        setPinInput(B0);
        writePinLow(B0);
    }

    led_set_user(usb_led);

M keyboards/orthodox/keymaps/xyverz/keymap.c => keyboards/orthodox/keymaps/xyverz/keymap.c +1 -3
@@ 63,9 63,7 @@ void matrix_init_user(void) {
#ifdef BOOTLOADER_CATERINA
    // This will disable the red LEDs on the ProMicros
    setPinInput(D5);
    writePinLow(D5);
    setPinInput(B0);
    writePinLow(B0);
#endif
};



@@ 86,4 84,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
        }
    }
    return true;
}
\ No newline at end of file
}

M keyboards/yd60mq/yd60mq.c => keyboards/yd60mq/yd60mq.c +0 -1
@@ 6,7 6,6 @@ void led_set_kb(uint8_t usb_led) {
        writePinLow(F4);
    } else {
        setPinInput(F4);
        writePinLow(F4);
	}

    led_set_user(usb_led);

M layouts/community/ortho_4x12/xyverz/keymap.c => layouts/community/ortho_4x12/xyverz/keymap.c +1 -3
@@ 132,9 132,7 @@ void matrix_init_user(void) {
#ifdef BOOTLOADER_CATERINA
    // This will disable the red LEDs on the ProMicros
    setPinInput(D5);
    writePinLow(D5);
    setPinInput(B0);
    writePinLow(B0);
#endif
};



@@ 155,4 153,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
        }
    }
    return true;
}
\ No newline at end of file
}

M layouts/community/ortho_5x12/xyverz/keymap.c => layouts/community/ortho_5x12/xyverz/keymap.c +1 -3
@@ 151,9 151,7 @@ void matrix_init_user(void) {
#ifdef BOOTLOADER_CATERINA
    // This will disable the red LEDs on the ProMicros
    setPinInput(D5);
    writePinLow(D5);
    setPinInput(B0);
    writePinLow(B0);
#endif
};



@@ 174,4 172,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
        }
    }
    return true;
}
\ No newline at end of file
}

M quantum/config_common.h => quantum/config_common.h +1 -1
@@ 132,7 132,7 @@
#    endif

#    ifndef __ASSEMBLER__
#        define _PIN_ADDRESS(p, offset) _SFR_IO8(ADDRESS_BASE + (p >> PORT_SHIFTER) + offset)
#        define _PIN_ADDRESS(p, offset) _SFR_IO8(ADDRESS_BASE + ((p) >> PORT_SHIFTER) + (offset))
// Port X Input Pins Address
#        define PINx_ADDRESS(p) _PIN_ADDRESS(p, 0)
// Port X Data Direction Register,  0:input 1:output

M quantum/quantum.h => quantum/quantum.h +2 -1
@@ 174,7 174,7 @@ extern layer_state_t layer_state;
#if defined(__AVR__)
typedef uint8_t pin_t;

#    define setPinInput(pin) (DDRx_ADDRESS(pin) &= ~_BV((pin)&0xF))
#    define setPinInput(pin) (DDRx_ADDRESS(pin) &= ~_BV((pin)&0xF), PORTx_ADDRESS(pin) &= ~_BV((pin)&0xF))
#    define setPinInputHigh(pin) (DDRx_ADDRESS(pin) &= ~_BV((pin)&0xF), PORTx_ADDRESS(pin) |= _BV((pin)&0xF))
#    define setPinInputLow(pin) _Static_assert(0, "AVR processors cannot implement an input as pull low")
#    define setPinOutput(pin) (DDRx_ADDRESS(pin) |= _BV((pin)&0xF))


@@ 184,6 184,7 @@ typedef uint8_t pin_t;
#    define writePin(pin, level) ((level) ? writePinHigh(pin) : writePinLow(pin))

#    define readPin(pin) ((bool)(PINx_ADDRESS(pin) & _BV((pin)&0xF)))

#elif defined(PROTOCOL_CHIBIOS)
typedef ioline_t pin_t;