oad: handle GFRM210.

Check the type of remote. Serve up one set of firmware
to GFRM200 and a different set to GFRM210 (the earliest
prototypes of which identify themselves as GFRM201).
If the model is something else, skip it and don't try to
download any firmware to it.

Fixes b/29461980

Change-Id: I005c4a84fdd0d233ed99f582925af44f3e0542c9
diff --git a/profiles/oad/oad.c b/profiles/oad/oad.c
index e1a4996..8348431 100644
--- a/profiles/oad/oad.c
+++ b/profiles/oad/oad.c
@@ -69,8 +69,10 @@
 #define OAD_VERSION_BUSY	0xffff
 
 /* remote has 2 processors, 2 firmwares. */
-#define OAD_GP_FIRMWARE		"gfrm200.gp.bin"
-#define OAD_TI_FIRMWARE		"gfrm200.ti.bin"
+#define OAD_GP_FIRMWARE_GFRM200		"gfrm200.gp.bin"
+#define OAD_TI_FIRMWARE_GFRM200		"gfrm200.ti.bin"
+#define OAD_GP_FIRMWARE_GFRM210		"gfrm210.gp.bin"
+#define OAD_TI_FIRMWARE_GFRM210		"gfrm210.ti.bin"
 
 /* remote checks in every 15 minutes */
 #define OAD_UPGRADE_DELAY_SECS		1		// delay between wake and upgrade check
@@ -410,19 +412,40 @@
 
 static void oad_find_firmware(struct oad_device *oaddev)
 {
+	char name[MAX_NAME_LENGTH + 1] = "";
+	const char *tmp_gp;
+	const char *tmp_ti;
+	const char *etc_gp;
+	const char *etc_ti;
+
+	device_get_name(oaddev->device, name, sizeof(name));
+	if (g_strcmp0(name, "GFRM200") == 0) {
+		tmp_gp = "/tmp/" OAD_GP_FIRMWARE_GFRM200;
+		tmp_ti = "/tmp/" OAD_TI_FIRMWARE_GFRM200;
+		etc_gp = "/etc/remote/" OAD_GP_FIRMWARE_GFRM200;
+		etc_ti = "/etc/remote/" OAD_TI_FIRMWARE_GFRM200;
+	} else if (g_strcmp0(name, "GFRM201") == 0 ||
+			g_strcmp0(name, "GFRM210") == 0) {
+		tmp_gp = "/tmp/" OAD_GP_FIRMWARE_GFRM210;
+		tmp_ti = "/tmp/" OAD_TI_FIRMWARE_GFRM210;
+		etc_gp = "/etc/remote/" OAD_GP_FIRMWARE_GFRM210;
+		etc_ti = "/etc/remote/" OAD_TI_FIRMWARE_GFRM210;
+	} else {
+		error("OAD unknown model %s, skipping", name);
+	}
+
 	memset(oaddev->disk, 0, sizeof oaddev->disk);
 
 	/* check in tmp first, to make debugging easier */
-	if (access("/tmp/" OAD_GP_FIRMWARE, R_OK) == 0 ||
-	    access("/tmp/" OAD_TI_FIRMWARE, R_OK) == 0) {
+	if (access(tmp_gp, R_OK) == 0 || access(tmp_ti, R_OK) == 0) {
 		DBG("OAD found firmware in /tmp, ignoring /etc/remote, enabling downgrade.");
 		oaddev->force_upgrade = 1;	// allow downgrade
-		oad_get_firmware_info(oaddev, "/tmp/" OAD_GP_FIRMWARE);
-		oad_get_firmware_info(oaddev, "/tmp/" OAD_TI_FIRMWARE);
+		oad_get_firmware_info(oaddev, tmp_gp);
+		oad_get_firmware_info(oaddev, tmp_ti);
 	} else {
 		oaddev->force_upgrade = 0;
-		oad_get_firmware_info(oaddev, "/etc/remote/" OAD_GP_FIRMWARE);
-		oad_get_firmware_info(oaddev, "/etc/remote/" OAD_TI_FIRMWARE);
+		oad_get_firmware_info(oaddev, etc_gp);
+		oad_get_firmware_info(oaddev, etc_ti);
 	}
 
 	int i;