Fix dual channel detection
This commit is contained in:
parent
cb8a12eed0
commit
b3ee12fcc5
22
kernel.c
22
kernel.c
|
@ -142,7 +142,7 @@ void write_8042(uint8_t data) {
|
|||
}
|
||||
|
||||
bool translation_initially;
|
||||
bool single_channel = false;
|
||||
bool dual_channel;
|
||||
|
||||
uint8_t read_config_8042(void) {
|
||||
command_8042(0x20);
|
||||
|
@ -166,7 +166,7 @@ void init_8042(void) {
|
|||
// Read configuration
|
||||
uint8_t config = read_config_8042();
|
||||
translation_initially = config & (1<<6);
|
||||
single_channel = !(config & (1<<5));
|
||||
dual_channel = config & (1<<5);
|
||||
|
||||
// Disable IRQ
|
||||
config &= ~(1<<0);
|
||||
|
@ -187,16 +187,16 @@ void init_8042(void) {
|
|||
write_8042(config);
|
||||
|
||||
// Determine number of channels
|
||||
if (!single_channel) {
|
||||
command_8042(0xae);
|
||||
single_channel = read_config_8042() & (1<<5);
|
||||
if (!single_channel)
|
||||
if (dual_channel) {
|
||||
command_8042(0xa8);
|
||||
dual_channel = !(read_config_8042() & (1<<5));
|
||||
if (dual_channel)
|
||||
command_8042(0xa7);
|
||||
}
|
||||
if (single_channel)
|
||||
terminal_writestring("Single-channel ps/2 controller\n");
|
||||
else
|
||||
if (dual_channel)
|
||||
terminal_writestring("Dual-channel ps/2 controller\n");
|
||||
else
|
||||
terminal_writestring("Single-channel ps/2 controller\n");
|
||||
|
||||
// Test channels
|
||||
terminal_writestring("Testing channel 1... ");
|
||||
|
@ -205,7 +205,7 @@ void init_8042(void) {
|
|||
terminal_writestring("failed\n");
|
||||
else
|
||||
terminal_writestring("ok\n");
|
||||
if (!single_channel) {
|
||||
if (dual_channel) {
|
||||
terminal_writestring("Testing channel 2... ");
|
||||
command_8042(0xa9);
|
||||
if (read_8042() != 0)
|
||||
|
@ -216,7 +216,7 @@ void init_8042(void) {
|
|||
|
||||
// Enable devices
|
||||
command_8042(0xae);
|
||||
if (!single_channel)
|
||||
if (dual_channel)
|
||||
command_8042(0xa8);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue