Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 266985
b: refs/heads/master
c: 195af65
h: refs/heads/master
i:
  266983: 8c57f42
v: v3
  • Loading branch information
Dimitris Papastamos authored and Mark Brown committed Sep 19, 2011
1 parent 4220241 commit 93d4908
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9fabe24e9b1af84509b842731d2beaf85e66681e
refs/heads/master: 195af65ca92179ac2b524d35d732dc6fecec2744
2 changes: 1 addition & 1 deletion trunk/drivers/base/regmap/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
obj-$(CONFIG_REGMAP) += regmap.o regcache.o
obj-$(CONFIG_REGMAP) += regmap.o regcache.o regcache-indexed.o
obj-$(CONFIG_DEBUG_FS) += regmap-debugfs.o
obj-$(CONFIG_REGMAP_I2C) += regmap-i2c.o
obj-$(CONFIG_REGMAP_SPI) += regmap-spi.o
1 change: 1 addition & 0 deletions trunk/drivers/base/regmap/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,4 +118,5 @@ int regcache_lookup_reg(struct regmap *map, unsigned int reg);
int regcache_insert_reg(struct regmap *map, unsigned int reg,
unsigned int val);

extern struct regcache_ops regcache_indexed_ops;
#endif
65 changes: 65 additions & 0 deletions trunk/drivers/base/regmap/regcache-indexed.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/*
* Register cache access API - indexed caching support
*
* Copyright 2011 Wolfson Microelectronics plc
*
* Author: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/

#include <linux/slab.h>

#include "internal.h"

static int regcache_indexed_read(struct regmap *map, unsigned int reg,
unsigned int *value)
{
int ret;

ret = regcache_lookup_reg(map, reg);
if (ret < 0)
*value = 0;
else
*value = map->reg_defaults[ret].def;
return 0;
}

static int regcache_indexed_write(struct regmap *map, unsigned int reg,
unsigned int value)
{
int ret;

ret = regcache_lookup_reg(map, reg);
if (ret < 0)
return regcache_insert_reg(map, reg, value);
map->reg_defaults[ret].def = value;
return 0;
}

static int regcache_indexed_sync(struct regmap *map)
{
int i;
int ret;

for (i = 0; i < map->num_reg_defaults; i++) {
ret = regmap_write(map, map->reg_defaults[i].reg,
map->reg_defaults[i].def);
if (ret < 0)
return ret;
dev_dbg(map->dev, "Synced register %#x, value %#x\n",
map->reg_defaults[i].reg,
map->reg_defaults[i].def);
}
return 0;
}

struct regcache_ops regcache_indexed_ops = {
.type = REGCACHE_INDEXED,
.name = "indexed",
.read = regcache_indexed_read,
.write = regcache_indexed_write,
.sync = regcache_indexed_sync
};
1 change: 1 addition & 0 deletions trunk/drivers/base/regmap/regcache.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "internal.h"

static const struct regcache_ops *cache_types[] = {
&regcache_indexed_ops,
};

static int regcache_hw_init(struct regmap *map)
Expand Down
1 change: 1 addition & 0 deletions trunk/include/linux/regmap.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ struct spi_device;
/* An enum of all the supported cache types */
enum regcache_type {
REGCACHE_NONE,
REGCACHE_INDEXED,
};

/**
Expand Down

0 comments on commit 93d4908

Please sign in to comment.