Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 15 Dec 2012 20:52:42 +0000 (12:52 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 15 Dec 2012 20:52:42 +0000 (12:52 -0800)
Pull LED subsystem update from Bryan Wu.

* 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/linux-leds: (47 commits)
  leds: leds-lp5521: return an error code on error in probe()
  leds: leds-clevo-mail: Use pr_* instead of printks
  leds: leds-rb532: Fix checkpatch errors
  leds: led-triggers: Fix checkpatch warnings
  leds: ledtrig-backlight: Fix checkpatch error
  leds: leds-wrap: Use <linux/io.h> instead of <asm/io.h>
  leds: leds-wm8350: Use dev_err instead of printk
  leds: leds-pwm: Fix checkpatch warning
  leds: leds-pca955x: Use dev_info instead of printk
  leds: leds-net48xx: Use linux/io.h instead of asm/io.h
  leds: leds-lt3593: Fix checkpatch warnings
  leds: leds-gpio: Use dev_info instead of printk
  leds: leds-da903x: Fix checkpatch error and warnings
  leds: leds-bd2802: Fix checkpatch warnings
  leds: leds-adp5520: Fix checkpatch warnings
  leds: led-class: Fix checkpatch warning
  leds: leds-ns2: use devm_gpio_request_one
  leds: leds-lt3593: use devm_gpio_request_one
  leds: leds-gpio: use devm_gpio_request_one
  leds: lp3944: Fix return value
  ...

20 files changed:
1  2 
drivers/leds/leds-adp5520.c
drivers/leds/leds-bd2802.c
drivers/leds/leds-clevo-mail.c
drivers/leds/leds-cobalt-qube.c
drivers/leds/leds-cobalt-raq.c
drivers/leds/leds-da903x.c
drivers/leds/leds-gpio.c
drivers/leds/leds-lm355x.c
drivers/leds/leds-lm3642.c
drivers/leds/leds-lp3944.c
drivers/leds/leds-lp5521.c
drivers/leds/leds-lp5523.c
drivers/leds/leds-lt3593.c
drivers/leds/leds-netxbig.c
drivers/leds/leds-ns2.c
drivers/leds/leds-pca955x.c
drivers/leds/leds-pwm.c
drivers/leds/leds-rb532.c
drivers/leds/leds-renesas-tpu.c
drivers/leds/leds-ss4200.c

@@@ -5,10 -5,10 +5,10 @@@
   *
   * Loosely derived from leds-da903x:
   * Copyright (C) 2008 Compulab, Ltd.
-  *    Mike Rapoport <mike@compulab.co.il>
+  *    Mike Rapoport <mike@compulab.co.il>
   *
   * Copyright (C) 2006-2008 Marvell International Ltd.
-  *    Eric Miao <eric.miao@marvell.com>
+  *    Eric Miao <eric.miao@marvell.com>
   *
   * Licensed under the GPL-2 or later.
   */
@@@ -85,7 -85,7 +85,7 @@@ static int adp5520_led_setup(struct adp
        return ret;
  }
  
 -static int __devinit adp5520_led_prepare(struct platform_device *pdev)
 +static int adp5520_led_prepare(struct platform_device *pdev)
  {
        struct adp5520_leds_platform_data *pdata = pdev->dev.platform_data;
        struct device *dev = pdev->dev.parent;
        return ret;
  }
  
 -static int __devinit adp5520_led_probe(struct platform_device *pdev)
 +static int adp5520_led_probe(struct platform_device *pdev)
  {
        struct adp5520_leds_platform_data *pdata = pdev->dev.platform_data;
        struct adp5520_led *led, *led_dat;
@@@ -183,7 -183,7 +183,7 @@@ err
        return ret;
  }
  
 -static int __devexit adp5520_led_remove(struct platform_device *pdev)
 +static int adp5520_led_remove(struct platform_device *pdev)
  {
        struct adp5520_leds_platform_data *pdata = pdev->dev.platform_data;
        struct adp5520_led *led;
@@@ -208,7 -208,7 +208,7 @@@ static struct platform_driver adp5520_l
                .owner  = THIS_MODULE,
        },
        .probe          = adp5520_led_probe,
 -      .remove         = __devexit_p(adp5520_led_remove),
 +      .remove         = adp5520_led_remove,
  };
  
  module_platform_driver(adp5520_led_driver);
@@@ -26,8 -26,8 +26,8 @@@
  #define BD2802_LED_OFFSET             0xa
  #define BD2802_COLOR_OFFSET           0x3
  
- #define BD2802_REG_CLKSETUP           0x00
- #define BD2802_REG_CONTROL            0x01
+ #define BD2802_REG_CLKSETUP           0x00
+ #define BD2802_REG_CONTROL            0x01
  #define BD2802_REG_HOURSETUP          0x02
  #define BD2802_REG_CURRENT1SETUP      0x03
  #define BD2802_REG_CURRENT2SETUP      0x04
@@@ -93,7 -93,7 +93,7 @@@ struct bd2802_led 
         * In ADF mode, user can set registers of BD2802GU directly,
         * therefore BD2802GU doesn't enter reset state.
         */
-       int                             adf_on;
+       int                             adf_on;
  
        enum led_ids                    led_id;
        enum led_colors                 color;
@@@ -328,7 -328,7 +328,7 @@@ static ssize_t bd2802_store_reg##reg_ad
        int ret;                                                        \
        if (!count)                                                     \
                return -EINVAL;                                         \
-       ret = strict_strtoul(buf, 16, &val);                            \
+       ret = kstrtoul(buf, 16, &val);                                  \
        if (ret)                                                        \
                return ret;                                             \
        down_write(&led->rwsem);                                        \
@@@ -492,7 -492,7 +492,7 @@@ static ssize_t bd2802_store_##attr_name
        int ret;                                                        \
        if (!count)                                                     \
                return -EINVAL;                                         \
-       ret = strict_strtoul(buf, 16, &val);                            \
+       ret = kstrtoul(buf, 16, &val);                                  \
        if (ret)                                                        \
                return ret;                                             \
        down_write(&led->rwsem);                                        \
@@@ -670,7 -670,7 +670,7 @@@ static void bd2802_unregister_led_class
        led_classdev_unregister(&led->cdev_led1r);
  }
  
 -static int __devinit bd2802_probe(struct i2c_client *client,
 +static int bd2802_probe(struct i2c_client *client,
                        const struct i2c_device_id *id)
  {
        struct bd2802_led *led;
@@@ -1,3 -1,4 +1,4 @@@
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  
  #include <linux/module.h>
  
@@@ -26,7 -27,7 +27,7 @@@ static struct platform_device *pdev
  
  static int __init clevo_mail_led_dmi_callback(const struct dmi_system_id *id)
  {
-       printk(KERN_INFO KBUILD_MODNAME ": '%s' found\n", id->ident);
+       pr_info("'%s' found\n", id->ident);
        return 1;
  }
  
@@@ -135,8 -136,7 +136,7 @@@ static int clevo_mail_led_blink(struct 
                status = 0;
  
        } else {
-               printk(KERN_DEBUG KBUILD_MODNAME
-                      ": clevo_mail_led_blink(..., %lu, %lu),"
+               pr_debug("clevo_mail_led_blink(..., %lu, %lu),"
                       " returning -EINVAL (unsupported)\n",
                       *delay_on, *delay_off);
        }
@@@ -153,7 -153,7 +153,7 @@@ static struct led_classdev clevo_mail_l
        .flags                  = LED_CORE_SUSPENDRESUME,
  };
  
 -static int __devinit clevo_mail_led_probe(struct platform_device *pdev)
 +static int clevo_mail_led_probe(struct platform_device *pdev)
  {
        return led_classdev_register(&pdev->dev, &clevo_mail_led);
  }
@@@ -183,7 -183,7 +183,7 @@@ static int __init clevo_mail_led_init(v
                count = dmi_check_system(clevo_mail_led_dmi_table);
        } else {
                count = 1;
-               printk(KERN_ERR KBUILD_MODNAME ": Skipping DMI detection. "
+               pr_err("Skipping DMI detection. "
                       "If the driver works on your hardware please "
                       "report model and the output of dmidecode in tracker "
                       "at http://sourceforge.net/projects/clevo-mailled/\n");
                error = platform_driver_probe(&clevo_mail_led_driver,
                                              clevo_mail_led_probe);
                if (error) {
-                       printk(KERN_ERR KBUILD_MODNAME
-                              ": Can't probe platform driver\n");
+                       pr_err("Can't probe platform driver\n");
                        platform_device_unregister(pdev);
                }
        } else
@@@ -34,7 -34,7 +34,7 @@@ static struct led_classdev qube_front_l
        .default_trigger        = "default-on",
  };
  
 -static int __devinit cobalt_qube_led_probe(struct platform_device *pdev)
 +static int cobalt_qube_led_probe(struct platform_device *pdev)
  {
        struct resource *res;
        int retval;
@@@ -43,7 -43,7 +43,7 @@@
        if (!res)
                return -EBUSY;
  
-       led_port = ioremap(res->start, resource_size(res));
+       led_port = devm_ioremap(&pdev->dev, res->start, resource_size(res));
        if (!led_port)
                return -ENOMEM;
  
  
        retval = led_classdev_register(&pdev->dev, &qube_front_led);
        if (retval)
-               goto err_iounmap;
+               goto err_null;
  
        return 0;
  
- err_iounmap:
-       iounmap(led_port);
+ err_null:
        led_port = NULL;
  
        return retval;
  }
  
 -static int __devexit cobalt_qube_led_remove(struct platform_device *pdev)
 +static int cobalt_qube_led_remove(struct platform_device *pdev)
  {
        led_classdev_unregister(&qube_front_led);
  
-       if (led_port) {
-               iounmap(led_port);
+       if (led_port)
                led_port = NULL;
-       }
  
        return 0;
  }
  
  static struct platform_driver cobalt_qube_led_driver = {
        .probe  = cobalt_qube_led_probe,
 -      .remove = __devexit_p(cobalt_qube_led_remove),
 +      .remove = cobalt_qube_led_remove,
        .driver = {
                .name   = "cobalt-qube-leds",
                .owner  = THIS_MODULE,
@@@ -76,7 -76,7 +76,7 @@@ static struct led_classdev raq_power_of
        .default_trigger        = "power-off",
  };
  
 -static int __devinit cobalt_raq_led_probe(struct platform_device *pdev)
 +static int cobalt_raq_led_probe(struct platform_device *pdev)
  {
        struct resource *res;
        int retval;
        if (!res)
                return -EBUSY;
  
-       led_port = ioremap(res->start, resource_size(res));
+       led_port = devm_ioremap(&pdev->dev, res->start, resource_size(res));
        if (!led_port)
                return -ENOMEM;
  
        retval = led_classdev_register(&pdev->dev, &raq_power_off_led);
        if (retval)
-               goto err_iounmap;
+               goto err_null;
  
        retval = led_classdev_register(&pdev->dev, &raq_web_led);
        if (retval)
  err_unregister:
        led_classdev_unregister(&raq_power_off_led);
  
- err_iounmap:
-       iounmap(led_port);
+ err_null:
        led_port = NULL;
  
        return retval;
  }
  
 -static int __devexit cobalt_raq_led_remove(struct platform_device *pdev)
 +static int cobalt_raq_led_remove(struct platform_device *pdev)
  {
        led_classdev_unregister(&raq_power_off_led);
        led_classdev_unregister(&raq_web_led);
  
-       if (led_port) {
-               iounmap(led_port);
+       if (led_port)
                led_port = NULL;
-       }
  
        return 0;
  }
  
  static struct platform_driver cobalt_raq_led_driver = {
        .probe  = cobalt_raq_led_probe,
 -      .remove = __devexit_p(cobalt_raq_led_remove),
 +      .remove = cobalt_raq_led_remove,
        .driver = {
                .name   = "cobalt-raq-leds",
                .owner  = THIS_MODULE,
@@@ -2,10 -2,10 +2,10 @@@
   * LEDs driver for Dialog Semiconductor DA9030/DA9034
   *
   * Copyright (C) 2008 Compulab, Ltd.
-  *    Mike Rapoport <mike@compulab.co.il>
+  *    Mike Rapoport <mike@compulab.co.il>
   *
   * Copyright (C) 2006-2008 Marvell International Ltd.
-  *    Eric Miao <eric.miao@marvell.com>
+  *    Eric Miao <eric.miao@marvell.com>
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
@@@ -85,13 -85,13 +85,13 @@@ static void da903x_led_set(struct led_c
                           enum led_brightness value)
  {
        struct da903x_led *led;
-       
        led = container_of(led_cdev, struct da903x_led, cdev);
        led->new_brightness = value;
        schedule_work(&led->work);
  }
  
 -static int __devinit da903x_led_probe(struct platform_device *pdev)
 +static int da903x_led_probe(struct platform_device *pdev)
  {
        struct led_info *pdata = pdev->dev.platform_data;
        struct da903x_led *led;
        return 0;
  }
  
 -static int __devexit da903x_led_remove(struct platform_device *pdev)
 +static int da903x_led_remove(struct platform_device *pdev)
  {
        struct da903x_led *led = platform_get_drvdata(pdev);
  
@@@ -150,13 -150,13 +150,13 @@@ static struct platform_driver da903x_le
                .owner  = THIS_MODULE,
        },
        .probe          = da903x_led_probe,
 -      .remove         = __devexit_p(da903x_led_remove),
 +      .remove         = da903x_led_remove,
  };
  
  module_platform_driver(da903x_led_driver);
  
  MODULE_DESCRIPTION("LEDs driver for Dialog Semiconductor DA9030/DA9034");
- MODULE_AUTHOR("Eric Miao <eric.miao@marvell.com>"
            "Mike Rapoport <mike@compulab.co.il>");
+ MODULE_AUTHOR("Eric Miao <eric.miao@marvell.com>");
MODULE_AUTHOR("Mike Rapoport <mike@compulab.co.il>");
  MODULE_LICENSE("GPL");
  MODULE_ALIAS("platform:da903x-led");
diff --combined drivers/leds/leds-gpio.c
@@@ -21,6 -21,7 +21,7 @@@
  #include <linux/workqueue.h>
  #include <linux/module.h>
  #include <linux/pinctrl/consumer.h>
+ #include <linux/err.h>
  
  struct gpio_led_data {
        struct led_classdev cdev;
@@@ -91,7 -92,7 +92,7 @@@ static int gpio_blink_set(struct led_cl
                                                delay_on, delay_off);
  }
  
 -static int __devinit create_gpio_led(const struct gpio_led *template,
 +static int create_gpio_led(const struct gpio_led *template,
        struct gpio_led_data *led_dat, struct device *parent,
        int (*blink_set)(unsigned, int, unsigned long *, unsigned long *))
  {
  
        /* skip leds that aren't available */
        if (!gpio_is_valid(template->gpio)) {
-               printk(KERN_INFO "Skipping unavailable LED gpio %d (%s)\n",
+               dev_info(parent, "Skipping unavailable LED gpio %d (%s)\n",
                                template->gpio, template->name);
                return 0;
        }
  
-       ret = gpio_request(template->gpio, template->name);
-       if (ret < 0)
-               return ret;
        led_dat->cdev.name = template->name;
        led_dat->cdev.default_trigger = template->default_trigger;
        led_dat->gpio = template->gpio;
        if (!template->retain_state_suspended)
                led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
  
-       ret = gpio_direction_output(led_dat->gpio, led_dat->active_low ^ state);
+       ret = devm_gpio_request_one(parent, template->gpio,
+                       GPIOF_DIR_OUT | (led_dat->active_low ^ state),
+                       template->name);
        if (ret < 0)
-               goto err;
-               
+               return ret;
        INIT_WORK(&led_dat->work, gpio_led_work);
  
        ret = led_classdev_register(parent, &led_dat->cdev);
        if (ret < 0)
-               goto err;
+               return ret;
  
        return 0;
- err:
-       gpio_free(led_dat->gpio);
-       return ret;
  }
  
  static void delete_gpio_led(struct gpio_led_data *led)
                return;
        led_classdev_unregister(&led->cdev);
        cancel_work_sync(&led->work);
-       gpio_free(led->gpio);
  }
  
  struct gpio_leds_priv {
@@@ -167,7 -162,7 +162,7 @@@ static inline int sizeof_gpio_leds_priv
  
  /* Code to create from OpenFirmware platform devices */
  #ifdef CONFIG_OF_GPIO
 -static struct gpio_leds_priv * __devinit gpio_leds_create_of(struct platform_device *pdev)
 +static struct gpio_leds_priv *gpio_leds_create_of(struct platform_device *pdev)
  {
        struct device_node *np = pdev->dev.of_node, *child;
        struct gpio_leds_priv *priv;
        /* count LEDs in this device, so we know how much to allocate */
        count = of_get_child_count(np);
        if (!count)
-               return NULL;
+               return ERR_PTR(-ENODEV);
+       for_each_child_of_node(np, child)
+               if (of_get_gpio(child, 0) == -EPROBE_DEFER)
+                       return ERR_PTR(-EPROBE_DEFER);
  
        priv = devm_kzalloc(&pdev->dev, sizeof_gpio_leds_priv(count),
                        GFP_KERNEL);
        if (!priv)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
  
        for_each_child_of_node(np, child) {
                struct gpio_led led = {};
  err:
        for (count = priv->num_leds - 2; count >= 0; count--)
                delete_gpio_led(&priv->leds[count]);
-       return NULL;
+       return ERR_PTR(-ENODEV);
  }
  
  static const struct of_device_id of_gpio_leds_match[] = {
        {},
  };
  #else /* CONFIG_OF_GPIO */
 -static struct gpio_leds_priv * __devinit gpio_leds_create_of(struct platform_device *pdev)
 +static struct gpio_leds_priv *gpio_leds_create_of(struct platform_device *pdev)
  {
-       return NULL;
+       return ERR_PTR(-ENODEV);
  }
  #endif /* CONFIG_OF_GPIO */
  
  
 -static int __devinit gpio_led_probe(struct platform_device *pdev)
 +static int gpio_led_probe(struct platform_device *pdev)
  {
        struct gpio_led_platform_data *pdata = pdev->dev.platform_data;
        struct gpio_leds_priv *priv;
                }
        } else {
                priv = gpio_leds_create_of(pdev);
-               if (!priv)
-                       return -ENODEV;
+               if (IS_ERR(priv))
+                       return PTR_ERR(priv);
        }
  
        platform_set_drvdata(pdev, priv);
        return 0;
  }
  
 -static int __devexit gpio_led_remove(struct platform_device *pdev)
 +static int gpio_led_remove(struct platform_device *pdev)
  {
        struct gpio_leds_priv *priv = platform_get_drvdata(pdev);
        int i;
  
  static struct platform_driver gpio_led_driver = {
        .probe          = gpio_led_probe,
 -      .remove         = __devexit_p(gpio_led_remove),
 +      .remove         = gpio_led_remove,
        .driver         = {
                .name   = "leds-gpio",
                .owner  = THIS_MODULE,
@@@ -168,7 -168,7 +168,7 @@@ static char lm355x_name[][I2C_NAME_SIZE
  };
  
  /* chip initialize */
 -static int __devinit lm355x_chip_init(struct lm355x_chip_data *chip)
 +static int lm355x_chip_init(struct lm355x_chip_data *chip)
  {
        int ret;
        unsigned int reg_val;
@@@ -408,10 -408,10 +408,10 @@@ static ssize_t lm3556_indicator_pattern
        return size;
  out:
        dev_err(chip->dev, "%s:i2c access fail to register\n", __func__);
-       return size;
+       return ret;
  }
  
- static DEVICE_ATTR(pattern, 0666, NULL, lm3556_indicator_pattern_store);
+ static DEVICE_ATTR(pattern, S_IWUSR, NULL, lm3556_indicator_pattern_store);
  
  static const struct regmap_config lm355x_regmap = {
        .reg_bits = 8,
  };
  
  /* module initialize */
 -static int __devinit lm355x_probe(struct i2c_client *client,
 +static int lm355x_probe(struct i2c_client *client,
                                  const struct i2c_device_id *id)
  {
        struct lm355x_platform_data *pdata = client->dev.platform_data;
@@@ -526,7 -526,7 +526,7 @@@ err_out
        return err;
  }
  
 -static int __devexit lm355x_remove(struct i2c_client *client)
 +static int lm355x_remove(struct i2c_client *client)
  {
        struct lm355x_chip_data *chip = i2c_get_clientdata(client);
        struct lm355x_reg_data *preg = chip->regs;
@@@ -560,7 -560,7 +560,7 @@@ static struct i2c_driver lm355x_i2c_dri
                   .pm = NULL,
                   },
        .probe = lm355x_probe,
 -      .remove = __devexit_p(lm355x_remove),
 +      .remove = lm355x_remove,
        .id_table = lm355x_id,
  };
  
@@@ -93,7 -93,7 +93,7 @@@ struct lm3642_chip_data 
  };
  
  /* chip initialize */
 -static int __devinit lm3642_chip_init(struct lm3642_chip_data *chip)
 +static int lm3642_chip_init(struct lm3642_chip_data *chip)
  {
        int ret;
        struct lm3642_platform_data *pdata = chip->pdata;
@@@ -201,13 -201,13 +201,13 @@@ static ssize_t lm3642_torch_pin_store(s
        return size;
  out:
        dev_err(chip->dev, "%s:i2c access fail to register\n", __func__);
-       return size;
+       return ret;
  out_strtoint:
        dev_err(chip->dev, "%s: fail to change str to int\n", __func__);
-       return size;
+       return ret;
  }
  
- static DEVICE_ATTR(torch_pin, 0666, NULL, lm3642_torch_pin_store);
+ static DEVICE_ATTR(torch_pin, S_IWUSR, NULL, lm3642_torch_pin_store);
  
  static void lm3642_deferred_torch_brightness_set(struct work_struct *work)
  {
@@@ -258,13 -258,13 +258,13 @@@ static ssize_t lm3642_strobe_pin_store(
        return size;
  out:
        dev_err(chip->dev, "%s:i2c access fail to register\n", __func__);
-       return size;
+       return ret;
  out_strtoint:
        dev_err(chip->dev, "%s: fail to change str to int\n", __func__);
-       return size;
+       return ret;
  }
  
- static DEVICE_ATTR(strobe_pin, 0666, NULL, lm3642_strobe_pin_store);
+ static DEVICE_ATTR(strobe_pin, S_IWUSR, NULL, lm3642_strobe_pin_store);
  
  static void lm3642_deferred_strobe_brightness_set(struct work_struct *work)
  {
@@@ -313,7 -313,7 +313,7 @@@ static const struct regmap_config lm364
        .max_register = REG_MAX,
  };
  
 -static int __devinit lm3642_probe(struct i2c_client *client,
 +static int lm3642_probe(struct i2c_client *client,
                                  const struct i2c_device_id *id)
  {
        struct lm3642_platform_data *pdata = client->dev.platform_data;
@@@ -420,7 -420,7 +420,7 @@@ err_out
        return err;
  }
  
 -static int __devexit lm3642_remove(struct i2c_client *client)
 +static int lm3642_remove(struct i2c_client *client)
  {
        struct lm3642_chip_data *chip = i2c_get_clientdata(client);
  
@@@ -450,7 -450,7 +450,7 @@@ static struct i2c_driver lm3642_i2c_dri
                   .pm = NULL,
                   },
        .probe = lm3642_probe,
 -      .remove = __devexit_p(lm3642_remove),
 +      .remove = lm3642_remove,
        .id_table = lm3642_id,
  };
  
@@@ -86,7 -86,7 +86,7 @@@ static int lp3944_reg_read(struct i2c_c
  
        tmp = i2c_smbus_read_byte_data(client, reg);
        if (tmp < 0)
-               return -EINVAL;
+               return tmp;
  
        *value = tmp;
  
@@@ -374,7 -374,7 +374,7 @@@ exit
        return err;
  }
  
 -static int __devinit lp3944_probe(struct i2c_client *client,
 +static int lp3944_probe(struct i2c_client *client,
                                  const struct i2c_device_id *id)
  {
        struct lp3944_platform_data *lp3944_pdata = client->dev.platform_data;
        return 0;
  }
  
 -static int __devexit lp3944_remove(struct i2c_client *client)
 +static int lp3944_remove(struct i2c_client *client)
  {
        struct lp3944_platform_data *pdata = client->dev.platform_data;
        struct lp3944_data *data = i2c_get_clientdata(client);
@@@ -446,7 -446,7 +446,7 @@@ static struct i2c_driver lp3944_driver 
                   .name = "lp3944",
        },
        .probe    = lp3944_probe,
 -      .remove   = __devexit_p(lp3944_remove),
 +      .remove   = lp3944_remove,
        .id_table = lp3944_id,
  };
  
@@@ -152,7 -152,7 +152,7 @@@ static int lp5521_read(struct i2c_clien
  
        ret = i2c_smbus_read_byte_data(client, reg);
        if (ret < 0)
-               return -EIO;
+               return ret;
  
        *buf = ret;
        return 0;
@@@ -616,7 -616,7 +616,7 @@@ static ssize_t store_led_pattern(struc
        unsigned long val;
        int ret;
  
-       ret = strict_strtoul(buf, 16, &val);
+       ret = kstrtoul(buf, 16, &val);
        if (ret)
                return ret;
  
@@@ -687,7 -687,7 +687,7 @@@ static void lp5521_unregister_sysfs(str
                                &lp5521_led_attribute_group);
  }
  
 -static int __devinit lp5521_init_led(struct lp5521_led *led,
 +static int lp5521_init_led(struct lp5521_led *led,
                                struct i2c_client *client,
                                int chan, struct lp5521_platform_data *pdata)
  {
        return 0;
  }
  
 -static int __devinit lp5521_probe(struct i2c_client *client,
 +static int lp5521_probe(struct i2c_client *client,
                        const struct i2c_device_id *id)
  {
        struct lp5521_chip              *chip;
         * LP5521_REG_ENABLE register will not have any effect - strange!
         */
        ret = lp5521_read(client, LP5521_REG_R_CURRENT, &buf);
-       if (ret || buf != LP5521_REG_R_CURR_DEFAULT) {
+       if (ret) {
                dev_err(&client->dev, "error in resetting chip\n");
                goto fail2;
        }
+       if (buf != LP5521_REG_R_CURR_DEFAULT) {
+               dev_err(&client->dev,
+                       "unexpected data in register (expected 0x%x got 0x%x)\n",
+                       LP5521_REG_R_CURR_DEFAULT, buf);
+               ret = -EINVAL;
+               goto fail2;
+       }
        usleep_range(10000, 20000);
  
        ret = lp5521_detect(client);
@@@ -855,7 -862,7 +862,7 @@@ fail1
        return ret;
  }
  
 -static int __devexit lp5521_remove(struct i2c_client *client)
 +static int lp5521_remove(struct i2c_client *client)
  {
        struct lp5521_chip *chip = i2c_get_clientdata(client);
        int i;
@@@ -886,7 -893,7 +893,7 @@@ static struct i2c_driver lp5521_driver 
                .name   = "lp5521",
        },
        .probe          = lp5521_probe,
 -      .remove         = __devexit_p(lp5521_remove),
 +      .remove         = lp5521_remove,
        .id_table       = lp5521_id,
  };
  
@@@ -171,7 -171,7 +171,7 @@@ static int lp5523_read(struct i2c_clien
        s32 ret = i2c_smbus_read_byte_data(client, reg);
  
        if (ret < 0)
-               return -EIO;
+               return ret;
  
        *buf = ret;
        return 0;
@@@ -248,7 -248,10 +248,10 @@@ static int lp5523_configure(struct i2c_
  
        /* Let the programs run for couple of ms and check the engine status */
        usleep_range(3000, 6000);
-       lp5523_read(client, LP5523_REG_STATUS, &status);
+       ret = lp5523_read(client, LP5523_REG_STATUS, &status);
+       if (ret < 0)
+               return ret;
        status &= LP5523_ENG_STATUS_MASK;
  
        if (status == LP5523_ENG_STATUS_MASK) {
@@@ -464,10 -467,16 +467,16 @@@ static ssize_t lp5523_selftest(struct d
                                    LP5523_EN_LEDTEST | 16);
        usleep_range(3000, 6000); /* ADC conversion time is typically 2.7 ms */
        ret = lp5523_read(chip->client, LP5523_REG_STATUS, &status);
+       if (ret < 0)
+               goto fail;
        if (!(status & LP5523_LEDTEST_DONE))
                usleep_range(3000, 6000); /* Was not ready. Wait little bit */
  
-       ret |= lp5523_read(chip->client, LP5523_REG_LED_TEST_ADC, &vdd);
+       ret = lp5523_read(chip->client, LP5523_REG_LED_TEST_ADC, &vdd);
+       if (ret < 0)
+               goto fail;
        vdd--;  /* There may be some fluctuation in measurement */
  
        for (i = 0; i < LP5523_LEDS; i++) {
                /* ADC conversion time is 2.7 ms typically */
                usleep_range(3000, 6000);
                ret = lp5523_read(chip->client, LP5523_REG_STATUS, &status);
+               if (ret < 0)
+                       goto fail;
                if (!(status & LP5523_LEDTEST_DONE))
                        usleep_range(3000, 6000);/* Was not ready. Wait. */
-               ret |= lp5523_read(chip->client, LP5523_REG_LED_TEST_ADC, &adc);
+               ret = lp5523_read(chip->client, LP5523_REG_LED_TEST_ADC, &adc);
+               if (ret < 0)
+                       goto fail;
  
                if (adc >= vdd || adc < LP5523_ADC_SHORTCIRC_LIM)
                        pos += sprintf(buf + pos, "LED %d FAIL\n", i);
@@@ -696,7 -710,7 +710,7 @@@ static ssize_t store_current(struct dev
        ssize_t ret;
        unsigned long curr;
  
-       if (strict_strtoul(buf, 0, &curr))
+       if (kstrtoul(buf, 0, &curr))
                return -EINVAL;
  
        if (curr > led->max_current)
@@@ -833,7 -847,7 +847,7 @@@ static int __init lp5523_init_engine(st
        return 0;
  }
  
 -static int __devinit lp5523_init_led(struct lp5523_led *led, struct device *dev,
 +static int lp5523_init_led(struct lp5523_led *led, struct device *dev,
                           int chan, struct lp5523_platform_data *pdata,
                           const char *chip_name)
  {
        return 0;
  }
  
 -static int __devinit lp5523_probe(struct i2c_client *client,
 +static int lp5523_probe(struct i2c_client *client,
                        const struct i2c_device_id *id)
  {
        struct lp5523_chip              *chip;
@@@ -82,22 -82,18 +82,18 @@@ static void lt3593_led_set(struct led_c
        schedule_work(&led_dat->work);
  }
  
 -static int __devinit create_lt3593_led(const struct gpio_led *template,
 +static int create_lt3593_led(const struct gpio_led *template,
        struct lt3593_led_data *led_dat, struct device *parent)
  {
        int ret, state;
  
        /* skip leds on GPIOs that aren't available */
        if (!gpio_is_valid(template->gpio)) {
-               printk(KERN_INFO "%s: skipping unavailable LT3593 LED at gpio %d (%s)\n",
+               dev_info(parent, "%s: skipping unavailable LT3593 LED at gpio %d (%s)\n",
                                KBUILD_MODNAME, template->gpio, template->name);
                return 0;
        }
  
-       ret = gpio_request(template->gpio, template->name);
-       if (ret < 0)
-               return ret;
        led_dat->cdev.name = template->name;
        led_dat->cdev.default_trigger = template->default_trigger;
        led_dat->gpio = template->gpio;
        if (!template->retain_state_suspended)
                led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
  
-       ret = gpio_direction_output(led_dat->gpio, state);
+       ret = devm_gpio_request_one(parent, template->gpio,
+                                   GPIOF_DIR_OUT | state, template->name);
        if (ret < 0)
-               goto err;
+               return ret;
  
        INIT_WORK(&led_dat->work, lt3593_led_work);
  
        ret = led_classdev_register(parent, &led_dat->cdev);
        if (ret < 0)
-               goto err;
+               return ret;
  
-       printk(KERN_INFO "%s: registered LT3593 LED '%s' at GPIO %d\n",
+       dev_info(parent, "%s: registered LT3593 LED '%s' at GPIO %d\n",
                KBUILD_MODNAME, template->name, template->gpio);
  
        return 0;
- err:
-       gpio_free(led_dat->gpio);
-       return ret;
  }
  
  static void delete_lt3593_led(struct lt3593_led_data *led)
  
        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;
@@@ -173,7 -165,7 +165,7 @@@ err
        return ret;
  }
  
 -static int __devexit lt3593_led_remove(struct platform_device *pdev)
 +static int lt3593_led_remove(struct platform_device *pdev)
  {
        int i;
        struct gpio_led_platform_data *pdata = pdev->dev.platform_data;
  
  static struct platform_driver lt3593_led_driver = {
        .probe          = lt3593_led_probe,
 -      .remove         = __devexit_p(lt3593_led_remove),
 +      .remove         = lt3593_led_remove,
        .driver         = {
                .name   = "leds-lt3593",
                .owner  = THIS_MODULE,
@@@ -71,7 -71,7 +71,7 @@@ static void gpio_ext_set_value(struct n
        spin_unlock_irqrestore(&gpio_ext_lock, flags);
  }
  
 -static int __devinit gpio_ext_init(struct netxbig_gpio_ext *gpio_ext)
 +static int gpio_ext_init(struct netxbig_gpio_ext *gpio_ext)
  {
        int err;
        int i;
@@@ -243,7 -243,7 +243,7 @@@ static ssize_t netxbig_led_sata_store(s
        int mode_val;
        int ret;
  
-       ret = strict_strtoul(buff, 10, &enable);
+       ret = kstrtoul(buff, 10, &enable);
        if (ret < 0)
                return ret;
  
@@@ -301,7 -301,7 +301,7 @@@ static void delete_netxbig_led(struct n
        led_classdev_unregister(&led_dat->cdev);
  }
  
 -static int __devinit
 +static int
  create_netxbig_led(struct platform_device *pdev,
                   struct netxbig_led_data *led_dat,
                   const struct netxbig_led *template)
        return ret;
  }
  
 -static int __devinit netxbig_led_probe(struct platform_device *pdev)
 +static int netxbig_led_probe(struct platform_device *pdev)
  {
        struct netxbig_led_platform_data *pdata = pdev->dev.platform_data;
        struct netxbig_led_data *leds_data;
@@@ -389,7 -389,7 +389,7 @@@ err_free_leds
        return ret;
  }
  
 -static int __devexit netxbig_led_remove(struct platform_device *pdev)
 +static int netxbig_led_remove(struct platform_device *pdev)
  {
        struct netxbig_led_platform_data *pdata = pdev->dev.platform_data;
        struct netxbig_led_data *leds_data;
  
  static struct platform_driver netxbig_led_driver = {
        .probe          = netxbig_led_probe,
 -      .remove         = __devexit_p(netxbig_led_remove),
 +      .remove         = netxbig_led_remove,
        .driver         = {
                .name   = "leds-netxbig",
                .owner  = THIS_MODULE,
diff --combined drivers/leds/leds-ns2.c
@@@ -30,7 -30,6 +30,7 @@@
  #include <linux/leds.h>
  #include <linux/module.h>
  #include <linux/platform_data/leds-kirkwood-ns2.h>
 +#include <linux/of_gpio.h>
  
  /*
   * The Network Space v2 dual-GPIO LED is wired to a CPLD and can blink in
@@@ -150,7 -149,7 +150,7 @@@ static ssize_t ns2_led_sata_store(struc
        unsigned long enable;
        enum ns2_led_modes mode;
  
-       ret = strict_strtoul(buff, 10, &enable);
+       ret = kstrtoul(buff, 10, &enable);
        if (ret < 0)
                return ret;
  
@@@ -185,36 -184,29 +185,29 @@@ static ssize_t ns2_led_sata_show(struc
  
  static DEVICE_ATTR(sata, 0644, ns2_led_sata_show, ns2_led_sata_store);
  
 -static int __devinit
 +static int
  create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat,
               const struct ns2_led *template)
  {
        int ret;
        enum ns2_led_modes mode;
  
-       ret = gpio_request(template->cmd, template->name);
-       if (ret == 0) {
-               ret = gpio_direction_output(template->cmd,
-                                           gpio_get_value(template->cmd));
-               if (ret)
-                       gpio_free(template->cmd);
-       }
+       ret = devm_gpio_request_one(&pdev->dev, template->cmd,
+                       GPIOF_DIR_OUT | gpio_get_value(template->cmd),
+                       template->name);
        if (ret) {
                dev_err(&pdev->dev, "%s: failed to setup command GPIO\n",
                        template->name);
+               return ret;
        }
  
-       ret = gpio_request(template->slow, template->name);
-       if (ret == 0) {
-               ret = gpio_direction_output(template->slow,
-                                           gpio_get_value(template->slow));
-               if (ret)
-                       gpio_free(template->slow);
-       }
+       ret = devm_gpio_request_one(&pdev->dev, template->slow,
+                       GPIOF_DIR_OUT | gpio_get_value(template->slow),
+                       template->name);
        if (ret) {
                dev_err(&pdev->dev, "%s: failed to setup slow GPIO\n",
                        template->name);
-               goto err_free_cmd;
+               return ret;
        }
  
        rwlock_init(&led_dat->rw_lock);
  
        ret = ns2_led_get_mode(led_dat, &mode);
        if (ret < 0)
-               goto err_free_slow;
+               return ret;
  
        /* Set LED initial state. */
        led_dat->sata = (mode == NS_V2_LED_SATA) ? 1 : 0;
  
        ret = led_classdev_register(&pdev->dev, &led_dat->cdev);
        if (ret < 0)
-               goto err_free_slow;
+               return ret;
  
        ret = device_create_file(led_dat->cdev.dev, &dev_attr_sata);
        if (ret < 0)
  
  err_free_cdev:
        led_classdev_unregister(&led_dat->cdev);
- err_free_slow:
-       gpio_free(led_dat->slow);
- err_free_cmd:
-       gpio_free(led_dat->cmd);
        return ret;
  }
  
@@@ -260,92 -247,20 +248,90 @@@ static void delete_ns2_led(struct ns2_l
  {
        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;
        int i;
        int ret;
  
 +#ifdef CONFIG_OF_GPIO
 +      if (!pdata) {
 +              pdata = devm_kzalloc(&pdev->dev,
 +                                   sizeof(struct ns2_led_platform_data),
 +                                   GFP_KERNEL);
 +              if (!pdata)
 +                      return -ENOMEM;
 +
 +              ret = ns2_leds_get_of_pdata(&pdev->dev, pdata);
 +              if (ret)
 +                      return ret;
 +      }
 +#else
        if (!pdata)
                return -EINVAL;
 +#endif /* CONFIG_OF_GPIO */
  
        leds_data = devm_kzalloc(&pdev->dev, sizeof(struct ns2_led_data) *
 -                          pdata->num_leds, GFP_KERNEL);
 +                               pdata->num_leds, GFP_KERNEL);
        if (!leds_data)
                return -ENOMEM;
  
        return 0;
  }
  
 -static int __devexit ns2_led_remove(struct platform_device *pdev)
 +static int ns2_led_remove(struct platform_device *pdev)
  {
        int i;
        struct ns2_led_platform_data *pdata = pdev->dev.platform_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),
        },
  };
  
@@@ -255,7 -255,7 +255,7 @@@ static void pca955x_led_set(struct led_
        schedule_work(&pca955x->work);
  }
  
 -static int __devinit pca955x_probe(struct i2c_client *client,
 +static int pca955x_probe(struct i2c_client *client,
                                        const struct i2c_device_id *id)
  {
        struct pca955x *pca955x;
                return -ENODEV;
        }
  
-       printk(KERN_INFO "leds-pca955x: Using %s %d-bit LED driver at "
+       dev_info(&client->dev, "leds-pca955x: Using %s %d-bit LED driver at "
                        "slave address 0x%02x\n",
                        id->name, chip->bits, client->addr);
  
@@@ -363,7 -363,7 +363,7 @@@ exit
        return err;
  }
  
 -static int __devexit pca955x_remove(struct i2c_client *client)
 +static int pca955x_remove(struct i2c_client *client)
  {
        struct pca955x *pca955x = i2c_get_clientdata(client);
        int i;
@@@ -382,7 -382,7 +382,7 @@@ static struct i2c_driver pca955x_drive
                .owner  = THIS_MODULE,
        },
        .probe  = pca955x_probe,
 -      .remove = __devexit_p(pca955x_remove),
 +      .remove = pca955x_remove,
        .id_table = pca955x_id,
  };
  
diff --combined drivers/leds/leds-pwm.c
@@@ -26,7 -26,7 +26,7 @@@
  struct led_pwm_data {
        struct led_classdev     cdev;
        struct pwm_device       *pwm;
-       unsigned int            active_low;
+       unsigned int            active_low;
        unsigned int            period;
  };
  
@@@ -107,7 -107,7 +107,7 @@@ err
        return ret;
  }
  
 -static int __devexit led_pwm_remove(struct platform_device *pdev)
 +static int led_pwm_remove(struct platform_device *pdev)
  {
        int i;
        struct led_pwm_platform_data *pdata = pdev->dev.platform_data;
  
  static struct platform_driver led_pwm_driver = {
        .probe          = led_pwm_probe,
 -      .remove         = __devexit_p(led_pwm_remove),
 +      .remove         = led_pwm_remove,
        .driver         = {
                .name   = "leds_pwm",
                .owner  = THIS_MODULE,
@@@ -16,7 -16,7 +16,7 @@@
  #include <asm/mach-rc32434/rb.h>
  
  static void rb532_led_set(struct led_classdev *cdev,
-                           enum led_brightness brightness)
+                         enum led_brightness brightness)
  {
        if (brightness)
                set_latch_u5(LO_ULED, 0);
@@@ -37,12 -37,12 +37,12 @@@ static struct led_classdev rb532_uled 
        .default_trigger = "nand-disk",
  };
  
 -static int __devinit rb532_led_probe(struct platform_device *pdev)
 +static int rb532_led_probe(struct platform_device *pdev)
  {
        return led_classdev_register(&pdev->dev, &rb532_uled);
  }
  
 -static int __devexit rb532_led_remove(struct platform_device *pdev)
 +static int rb532_led_remove(struct platform_device *pdev)
  {
        led_classdev_unregister(&rb532_uled);
        return 0;
@@@ -50,7 -50,7 +50,7 @@@
  
  static struct platform_driver rb532_led_driver = {
        .probe = rb532_led_probe,
 -      .remove = __devexit_p(rb532_led_remove),
 +      .remove = rb532_led_remove,
        .driver = {
                .name = "rb532-led",
                .owner = THIS_MODULE,
@@@ -204,10 -204,10 +204,10 @@@ static void r_tpu_set_pin(struct r_tpu_
        if (p->pin_state == R_TPU_PIN_GPIO_FN)
                gpio_free(cfg->pin_gpio_fn);
  
-       if (new_state == R_TPU_PIN_GPIO) {
-               gpio_request(cfg->pin_gpio, cfg->name);
-               gpio_direction_output(cfg->pin_gpio, !!brightness);
-       }
+       if (new_state == R_TPU_PIN_GPIO)
+               gpio_request_one(cfg->pin_gpio, GPIOF_DIR_OUT | !!brightness,
+                               cfg->name);
        if (new_state == R_TPU_PIN_GPIO_FN)
                gpio_request(cfg->pin_gpio_fn, cfg->name);
  
@@@ -238,7 -238,7 +238,7 @@@ static void r_tpu_set_brightness(struc
        schedule_work(&p->work);
  }
  
 -static int __devinit r_tpu_probe(struct platform_device *pdev)
 +static int r_tpu_probe(struct platform_device *pdev)
  {
        struct led_renesas_tpu_config *cfg = pdev->dev.platform_data;
        struct r_tpu_priv *p;
        }
  
        /* map memory, let mapbase point to our channel */
-       p->mapbase = ioremap_nocache(res->start, resource_size(res));
+       p->mapbase = devm_ioremap_nocache(&pdev->dev, res->start,
+                                       resource_size(res));
        if (p->mapbase == NULL) {
                dev_err(&pdev->dev, "failed to remap I/O memory\n");
                return -ENXIO;
        }
  
        /* get hold of clock */
-       p->clk = clk_get(&pdev->dev, NULL);
+       p->clk = devm_clk_get(&pdev->dev, NULL);
        if (IS_ERR(p->clk)) {
                dev_err(&pdev->dev, "cannot get clock\n");
-               ret = PTR_ERR(p->clk);
-               goto err0;
+               return PTR_ERR(p->clk);
        }
  
        p->pdev = pdev;
        p->ldev.flags |= LED_CORE_SUSPENDRESUME;
        ret = led_classdev_register(&pdev->dev, &p->ldev);
        if (ret < 0)
-               goto err1;
+               goto err0;
  
        /* max_brightness may be updated by the LED core code */
        p->min_rate = p->ldev.max_brightness * p->refresh_rate;
        pm_runtime_enable(&pdev->dev);
        return 0;
  
-  err1:
-       r_tpu_set_pin(p, R_TPU_PIN_UNUSED, LED_OFF);
-       clk_put(p->clk);
   err0:
-       iounmap(p->mapbase);
+       r_tpu_set_pin(p, R_TPU_PIN_UNUSED, LED_OFF);
        return ret;
  }
  
 -static int __devexit r_tpu_remove(struct platform_device *pdev)
 +static int r_tpu_remove(struct platform_device *pdev)
  {
        struct r_tpu_priv *p = platform_get_drvdata(pdev);
  
        r_tpu_set_pin(p, R_TPU_PIN_UNUSED, LED_OFF);
  
        pm_runtime_disable(&pdev->dev);
-       clk_put(p->clk);
  
-       iounmap(p->mapbase);
        return 0;
  }
  
  static struct platform_driver r_tpu_device_driver = {
        .probe          = r_tpu_probe,
 -      .remove         = __devexit_p(r_tpu_remove),
 +      .remove         = r_tpu_remove,
        .driver         = {
                .name   = "leds-renesas-tpu",
        }
@@@ -263,7 -263,7 +263,7 @@@ static int nasgpio_led_set_blink(struc
   * already taken care of this, but we will do so in a non destructive manner
   * so that we have what we need whether the BIOS did it or not.
   */
 -static int __devinit ich7_gpio_init(struct device *dev)
 +static int ich7_gpio_init(struct device *dev)
  {
        int i;
        u32 config_data = 0;
@@@ -342,7 -342,7 +342,7 @@@ static void ich7_lpc_cleanup(struct dev
   * so we can retrive the required operational information and prepare the GPIO.
   */
  static struct pci_dev *nas_gpio_pci_dev;
 -static int __devinit ich7_lpc_probe(struct pci_dev *dev,
 +static int ich7_lpc_probe(struct pci_dev *dev,
                                    const struct pci_device_id *id)
  {
        int status;
@@@ -459,7 -459,7 +459,7 @@@ static ssize_t nas_led_blink_store(stru
        struct led_classdev *led = dev_get_drvdata(dev);
        unsigned long blink_state;
  
-       ret = strict_strtoul(buf, 10, &blink_state);
+       ret = kstrtoul(buf, 10, &blink_state);
        if (ret)
                return ret;