Added GFLT300 led driver support

Change-Id: I8bc6d9f7ca905a90385009db2abc7eb7b64628fe
diff --git a/arch/arm/mach-feroceon-kw2/board-gflt110.c b/arch/arm/mach-feroceon-kw2/board-gflt110.c
index 5341efb..db2181d 100644
--- a/arch/arm/mach-feroceon-kw2/board-gflt110.c
+++ b/arch/arm/mach-feroceon-kw2/board-gflt110.c
@@ -9,8 +9,8 @@
 #include <linux/kernel.h>
 #include <linux/platform_device.h>
 #include <linux/sysfs.h>
+#include <linux/ctype.h>
 
-#define BOARD_NAME		"gflt110"
 
 struct gflt_led_data {
 	unsigned gpio;
@@ -29,7 +29,7 @@
 static void gflt_led_brightness_set(struct led_classdev *led_cdev,
 				    enum led_brightness enum_brightness);
 
-static struct gflt_led_data board_gpio_leds[] = {
+static struct gflt_led_data gflt110_board_gpio_leds[] = {
 	{
 		.gpio = 12,
 		.cdev = {
@@ -48,6 +48,27 @@
 	},
 };
 
+static struct gflt_led_data gflt300_board_gpio_leds[] = {
+	{
+		.gpio = 9,
+		.active_low = 1,
+		.cdev = {
+			.name = "sys-blue",
+			.brightness_set = gflt_led_brightness_set,
+			.max_brightness = 100,
+		},
+	},
+	{
+		.gpio = 10,
+		.active_low = 1,
+		.cdev = {
+			.name = "sys-red",
+			.brightness_set = gflt_led_brightness_set,
+			.max_brightness = 100,
+		},
+	},
+};
+
 static void gflt_led_brightness_set(struct led_classdev *led_cdev,
 				    enum led_brightness enum_brightness)
 {
@@ -101,23 +122,48 @@
 	return 0;
 
 err_reg:
-	for (i-- ; i >= 0; i--)
-	{
+	for (i-- ; i >= 0; i--) {
 		led_classdev_unregister(&gflt_leds[i].cdev);
 	}
 	return ret;
 }
 
+#define BOARDNAME_LEN 32
+
 int __init board_init(void)
 {
-	int rc;
 	struct platform_device *pdev;
+	MV_U32 boardID;
+	MV_BOARD_INFO *pBoardInfo;
+	char boardName[BOARDNAME_LEN];
+	int rc, i;
+	char c;
+	struct gflt_led_data *led_data;
+	int led_data_max;
 
+
+	boardID = mvBoardIdGet();
+
+	if ((boardID != GFLT300_ID) && (boardID != GFLT110_ID)) {
+		printk("Unsupported board id:%d\n", boardID);
+		return -1;
+	}
+
+	pBoardInfo = mvBoardInfoGet();
+	for(i = 0; i < (BOARDNAME_LEN -1); i++) {
+		c = pBoardInfo->boardName[i];
+		if (!c)
+			break;
+		boardName[i] = tolower(c);
+	}
+	boardName[i] = 0;
+
+	printk("Detected board id:%x name:%s\n", boardID, boardName);
 	/* /sys/devices/platform/<board_name> */
-	pdev = platform_device_register_simple(BOARD_NAME, -1, NULL, 0);
+	pdev = platform_device_register_simple(boardName, -1, NULL, 0);
 	if (IS_ERR(pdev)) {
 		rc = PTR_ERR(pdev);
-		pr_err(BOARD_NAME ": error %d registering device\n", rc);
+		pr_err("%s: error %d registering device\n", boardName, rc);
 		return rc;
 	}
 
@@ -125,18 +171,22 @@
 	rc = sysfs_create_link(&pdev->dev.parent->kobj, &pdev->dev.kobj,
 			       "board");
 	if (rc)
-		pr_err(BOARD_NAME ": error %d creating link 'board'\n", rc);
+		pr_err("%s: error %d creating link 'board'\n", boardName, rc);
 
 	/* /sys/devices/platform/board/hw_ver */
 	rc = device_create_file(&pdev->dev, &dev_attr_hw_ver);
 	if (rc)
-		pr_err(BOARD_NAME ": error %d creating attribute 'hw_ver'\n",
-			rc);
+		pr_err("%s: error %d creating attribute 'hw_ver'\n", boardName, rc);
 
-	rc = register_gfltleds(pdev, board_gpio_leds, ARRAY_SIZE(board_gpio_leds));
+	led_data = gflt110_board_gpio_leds;
+	led_data_max = ARRAY_SIZE(gflt110_board_gpio_leds);
+	if (boardID == GFLT300_ID) {
+		led_data = gflt300_board_gpio_leds;
+		led_data_max = ARRAY_SIZE(gflt300_board_gpio_leds);
+	}
+	rc = register_gfltleds(pdev, led_data, led_data_max);
 	if (rc)
-		pr_err(BOARD_NAME ": error %d registering GFLT LED device\n",
-			rc);
+		pr_err("%s: error %d registering GFLT LED device\n", boardName, rc);
 
 	return 0;
 }