diff options
Diffstat (limited to 'include/linux/regmap.h')
| -rw-r--r-- | include/linux/regmap.h | 134 |
1 files changed, 133 insertions, 1 deletions
diff --git a/include/linux/regmap.h b/include/linux/regmap.h index eb93921cdd30..a90abb6bfa64 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h | |||
| @@ -13,12 +13,13 @@ | |||
| 13 | * published by the Free Software Foundation. | 13 | * published by the Free Software Foundation. |
| 14 | */ | 14 | */ |
| 15 | 15 | ||
| 16 | #include <linux/device.h> | ||
| 17 | #include <linux/list.h> | 16 | #include <linux/list.h> |
| 18 | 17 | ||
| 19 | struct module; | 18 | struct module; |
| 19 | struct device; | ||
| 20 | struct i2c_client; | 20 | struct i2c_client; |
| 21 | struct spi_device; | 21 | struct spi_device; |
| 22 | struct regmap; | ||
| 22 | 23 | ||
| 23 | /* An enum of all the supported cache types */ | 24 | /* An enum of all the supported cache types */ |
| 24 | enum regcache_type { | 25 | enum regcache_type { |
| @@ -40,10 +41,13 @@ struct reg_default { | |||
| 40 | unsigned int def; | 41 | unsigned int def; |
| 41 | }; | 42 | }; |
| 42 | 43 | ||
| 44 | #ifdef CONFIG_REGMAP | ||
| 45 | |||
| 43 | /** | 46 | /** |
| 44 | * Configuration for the register map of a device. | 47 | * Configuration for the register map of a device. |
| 45 | * | 48 | * |
| 46 | * @reg_bits: Number of bits in a register address, mandatory. | 49 | * @reg_bits: Number of bits in a register address, mandatory. |
| 50 | * @pad_bits: Number of bits of padding between register and value. | ||
| 47 | * @val_bits: Number of bits in a register value, mandatory. | 51 | * @val_bits: Number of bits in a register value, mandatory. |
| 48 | * | 52 | * |
| 49 | * @writeable_reg: Optional callback returning true if the register | 53 | * @writeable_reg: Optional callback returning true if the register |
| @@ -74,6 +78,7 @@ struct reg_default { | |||
| 74 | */ | 78 | */ |
| 75 | struct regmap_config { | 79 | struct regmap_config { |
| 76 | int reg_bits; | 80 | int reg_bits; |
| 81 | int pad_bits; | ||
| 77 | int val_bits; | 82 | int val_bits; |
| 78 | 83 | ||
| 79 | bool (*writeable_reg)(struct device *dev, unsigned int reg); | 84 | bool (*writeable_reg)(struct device *dev, unsigned int reg); |
| @@ -127,12 +132,22 @@ struct regmap *regmap_init_i2c(struct i2c_client *i2c, | |||
| 127 | struct regmap *regmap_init_spi(struct spi_device *dev, | 132 | struct regmap *regmap_init_spi(struct spi_device *dev, |
| 128 | const struct regmap_config *config); | 133 | const struct regmap_config *config); |
| 129 | 134 | ||
| 135 | struct regmap *devm_regmap_init(struct device *dev, | ||
| 136 | const struct regmap_bus *bus, | ||
| 137 | const struct regmap_config *config); | ||
| 138 | struct regmap *devm_regmap_init_i2c(struct i2c_client *i2c, | ||
| 139 | const struct regmap_config *config); | ||
| 140 | struct regmap *devm_regmap_init_spi(struct spi_device *dev, | ||
| 141 | const struct regmap_config *config); | ||
| 142 | |||
| 130 | void regmap_exit(struct regmap *map); | 143 | void regmap_exit(struct regmap *map); |
| 131 | int regmap_reinit_cache(struct regmap *map, | 144 | int regmap_reinit_cache(struct regmap *map, |
| 132 | const struct regmap_config *config); | 145 | const struct regmap_config *config); |
| 133 | int regmap_write(struct regmap *map, unsigned int reg, unsigned int val); | 146 | int regmap_write(struct regmap *map, unsigned int reg, unsigned int val); |
| 134 | int regmap_raw_write(struct regmap *map, unsigned int reg, | 147 | int regmap_raw_write(struct regmap *map, unsigned int reg, |
| 135 | const void *val, size_t val_len); | 148 | const void *val, size_t val_len); |
| 149 | int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val, | ||
| 150 | size_t val_count); | ||
| 136 | int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val); | 151 | int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val); |
| 137 | int regmap_raw_read(struct regmap *map, unsigned int reg, | 152 | int regmap_raw_read(struct regmap *map, unsigned int reg, |
| 138 | void *val, size_t val_len); | 153 | void *val, size_t val_len); |
| @@ -143,12 +158,18 @@ int regmap_update_bits(struct regmap *map, unsigned int reg, | |||
| 143 | int regmap_update_bits_check(struct regmap *map, unsigned int reg, | 158 | int regmap_update_bits_check(struct regmap *map, unsigned int reg, |
| 144 | unsigned int mask, unsigned int val, | 159 | unsigned int mask, unsigned int val, |
| 145 | bool *change); | 160 | bool *change); |
| 161 | int regmap_get_val_bytes(struct regmap *map); | ||
| 146 | 162 | ||
| 147 | int regcache_sync(struct regmap *map); | 163 | int regcache_sync(struct regmap *map); |
| 164 | int regcache_sync_region(struct regmap *map, unsigned int min, | ||
| 165 | unsigned int max); | ||
| 148 | void regcache_cache_only(struct regmap *map, bool enable); | 166 | void regcache_cache_only(struct regmap *map, bool enable); |
| 149 | void regcache_cache_bypass(struct regmap *map, bool enable); | 167 | void regcache_cache_bypass(struct regmap *map, bool enable); |
| 150 | void regcache_mark_dirty(struct regmap *map); | 168 | void regcache_mark_dirty(struct regmap *map); |
| 151 | 169 | ||
| 170 | int regmap_register_patch(struct regmap *map, const struct reg_default *regs, | ||
| 171 | int num_regs); | ||
| 172 | |||
| 152 | /** | 173 | /** |
| 153 | * Description of an IRQ for the generic regmap irq_chip. | 174 | * Description of an IRQ for the generic regmap irq_chip. |
| 154 | * | 175 | * |
| @@ -197,4 +218,115 @@ int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags, | |||
| 197 | void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *data); | 218 | void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *data); |
| 198 | int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data); | 219 | int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data); |
| 199 | 220 | ||
| 221 | #else | ||
| 222 | |||
| 223 | /* | ||
| 224 | * These stubs should only ever be called by generic code which has | ||
| 225 | * regmap based facilities, if they ever get called at runtime | ||
| 226 | * something is going wrong and something probably needs to select | ||
| 227 | * REGMAP. | ||
| 228 | */ | ||
| 229 | |||
| 230 | static inline int regmap_write(struct regmap *map, unsigned int reg, | ||
| 231 | unsigned int val) | ||
| 232 | { | ||
| 233 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 234 | return -EINVAL; | ||
| 235 | } | ||
| 236 | |||
| 237 | static inline int regmap_raw_write(struct regmap *map, unsigned int reg, | ||
| 238 | const void *val, size_t val_len) | ||
| 239 | { | ||
| 240 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 241 | return -EINVAL; | ||
| 242 | } | ||
| 243 | |||
| 244 | static inline int regmap_bulk_write(struct regmap *map, unsigned int reg, | ||
| 245 | const void *val, size_t val_count) | ||
| 246 | { | ||
| 247 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 248 | return -EINVAL; | ||
| 249 | } | ||
| 250 | |||
| 251 | static inline int regmap_read(struct regmap *map, unsigned int reg, | ||
| 252 | unsigned int *val) | ||
| 253 | { | ||
| 254 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 255 | return -EINVAL; | ||
| 256 | } | ||
| 257 | |||
| 258 | static inline int regmap_raw_read(struct regmap *map, unsigned int reg, | ||
| 259 | void *val, size_t val_len) | ||
| 260 | { | ||
| 261 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 262 | return -EINVAL; | ||
| 263 | } | ||
| 264 | |||
| 265 | static inline int regmap_bulk_read(struct regmap *map, unsigned int reg, | ||
| 266 | void *val, size_t val_count) | ||
| 267 | { | ||
| 268 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 269 | return -EINVAL; | ||
| 270 | } | ||
| 271 | |||
| 272 | static inline int regmap_update_bits(struct regmap *map, unsigned int reg, | ||
| 273 | unsigned int mask, unsigned int val) | ||
| 274 | { | ||
| 275 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 276 | return -EINVAL; | ||
| 277 | } | ||
| 278 | |||
| 279 | static inline int regmap_update_bits_check(struct regmap *map, | ||
| 280 | unsigned int reg, | ||
| 281 | unsigned int mask, unsigned int val, | ||
| 282 | bool *change) | ||
| 283 | { | ||
| 284 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 285 | return -EINVAL; | ||
| 286 | } | ||
| 287 | |||
| 288 | static inline int regmap_get_val_bytes(struct regmap *map) | ||
| 289 | { | ||
| 290 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 291 | return -EINVAL; | ||
| 292 | } | ||
| 293 | |||
| 294 | static inline int regcache_sync(struct regmap *map) | ||
| 295 | { | ||
| 296 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 297 | return -EINVAL; | ||
| 298 | } | ||
| 299 | |||
| 300 | static inline int regcache_sync_region(struct regmap *map, unsigned int min, | ||
| 301 | unsigned int max) | ||
| 302 | { | ||
| 303 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 304 | return -EINVAL; | ||
| 305 | } | ||
| 306 | |||
| 307 | static inline void regcache_cache_only(struct regmap *map, bool enable) | ||
| 308 | { | ||
| 309 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 310 | } | ||
| 311 | |||
| 312 | static inline void regcache_cache_bypass(struct regmap *map, bool enable) | ||
| 313 | { | ||
| 314 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 315 | } | ||
| 316 | |||
| 317 | static inline void regcache_mark_dirty(struct regmap *map) | ||
| 318 | { | ||
| 319 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 320 | } | ||
| 321 | |||
| 322 | static inline int regmap_register_patch(struct regmap *map, | ||
| 323 | const struct reg_default *regs, | ||
| 324 | int num_regs) | ||
| 325 | { | ||
| 326 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 327 | return -EINVAL; | ||
| 328 | } | ||
| 329 | |||
| 330 | #endif | ||
| 331 | |||
| 200 | #endif | 332 | #endif |
