#include <linux/platform_device.h>
#include <linux/spi/spi.h>
#include <linux/spi/spi_gpio.h>
-@@ -2885,6 +2886,492 @@ static struct board_info __initdata boar
+@@ -2667,6 +2668,495 @@ static struct board_info __initdata boar
},
};
+};
+static struct board_info __initdata board_HW556_A = {
+ .name = "HW556_A",
++ .of_board_id = "huawei,hg556a-a",
+ .expected_cpu_id = 0x6358,
+
+ .has_uart0 = 1,
+};
+static struct board_info __initdata board_HW556_B = {
+ .name = "HW556_B",
++ .of_board_id = "huawei,hg556a-b",
+ .expected_cpu_id = 0x6358,
+
+ .has_uart0 = 1,
+};
+static struct board_info __initdata board_HW556_C = {
+ .name = "HW556_C",
++ .of_board_id = "huawei,hg556a-c",
+ .expected_cpu_id = 0x6358,
+
+ .has_uart0 = 1,
/* T-Home Speedport W 303V Typ B */
static struct board_info __initdata board_spw303v = {
.name = "96358-502V",
-@@ -3324,6 +3811,10 @@ static const struct board_info __initcon
- &board_nb4_fxc_r2,
+@@ -3105,6 +3595,10 @@ static const struct board_info __initcon
+ &board_nb4_fxc_r1,
&board_ct6373_1,
&board_HW553,
+ &board_HW556,
&board_spw303v,
&board_DVAG3810BN,
#endif
-@@ -3343,13 +3834,37 @@ static void __init boardid_fixup(u8 *boo
- struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
- char *board_name = (char *)bcm63xx_nvram_get_name();
-
-- if (BCMCPU_IS_6358() && (!strcmp(board_name, "96358VW"))) {
-- u8 *p = boot_addr + NB4_PID_OFFSET;
--
-- /* Extract nb4 PID */
-- if (!memcmp(p, "NB4-", 4)) {
-- memcpy(board_name, p, sizeof("NB4-XXX-rX"));
-- return;
-+ if (BCMCPU_IS_6358()) {
-+ if (!strcmp(board_name, "96358VW")) {
-+ u8 *p = boot_addr + NB4_PID_OFFSET;
-+
-+ /* Extract nb4 PID */
-+ if (!memcmp(p, "NB4-", 4)) {
-+ memcpy(board_name, p, sizeof("NB4-XXX-rX"));
-+ return;
-+ }
-+ } else if (!strcmp(board_name, "HW556")) {
-+ /*
-+ * HW556 has different wlan caldatas depending on
-+ * hardware version.
-+ * Detect hardware version and change board id
-+ */
-+ u8 cal_data_ath9k[4] = { 0xa5, 0x5a, 0, 0 };
-+ u8 cal_data_rt3062[4] = { 0x62, 0x30, 1, 0 };
-+
-+ if (!memcmp(boot_addr + 0xeffe00,
-+ &cal_data_rt3062, 4)) {
-+ /* Ralink 0xeffe00 */
-+ memcpy(board_name, "HW556_A", 7);
-+ } else if (!memcmp(boot_addr + 0xf7e000,
-+ &cal_data_ath9k, 4)) {
-+ /* Atheros 0xf7e000 */
-+ memcpy(board_name, "HW556_B", 7);
-+ } else if (!memcmp(boot_addr + 0xefe000,
-+ &cal_data_ath9k, 4)) {
-+ /* Atheros 0xefe000 */
-+ memcpy(board_name, "HW556_C", 7);
-+ }
- }
- }
-
--- a/drivers/mtd/bcm63xxpart.c
+++ b/drivers/mtd/bcm63xxpart.c
-@@ -70,6 +70,11 @@ static int bcm63xx_parse_cfe_partitions(
+@@ -224,6 +224,11 @@ static int bcm63xx_parse_cfe_partitions(
BCM63XX_CFE_BLOCK_SIZE);
cfelen = cfe_erasesize;