diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/base/regmap/regmap.c | 10 | ||||
-rw-r--r-- | drivers/char/hw_random/atmel-rng.c | 7 | ||||
-rw-r--r-- | drivers/regulator/anatop-regulator.c | 2 | ||||
-rw-r--r-- | drivers/regulator/core.c | 3 | ||||
-rw-r--r-- | drivers/regulator/gpio-regulator.c | 16 | ||||
-rw-r--r-- | drivers/regulator/max8649.c | 1 | ||||
-rw-r--r-- | drivers/regulator/palmas-regulator.c | 7 |
7 files changed, 28 insertions, 18 deletions
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 0bcda488f11c..c89aa01fb1de 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c | |||
@@ -246,11 +246,11 @@ struct regmap *regmap_init(struct device *dev, | |||
246 | map->lock = regmap_lock_mutex; | 246 | map->lock = regmap_lock_mutex; |
247 | map->unlock = regmap_unlock_mutex; | 247 | map->unlock = regmap_unlock_mutex; |
248 | } | 248 | } |
249 | map->format.buf_size = (config->reg_bits + config->val_bits) / 8; | ||
250 | map->format.reg_bytes = DIV_ROUND_UP(config->reg_bits, 8); | 249 | map->format.reg_bytes = DIV_ROUND_UP(config->reg_bits, 8); |
251 | map->format.pad_bytes = config->pad_bits / 8; | 250 | map->format.pad_bytes = config->pad_bits / 8; |
252 | map->format.val_bytes = DIV_ROUND_UP(config->val_bits, 8); | 251 | map->format.val_bytes = DIV_ROUND_UP(config->val_bits, 8); |
253 | map->format.buf_size += map->format.pad_bytes; | 252 | map->format.buf_size = DIV_ROUND_UP(config->reg_bits + |
253 | config->val_bits + config->pad_bits, 8); | ||
254 | map->reg_shift = config->pad_bits % 8; | 254 | map->reg_shift = config->pad_bits % 8; |
255 | if (config->reg_stride) | 255 | if (config->reg_stride) |
256 | map->reg_stride = config->reg_stride; | 256 | map->reg_stride = config->reg_stride; |
@@ -368,7 +368,7 @@ struct regmap *regmap_init(struct device *dev, | |||
368 | 368 | ||
369 | ret = regcache_init(map, config); | 369 | ret = regcache_init(map, config); |
370 | if (ret < 0) | 370 | if (ret < 0) |
371 | goto err_free_workbuf; | 371 | goto err_debugfs; |
372 | 372 | ||
373 | /* Add a devres resource for dev_get_regmap() */ | 373 | /* Add a devres resource for dev_get_regmap() */ |
374 | m = devres_alloc(dev_get_regmap_release, sizeof(*m), GFP_KERNEL); | 374 | m = devres_alloc(dev_get_regmap_release, sizeof(*m), GFP_KERNEL); |
@@ -383,7 +383,8 @@ struct regmap *regmap_init(struct device *dev, | |||
383 | 383 | ||
384 | err_cache: | 384 | err_cache: |
385 | regcache_exit(map); | 385 | regcache_exit(map); |
386 | err_free_workbuf: | 386 | err_debugfs: |
387 | regmap_debugfs_exit(map); | ||
387 | kfree(map->work_buf); | 388 | kfree(map->work_buf); |
388 | err_map: | 389 | err_map: |
389 | kfree(map); | 390 | kfree(map); |
@@ -471,6 +472,7 @@ int regmap_reinit_cache(struct regmap *map, const struct regmap_config *config) | |||
471 | 472 | ||
472 | return ret; | 473 | return ret; |
473 | } | 474 | } |
475 | EXPORT_SYMBOL_GPL(regmap_reinit_cache); | ||
474 | 476 | ||
475 | /** | 477 | /** |
476 | * regmap_exit(): Free a previously allocated register map | 478 | * regmap_exit(): Free a previously allocated register map |
diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c index f518b99f53f5..6289f0eee24c 100644 --- a/drivers/char/hw_random/atmel-rng.c +++ b/drivers/char/hw_random/atmel-rng.c | |||
@@ -36,6 +36,13 @@ static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max, | |||
36 | /* data ready? */ | 36 | /* data ready? */ |
37 | if (readl(trng->base + TRNG_ODATA) & 1) { | 37 | if (readl(trng->base + TRNG_ODATA) & 1) { |
38 | *data = readl(trng->base + TRNG_ODATA); | 38 | *data = readl(trng->base + TRNG_ODATA); |
39 | /* | ||
40 | ensure data ready is only set again AFTER the next data | ||
41 | word is ready in case it got set between checking ISR | ||
42 | and reading ODATA, so we don't risk re-reading the | ||
43 | same word | ||
44 | */ | ||
45 | readl(trng->base + TRNG_ISR); | ||
39 | return 4; | 46 | return 4; |
40 | } else | 47 | } else |
41 | return 0; | 48 | return 0; |
diff --git a/drivers/regulator/anatop-regulator.c b/drivers/regulator/anatop-regulator.c index 3660bace123c..e82e7eaac0f1 100644 --- a/drivers/regulator/anatop-regulator.c +++ b/drivers/regulator/anatop-regulator.c | |||
@@ -224,7 +224,7 @@ static struct platform_driver anatop_regulator_driver = { | |||
224 | .of_match_table = of_anatop_regulator_match_tbl, | 224 | .of_match_table = of_anatop_regulator_match_tbl, |
225 | }, | 225 | }, |
226 | .probe = anatop_regulator_probe, | 226 | .probe = anatop_regulator_probe, |
227 | .remove = anatop_regulator_remove, | 227 | .remove = __devexit_p(anatop_regulator_remove), |
228 | }; | 228 | }; |
229 | 229 | ||
230 | static int __init anatop_regulator_init(void) | 230 | static int __init anatop_regulator_init(void) |
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 7584a74eec8a..09a737c868b5 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c | |||
@@ -2050,6 +2050,9 @@ int regulator_map_voltage_linear(struct regulator_dev *rdev, | |||
2050 | return -EINVAL; | 2050 | return -EINVAL; |
2051 | } | 2051 | } |
2052 | 2052 | ||
2053 | if (min_uV < rdev->desc->min_uV) | ||
2054 | min_uV = rdev->desc->min_uV; | ||
2055 | |||
2053 | ret = DIV_ROUND_UP(min_uV - rdev->desc->min_uV, rdev->desc->uV_step); | 2056 | ret = DIV_ROUND_UP(min_uV - rdev->desc->min_uV, rdev->desc->uV_step); |
2054 | if (ret < 0) | 2057 | if (ret < 0) |
2055 | return ret; | 2058 | return ret; |
diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c index 9997d7aaca84..242851a4c1a6 100644 --- a/drivers/regulator/gpio-regulator.c +++ b/drivers/regulator/gpio-regulator.c | |||
@@ -101,16 +101,20 @@ static int gpio_regulator_get_value(struct regulator_dev *dev) | |||
101 | } | 101 | } |
102 | 102 | ||
103 | static int gpio_regulator_set_value(struct regulator_dev *dev, | 103 | static int gpio_regulator_set_value(struct regulator_dev *dev, |
104 | int min, int max) | 104 | int min, int max, unsigned *selector) |
105 | { | 105 | { |
106 | struct gpio_regulator_data *data = rdev_get_drvdata(dev); | 106 | struct gpio_regulator_data *data = rdev_get_drvdata(dev); |
107 | int ptr, target, state, best_val = INT_MAX; | 107 | int ptr, target = 0, state, best_val = INT_MAX; |
108 | 108 | ||
109 | for (ptr = 0; ptr < data->nr_states; ptr++) | 109 | for (ptr = 0; ptr < data->nr_states; ptr++) |
110 | if (data->states[ptr].value < best_val && | 110 | if (data->states[ptr].value < best_val && |
111 | data->states[ptr].value >= min && | 111 | data->states[ptr].value >= min && |
112 | data->states[ptr].value <= max) | 112 | data->states[ptr].value <= max) { |
113 | target = data->states[ptr].gpios; | 113 | target = data->states[ptr].gpios; |
114 | best_val = data->states[ptr].value; | ||
115 | if (selector) | ||
116 | *selector = ptr; | ||
117 | } | ||
114 | 118 | ||
115 | if (best_val == INT_MAX) | 119 | if (best_val == INT_MAX) |
116 | return -EINVAL; | 120 | return -EINVAL; |
@@ -128,7 +132,7 @@ static int gpio_regulator_set_voltage(struct regulator_dev *dev, | |||
128 | int min_uV, int max_uV, | 132 | int min_uV, int max_uV, |
129 | unsigned *selector) | 133 | unsigned *selector) |
130 | { | 134 | { |
131 | return gpio_regulator_set_value(dev, min_uV, max_uV); | 135 | return gpio_regulator_set_value(dev, min_uV, max_uV, selector); |
132 | } | 136 | } |
133 | 137 | ||
134 | static int gpio_regulator_list_voltage(struct regulator_dev *dev, | 138 | static int gpio_regulator_list_voltage(struct regulator_dev *dev, |
@@ -145,7 +149,7 @@ static int gpio_regulator_list_voltage(struct regulator_dev *dev, | |||
145 | static int gpio_regulator_set_current_limit(struct regulator_dev *dev, | 149 | static int gpio_regulator_set_current_limit(struct regulator_dev *dev, |
146 | int min_uA, int max_uA) | 150 | int min_uA, int max_uA) |
147 | { | 151 | { |
148 | return gpio_regulator_set_value(dev, min_uA, max_uA); | 152 | return gpio_regulator_set_value(dev, min_uA, max_uA, NULL); |
149 | } | 153 | } |
150 | 154 | ||
151 | static struct regulator_ops gpio_regulator_voltage_ops = { | 155 | static struct regulator_ops gpio_regulator_voltage_ops = { |
@@ -286,7 +290,7 @@ static int __devinit gpio_regulator_probe(struct platform_device *pdev) | |||
286 | 290 | ||
287 | cfg.dev = &pdev->dev; | 291 | cfg.dev = &pdev->dev; |
288 | cfg.init_data = config->init_data; | 292 | cfg.init_data = config->init_data; |
289 | cfg.driver_data = &drvdata; | 293 | cfg.driver_data = drvdata; |
290 | 294 | ||
291 | drvdata->dev = regulator_register(&drvdata->desc, &cfg); | 295 | drvdata->dev = regulator_register(&drvdata->desc, &cfg); |
292 | if (IS_ERR(drvdata->dev)) { | 296 | if (IS_ERR(drvdata->dev)) { |
diff --git a/drivers/regulator/max8649.c b/drivers/regulator/max8649.c index 1f4bb80457b3..9d540cd02dab 100644 --- a/drivers/regulator/max8649.c +++ b/drivers/regulator/max8649.c | |||
@@ -259,6 +259,7 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client, | |||
259 | config.dev = &client->dev; | 259 | config.dev = &client->dev; |
260 | config.init_data = pdata->regulator; | 260 | config.init_data = pdata->regulator; |
261 | config.driver_data = info; | 261 | config.driver_data = info; |
262 | config.regmap = info->regmap; | ||
262 | 263 | ||
263 | info->regulator = regulator_register(&dcdc_desc, &config); | 264 | info->regulator = regulator_register(&dcdc_desc, &config); |
264 | if (IS_ERR(info->regulator)) { | 265 | if (IS_ERR(info->regulator)) { |
diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c index c4435f608df7..9b7ca90057d5 100644 --- a/drivers/regulator/palmas-regulator.c +++ b/drivers/regulator/palmas-regulator.c | |||
@@ -775,9 +775,6 @@ static __devinit int palmas_probe(struct platform_device *pdev) | |||
775 | err_unregister_regulator: | 775 | err_unregister_regulator: |
776 | while (--id >= 0) | 776 | while (--id >= 0) |
777 | regulator_unregister(pmic->rdev[id]); | 777 | regulator_unregister(pmic->rdev[id]); |
778 | kfree(pmic->rdev); | ||
779 | kfree(pmic->desc); | ||
780 | kfree(pmic); | ||
781 | return ret; | 778 | return ret; |
782 | } | 779 | } |
783 | 780 | ||
@@ -788,10 +785,6 @@ static int __devexit palmas_remove(struct platform_device *pdev) | |||
788 | 785 | ||
789 | for (id = 0; id < PALMAS_NUM_REGS; id++) | 786 | for (id = 0; id < PALMAS_NUM_REGS; id++) |
790 | regulator_unregister(pmic->rdev[id]); | 787 | regulator_unregister(pmic->rdev[id]); |
791 | |||
792 | kfree(pmic->rdev); | ||
793 | kfree(pmic->desc); | ||
794 | kfree(pmic); | ||
795 | return 0; | 788 | return 0; |
796 | } | 789 | } |
797 | 790 | ||