diff options
Diffstat (limited to 'drivers/base/regmap')
| -rw-r--r-- | drivers/base/regmap/regcache-rbtree.c | 2 | ||||
| -rw-r--r-- | drivers/base/regmap/regmap-irq.c | 1 | ||||
| -rw-r--r-- | drivers/base/regmap/regmap.c | 9 | 
3 files changed, 7 insertions, 5 deletions
diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c index e6732cf7c06..79f4fca9877 100644 --- a/drivers/base/regmap/regcache-rbtree.c +++ b/drivers/base/regmap/regcache-rbtree.c @@ -398,7 +398,7 @@ static int regcache_rbtree_sync(struct regmap *map, unsigned int min,  			base = 0;  		if (max < rbnode->base_reg + rbnode->blklen) -			end = rbnode->base_reg + rbnode->blklen - max; +			end = max - rbnode->base_reg + 1;  		else  			end = rbnode->blklen; diff --git a/drivers/base/regmap/regmap-irq.c b/drivers/base/regmap/regmap-irq.c index 4706c63d0bc..020ea2b9fd2 100644 --- a/drivers/base/regmap/regmap-irq.c +++ b/drivers/base/regmap/regmap-irq.c @@ -184,6 +184,7 @@ static irqreturn_t regmap_irq_thread(int irq, void *d)  		if (ret < 0) {  			dev_err(map->dev, "IRQ thread failed to resume: %d\n",  				ret); +			pm_runtime_put(map->dev);  			return IRQ_NONE;  		}  	} diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 3d2367501fd..d34adef1e63 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -710,12 +710,12 @@ skip_format_initialization:  		}  	} +	regmap_debugfs_init(map, config->name); +  	ret = regcache_init(map, config);  	if (ret != 0)  		goto err_range; -	regmap_debugfs_init(map, config->name); -  	/* Add a devres resource for dev_get_regmap() */  	m = devres_alloc(dev_get_regmap_release, sizeof(*m), GFP_KERNEL);  	if (!m) { @@ -943,8 +943,7 @@ static int _regmap_raw_write(struct regmap *map, unsigned int reg,  		unsigned int ival;  		int val_bytes = map->format.val_bytes;  		for (i = 0; i < val_len / val_bytes; i++) { -			memcpy(map->work_buf, val + (i * val_bytes), val_bytes); -			ival = map->format.parse_val(map->work_buf); +			ival = map->format.parse_val(val + (i * val_bytes));  			ret = regcache_write(map, reg + (i * map->reg_stride),  					     ival);  			if (ret) { @@ -1036,6 +1035,8 @@ static int _regmap_raw_write(struct regmap *map, unsigned int reg,  			kfree(async->work_buf);  			kfree(async);  		} + +		return ret;  	}  	trace_regmap_hw_write_start(map->dev, reg,  |