diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-23 14:14:47 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-07-23 14:14:47 -0400 |
| commit | f5fc87905ea075a0b14878086fd4fe38be128844 (patch) | |
| tree | 09d7ad146b737caefb472534de95ef53f95d7e65 /include | |
| parent | d4e06701b89286a306b31e20ec69a904fae374a1 (diff) | |
| parent | 90923351d480fffd0d24646db83f6f8315eed0d9 (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap:
regulator: Convert tps65023 to use regmap API
regmap: Add SPI bus support
regmap: Add I2C bus support
regmap: Add generic non-memory mapped register access API
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/regmap.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/include/linux/regmap.h b/include/linux/regmap.h new file mode 100644 index 000000000000..60a65cd7e1a0 --- /dev/null +++ b/include/linux/regmap.h | |||
| @@ -0,0 +1,82 @@ | |||
| 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 | struct regmap_config { | ||
| 24 | int reg_bits; | ||
| 25 | int val_bits; | ||
| 26 | }; | ||
| 27 | |||
| 28 | typedef int (*regmap_hw_write)(struct device *dev, const void *data, | ||
| 29 | size_t count); | ||
| 30 | typedef int (*regmap_hw_gather_write)(struct device *dev, | ||
| 31 | const void *reg, size_t reg_len, | ||
| 32 | const void *val, size_t val_len); | ||
| 33 | typedef int (*regmap_hw_read)(struct device *dev, | ||
| 34 | const void *reg_buf, size_t reg_size, | ||
| 35 | void *val_buf, size_t val_size); | ||
| 36 | |||
| 37 | /** | ||
| 38 | * Description of a hardware bus for the register map infrastructure. | ||
| 39 | * | ||
| 40 | * @list: Internal use. | ||
| 41 | * @type: Bus type, used to identify bus to be used for a device. | ||
| 42 | * @write: Write operation. | ||
| 43 | * @gather_write: Write operation with split register/value, return -ENOTSUPP | ||
| 44 | * if not implemented on a given device. | ||
| 45 | * @read: Read operation. Data is returned in the buffer used to transmit | ||
| 46 | * data. | ||
| 47 | * @owner: Module with the bus implementation, used to pin the implementation | ||
| 48 | * in memory. | ||
| 49 | * @read_flag_mask: Mask to be set in the top byte of the register when doing | ||
| 50 | * a read. | ||
| 51 | */ | ||
| 52 | struct regmap_bus { | ||
| 53 | struct list_head list; | ||
| 54 | struct bus_type *type; | ||
| 55 | regmap_hw_write write; | ||
| 56 | regmap_hw_gather_write gather_write; | ||
| 57 | regmap_hw_read read; | ||
| 58 | struct module *owner; | ||
| 59 | u8 read_flag_mask; | ||
| 60 | }; | ||
| 61 | |||
| 62 | struct regmap *regmap_init(struct device *dev, | ||
| 63 | const struct regmap_bus *bus, | ||
| 64 | const struct regmap_config *config); | ||
| 65 | struct regmap *regmap_init_i2c(struct i2c_client *i2c, | ||
| 66 | const struct regmap_config *config); | ||
| 67 | struct regmap *regmap_init_spi(struct spi_device *dev, | ||
| 68 | const struct regmap_config *config); | ||
| 69 | |||
| 70 | void regmap_exit(struct regmap *map); | ||
| 71 | int regmap_write(struct regmap *map, unsigned int reg, unsigned int val); | ||
| 72 | int regmap_raw_write(struct regmap *map, unsigned int reg, | ||
| 73 | const void *val, size_t val_len); | ||
| 74 | int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val); | ||
| 75 | int regmap_raw_read(struct regmap *map, unsigned int reg, | ||
| 76 | void *val, size_t val_len); | ||
| 77 | int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val, | ||
| 78 | size_t val_count); | ||
| 79 | int regmap_update_bits(struct regmap *map, unsigned int reg, | ||
| 80 | unsigned int mask, unsigned int val); | ||
| 81 | |||
| 82 | #endif | ||
