#define ISL29028_POWER_OFF_DELAY_MS            2000
 
+static const unsigned int isl29028_prox_sleep_time[] = {800, 400, 200, 100, 75,
+                                                       50, 12, 0};
+
 enum isl29028_als_ir_mode {
        ISL29028_MODE_NONE = 0,
        ISL29028_MODE_ALS,
        enum isl29028_als_ir_mode       als_ir_mode;
 };
 
-static int isl29028_set_proxim_sampling(struct isl29028_chip *chip,
-                                       unsigned int sampling)
+static int isl29028_find_prox_sleep_time_index(int sampling)
 {
-       struct device *dev = regmap_get_device(chip->regmap);
-       static unsigned int prox_period[] = {800, 400, 200, 100, 75, 50, 12, 0};
        unsigned int period = DIV_ROUND_UP(1000, sampling);
-       int sel, ret;
+       int i;
 
-       for (sel = 0; sel < ARRAY_SIZE(prox_period); ++sel) {
-               if (period >= prox_period[sel])
+       for (i = 0; i < ARRAY_SIZE(isl29028_prox_sleep_time); ++i) {
+               if (period >= isl29028_prox_sleep_time[i])
                        break;
        }
 
+       return i;
+}
+
+static int isl29028_set_proxim_sampling(struct isl29028_chip *chip,
+                                       unsigned int sampling)
+{
+       struct device *dev = regmap_get_device(chip->regmap);
+       int sleep_index, ret;
+
+       sleep_index = isl29028_find_prox_sleep_time_index(sampling);
        ret = regmap_update_bits(chip->regmap, ISL29028_REG_CONFIGURE,
                                 ISL29028_CONF_PROX_SLP_MASK,
-                                sel << ISL29028_CONF_PROX_SLP_SH);
+                                sleep_index << ISL29028_CONF_PROX_SLP_SH);
 
        if (ret < 0) {
                dev_err(dev, "%s(): Error %d setting the proximity sampling\n",
 
 static int isl29028_enable_proximity(struct isl29028_chip *chip)
 {
-       int ret;
+       int sleep_index, ret;
 
        ret = isl29028_set_proxim_sampling(chip, chip->prox_sampling);
        if (ret < 0)
                return ret;
 
        /* Wait for conversion to be complete for first sample */
-       msleep(DIV_ROUND_UP(1000, chip->prox_sampling));
+       sleep_index = isl29028_find_prox_sleep_time_index(chip->prox_sampling);
+       msleep(isl29028_prox_sleep_time[sleep_index]);
 
        return 0;
 }