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;
}