AT KBC: Make sure AMI KBC revisions do not support commands they are not supposed to support.

This commit is contained in:
OBattler
2025-09-03 00:20:20 +02:00
parent 4063ce7739
commit 649f813614

View File

@@ -975,7 +975,7 @@ write_cmd_data_ami(void *priv, uint8_t val)
return 0;
case 0xc1:
kbc_at_log("ATkbc: AMI MegaKey - write %02X to P1\n", val);
kbc_at_log("ATkbc: AMI - write %02X to P1\n", val);
dev->p1 = val;
return 0;
@@ -1160,11 +1160,14 @@ write_cmd_ami(void *priv, uint8_t val)
case 0xaf: /* set extended controller RAM */
if ((kbc_ven != KBC_VEN_SIEMENS) && (kbc_ven != KBC_VEN_ALI)) {
kbc_at_log("ATkbc: set extended controller RAM\n");
dev->wantdata = 1;
dev->state = STATE_KBC_PARAM;
dev->command_phase = 1;
ret = 0;
if (((kbc_ami_revision >= 'H') && (kbc_ami_revision < 'X')) ||
(kbc_ami_revision = '5')) {
kbc_at_log("ATkbc: set extended controller RAM\n");
dev->wantdata = 1;
dev->state = STATE_KBC_PARAM;
dev->command_phase = 1;
ret = 0;
}
}
break;
@@ -1214,27 +1217,33 @@ write_cmd_ami(void *priv, uint8_t val)
break;
case 0xc1: /* write P1 */
kbc_at_log("ATkbc: AMI MegaKey - write P1\n");
kbc_at_log("ATkbc: AMI - write P1\n");
dev->wantdata = 1;
dev->state = STATE_KBC_PARAM;
ret = 0;
break;
case 0xc4:
/* set KBC line P14 low */
kbc_at_log("ATkbc: set KBC line P14 (P1 bit 4) low\n");
dev->p1 &= 0xef;
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
dev->pending++;
ret = 0;
if (((kbc_ami_revision >= 'P') && (kbc_ami_revision < 'X')) ||
(kbc_ami_revision = '5')) {
/* set KBC line P14 low */
kbc_at_log("ATkbc: set KBC line P14 (P1 bit 4) low\n");
dev->p1 &= 0xef;
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
dev->pending++;
ret = 0;
}
break;
case 0xc5:
/* set KBC line P15 low */
kbc_at_log("ATkbc: set KBC line P15 (P1 bit 5) low\n");
dev->p1 &= 0xdf;
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
dev->pending++;
ret = 0;
if (((kbc_ami_revision >= 'P') && (kbc_ami_revision < 'X')) ||
(kbc_ami_revision = '5')) {
/* set KBC line P15 low */
kbc_at_log("ATkbc: set KBC line P15 (P1 bit 5) low\n");
dev->p1 &= 0xdf;
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
dev->pending++;
ret = 0;
}
break;
case 0xc8:
@@ -1271,20 +1280,26 @@ write_cmd_ami(void *priv, uint8_t val)
break;
case 0xcc:
/* set KBC line P14 high */
kbc_at_log("ATkbc: set KBC line P14 (P1 bit 4) high\n");
dev->p1 |= 0x10;
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
dev->pending++;
ret = 0;
if (((kbc_ami_revision >= 'P') && (kbc_ami_revision < 'X')) ||
(kbc_ami_revision = '5')) {
/* set KBC line P14 high */
kbc_at_log("ATkbc: set KBC line P14 (P1 bit 4) high\n");
dev->p1 |= 0x10;
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
dev->pending++;
ret = 0;
}
break;
case 0xcd:
/* set KBC line P15 high */
kbc_at_log("ATkbc: set KBC line P15 (P1 bit 5) high\n");
dev->p1 |= 0x20;
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
dev->pending++;
ret = 0;
if (((kbc_ami_revision >= 'P') && (kbc_ami_revision < 'X')) ||
(kbc_ami_revision = '5')) {
kbc_at_log("ATkbc: set KBC line P15 (P1 bit 5) high\n");
dev->p1 |= 0x20;
kbc_delay_to_ob(dev, dev->ob, 0, 0x00);
dev->pending++;
ret = 0;
}
break;
case 0xef: /* ??? - sent by AMI486 */