diff options
| -rw-r--r-- | drivers/regulator/core.c | 83 |
1 files changed, 38 insertions, 45 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index d3be67e18519..7d0c0d7d90ca 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c | |||
| @@ -66,6 +66,16 @@ static unsigned int _regulator_get_mode(struct regulator_dev *rdev); | |||
| 66 | static void _notifier_call_chain(struct regulator_dev *rdev, | 66 | static void _notifier_call_chain(struct regulator_dev *rdev, |
| 67 | unsigned long event, void *data); | 67 | unsigned long event, void *data); |
| 68 | 68 | ||
| 69 | static const char *rdev_get_name(struct regulator_dev *rdev) | ||
| 70 | { | ||
| 71 | if (rdev->constraints && rdev->constraints->name) | ||
| 72 | return rdev->constraints->name; | ||
| 73 | else if (rdev->desc->name) | ||
| 74 | return rdev->desc->name; | ||
| 75 | else | ||
| 76 | return ""; | ||
| 77 | } | ||
| 78 | |||
| 69 | /* gets the regulator for a given consumer device */ | 79 | /* gets the regulator for a given consumer device */ |
| 70 | static struct regulator *get_device_regulator(struct device *dev) | 80 | static struct regulator *get_device_regulator(struct device *dev) |
| 71 | { | 81 | { |
| @@ -96,12 +106,12 @@ static int regulator_check_voltage(struct regulator_dev *rdev, | |||
| 96 | 106 | ||
| 97 | if (!rdev->constraints) { | 107 | if (!rdev->constraints) { |
| 98 | printk(KERN_ERR "%s: no constraints for %s\n", __func__, | 108 | printk(KERN_ERR "%s: no constraints for %s\n", __func__, |
| 99 | rdev->desc->name); | 109 | rdev_get_name(rdev)); |
| 100 | return -ENODEV; | 110 | return -ENODEV; |
| 101 | } | 111 | } |
| 102 | if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_VOLTAGE)) { | 112 | if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_VOLTAGE)) { |
| 103 | printk(KERN_ERR "%s: operation not allowed for %s\n", | 113 | printk(KERN_ERR "%s: operation not allowed for %s\n", |
| 104 | __func__, rdev->desc->name); | 114 | __func__, rdev_get_name(rdev)); |
| 105 | return -EPERM; | 115 | return -EPERM; |
| 106 | } | 116 | } |
| 107 | 117 | ||
| @@ -124,12 +134,12 @@ static int regulator_check_current_limit(struct regulator_dev *rdev, | |||
| 124 | 134 | ||
| 125 | if (!rdev->constraints) { | 135 | if (!rdev->constraints) { |
| 126 | printk(KERN_ERR "%s: no constraints for %s\n", __func__, | 136 | printk(KERN_ERR "%s: no constraints for %s\n", __func__, |
| 127 | rdev->desc->name); | 137 | rdev_get_name(rdev)); |
| 128 | return -ENODEV; | 138 | return -ENODEV; |
| 129 | } | 139 | } |
| 130 | if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_CURRENT)) { | 140 | if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_CURRENT)) { |
| 131 | printk(KERN_ERR "%s: operation not allowed for %s\n", | 141 | printk(KERN_ERR "%s: operation not allowed for %s\n", |
| 132 | __func__, rdev->desc->name); | 142 | __func__, rdev_get_name(rdev)); |
| 133 | return -EPERM; | 143 | return -EPERM; |
| 134 | } | 144 | } |
| 135 | 145 | ||
| @@ -159,17 +169,17 @@ static int regulator_check_mode(struct regulator_dev *rdev, int mode) | |||
| 159 | 169 | ||
| 160 | if (!rdev->constraints) { | 170 | if (!rdev->constraints) { |
| 161 | printk(KERN_ERR "%s: no constraints for %s\n", __func__, | 171 | printk(KERN_ERR "%s: no constraints for %s\n", __func__, |
| 162 | rdev->desc->name); | 172 | rdev_get_name(rdev)); |
| 163 | return -ENODEV; | 173 | return -ENODEV; |
| 164 | } | 174 | } |
| 165 | if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_MODE)) { | 175 | if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_MODE)) { |
| 166 | printk(KERN_ERR "%s: operation not allowed for %s\n", | 176 | printk(KERN_ERR "%s: operation not allowed for %s\n", |
| 167 | __func__, rdev->desc->name); | 177 | __func__, rdev_get_name(rdev)); |
| 168 | return -EPERM; | 178 | return -EPERM; |
| 169 | } | 179 | } |
| 170 | if (!(rdev->constraints->valid_modes_mask & mode)) { | 180 | if (!(rdev->constraints->valid_modes_mask & mode)) { |
| 171 | printk(KERN_ERR "%s: invalid mode %x for %s\n", | 181 | printk(KERN_ERR "%s: invalid mode %x for %s\n", |
| 172 | __func__, mode, rdev->desc->name); | 182 | __func__, mode, rdev_get_name(rdev)); |
| 173 | return -EINVAL; | 183 | return -EINVAL; |
| 174 | } | 184 | } |
| 175 | return 0; | 185 | return 0; |
| @@ -180,12 +190,12 @@ static int regulator_check_drms(struct regulator_dev *rdev) | |||
| 180 | { | 190 | { |
| 181 | if (!rdev->constraints) { | 191 | if (!rdev->constraints) { |
| 182 | printk(KERN_ERR "%s: no constraints for %s\n", __func__, | 192 | printk(KERN_ERR "%s: no constraints for %s\n", __func__, |
| 183 | rdev->desc->name); | 193 | rdev_get_name(rdev)); |
| 184 | return -ENODEV; | 194 | return -ENODEV; |
| 185 | } | 195 | } |
| 186 | if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_DRMS)) { | 196 | if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_DRMS)) { |
| 187 | printk(KERN_ERR "%s: operation not allowed for %s\n", | 197 | printk(KERN_ERR "%s: operation not allowed for %s\n", |
| 188 | __func__, rdev->desc->name); | 198 | __func__, rdev_get_name(rdev)); |
| 189 | return -EPERM; | 199 | return -EPERM; |
| 190 | } | 200 | } |
| 191 | return 0; | 201 | return 0; |
| @@ -230,16 +240,8 @@ static ssize_t regulator_name_show(struct device *dev, | |||
| 230 | struct device_attribute *attr, char *buf) | 240 | struct device_attribute *attr, char *buf) |
| 231 | { | 241 | { |
| 232 | struct regulator_dev *rdev = dev_get_drvdata(dev); | 242 | struct regulator_dev *rdev = dev_get_drvdata(dev); |
| 233 | const char *name; | ||
| 234 | 243 | ||
| 235 | if (rdev->constraints && rdev->constraints->name) | 244 | return sprintf(buf, "%s\n", rdev_get_name(rdev)); |
| 236 | name = rdev->constraints->name; | ||
| 237 | else if (rdev->desc->name) | ||
| 238 | name = rdev->desc->name; | ||
| 239 | else | ||
| 240 | name = ""; | ||
| 241 | |||
| 242 | return sprintf(buf, "%s\n", name); | ||
| 243 | } | 245 | } |
| 244 | 246 | ||
| 245 | static ssize_t regulator_print_opmode(char *buf, int mode) | 247 | static ssize_t regulator_print_opmode(char *buf, int mode) |
| @@ -687,13 +689,14 @@ static void print_constraints(struct regulator_dev *rdev) | |||
| 687 | if (constraints->valid_modes_mask & REGULATOR_MODE_STANDBY) | 689 | if (constraints->valid_modes_mask & REGULATOR_MODE_STANDBY) |
| 688 | count += sprintf(buf + count, "standby"); | 690 | count += sprintf(buf + count, "standby"); |
| 689 | 691 | ||
| 690 | printk(KERN_INFO "regulator: %s: %s\n", rdev->desc->name, buf); | 692 | printk(KERN_INFO "regulator: %s: %s\n", rdev_get_name(rdev), buf); |
| 691 | } | 693 | } |
| 692 | 694 | ||
| 693 | static int machine_constraints_voltage(struct regulator_dev *rdev, | 695 | static int machine_constraints_voltage(struct regulator_dev *rdev, |
| 694 | const char *name, struct regulation_constraints *constraints) | 696 | struct regulation_constraints *constraints) |
| 695 | { | 697 | { |
| 696 | struct regulator_ops *ops = rdev->desc->ops; | 698 | struct regulator_ops *ops = rdev->desc->ops; |
| 699 | const char *name = rdev_get_name(rdev); | ||
| 697 | int ret; | 700 | int ret; |
| 698 | 701 | ||
| 699 | /* do we need to apply the constraint voltage */ | 702 | /* do we need to apply the constraint voltage */ |
| @@ -800,16 +803,11 @@ static int set_machine_constraints(struct regulator_dev *rdev, | |||
| 800 | const char *name; | 803 | const char *name; |
| 801 | struct regulator_ops *ops = rdev->desc->ops; | 804 | struct regulator_ops *ops = rdev->desc->ops; |
| 802 | 805 | ||
| 803 | if (constraints->name) | ||
| 804 | name = constraints->name; | ||
| 805 | else if (rdev->desc->name) | ||
| 806 | name = rdev->desc->name; | ||
| 807 | else | ||
| 808 | name = "regulator"; | ||
| 809 | |||
| 810 | rdev->constraints = constraints; | 806 | rdev->constraints = constraints; |
| 811 | 807 | ||
| 812 | ret = machine_constraints_voltage(rdev, name, constraints); | 808 | name = rdev_get_name(rdev); |
| 809 | |||
| 810 | ret = machine_constraints_voltage(rdev, constraints); | ||
| 813 | if (ret != 0) | 811 | if (ret != 0) |
| 814 | goto out; | 812 | goto out; |
| 815 | 813 | ||
| @@ -932,7 +930,7 @@ static int set_consumer_device_supply(struct regulator_dev *rdev, | |||
| 932 | dev_name(&node->regulator->dev), | 930 | dev_name(&node->regulator->dev), |
| 933 | node->regulator->desc->name, | 931 | node->regulator->desc->name, |
| 934 | supply, | 932 | supply, |
| 935 | dev_name(&rdev->dev), rdev->desc->name); | 933 | dev_name(&rdev->dev), rdev_get_name(rdev)); |
| 936 | return -EBUSY; | 934 | return -EBUSY; |
| 937 | } | 935 | } |
| 938 | 936 | ||
| @@ -1241,7 +1239,7 @@ static int _regulator_enable(struct regulator_dev *rdev) | |||
| 1241 | ret = _regulator_enable(rdev->supply); | 1239 | ret = _regulator_enable(rdev->supply); |
| 1242 | if (ret < 0) { | 1240 | if (ret < 0) { |
| 1243 | printk(KERN_ERR "%s: failed to enable %s: %d\n", | 1241 | printk(KERN_ERR "%s: failed to enable %s: %d\n", |
| 1244 | __func__, rdev->desc->name, ret); | 1242 | __func__, rdev_get_name(rdev), ret); |
| 1245 | return ret; | 1243 | return ret; |
| 1246 | } | 1244 | } |
| 1247 | } | 1245 | } |
| @@ -1267,7 +1265,7 @@ static int _regulator_enable(struct regulator_dev *rdev) | |||
| 1267 | } | 1265 | } |
| 1268 | } else if (ret < 0) { | 1266 | } else if (ret < 0) { |
| 1269 | printk(KERN_ERR "%s: is_enabled() failed for %s: %d\n", | 1267 | printk(KERN_ERR "%s: is_enabled() failed for %s: %d\n", |
| 1270 | __func__, rdev->desc->name, ret); | 1268 | __func__, rdev_get_name(rdev), ret); |
| 1271 | return ret; | 1269 | return ret; |
| 1272 | } | 1270 | } |
| 1273 | /* Fallthrough on positive return values - already enabled */ | 1271 | /* Fallthrough on positive return values - already enabled */ |
| @@ -1308,7 +1306,7 @@ static int _regulator_disable(struct regulator_dev *rdev) | |||
| 1308 | 1306 | ||
| 1309 | if (WARN(rdev->use_count <= 0, | 1307 | if (WARN(rdev->use_count <= 0, |
| 1310 | "unbalanced disables for %s\n", | 1308 | "unbalanced disables for %s\n", |
| 1311 | rdev->desc->name)) | 1309 | rdev_get_name(rdev))) |
| 1312 | return -EIO; | 1310 | return -EIO; |
| 1313 | 1311 | ||
| 1314 | /* are we the last user and permitted to disable ? */ | 1312 | /* are we the last user and permitted to disable ? */ |
| @@ -1321,7 +1319,7 @@ static int _regulator_disable(struct regulator_dev *rdev) | |||
| 1321 | ret = rdev->desc->ops->disable(rdev); | 1319 | ret = rdev->desc->ops->disable(rdev); |
| 1322 | if (ret < 0) { | 1320 | if (ret < 0) { |
| 1323 | printk(KERN_ERR "%s: failed to disable %s\n", | 1321 | printk(KERN_ERR "%s: failed to disable %s\n", |
| 1324 | __func__, rdev->desc->name); | 1322 | __func__, rdev_get_name(rdev)); |
| 1325 | return ret; | 1323 | return ret; |
| 1326 | } | 1324 | } |
| 1327 | } | 1325 | } |
| @@ -1378,7 +1376,7 @@ static int _regulator_force_disable(struct regulator_dev *rdev) | |||
| 1378 | ret = rdev->desc->ops->disable(rdev); | 1376 | ret = rdev->desc->ops->disable(rdev); |
| 1379 | if (ret < 0) { | 1377 | if (ret < 0) { |
| 1380 | printk(KERN_ERR "%s: failed to force disable %s\n", | 1378 | printk(KERN_ERR "%s: failed to force disable %s\n", |
| 1381 | __func__, rdev->desc->name); | 1379 | __func__, rdev_get_name(rdev)); |
| 1382 | return ret; | 1380 | return ret; |
| 1383 | } | 1381 | } |
| 1384 | /* notify other consumers that power has been forced off */ | 1382 | /* notify other consumers that power has been forced off */ |
| @@ -1795,7 +1793,7 @@ int regulator_set_optimum_mode(struct regulator *regulator, int uA_load) | |||
| 1795 | output_uV = rdev->desc->ops->get_voltage(rdev); | 1793 | output_uV = rdev->desc->ops->get_voltage(rdev); |
| 1796 | if (output_uV <= 0) { | 1794 | if (output_uV <= 0) { |
| 1797 | printk(KERN_ERR "%s: invalid output voltage found for %s\n", | 1795 | printk(KERN_ERR "%s: invalid output voltage found for %s\n", |
| 1798 | __func__, rdev->desc->name); | 1796 | __func__, rdev_get_name(rdev)); |
| 1799 | goto out; | 1797 | goto out; |
| 1800 | } | 1798 | } |
| 1801 | 1799 | ||
| @@ -1806,7 +1804,7 @@ int regulator_set_optimum_mode(struct regulator *regulator, int uA_load) | |||
| 1806 | input_uV = rdev->constraints->input_uV; | 1804 | input_uV = rdev->constraints->input_uV; |
| 1807 | if (input_uV <= 0) { | 1805 | if (input_uV <= 0) { |
| 1808 | printk(KERN_ERR "%s: invalid input voltage found for %s\n", | 1806 | printk(KERN_ERR "%s: invalid input voltage found for %s\n", |
| 1809 | __func__, rdev->desc->name); | 1807 | __func__, rdev_get_name(rdev)); |
| 1810 | goto out; | 1808 | goto out; |
| 1811 | } | 1809 | } |
| 1812 | 1810 | ||
| @@ -1820,7 +1818,7 @@ int regulator_set_optimum_mode(struct regulator *regulator, int uA_load) | |||
| 1820 | ret = regulator_check_mode(rdev, mode); | 1818 | ret = regulator_check_mode(rdev, mode); |
| 1821 | if (ret < 0) { | 1819 | if (ret < 0) { |
| 1822 | printk(KERN_ERR "%s: failed to get optimum mode for %s @" | 1820 | printk(KERN_ERR "%s: failed to get optimum mode for %s @" |
| 1823 | " %d uA %d -> %d uV\n", __func__, rdev->desc->name, | 1821 | " %d uA %d -> %d uV\n", __func__, rdev_get_name(rdev), |
| 1824 | total_uA_load, input_uV, output_uV); | 1822 | total_uA_load, input_uV, output_uV); |
| 1825 | goto out; | 1823 | goto out; |
| 1826 | } | 1824 | } |
| @@ -1828,7 +1826,7 @@ int regulator_set_optimum_mode(struct regulator *regulator, int uA_load) | |||
| 1828 | ret = rdev->desc->ops->set_mode(rdev, mode); | 1826 | ret = rdev->desc->ops->set_mode(rdev, mode); |
| 1829 | if (ret < 0) { | 1827 | if (ret < 0) { |
| 1830 | printk(KERN_ERR "%s: failed to set optimum mode %x for %s\n", | 1828 | printk(KERN_ERR "%s: failed to set optimum mode %x for %s\n", |
| 1831 | __func__, mode, rdev->desc->name); | 1829 | __func__, mode, rdev_get_name(rdev)); |
| 1832 | goto out; | 1830 | goto out; |
| 1833 | } | 1831 | } |
| 1834 | ret = mode; | 1832 | ret = mode; |
| @@ -2346,7 +2344,7 @@ int regulator_suspend_prepare(suspend_state_t state) | |||
| 2346 | 2344 | ||
| 2347 | if (ret < 0) { | 2345 | if (ret < 0) { |
| 2348 | printk(KERN_ERR "%s: failed to prepare %s\n", | 2346 | printk(KERN_ERR "%s: failed to prepare %s\n", |
| 2349 | __func__, rdev->desc->name); | 2347 | __func__, rdev_get_name(rdev)); |
| 2350 | goto out; | 2348 | goto out; |
| 2351 | } | 2349 | } |
| 2352 | } | 2350 | } |
| @@ -2459,12 +2457,7 @@ static int __init regulator_init_complete(void) | |||
| 2459 | ops = rdev->desc->ops; | 2457 | ops = rdev->desc->ops; |
| 2460 | c = rdev->constraints; | 2458 | c = rdev->constraints; |
| 2461 | 2459 | ||
| 2462 | if (c && c->name) | 2460 | name = rdev_get_name(rdev); |
| 2463 | name = c->name; | ||
| 2464 | else if (rdev->desc->name) | ||
| 2465 | name = rdev->desc->name; | ||
| 2466 | else | ||
| 2467 | name = "regulator"; | ||
| 2468 | 2461 | ||
| 2469 | if (!ops->disable || (c && c->always_on)) | 2462 | if (!ops->disable || (c && c->always_on)) |
| 2470 | continue; | 2463 | continue; |
