mmc-utils: one ioctl enough for FFU

FFU upgrade is now done with a single ioctl
MMC_FFU_INVOKE_OP

BUG=None
TEST=Upgrade gnawty with latest sandisk patch.

Change-Id: I104234d83b1a231a04ed1f62d60413624cf5f446
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/224152
diff --git a/mmc.h b/mmc.h
index b338e1d..d571986 100644
--- a/mmc.h
+++ b/mmc.h
@@ -80,8 +80,7 @@
  */
 #define BKOPS_ENABLE	(1<<0)
 
-#define MMC_FFU_DOWNLOAD_OP	302
-#define MMC_FFU_INSTALL_OP	303
+#define MMC_FFU_INVOKE_OP	302
 
 /*
  * EXT_CSD field definitions
diff --git a/mmc_cmds.c b/mmc_cmds.c
index 1793da6..99ad147 100644
--- a/mmc_cmds.c
+++ b/mmc_cmds.c
@@ -1318,40 +1318,12 @@
 
 }
 
-static int ffu_download_image(char *fname, int mmc_fd)
-{
-	struct mmc_ioc_cmd mmc_ioc_cmd;
-
-	/* prepare and send ioctl */
-	memset(&mmc_ioc_cmd, 0, sizeof(mmc_ioc_cmd));
-	mmc_ioc_cmd.opcode = MMC_FFU_DOWNLOAD_OP;
-	mmc_ioc_cmd.blksz = MIN(strlen(fname), FFU_PATH_SIZE);
-	mmc_ioc_cmd.blocks = 1;
-	mmc_ioc_cmd.arg = 0;
-	mmc_ioc_cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
-	mmc_ioc_cmd.write_flag = 1;
-	mmc_ioc_cmd_set_data(mmc_ioc_cmd, fname);
-	return ioctl(mmc_fd, MMC_IOC_CMD, &mmc_ioc_cmd);
-}
-
-static int ffu_install(int mmc_fd)
-{
-	struct mmc_ioc_cmd mmc_ioc_cmd;
-
-	memset(&mmc_ioc_cmd, 0, sizeof(mmc_ioc_cmd));
-	mmc_ioc_cmd.opcode = MMC_FFU_INSTALL_OP;
-	mmc_ioc_cmd.blocks = 0;
-	mmc_ioc_cmd.arg = 0;
-	mmc_ioc_cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
-	mmc_ioc_cmd.write_flag = 0;
-	return ioctl(mmc_fd, MMC_IOC_CMD, &mmc_ioc_cmd);
-}
-
 int do_emmc50_ffu (int nargs, char **argv)
 {
 	int fd, ret;
 	char *device;
 	char *path;
+	struct mmc_ioc_cmd mmc_ioc_cmd;
 
 	CHECK(nargs != 3, "Usage: ffu <image name> </path/to/mmcblkX> \n",
 		exit(1));
@@ -1368,13 +1340,16 @@
 		exit(1);
 	}
 
-	ret = ffu_download_image(path, fd);
-	if (ret) {
-		fprintf(stderr, "FFU download failed : %s\n", strerror(errno));
-		exit(1);
-	}
-
-	ret = ffu_install(fd);
+	/* prepare and send ioctl */
+	memset(&mmc_ioc_cmd, 0, sizeof(mmc_ioc_cmd));
+	mmc_ioc_cmd.opcode = MMC_FFU_INVOKE_OP;
+	mmc_ioc_cmd.blksz = MIN(strlen(path), FFU_PATH_SIZE);
+	mmc_ioc_cmd.blocks = 1;
+	mmc_ioc_cmd.arg = 0;
+	mmc_ioc_cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
+	mmc_ioc_cmd.write_flag = 1;
+	mmc_ioc_cmd_set_data(mmc_ioc_cmd, path);
+	ret = ioctl(fd, MMC_IOC_CMD, &mmc_ioc_cmd);
 	if (ret) {
 		fprintf(stderr, "FFU install failed : %s\n", strerror(errno));
 		exit(1);