From: 黄涛 <huangtao@rock-chips.com>
Date: Mon, 22 Jul 2013 03:35:20 +0000 (+0800)
Subject: fs/partitions: mtdpart: add command line fix for rk emmc
X-Git-Tag: firefly_0821_release~6857^2~9
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=caba97fc051e7d117ea0600220fce5b5f73f2ad4;p=firefly-linux-kernel-4.4.55.git

fs/partitions: mtdpart: add command line fix for rk emmc
---

diff --git a/fs/partitions/mtdpart.c b/fs/partitions/mtdpart.c
index 7e93ddd7026b..b4b353ac7b7b 100644
--- a/fs/partitions/mtdpart.c
+++ b/fs/partitions/mtdpart.c
@@ -311,6 +311,23 @@ static int parse_cmdline_partitions(sector_t n,
 	return 0;
 }
 
+static void rk_emmc_fix(void)
+{
+	const char mode_emmc[] = " androidboot.mode=emmc";
+	const char charger_emmc[] = " androidboot.charger.emmc=1";
+	char *new_command_line;
+	size_t saved_command_line_len = strlen(saved_command_line);
+
+	if (strstr(saved_command_line, "androidboot.mode=charger")) {
+		new_command_line = kzalloc(saved_command_line_len + strlen(charger_emmc) + 1, GFP_KERNEL);
+		sprintf(new_command_line, "%s%s", saved_command_line, charger_emmc);
+	} else {
+		new_command_line = kzalloc(saved_command_line_len + strlen(mode_emmc) + 1, GFP_KERNEL);
+		sprintf(new_command_line, "%s%s", saved_command_line, mode_emmc);
+	}
+	saved_command_line = new_command_line;
+}
+
 int mtdpart_partition(struct parsed_partitions *state)
 {
 	int num_parts = 0, i;
@@ -320,6 +337,9 @@ int mtdpart_partition(struct parsed_partitions *state)
 	if(n < SECTOR_1G)
 		return 0;
 
+	if (state->bdev->bd_disk->major != MMC_BLOCK_MAJOR || state->bdev->bd_disk->first_minor != 0)
+		return 0;
+
 	cmdline = strstr(saved_command_line, "mtdparts=") + 9;
 	
 	num_parts = parse_cmdline_partitions(n, &parts, 0);
@@ -336,6 +356,8 @@ int mtdpart_partition(struct parsed_partitions *state)
 				parts[i].size / 2048);
 	}
 
+	rk_emmc_fix();
+
 	return 1;
 }