diff options
Diffstat (limited to 'include/linux/regmap.h')
-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 | ||