!test_bit(DPOT_RDAC_MASK & reg, data->otp_en_mask))
                return -EPERM;
 
-       err = strict_strtoul(buf, 10, &value);
+       err = kstrtoul(buf, 10, &value);
        if (err)
                return err;
 
 
        int ret_val;
        unsigned long val;
 
-       if (strict_strtoul(buf, 10, &val))
-               return -EINVAL;
+       ret_val = kstrtoul(buf, 10, &val);
+       if (ret_val)
+               return ret_val;
 
        if (val < 4096)
                val = 1;
 
 {
        struct apds990x_chip *chip = dev_get_drvdata(dev);
        unsigned long value;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
 
        chip->lux_calib = value;
 
        unsigned long value;
        int ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
 
        mutex_lock(&chip->mutex);
        ret = apds990x_set_arate(chip, value);
 {
        struct apds990x_chip *chip =  dev_get_drvdata(dev);
        unsigned long value;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
 
        mutex_lock(&chip->mutex);
 
 static ssize_t apds990x_set_lux_thresh(struct apds990x_chip *chip, u32 *target,
                                const char *buf)
 {
-       int ret = 0;
        unsigned long thresh;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &thresh))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &thresh);
+       if (ret)
+               return ret;
 
        if (thresh > APDS_RANGE)
                return -EINVAL;
 {
        struct apds990x_chip *chip =  dev_get_drvdata(dev);
        unsigned long value;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
 
        if ((value > APDS_RANGE) || (value == 0) ||
                (value < APDS_PROX_HYSTERESIS))
 {
        struct apds990x_chip *chip =  dev_get_drvdata(dev);
        unsigned long value;
+       int ret;
+
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
        if (value) {
                pm_runtime_get_sync(dev);
                mutex_lock(&chip->mutex);
 
        unsigned long value;
        ssize_t ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
 
        mutex_lock(&chip->mutex);
        if (value) {
 {
        struct bh1770_chip *chip =  dev_get_drvdata(dev);
        unsigned long value;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
 
        mutex_lock(&chip->mutex);
        /* Assume no proximity. Sensor will tell real state soon */
 {
        struct bh1770_chip *chip =  dev_get_drvdata(dev);
        unsigned long value;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
 
        mutex_lock(&chip->mutex);
        chip->prox_rate_threshold = bh1770_prox_rate_validate(value);
 {
        struct bh1770_chip *chip =  dev_get_drvdata(dev);
        unsigned long value;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
 
        mutex_lock(&chip->mutex);
        chip->prox_rate = bh1770_prox_rate_validate(value);
        unsigned long value;
        int ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
+
        if (value > BH1770_PROX_RANGE)
                return -EINVAL;
 
 {
        struct bh1770_chip *chip = dev_get_drvdata(dev);
        unsigned long value;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
 
        if (value > BH1770_PROX_MAX_PERSISTENCE)
                return -EINVAL;
 {
        struct bh1770_chip *chip = dev_get_drvdata(dev);
        unsigned long value;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
 
        if (value > BH1770_PROX_RANGE)
                return -EINVAL;
        unsigned long value;
        u32 old_calib;
        u32 new_corr;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &value))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &value);
+       if (ret)
+               return ret;
 
        mutex_lock(&chip->mutex);
        old_calib = chip->lux_calib;
        unsigned long rate_hz;
        int ret, i;
 
-       if (strict_strtoul(buf, 0, &rate_hz))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &rate_hz);
+       if (ret)
+               return ret;
 
        for (i = 0; i < ARRAY_SIZE(lux_rates_hz) - 1; i++)
                if (rate_hz >= lux_rates_hz[i])
 static ssize_t bh1770_set_lux_thresh(struct bh1770_chip *chip, u16 *target,
                                const char *buf)
 {
-       int ret = 0;
        unsigned long thresh;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &thresh))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &thresh);
+       if (ret)
+               return ret;
 
        if (thresh > BH1770_LUX_RANGE)
                return -EINVAL;
 
        unsigned long val;
        int error;
 
-       error = strict_strtoul(buf, 0, &val);
+       error = kstrtoul(buf, 0, &val);
        if (error)
                return error;
 
 
        unsigned long val;
        int ret;
 
-       if (strict_strtoul(buf, 0, &val))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &val);
+       if (ret)
+               return ret;
 
        if (val) {
                ret = fpga_enable_power_supplies(priv);
        unsigned long val;
        int ret;
 
-       if (strict_strtoul(buf, 0, &val))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &val);
+       if (ret)
+               return ret;
 
        /* We can't have an image writer and be programming simultaneously */
        if (mutex_lock_interruptible(&priv->lock))
 
        unsigned long enable;
        int ret;
 
-       ret = strict_strtoul(buf, 0, &enable);
+       ret = kstrtoul(buf, 0, &enable);
        if (ret) {
                dev_err(priv->dev, "unable to parse enable input\n");
-               return -EINVAL;
+               return ret;
        }
 
        /* protect against concurrent enable/disable */
 
        int ret;
        unsigned long val;
 
-       if (strict_strtoul(buf, 10, &val))
-               return -EINVAL;
+       ret = kstrtoul(buf, 10, &val);
+       if (ret)
+               return ret;
        if (val >= strlen(map))
                return -EINVAL;
        mutex_lock(&compass_mutex);
 
        unsigned long val;
        int ret;
 
-       if ((strict_strtoul(buf, 10, &val) < 0) || (val > 3))
+       ret = kstrtoul(buf, 10, &val);
+       if (ret)
+               return ret;
+
+       if (val > 3)
                return -EINVAL;
 
        ret = isl29003_set_range(client, val);
        unsigned long val;
        int ret;
 
-       if ((strict_strtoul(buf, 10, &val) < 0) || (val > 3))
+       ret = kstrtoul(buf, 10, &val);
+       if (ret)
+               return ret;
+
+       if (val > 3)
                return -EINVAL;
 
        ret = isl29003_set_resolution(client, val);
        unsigned long val;
        int ret;
 
-       if ((strict_strtoul(buf, 10, &val) < 0) || (val > 2))
+       ret = kstrtoul(buf, 10, &val);
+       if (ret)
+               return ret;
+
+       if (val > 2)
                return -EINVAL;
 
        ret = isl29003_set_mode(client, val);
        unsigned long val;
        int ret;
 
-       if ((strict_strtoul(buf, 10, &val) < 0) || (val > 1))
+       ret = kstrtoul(buf, 10, &val);
+       if (ret)
+               return ret;
+
+       if (val > 1)
                return -EINVAL;
 
        ret = isl29003_set_power_state(client, val);
 
        int ret_val;
        unsigned long val;
 
-       if (strict_strtoul(buf, 10, &val))
-               return -EINVAL;
+       ret_val = kstrtoul(buf, 10, &val);
+       if (ret_val)
+               return ret_val;
+
        if (val < 1 || val > 64000)
                return -EINVAL;
 
 
 {
        struct lis3lv02d *lis3 = dev_get_drvdata(dev);
        unsigned long rate;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &rate))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &rate);
+       if (ret)
+               return ret;
 
        lis3lv02d_sysfs_poweron(lis3);
        if (lis3lv02d_set_odr(lis3, rate))
 
 static ssize_t options_write(struct file *file, const char __user *userbuf,
                             size_t count, loff_t *data)
 {
-       char buf[20];
-
-       if (count >= sizeof(buf))
-               return -EINVAL;
-       if (copy_from_user(buf, userbuf, count))
-               return -EFAULT;
-       buf[count] = '\0';
-       if (strict_strtoul(buf, 0, &gru_options))
-               return -EINVAL;
+       int ret;
+
+       ret = kstrtoul_from_user(userbuf, count, 0, &gru_options);
+       if (ret)
+               return ret;
 
        return count;
 }
 
                struct spear_pcie_gadget_config *config,
                const char *buf, size_t count)
 {
-       if (strict_strtoul(buf, 0, &config->requested_msi))
-               return -EINVAL;
+       int ret;
+
+       ret = kstrtoul(buf, 0, &config->requested_msi);
+       if (ret)
+               return ret;
+
        if (config->requested_msi > 32)
                config->requested_msi = 32;
 
 {
        struct pcie_app_reg __iomem *app_reg = config->va_app_base;
        ulong en;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &en))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &en);
+       if (ret)
+               return ret;
 
        if (en)
                writel(readl(&app_reg->app_ctrl_0) | (1 << SYS_INT_ID),
        struct pcie_app_reg __iomem *app_reg = config->va_app_base;
        ulong vector;
        u32 ven_msi;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &vector))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &vector);
+       if (ret)
+               return ret;
 
        if (!config->configured_msi)
                return -EINVAL;
                const char *buf, size_t count)
 {
        ulong id;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &id))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &id);
+       if (ret)
+               return ret;
 
        spear_dbi_write_reg(config, PCI_VENDOR_ID, 2, id);
 
                const char *buf, size_t count)
 {
        ulong id;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &id))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &id);
+       if (ret)
+               return ret;
 
        spear_dbi_write_reg(config, PCI_DEVICE_ID, 2, id);
 
        ulong size;
        u32 pos, pos1;
        u32 no_of_bit = 0;
+       int ret;
+
+       ret = kstrtoul(buf, 0, &size);
+       if (ret)
+               return ret;
 
-       if (strict_strtoul(buf, 0, &size))
-               return -EINVAL;
        /* min bar size is 256 */
        if (size <= 0x100)
                size = 0x100;
 {
        struct pcie_app_reg __iomem *app_reg = config->va_app_base;
        ulong address;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &address))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &address);
+       if (ret)
+               return ret;
 
        address &= ~(config->bar0_size - 1);
        if (config->va_bar0_address)
                const char *buf, size_t count)
 {
        ulong offset;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &offset))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &offset);
+       if (ret)
+               return ret;
 
        if (offset % 4)
                return -EINVAL;
                const char *buf, size_t count)
 {
        ulong data;
+       int ret;
 
-       if (strict_strtoul(buf, 0, &data))
-               return -EINVAL;
+       ret = kstrtoul(buf, 0, &data);
+       if (ret)
+               return ret;
 
        if (!config->va_bar0_address)
                return -ENOMEM;
 
        struct spi_device *spi = to_spi_device(dev);
        unsigned char tmp[2];
        unsigned long val;
+       int ret;
 
-       if (strict_strtoul(buf, 10, &val) < 0)
-               return -EINVAL;
+       ret = kstrtoul(buf, 10, &val);
+       if (ret)
+               return ret;
 
        tmp[0] = val >> 8;
        tmp[1] = val & 0xff;