led_classdev_unregister(&led->cdev);
        cancel_work_sync(&led->work);
-       gpio_free(led->gpio);
  }
  
 -static int __devinit lt3593_led_probe(struct platform_device *pdev)
 +static int lt3593_led_probe(struct platform_device *pdev)
  {
        struct gpio_led_platform_data *pdata = pdev->dev.platform_data;
        struct lt3593_led_data *leds_data;
 
  {
        device_remove_file(led_dat->cdev.dev, &dev_attr_sata);
        led_classdev_unregister(&led_dat->cdev);
-       gpio_free(led_dat->cmd);
-       gpio_free(led_dat->slow);
  }
  
 -static int __devinit ns2_led_probe(struct platform_device *pdev)
 +#ifdef CONFIG_OF_GPIO
 +/*
 + * Translate OpenFirmware node properties into platform_data.
 + */
 +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;