mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 22:23:14 -04:00
regmap: Add async I/O support
Allow drivers to take advantage of any support the underlying transports may have for pipelining data. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAABAgAGBQJREA1NAAoJELSic+t+oim9BtgQAJgUWoEWQ/0E62/PjjU/rg9I 6TOzf2KChApqV/a0XGuRmGAjODVKiQw2w8bEmfsGo0Xk2iowFb7ZnJtqOmt5vZCj sa8yOlQK5SQkmmdumXm6qLIc1br7tw7OockjubAfYzrA+Z4p7G08H2JqLxO+okt3 JQLrxIZ4scwrzY+9BSLjLvnWSn46XhJHCUTUvBg7Hr+IyokMO55Mmey57a4csRC+ R2Z90T9nqX4DyWSo6mWnWYSFV01rzNujPc4pENul0Y5vGg630CqXnRjhLrhvWM4a N7czOIBNa1DwLcT2x6B10kwYynkY+lU0XDqxnT0gynUkGI82KF2w4MgyCmYLAjFa U+YDTLWcuw2SPiBo0HhSbC1aFT/fW4xT2l77ijqXyb0gX2WvztMftituq4sWJ8Ey 3ILloWCD6Gcfb7QO4zIGM1n0hA2u8C8Qmylp/1Gd6q/DBF1D1Ry59DQpixWJEzaD KM/CQD1DovMcyQeTwLz33Rv+y9gzhVJRUpaMKIqvGoy0709jrLYd5TTN95u5e6zv 1L9PkKrYX0iOHHXOpUm4uREjA2UXazvhnhLXWK5JDqKv6R4ApXY0CumzP4HP8gtV wbo3MI4cGXNtdkmbsak6h2bJqDa8L2XIVZcWPnt3wGKKiRhiKRWNBzCu4+357Vuf LiZruRXwFv5WipBdz0TA =/cJO -----END PGP SIGNATURE----- Merge tag 'async' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap into asoc-adsp regmap: Add async I/O support Allow drivers to take advantage of any support the underlying transports may have for pipelining data.
This commit is contained in:
commit
4c47c2b0f8
4 changed files with 351 additions and 47 deletions
|
|
@ -235,14 +235,21 @@ struct regmap_range_cfg {
|
|||
unsigned int window_len;
|
||||
};
|
||||
|
||||
struct regmap_async;
|
||||
|
||||
typedef int (*regmap_hw_write)(void *context, const void *data,
|
||||
size_t count);
|
||||
typedef int (*regmap_hw_gather_write)(void *context,
|
||||
const void *reg, size_t reg_len,
|
||||
const void *val, size_t val_len);
|
||||
typedef int (*regmap_hw_async_write)(void *context,
|
||||
const void *reg, size_t reg_len,
|
||||
const void *val, size_t val_len,
|
||||
struct regmap_async *async);
|
||||
typedef int (*regmap_hw_read)(void *context,
|
||||
const void *reg_buf, size_t reg_size,
|
||||
void *val_buf, size_t val_size);
|
||||
typedef struct regmap_async *(*regmap_hw_async_alloc)(void);
|
||||
typedef void (*regmap_hw_free_context)(void *context);
|
||||
|
||||
/**
|
||||
|
|
@ -255,8 +262,11 @@ typedef void (*regmap_hw_free_context)(void *context);
|
|||
* @write: Write operation.
|
||||
* @gather_write: Write operation with split register/value, return -ENOTSUPP
|
||||
* if not implemented on a given device.
|
||||
* @async_write: Write operation which completes asynchronously, optional and
|
||||
* must serialise with respect to non-async I/O.
|
||||
* @read: Read operation. Data is returned in the buffer used to transmit
|
||||
* data.
|
||||
* @async_alloc: Allocate a regmap_async() structure.
|
||||
* @read_flag_mask: Mask to be set in the top byte of the register when doing
|
||||
* a read.
|
||||
* @reg_format_endian_default: Default endianness for formatted register
|
||||
|
|
@ -265,13 +275,16 @@ typedef void (*regmap_hw_free_context)(void *context);
|
|||
* @val_format_endian_default: Default endianness for formatted register
|
||||
* values. Used when the regmap_config specifies DEFAULT. If this is
|
||||
* DEFAULT, BIG is assumed.
|
||||
* @async_size: Size of struct used for async work.
|
||||
*/
|
||||
struct regmap_bus {
|
||||
bool fast_io;
|
||||
regmap_hw_write write;
|
||||
regmap_hw_gather_write gather_write;
|
||||
regmap_hw_async_write async_write;
|
||||
regmap_hw_read read;
|
||||
regmap_hw_free_context free_context;
|
||||
regmap_hw_async_alloc async_alloc;
|
||||
u8 read_flag_mask;
|
||||
enum regmap_endian reg_format_endian_default;
|
||||
enum regmap_endian val_format_endian_default;
|
||||
|
|
@ -310,6 +323,8 @@ 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_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);
|
||||
int regmap_raw_read(struct regmap *map, unsigned int reg,
|
||||
void *val, size_t val_len);
|
||||
|
|
@ -321,6 +336,7 @@ int regmap_update_bits_check(struct regmap *map, unsigned int reg,
|
|||
unsigned int mask, unsigned int val,
|
||||
bool *change);
|
||||
int regmap_get_val_bytes(struct regmap *map);
|
||||
int regmap_async_complete(struct regmap *map);
|
||||
|
||||
int regcache_sync(struct regmap *map);
|
||||
int regcache_sync_region(struct regmap *map, unsigned int min,
|
||||
|
|
@ -422,6 +438,13 @@ static inline int regmap_raw_write(struct regmap *map, unsigned int reg,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int regmap_raw_write_async(struct regmap *map, unsigned int reg,
|
||||
const void *val, size_t val_len)
|
||||
{
|
||||
WARN_ONCE(1, "regmap API is disabled");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int regmap_bulk_write(struct regmap *map, unsigned int reg,
|
||||
const void *val, size_t val_count)
|
||||
{
|
||||
|
|
@ -500,6 +523,11 @@ static inline void regcache_mark_dirty(struct regmap *map)
|
|||
WARN_ONCE(1, "regmap API is disabled");
|
||||
}
|
||||
|
||||
static inline void regmap_async_complete(struct regmap *map)
|
||||
{
|
||||
WARN_ONCE(1, "regmap API is disabled");
|
||||
}
|
||||
|
||||
static inline int regmap_register_patch(struct regmap *map,
|
||||
const struct reg_default *regs,
|
||||
int num_regs)
|
||||
|
|
|
|||
Loading…
Reference in a new issue