struct i2c_client       *i2c;
        struct i2c_client       *i2c_8606;
 
-       unsigned int    *vol_table;
        unsigned int    *vol_suspend;
 
        int     slope_double;
 static int pm8607_list_voltage(struct regulator_dev *rdev, unsigned index)
 {
        struct pm8607_regulator_info *info = rdev_get_drvdata(rdev);
-       int ret = -EINVAL;
+       int ret;
+
+       ret = regulator_list_voltage_table(rdev, index);
+       if (ret < 0)
+               return ret;
+
+       if (info->slope_double)
+               ret <<= 1;
 
-       if (info->vol_table && (index < rdev->desc->n_voltages)) {
-               ret = info->vol_table[index];
-               if (info->slope_double)
-                       ret <<= 1;
-       }
        return ret;
 }
 
                .type   = REGULATOR_VOLTAGE,                            \
                .id     = PM8607_ID_##vreg,                             \
                .owner  = THIS_MODULE,                                  \
+               .volt_table = vreg##_table,                             \
                .n_voltages = ARRAY_SIZE(vreg##_table),                 \
                .vsel_reg = PM8607_##vreg,                              \
                .vsel_mask = ARRAY_SIZE(vreg##_table) - 1,              \
                .enable_mask = 1 << (ebit),                             \
        },                                                              \
        .slope_double   = (0),                                          \
-       .vol_table      = (unsigned int *)&vreg##_table,                \
        .vol_suspend    = (unsigned int *)&vreg##_suspend_table,        \
 }
 
                .type   = REGULATOR_VOLTAGE,                            \
                .id     = PM8607_ID_LDO##_id,                           \
                .owner  = THIS_MODULE,                                  \
+               .volt_table = LDO##_id##_table,                         \
                .n_voltages = ARRAY_SIZE(LDO##_id##_table),             \
                .vsel_reg = PM8607_##vreg,                              \
                .vsel_mask = (ARRAY_SIZE(LDO##_id##_table) - 1) << (shift), \
                .enable_mask = 1 << (ebit),                             \
        },                                                              \
        .slope_double   = (0),                                          \
-       .vol_table      = (unsigned int *)&LDO##_id##_table,            \
        .vol_suspend    = (unsigned int *)&LDO##_id##_suspend_table,    \
 }