Merge branch 'topic/cache' of git://opensource.wolfsonmicro.com/regmap into for-3.3
This commit is contained in:
commit
c2b164fa8d
@ -74,6 +74,7 @@ struct regmap {
|
|||||||
struct reg_default *reg_defaults;
|
struct reg_default *reg_defaults;
|
||||||
const void *reg_defaults_raw;
|
const void *reg_defaults_raw;
|
||||||
void *cache;
|
void *cache;
|
||||||
|
bool cache_dirty;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct regcache_ops {
|
struct regcache_ops {
|
||||||
|
@ -241,6 +241,8 @@ int regcache_sync(struct regmap *map)
|
|||||||
map->cache_ops->name);
|
map->cache_ops->name);
|
||||||
name = map->cache_ops->name;
|
name = map->cache_ops->name;
|
||||||
trace_regcache_sync(map->dev, name, "start");
|
trace_regcache_sync(map->dev, name, "start");
|
||||||
|
if (!map->cache_dirty)
|
||||||
|
goto out;
|
||||||
if (map->cache_ops->sync) {
|
if (map->cache_ops->sync) {
|
||||||
ret = map->cache_ops->sync(map);
|
ret = map->cache_ops->sync(map);
|
||||||
} else {
|
} else {
|
||||||
@ -290,6 +292,23 @@ void regcache_cache_only(struct regmap *map, bool enable)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(regcache_cache_only);
|
EXPORT_SYMBOL_GPL(regcache_cache_only);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* regcache_mark_dirty: Mark the register cache as dirty
|
||||||
|
*
|
||||||
|
* @map: map to mark
|
||||||
|
*
|
||||||
|
* Mark the register cache as dirty, for example due to the device
|
||||||
|
* having been powered down for suspend. If the cache is not marked
|
||||||
|
* as dirty then the cache sync will be suppressed.
|
||||||
|
*/
|
||||||
|
void regcache_mark_dirty(struct regmap *map)
|
||||||
|
{
|
||||||
|
mutex_lock(&map->lock);
|
||||||
|
map->cache_dirty = true;
|
||||||
|
mutex_unlock(&map->lock);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(regcache_mark_dirty);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* regcache_cache_bypass: Put a register map into cache bypass mode
|
* regcache_cache_bypass: Put a register map into cache bypass mode
|
||||||
*
|
*
|
||||||
|
@ -306,8 +306,10 @@ int _regmap_write(struct regmap *map, unsigned int reg,
|
|||||||
ret = regcache_write(map, reg, val);
|
ret = regcache_write(map, reg, val);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
return ret;
|
||||||
if (map->cache_only)
|
if (map->cache_only) {
|
||||||
|
map->cache_dirty = true;
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
trace_regmap_reg_write(map->dev, reg, val);
|
trace_regmap_reg_write(map->dev, reg, val);
|
||||||
|
@ -143,5 +143,6 @@ int regmap_update_bits(struct regmap *map, unsigned int reg,
|
|||||||
int regcache_sync(struct regmap *map);
|
int regcache_sync(struct regmap *map);
|
||||||
void regcache_cache_only(struct regmap *map, bool enable);
|
void regcache_cache_only(struct regmap *map, bool enable);
|
||||||
void regcache_cache_bypass(struct regmap *map, bool enable);
|
void regcache_cache_bypass(struct regmap *map, bool enable);
|
||||||
|
void regcache_mark_dirty(struct regmap *map);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user