(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;
 }