#include <linux/kernel.h>
  #include <linux/init.h>
  #include <linux/platform_device.h>
 -#include <linux/mtd/partitions.h>
 -#include <linux/ata_platform.h>
 -#include <linux/spi/flash.h>
 -#include <linux/spi/spi.h>
  #include <linux/mv643xx_eth.h>
  #include <linux/gpio.h>
- #include <linux/gpio-fan.h>
  #include "common.h"
  #include "mpp.h"
  
 
        gpio_free(led_dat->slow);
  }
  
 -static int __devinit
+ #ifdef CONFIG_OF_GPIO
+ /*
+  * Translate OpenFirmware node properties into platform_data.
+  */
 -static int __devinit ns2_led_probe(struct platform_device *pdev)
++static int
+ ns2_leds_get_of_pdata(struct device *dev, struct ns2_led_platform_data *pdata)
+ {
+       struct device_node *np = dev->of_node;
+       struct device_node *child;
+       struct ns2_led *leds;
+       int num_leds = 0;
+       int i = 0;
+ 
+       num_leds = of_get_child_count(np);
+       if (!num_leds)
+               return -ENODEV;
+ 
+       leds = devm_kzalloc(dev, num_leds * sizeof(struct ns2_led),
+                           GFP_KERNEL);
+       if (!leds)
+               return -ENOMEM;
+ 
+       for_each_child_of_node(np, child) {
+               const char *string;
+               int ret;
+ 
+               ret = of_get_named_gpio(child, "cmd-gpio", 0);
+               if (ret < 0)
+                       return ret;
+               leds[i].cmd = ret;
+               ret = of_get_named_gpio(child, "slow-gpio", 0);
+               if (ret < 0)
+                       return ret;
+               leds[i].slow = ret;
+               ret = of_property_read_string(child, "label", &string);
+               leds[i].name = (ret == 0) ? string : child->name;
+               ret = of_property_read_string(child, "linux,default-trigger",
+                                             &string);
+               if (ret == 0)
+                       leds[i].default_trigger = string;
+ 
+               i++;
+       }
+ 
+       pdata->leds = leds;
+       pdata->num_leds = num_leds;
+ 
+       return 0;
+ }
+ 
+ static const struct of_device_id of_ns2_leds_match[] = {
+       { .compatible = "lacie,ns2-leds", },
+       {},
+ };
+ #endif /* CONFIG_OF_GPIO */
+ 
 +static int ns2_led_probe(struct platform_device *pdev)
  {
        struct ns2_led_platform_data *pdata = pdev->dev.platform_data;
        struct ns2_led_data *leds_data;
  
  static struct platform_driver ns2_led_driver = {
        .probe          = ns2_led_probe,
 -      .remove         = __devexit_p(ns2_led_remove),
 +      .remove         = ns2_led_remove,
        .driver         = {
-               .name   = "leds-ns2",
-               .owner  = THIS_MODULE,
+               .name           = "leds-ns2",
+               .owner          = THIS_MODULE,
+               .of_match_table = of_match_ptr(of_ns2_leds_match),
        },
  };