fix cold bootup keyboard issue on the f256k
KBD_OPTICAL (0xf01dc0) is only "valid" on F256K2 hardware. i would assume that this value is unknown on non-F256K2 hardware, thus sometimes you might read some garbage value from here perhaps? what i observed on my f256k was that always on cold bootup (that is, booting from flash) the keyboard would never work. hitting reset or booting from a ram build would not exhibit the same problem. sometimes (somewhat more rarely) kbd_init() would lock up at some point, presumably when it was trying to initialize/scan the non-existent optical keyboard. so far this also *seems* to resolve intermittent issues with reads to the SD card on my f256k locking up. best not to read from those new F256K2 registers on non-K2 devices!
This commit is contained in:
parent
e16eaca30c
commit
47e3489141
|
@ -14,6 +14,7 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "features.h"
|
||||||
#include "interrupt.h"
|
#include "interrupt.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "ring_buffer.h"
|
#include "ring_buffer.h"
|
||||||
|
@ -330,11 +331,20 @@ bool kbd_break() {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
short kbd_sc_init() {
|
short kbd_sc_init() {
|
||||||
|
// NOTE: Reading from the new optical keyboard IO registers on non-F256K2
|
||||||
|
// devices causes odd and sometimes intermittent issues not limited to
|
||||||
|
// the keyboard not working at all right after a cold bootup from flash.
|
||||||
|
// Possibly this can be addressed with future FPGA updates for
|
||||||
|
// non-F256K2 devices, but for now we want to avoid this situation.
|
||||||
|
#if HAS_OPTICAL_KBD_SUPPORT
|
||||||
if (KBD_OPTICAL->status & KBD_OPT_STAT_MECH) {
|
if (KBD_OPTICAL->status & KBD_OPT_STAT_MECH) {
|
||||||
is_optical = false;
|
is_optical = false;
|
||||||
} else {
|
} else {
|
||||||
is_optical = true;
|
is_optical = true;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
is_optical = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Initialize VIA0 -- we'll just read from PB7
|
// Initialize VIA0 -- we'll just read from PB7
|
||||||
via0->ddra = 0x00;
|
via0->ddra = 0x00;
|
||||||
|
|
|
@ -46,6 +46,10 @@
|
||||||
#define HAS_IEC 1
|
#define HAS_IEC 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_F256K2 || MODEL == MODEL_FOENIX_F256K2E
|
||||||
|
#define HAS_OPTICAL_KBD_SUPPORT 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Defaults -----------------------------------------------------------------*/
|
/* Defaults -----------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -93,4 +97,8 @@
|
||||||
#define HAS_IEC 0
|
#define HAS_IEC 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAS_OPTICAL_KBD_SUPPORT
|
||||||
|
#define HAS_OPTICAL_KBD_SUPPORT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in a new issue