|
@@ -153,3 +153,91 @@ static void __init net2big_sata_power_init(void)
|
|
if (err)
|
|
if (err)
|
|
gpio_free(NET2BIG_GPIO_SATA_POWER_REQ);
|
|
gpio_free(NET2BIG_GPIO_SATA_POWER_REQ);
|
|
}
|
|
}
|
|
|
|
+ if (err) {
|
|
|
|
+ pr_err("net2big: failed to setup SATA power request GPIO\n");
|
|
|
|
+ goto err_free_2;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (gpio_get_value(NET2BIG_GPIO_SATA0_POWER) &&
|
|
|
|
+ gpio_get_value(NET2BIG_GPIO_SATA1_POWER)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * SATA power up on both disk is done by pulling high the CPLD power
|
|
|
|
+ * request line. The 300ms delay is related to the CPLD clock and is
|
|
|
|
+ * needed to be sure that the CPLD has take into account the low line
|
|
|
|
+ * status.
|
|
|
|
+ */
|
|
|
|
+ msleep(300);
|
|
|
|
+ gpio_set_value(NET2BIG_GPIO_SATA_POWER_REQ, 1);
|
|
|
|
+ pr_info("net2big: power up SATA hard disks\n");
|
|
|
|
+
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+err_free_2:
|
|
|
|
+ gpio_free(NET2BIG_GPIO_SATA1_POWER);
|
|
|
|
+err_free_1:
|
|
|
|
+ gpio_free(NET2BIG_GPIO_SATA0_POWER);
|
|
|
|
+
|
|
|
|
+ return;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/*****************************************************************************
|
|
|
|
+ * GPIO LEDs
|
|
|
|
+ ****************************************************************************/
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * The power front LEDs (blue and red) and SATA red LEDs are controlled via a
|
|
|
|
+ * single GPIO line and are compatible with the leds-gpio driver.
|
|
|
|
+ *
|
|
|
|
+ * The SATA blue LEDs have some hardware blink capabilities which are detailed
|
|
|
|
+ * in the following array:
|
|
|
|
+ *
|
|
|
|
+ * SATAx blue LED | SATAx activity | LED state
|
|
|
|
+ * | |
|
|
|
|
+ * 0 | 0 | blink (rate 300ms)
|
|
|
|
+ * 1 | 0 | off
|
|
|
|
+ * ? | 1 | on
|
|
|
|
+ *
|
|
|
|
+ * Notes: The blue and the red front LED's can't be on at the same time.
|
|
|
|
+ * Blue LED have priority.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+#define NET2BIG_GPIO_PWR_RED_LED 6
|
|
|
|
+#define NET2BIG_GPIO_PWR_BLUE_LED 16
|
|
|
|
+#define NET2BIG_GPIO_PWR_LED_BLINK_STOP 7
|
|
|
|
+
|
|
|
|
+#define NET2BIG_GPIO_SATA0_RED_LED 11
|
|
|
|
+#define NET2BIG_GPIO_SATA1_RED_LED 10
|
|
|
|
+
|
|
|
|
+#define NET2BIG_GPIO_SATA0_BLUE_LED 17
|
|
|
|
+#define NET2BIG_GPIO_SATA1_BLUE_LED 13
|
|
|
|
+
|
|
|
|
+static struct gpio_led net2big_leds[] = {
|
|
|
|
+ {
|
|
|
|
+ .name = "net2big:red:power",
|
|
|
|
+ .gpio = NET2BIG_GPIO_PWR_RED_LED,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = "net2big:blue:power",
|
|
|
|
+ .gpio = NET2BIG_GPIO_PWR_BLUE_LED,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = "net2big:red:sata0",
|
|
|
|
+ .gpio = NET2BIG_GPIO_SATA0_RED_LED,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = "net2big:red:sata1",
|
|
|
|
+ .gpio = NET2BIG_GPIO_SATA1_RED_LED,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct gpio_led_platform_data net2big_led_data = {
|
|
|
|
+ .num_leds = ARRAY_SIZE(net2big_leds),
|
|
|
|
+ .leds = net2big_leds,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device net2big_gpio_leds = {
|
|
|
|
+ .name = "leds-gpio",
|
|
|
|
+ .id = -1,
|