(factory-2460.B) Parrot EC firmware ec command returns BCD format
Parrot EC command GET_FIRMWARE_VER(0x51) returns 3 bytes of binary
coded dicimals: MAJOR (0 ~ 9), MINOR (00 ~ 99), REV(00 ~ 99)
BUG=chrome-os-partner:11865
TEST=manual
flash EC spi rom with KBEC010A.ROM (version 0.10A)
VT2 command "mosys ec info" should return:
ENE | KB932 | 00BE010A00
(cherry picked from commit 67f9c3bca19c8a058fdfca60b0c91a09f10fe78d)
Change-Id: I753b98319643fea2d69b86c8e726fe3927b458d8
Reviewed-on: https://gerrit.chromium.org/gerrit/28696
Tested-by: Rong Chang <rongchang@chromium.org>
Commit-Ready: Rong Chang <rongchang@chromium.org>
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/29158
Reviewed-by: Rong Chang <rongchang@chromium.org>
diff --git a/platform/experimental/parrot/ec.c b/platform/experimental/parrot/ec.c
index aa49192..a6562e3 100644
--- a/platform/experimental/parrot/ec.c
+++ b/platform/experimental/parrot/ec.c
@@ -135,14 +135,28 @@
"KB932" : "Unknown";
}
+static void bcd_to_ascii(uint8_t bcd, char *ascii)
+{
+ uint8_t digit;
+
+ /* high nibble first */
+ digit = bcd >> 4;
+ if (digit <= 9)
+ ascii[0] = digit + '0';
+
+ digit = bcd & 0xf;
+ if (digit <= 9)
+ ascii[1] = digit + '0';
+}
+
/**
* Get parrot vendor specific fw version string
*
* Parrot ec firmware version format: '00BEmnnArr'
* '00BE' - hardware type, parrot
* 'mnnA' - m : major, 0 ~ 9
- * nn: minor, 00~99
- * 'rr' - rev, 00~99
+ * nn: minor, 00~99 binary coded dicimal
+ * 'rr' - rev, 00~99 binary coded dicimal
*/
static const char *parrot_ec_fw_version(struct platform_intf *intf)
{
@@ -150,7 +164,7 @@
static char version[11];
if (ene_kb932_detect(intf, parrot_ec_port))
- memcpy(version, "00BE000A00", 11);
+ memcpy(version, "00BExxxAxx", 11);
else
return "Unknown";
@@ -163,19 +177,11 @@
version[4] = major + '0';
}
/* minor range: 00 ~ 99 */
- if (!ec_read(intf, parrot_ec_data, &minor)) {
- if (minor < 100) {
- version[5] = (minor / 10) + '0';
- version[6] = (minor % 10) + '0';
- }
- }
+ if (!ec_read(intf, parrot_ec_data, &minor))
+ bcd_to_ascii(minor, version + 5);
/* rev range: 00 ~ 99 */
- if (!ec_read(intf, parrot_ec_data, &rev)) {
- if (rev < 100) {
- version[5] = (minor / 10) + '0';
- version[6] = (minor % 10) + '0';
- }
- }
+ if (!ec_read(intf, parrot_ec_data, &rev))
+ bcd_to_ascii(rev, version + 8);
return version;
}