regmap: Add functions to check for access on registers
We're going to be using these in quite a few places so factor out the readable/writable/volatile/precious checks. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
Родитель
13c54137f7
Коммит
8de2f081ef
|
@ -48,6 +48,11 @@ struct regmap {
|
||||||
bool (*precious_reg)(struct device *dev, unsigned int reg);
|
bool (*precious_reg)(struct device *dev, unsigned int reg);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool regmap_writeable(struct regmap *map, unsigned int reg);
|
||||||
|
bool regmap_readable(struct regmap *map, unsigned int reg);
|
||||||
|
bool regmap_volatile(struct regmap *map, unsigned int reg);
|
||||||
|
bool regmap_precious(struct regmap *map, unsigned int reg);
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_FS
|
#ifdef CONFIG_DEBUG_FS
|
||||||
extern void regmap_debugfs_initcall(void);
|
extern void regmap_debugfs_initcall(void);
|
||||||
extern void regmap_debugfs_init(struct regmap *map);
|
extern void regmap_debugfs_init(struct regmap *map);
|
||||||
|
|
|
@ -52,12 +52,10 @@ static ssize_t regmap_map_read_file(struct file *file, char __user *user_buf,
|
||||||
tot_len = reg_len + val_len + 3; /* : \n */
|
tot_len = reg_len + val_len + 3; /* : \n */
|
||||||
|
|
||||||
for (i = 0; i < map->max_register; i++) {
|
for (i = 0; i < map->max_register; i++) {
|
||||||
if (map->readable_reg &&
|
if (!regmap_readable(map, i))
|
||||||
!map->readable_reg(map->dev, i))
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (map->precious_reg &&
|
if (regmap_precious(map, i))
|
||||||
map->precious_reg(map->dev, i))
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* If we're in the region the user is trying to read */
|
/* If we're in the region the user is trying to read */
|
||||||
|
|
|
@ -20,6 +20,50 @@
|
||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
|
bool regmap_writeable(struct regmap *map, unsigned int reg)
|
||||||
|
{
|
||||||
|
if (map->max_register && reg > map->max_register)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (map->writeable_reg)
|
||||||
|
return map->writeable_reg(map->dev, reg);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool regmap_readable(struct regmap *map, unsigned int reg)
|
||||||
|
{
|
||||||
|
if (map->max_register && reg > map->max_register)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (map->readable_reg)
|
||||||
|
return map->readable_reg(map->dev, reg);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool regmap_volatile(struct regmap *map, unsigned int reg)
|
||||||
|
{
|
||||||
|
if (map->max_register && reg > map->max_register)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (map->volatile_reg)
|
||||||
|
return map->volatile_reg(map->dev, reg);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool regmap_precious(struct regmap *map, unsigned int reg)
|
||||||
|
{
|
||||||
|
if (map->max_register && reg > map->max_register)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (map->precious_reg)
|
||||||
|
return map->precious_reg(map->dev, reg);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static void regmap_format_4_12_write(struct regmap *map,
|
static void regmap_format_4_12_write(struct regmap *map,
|
||||||
unsigned int reg, unsigned int val)
|
unsigned int reg, unsigned int val)
|
||||||
{
|
{
|
||||||
|
|
Загрузка…
Ссылка в новой задаче