Merge tag 'char-misc-3.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregk...
[sfrench/cifs-2.6.git] / include / linux / regmap.h
index 8cc73ac6f8884fbb8c877bb745e6e694c35155bb..85691b9b4fa76a778db7f338874849c27d99d74c 100644 (file)
@@ -164,6 +164,9 @@ typedef void (*regmap_unlock)(void *);
  * @use_single_rw: If set, converts the bulk read and write operations into
  *                 a series of single read and write operations. This is useful
  *                 for device that does not support bulk read and write.
+ * @can_multi_write: If set, the device supports the multi write mode of bulk
+ *                   write operations, if clear multi write requests will be
+ *                   split into individual write operations
  *
  * @cache_type: The actual cache type.
  * @reg_defaults_raw: Power on reset values for registers (for use with
@@ -215,6 +218,7 @@ struct regmap_config {
        u8 write_flag_mask;
 
        bool use_single_rw;
+       bool can_multi_write;
 
        enum regmap_endian reg_format_endian;
        enum regmap_endian val_format_endian;
@@ -317,6 +321,8 @@ struct regmap *regmap_init(struct device *dev,
                           const struct regmap_bus *bus,
                           void *bus_context,
                           const struct regmap_config *config);
+int regmap_attach_dev(struct device *dev, struct regmap *map,
+                                const struct regmap_config *config);
 struct regmap *regmap_init_i2c(struct i2c_client *i2c,
                               const struct regmap_config *config);
 struct regmap *regmap_init_spi(struct spi_device *dev,
@@ -390,8 +396,11 @@ int regmap_raw_write(struct regmap *map, unsigned int reg,
                     const void *val, size_t val_len);
 int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,
                        size_t val_count);
-int regmap_multi_reg_write(struct regmap *map, struct reg_default *regs,
+int regmap_multi_reg_write(struct regmap *map, const struct reg_default *regs,
                        int num_regs);
+int regmap_multi_reg_write_bypassed(struct regmap *map,
+                                   const struct reg_default *regs,
+                                   int num_regs);
 int regmap_raw_write_async(struct regmap *map, unsigned int reg,
                           const void *val, size_t val_len);
 int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val);
@@ -427,6 +436,8 @@ bool regmap_check_range_table(struct regmap *map, unsigned int reg,
 
 int regmap_register_patch(struct regmap *map, const struct reg_default *regs,
                          int num_regs);
+int regmap_parse_val(struct regmap *map, const void *buf,
+                               unsigned int *val);
 
 static inline bool regmap_reg_in_range(unsigned int reg,
                                       const struct regmap_range *range)
@@ -699,6 +710,13 @@ static inline int regmap_register_patch(struct regmap *map,
        return -EINVAL;
 }
 
+static inline int regmap_parse_val(struct regmap *map, const void *buf,
+                               unsigned int *val)
+{
+       WARN_ONCE(1, "regmap API is disabled");
+       return -EINVAL;
+}
+
 static inline struct regmap *dev_get_regmap(struct device *dev,
                                            const char *name)
 {