Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
[pandora-kernel.git] / include / linux / regmap.h
1 #ifndef __LINUX_REGMAP_H
2 #define __LINUX_REGMAP_H
3
4 /*
5  * Register map access API
6  *
7  * Copyright 2011 Wolfson Microelectronics plc
8  *
9  * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License version 2 as
13  * published by the Free Software Foundation.
14  */
15
16 #include <linux/device.h>
17 #include <linux/list.h>
18 #include <linux/module.h>
19
20 struct i2c_client;
21 struct spi_device;
22
23 /* An enum of all the supported cache types */
24 enum regcache_type {
25         REGCACHE_NONE,
26         REGCACHE_INDEXED,
27         REGCACHE_RBTREE,
28         REGCACHE_LZO
29 };
30
31 /**
32  * Default value for a register.  We use an array of structs rather
33  * than a simple array as many modern devices have very sparse
34  * register maps.
35  *
36  * @reg: Register address.
37  * @def: Register default value.
38  */
39 struct reg_default {
40         unsigned int reg;
41         unsigned int def;
42 };
43
44 /**
45  * Configuration for the register map of a device.
46  *
47  * @reg_bits: Number of bits in a register address, mandatory.
48  * @val_bits: Number of bits in a register value, mandatory.
49  *
50  * @writeable_reg: Optional callback returning true if the register
51  *                 can be written to.
52  * @readable_reg: Optional callback returning true if the register
53  *                can be read from.
54  * @volatile_reg: Optional callback returning true if the register
55  *                value can't be cached.
56  * @precious_reg: Optional callback returning true if the rgister
57  *                should not be read outside of a call from the driver
58  *                (eg, a clear on read interrupt status register).
59  *
60  * @max_register: Optional, specifies the maximum valid register index.
61  * @reg_defaults: Power on reset values for registers (for use with
62  *                register cache support).
63  * @num_reg_defaults: Number of elements in reg_defaults.
64  *
65  * @read_flag_mask: Mask to be set in the top byte of the register when doing
66  *                  a read.
67  * @write_flag_mask: Mask to be set in the top byte of the register when doing
68  *                   a write. If both read_flag_mask and write_flag_mask are
69  *                   empty the regmap_bus default masks are used.
70  *
71  * @cache_type: The actual cache type.
72  * @reg_defaults_raw: Power on reset values for registers (for use with
73  *                    register cache support).
74  * @num_reg_defaults_raw: Number of elements in reg_defaults_raw.
75  */
76 struct regmap_config {
77         int reg_bits;
78         int val_bits;
79
80         bool (*writeable_reg)(struct device *dev, unsigned int reg);
81         bool (*readable_reg)(struct device *dev, unsigned int reg);
82         bool (*volatile_reg)(struct device *dev, unsigned int reg);
83         bool (*precious_reg)(struct device *dev, unsigned int reg);
84
85         unsigned int max_register;
86         struct reg_default *reg_defaults;
87         unsigned int num_reg_defaults;
88         enum regcache_type cache_type;
89         const void *reg_defaults_raw;
90         unsigned int num_reg_defaults_raw;
91
92         u8 read_flag_mask;
93         u8 write_flag_mask;
94 };
95
96 typedef int (*regmap_hw_write)(struct device *dev, const void *data,
97                                size_t count);
98 typedef int (*regmap_hw_gather_write)(struct device *dev,
99                                       const void *reg, size_t reg_len,
100                                       const void *val, size_t val_len);
101 typedef int (*regmap_hw_read)(struct device *dev,
102                               const void *reg_buf, size_t reg_size,
103                               void *val_buf, size_t val_size);
104
105 /**
106  * Description of a hardware bus for the register map infrastructure.
107  *
108  * @write: Write operation.
109  * @gather_write: Write operation with split register/value, return -ENOTSUPP
110  *                if not implemented  on a given device.
111  * @read: Read operation.  Data is returned in the buffer used to transmit
112  *         data.
113  * @read_flag_mask: Mask to be set in the top byte of the register when doing
114  *                  a read.
115  */
116 struct regmap_bus {
117         regmap_hw_write write;
118         regmap_hw_gather_write gather_write;
119         regmap_hw_read read;
120         u8 read_flag_mask;
121 };
122
123 struct regmap *regmap_init(struct device *dev,
124                            const struct regmap_bus *bus,
125                            const struct regmap_config *config);
126 struct regmap *regmap_init_i2c(struct i2c_client *i2c,
127                                const struct regmap_config *config);
128 struct regmap *regmap_init_spi(struct spi_device *dev,
129                                const struct regmap_config *config);
130
131 void regmap_exit(struct regmap *map);
132 int regmap_write(struct regmap *map, unsigned int reg, unsigned int val);
133 int regmap_raw_write(struct regmap *map, unsigned int reg,
134                      const void *val, size_t val_len);
135 int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val);
136 int regmap_raw_read(struct regmap *map, unsigned int reg,
137                     void *val, size_t val_len);
138 int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val,
139                      size_t val_count);
140 int regmap_update_bits(struct regmap *map, unsigned int reg,
141                        unsigned int mask, unsigned int val);
142
143 int regcache_sync(struct regmap *map);
144 void regcache_cache_only(struct regmap *map, bool enable);
145 void regcache_cache_bypass(struct regmap *map, bool enable);
146
147 #endif