regmap.h 50.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#ifndef __LINUX_REGMAP_H
#define __LINUX_REGMAP_H

/*
 * Register map access API
 *
 * Copyright 2011 Wolfson Microelectronics plc
 *
 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#include <linux/list.h>
17
#include <linux/rbtree.h>
18
#include <linux/ktime.h>
19
#include <linux/delay.h>
20
#include <linux/err.h>
21
#include <linux/bug.h>
22
#include <linux/lockdep.h>
23

24
struct module;
25
struct clk;
26
struct device;
M
Mark Brown 已提交
27
struct i2c_client;
28
struct irq_domain;
S
Srinivas Kandagatla 已提交
29
struct slim_device;
M
Mark Brown 已提交
30
struct spi_device;
J
Josh Cartwright 已提交
31
struct spmi_device;
32
struct regmap;
33
struct regmap_range_cfg;
34
struct regmap_field;
35
struct snd_ac97;
V
Vinod Koul 已提交
36
struct sdw_slave;
M
Mark Brown 已提交
37

38 39 40
/* An enum of all the supported cache types */
enum regcache_type {
	REGCACHE_NONE,
41
	REGCACHE_RBTREE,
M
Mark Brown 已提交
42 43
	REGCACHE_COMPRESSED,
	REGCACHE_FLAT,
44 45
};

46
/**
47
 * struct reg_default - Default value for a register.
48 49 50
 *
 * @reg: Register address.
 * @def: Register default value.
51 52 53
 *
 * We use an array of structs rather than a simple array as many modern devices
 * have very sparse register maps.
54 55 56 57 58 59
 */
struct reg_default {
	unsigned int reg;
	unsigned int def;
};

60
/**
61
 * struct reg_sequence - An individual write from a sequence of writes.
62 63 64
 *
 * @reg: Register address.
 * @def: Register value.
65
 * @delay_us: Delay to be applied after the register write in microseconds
66 67 68
 *
 * Register/value pairs for sequences of writes with an optional delay in
 * microseconds to be applied after each write.
69 70 71 72
 */
struct reg_sequence {
	unsigned int reg;
	unsigned int def;
73
	unsigned int delay_us;
74 75
};

76 77
#define	regmap_update_bits(map, reg, mask, val) \
	regmap_update_bits_base(map, reg, mask, val, NULL, false, false)
78 79
#define	regmap_update_bits_async(map, reg, mask, val)\
	regmap_update_bits_base(map, reg, mask, val, NULL, true, false)
80 81
#define	regmap_update_bits_check(map, reg, mask, val, change)\
	regmap_update_bits_base(map, reg, mask, val, change, false, false)
82 83
#define	regmap_update_bits_check_async(map, reg, mask, val, change)\
	regmap_update_bits_base(map, reg, mask, val, change, true, false)
84

85 86 87
#define	regmap_write_bits(map, reg, mask, val) \
	regmap_update_bits_base(map, reg, mask, val, NULL, false, true)

88 89
#define	regmap_field_write(field, val) \
	regmap_field_update_bits_base(field, ~0, val, NULL, false, false)
90 91
#define	regmap_field_force_write(field, val) \
	regmap_field_update_bits_base(field, ~0, val, NULL, false, true)
92 93
#define	regmap_field_update_bits(field, mask, val)\
	regmap_field_update_bits_base(field, mask, val, NULL, false, false)
94 95
#define	regmap_field_force_update_bits(field, mask, val) \
	regmap_field_update_bits_base(field, mask, val, NULL, false, true)
96

97 98
#define	regmap_fields_write(field, id, val) \
	regmap_fields_update_bits_base(field, id, ~0, val, NULL, false, false)
99 100
#define	regmap_fields_force_write(field, id, val) \
	regmap_fields_update_bits_base(field, id, ~0, val, NULL, false, true)
101 102
#define	regmap_fields_update_bits(field, id, mask, val)\
	regmap_fields_update_bits_base(field, id, mask, val, NULL, false, false)
103 104
#define	regmap_fields_force_update_bits(field, id, mask, val) \
	regmap_fields_update_bits_base(field, id, mask, val, NULL, false, true)
105

106 107
/**
 * regmap_read_poll_timeout - Poll until a condition is met or a timeout occurs
108
 *
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
 * @map: Regmap to read from
 * @addr: Address to poll
 * @val: Unsigned integer variable to read the value into
 * @cond: Break condition (usually involving @val)
 * @sleep_us: Maximum time to sleep between reads in us (0
 *            tight-loops).  Should be less than ~20ms since usleep_range
 *            is used (see Documentation/timers/timers-howto.txt).
 * @timeout_us: Timeout in us, 0 means never timeout
 *
 * Returns 0 on success and -ETIMEDOUT upon a timeout or the regmap_read
 * error return value in case of a error read. In the two former cases,
 * the last read value at @addr is stored in @val. Must not be called
 * from atomic context if sleep_us or timeout_us are used.
 *
 * This is modelled after the readx_poll_timeout macros in linux/iopoll.h.
 */
#define regmap_read_poll_timeout(map, addr, val, cond, sleep_us, timeout_us) \
({ \
127 128 129
	u64 __timeout_us = (timeout_us); \
	unsigned long __sleep_us = (sleep_us); \
	ktime_t __timeout = ktime_add_us(ktime_get(), __timeout_us); \
130
	int __ret; \
131
	might_sleep_if(__sleep_us); \
132
	for (;;) { \
133 134
		__ret = regmap_read((map), (addr), &(val)); \
		if (__ret) \
135 136 137
			break; \
		if (cond) \
			break; \
138
		if ((__timeout_us) && \
139 140
		    ktime_compare(ktime_get(), __timeout) > 0) { \
			__ret = regmap_read((map), (addr), &(val)); \
141 142
			break; \
		} \
143 144
		if (__sleep_us) \
			usleep_range((__sleep_us >> 2) + 1, __sleep_us); \
145
	} \
146
	__ret ?: ((cond) ? 0 : -ETIMEDOUT); \
147 148
})

149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
/**
 * regmap_field_read_poll_timeout - Poll until a condition is met or timeout
 *
 * @field: Regmap field to read from
 * @val: Unsigned integer variable to read the value into
 * @cond: Break condition (usually involving @val)
 * @sleep_us: Maximum time to sleep between reads in us (0
 *            tight-loops).  Should be less than ~20ms since usleep_range
 *            is used (see Documentation/timers/timers-howto.txt).
 * @timeout_us: Timeout in us, 0 means never timeout
 *
 * Returns 0 on success and -ETIMEDOUT upon a timeout or the regmap_field_read
 * error return value in case of a error read. In the two former cases,
 * the last read value at @addr is stored in @val. Must not be called
 * from atomic context if sleep_us or timeout_us are used.
 *
 * This is modelled after the readx_poll_timeout macros in linux/iopoll.h.
 */
#define regmap_field_read_poll_timeout(field, val, cond, sleep_us, timeout_us) \
({ \
169 170 171
	u64 __timeout_us = (timeout_us); \
	unsigned long __sleep_us = (sleep_us); \
	ktime_t timeout = ktime_add_us(ktime_get(), __timeout_us); \
172
	int pollret; \
173
	might_sleep_if(__sleep_us); \
174 175 176 177 178 179
	for (;;) { \
		pollret = regmap_field_read((field), &(val)); \
		if (pollret) \
			break; \
		if (cond) \
			break; \
180
		if (__timeout_us && ktime_compare(ktime_get(), timeout) > 0) { \
181 182 183
			pollret = regmap_field_read((field), &(val)); \
			break; \
		} \
184 185
		if (__sleep_us) \
			usleep_range((__sleep_us >> 2) + 1, __sleep_us); \
186 187 188 189
	} \
	pollret ?: ((cond) ? 0 : -ETIMEDOUT); \
})

190 191
#ifdef CONFIG_REGMAP

192 193 194 195 196 197 198 199
enum regmap_endian {
	/* Unspecified -> 0 -> Backwards compatible default */
	REGMAP_ENDIAN_DEFAULT = 0,
	REGMAP_ENDIAN_BIG,
	REGMAP_ENDIAN_LITTLE,
	REGMAP_ENDIAN_NATIVE,
};

200
/**
201 202
 * struct regmap_range - A register range, used for access related checks
 *                       (readable/writeable/volatile/precious checks)
203 204 205 206 207 208 209 210 211
 *
 * @range_min: address of first register
 * @range_max: address of last register
 */
struct regmap_range {
	unsigned int range_min;
	unsigned int range_max;
};

212 213
#define regmap_reg_range(low, high) { .range_min = low, .range_max = high, }

214 215
/**
 * struct regmap_access_table - A table of register ranges for access checks
216 217 218 219 220
 *
 * @yes_ranges : pointer to an array of regmap ranges used as "yes ranges"
 * @n_yes_ranges: size of the above array
 * @no_ranges: pointer to an array of regmap ranges used as "no ranges"
 * @n_no_ranges: size of the above array
221 222 223 224 225
 *
 * A table of ranges including some yes ranges and some no ranges.
 * If a register belongs to a no_range, the corresponding check function
 * will return false. If a register belongs to a yes range, the corresponding
 * check function will return true. "no_ranges" are searched first.
226 227 228 229 230 231 232 233
 */
struct regmap_access_table {
	const struct regmap_range *yes_ranges;
	unsigned int n_yes_ranges;
	const struct regmap_range *no_ranges;
	unsigned int n_no_ranges;
};

234 235 236
typedef void (*regmap_lock)(void *);
typedef void (*regmap_unlock)(void *);

237
/**
238
 * struct regmap_config - Configuration for the register map of a device.
239
 *
240 241 242
 * @name: Optional name of the regmap. Useful when a device has multiple
 *        register regions.
 *
243
 * @reg_bits: Number of bits in a register address, mandatory.
244 245 246
 * @reg_stride: The register address stride. Valid register addresses are a
 *              multiple of this value. If set to 0, a value of 1 will be
 *              used.
247
 * @pad_bits: Number of bits of padding between register and value.
248
 * @val_bits: Number of bits in a register value, mandatory.
249
 *
250
 * @writeable_reg: Optional callback returning true if the register
251 252 253 254
 *		   can be written to. If this field is NULL but wr_table
 *		   (see below) is not, the check is performed on such table
 *                 (a register is writeable if it belongs to one of the ranges
 *                  specified by wr_table).
255
 * @readable_reg: Optional callback returning true if the register
256 257 258 259
 *		  can be read from. If this field is NULL but rd_table
 *		   (see below) is not, the check is performed on such table
 *                 (a register is readable if it belongs to one of the ranges
 *                  specified by rd_table).
260
 * @volatile_reg: Optional callback returning true if the register
261 262 263 264
 *		  value can't be cached. If this field is NULL but
 *		  volatile_table (see below) is not, the check is performed on
 *                such table (a register is volatile if it belongs to one of
 *                the ranges specified by volatile_table).
L
Laszlo Papp 已提交
265
 * @precious_reg: Optional callback returning true if the register
266
 *		  should not be read outside of a call from the driver
L
Laszlo Papp 已提交
267
 *		  (e.g., a clear on read interrupt status register). If this
268 269 270
 *                field is NULL but precious_table (see below) is not, the
 *                check is performed on such table (a register is precious if
 *                it belongs to one of the ranges specified by precious_table).
B
Ben Whitten 已提交
271 272 273 274 275 276 277
 * @writeable_noinc_reg: Optional callback returning true if the register
 *			supports multiple write operations without incrementing
 *			the register number. If this field is NULL but
 *			wr_noinc_table (see below) is not, the check is
 *			performed on such table (a register is no increment
 *			writeable if it belongs to one of the ranges specified
 *			by wr_noinc_table).
278 279 280 281 282 283 284
 * @readable_noinc_reg: Optional callback returning true if the register
 *			supports multiple read operations without incrementing
 *			the register number. If this field is NULL but
 *			rd_noinc_table (see below) is not, the check is
 *			performed on such table (a register is no increment
 *			readable if it belongs to one of the ranges specified
 *			by rd_noinc_table).
285 286 287
 * @disable_locking: This regmap is either protected by external means or
 *                   is guaranteed not be be accessed from multiple threads.
 *                   Don't use any locking mechanisms.
288 289 290 291 292 293
 * @lock:	  Optional lock callback (overrides regmap's default lock
 *		  function, based on spinlock or mutex).
 * @unlock:	  As above for unlocking.
 * @lock_arg:	  this field is passed as the only argument of lock/unlock
 *		  functions (ignored in case regular lock/unlock functions
 *		  are not overridden).
294 295
 * @reg_read:	  Optional callback that if filled will be used to perform
 *           	  all the reads from the registers. Should only be provided for
L
Laszlo Papp 已提交
296 297 298
 *		  devices whose read operation cannot be represented as a simple
 *		  read operation on a bus such as SPI, I2C, etc. Most of the
 *		  devices do not need this.
299 300 301 302 303 304 305
 * @reg_write:	  Same as above for writing.
 * @fast_io:	  Register IO is fast. Use a spinlock instead of a mutex
 *	     	  to perform locking. This field is ignored if custom lock/unlock
 *	     	  functions are used (see fields lock/unlock of struct regmap_config).
 *		  This field is a duplicate of a similar file in
 *		  'struct regmap_bus' and serves exact same purpose.
 *		   Use it only for "no-bus" cases.
306
 * @max_register: Optional, specifies the maximum valid register address.
307 308 309 310 311
 * @wr_table:     Optional, points to a struct regmap_access_table specifying
 *                valid ranges for write access.
 * @rd_table:     As above, for read access.
 * @volatile_table: As above, for volatile registers.
 * @precious_table: As above, for precious registers.
B
Ben Whitten 已提交
312
 * @wr_noinc_table: As above, for no increment writeable registers.
313
 * @rd_noinc_table: As above, for no increment readable registers.
314 315 316
 * @reg_defaults: Power on reset values for registers (for use with
 *                register cache support).
 * @num_reg_defaults: Number of elements in reg_defaults.
317
 *
318
 * @read_flag_mask: Mask to be set in the top bytes of the register when doing
319
 *                  a read.
320
 * @write_flag_mask: Mask to be set in the top bytes of the register when doing
321
 *                   a write. If both read_flag_mask and write_flag_mask are
322 323 324 325
 *                   empty and zero_flag_mask is not set the regmap_bus default
 *                   masks are used.
 * @zero_flag_mask: If set, read_flag_mask and write_flag_mask are used even
 *                   if they are both empty.
326 327 328 329 330 331
 * @use_single_read: If set, converts the bulk read operation into a series of
 *                   single read operations. This is useful for a device that
 *                   does not support  bulk read.
 * @use_single_write: If set, converts the bulk write operation into a series of
 *                    single write operations. This is useful for a device that
 *                    does not support bulk write.
332 333 334
 * @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
335 336 337 338 339
 *
 * @cache_type: The actual cache type.
 * @reg_defaults_raw: Power on reset values for registers (for use with
 *                    register cache support).
 * @num_reg_defaults_raw: Number of elements in reg_defaults_raw.
340 341 342 343 344 345
 * @reg_format_endian: Endianness for formatted register addresses. If this is
 *                     DEFAULT, the @reg_format_endian_default value from the
 *                     regmap bus is used.
 * @val_format_endian: Endianness for formatted register values. If this is
 *                     DEFAULT, the @reg_format_endian_default value from the
 *                     regmap bus is used.
346 347 348
 *
 * @ranges: Array of configuration entries for virtual address ranges.
 * @num_ranges: Number of range configuration entries.
349
 * @use_hwlock: Indicate if a hardware spinlock should be used.
350 351 352
 * @hwlock_id: Specify the hardware spinlock id.
 * @hwlock_mode: The hardware spinlock mode, should be HWLOCK_IRQSTATE,
 *		 HWLOCK_IRQ or 0.
353
 */
354
struct regmap_config {
355 356
	const char *name;

357
	int reg_bits;
358
	int reg_stride;
359
	int pad_bits;
360
	int val_bits;
361 362 363 364

	bool (*writeable_reg)(struct device *dev, unsigned int reg);
	bool (*readable_reg)(struct device *dev, unsigned int reg);
	bool (*volatile_reg)(struct device *dev, unsigned int reg);
365
	bool (*precious_reg)(struct device *dev, unsigned int reg);
B
Ben Whitten 已提交
366
	bool (*writeable_noinc_reg)(struct device *dev, unsigned int reg);
367
	bool (*readable_noinc_reg)(struct device *dev, unsigned int reg);
368 369

	bool disable_locking;
370 371 372
	regmap_lock lock;
	regmap_unlock unlock;
	void *lock_arg;
373

374 375 376 377 378
	int (*reg_read)(void *context, unsigned int reg, unsigned int *val);
	int (*reg_write)(void *context, unsigned int reg, unsigned int val);

	bool fast_io;

379
	unsigned int max_register;
380 381 382 383
	const struct regmap_access_table *wr_table;
	const struct regmap_access_table *rd_table;
	const struct regmap_access_table *volatile_table;
	const struct regmap_access_table *precious_table;
B
Ben Whitten 已提交
384
	const struct regmap_access_table *wr_noinc_table;
385
	const struct regmap_access_table *rd_noinc_table;
386
	const struct reg_default *reg_defaults;
387 388 389 390
	unsigned int num_reg_defaults;
	enum regcache_type cache_type;
	const void *reg_defaults_raw;
	unsigned int num_reg_defaults_raw;
391

392 393
	unsigned long read_flag_mask;
	unsigned long write_flag_mask;
394
	bool zero_flag_mask;
395

396 397
	bool use_single_read;
	bool use_single_write;
398
	bool can_multi_write;
399 400 401

	enum regmap_endian reg_format_endian;
	enum regmap_endian val_format_endian;
402

403
	const struct regmap_range_cfg *ranges;
M
Mark Brown 已提交
404
	unsigned int num_ranges;
405

406
	bool use_hwlock;
407 408
	unsigned int hwlock_id;
	unsigned int hwlock_mode;
409 410 411
};

/**
412 413
 * struct regmap_range_cfg - Configuration for indirectly accessed or paged
 *                           registers.
414
 *
M
Mark Brown 已提交
415 416
 * @name: Descriptive name for diagnostics
 *
417 418 419
 * @range_min: Address of the lowest register address in virtual range.
 * @range_max: Address of the highest register in virtual range.
 *
420 421 422
 * @selector_reg: Register with selector field.
 * @selector_mask: Bit shift for selector value.
 * @selector_shift: Bit mask for selector value.
423 424 425
 *
 * @window_start: Address of first (lowest) register in data window.
 * @window_len: Number of registers in data window.
426 427 428 429
 *
 * Registers, mapped to this virtual range, are accessed in two steps:
 *     1. page selector register update;
 *     2. access through data window registers.
430 431
 */
struct regmap_range_cfg {
M
Mark Brown 已提交
432 433
	const char *name;

434 435 436 437 438 439 440 441 442 443 444 445
	/* Registers of virtual address range */
	unsigned int range_min;
	unsigned int range_max;

	/* Page selector for indirect addressing */
	unsigned int selector_reg;
	unsigned int selector_mask;
	int selector_shift;

	/* Data window (per each page) */
	unsigned int window_start;
	unsigned int window_len;
446 447
};

448 449
struct regmap_async;

450
typedef int (*regmap_hw_write)(void *context, const void *data,
451
			       size_t count);
452
typedef int (*regmap_hw_gather_write)(void *context,
453 454
				      const void *reg, size_t reg_len,
				      const void *val, size_t val_len);
455 456 457 458
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);
459
typedef int (*regmap_hw_read)(void *context,
460 461
			      const void *reg_buf, size_t reg_size,
			      void *val_buf, size_t val_size);
462 463 464 465
typedef int (*regmap_hw_reg_read)(void *context, unsigned int reg,
				  unsigned int *val);
typedef int (*regmap_hw_reg_write)(void *context, unsigned int reg,
				   unsigned int val);
466 467
typedef int (*regmap_hw_reg_update_bits)(void *context, unsigned int reg,
					 unsigned int mask, unsigned int val);
468
typedef struct regmap_async *(*regmap_hw_async_alloc)(void);
469
typedef void (*regmap_hw_free_context)(void *context);
470 471

/**
472 473
 * struct regmap_bus - Description of a hardware bus for the register map
 *                     infrastructure.
474
 *
475
 * @fast_io: Register IO is fast. Use a spinlock instead of a mutex
476 477 478
 *	     to perform locking. This field is ignored if custom lock/unlock
 *	     functions are used (see fields lock/unlock of
 *	     struct regmap_config).
479 480 481
 * @write: Write operation.
 * @gather_write: Write operation with split register/value, return -ENOTSUPP
 *                if not implemented  on a given device.
482 483
 * @async_write: Write operation which completes asynchronously, optional and
 *               must serialise with respect to non-async I/O.
484 485
 * @reg_write: Write a single register value to the given register address. This
 *             write operation has to complete when returning from the function.
486 487 488 489
 * @reg_update_bits: Update bits operation to be used against volatile
 *                   registers, intended for devices supporting some mechanism
 *                   for setting clearing bits without having to
 *                   read/modify/write.
490 491
 * @read: Read operation.  Data is returned in the buffer used to transmit
 *         data.
492 493
 * @reg_read: Read a single register value from a given register address.
 * @free_context: Free context.
494
 * @async_alloc: Allocate a regmap_async() structure.
495 496
 * @read_flag_mask: Mask to be set in the top byte of the register when doing
 *                  a read.
497 498 499 500 501 502
 * @reg_format_endian_default: Default endianness for formatted register
 *     addresses. Used when the regmap_config specifies DEFAULT. If this is
 *     DEFAULT, BIG is assumed.
 * @val_format_endian_default: Default endianness for formatted register
 *     values. Used when the regmap_config specifies DEFAULT. If this is
 *     DEFAULT, BIG is assumed.
503 504
 * @max_raw_read: Max raw read size that can be used on the bus.
 * @max_raw_write: Max raw write size that can be used on the bus.
505 506
 */
struct regmap_bus {
507
	bool fast_io;
508 509
	regmap_hw_write write;
	regmap_hw_gather_write gather_write;
510
	regmap_hw_async_write async_write;
511
	regmap_hw_reg_write reg_write;
512
	regmap_hw_reg_update_bits reg_update_bits;
513
	regmap_hw_read read;
514
	regmap_hw_reg_read reg_read;
515
	regmap_hw_free_context free_context;
516
	regmap_hw_async_alloc async_alloc;
517
	u8 read_flag_mask;
518 519
	enum regmap_endian reg_format_endian_default;
	enum regmap_endian val_format_endian_default;
520 521
	size_t max_raw_read;
	size_t max_raw_write;
522 523
};

524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540
/*
 * __regmap_init functions.
 *
 * These functions take a lock key and name parameter, and should not be called
 * directly. Instead, use the regmap_init macros that generate a key and name
 * for each call.
 */
struct regmap *__regmap_init(struct device *dev,
			     const struct regmap_bus *bus,
			     void *bus_context,
			     const struct regmap_config *config,
			     struct lock_class_key *lock_key,
			     const char *lock_name);
struct regmap *__regmap_init_i2c(struct i2c_client *i2c,
				 const struct regmap_config *config,
				 struct lock_class_key *lock_key,
				 const char *lock_name);
A
Akinobu Mita 已提交
541 542 543 544
struct regmap *__regmap_init_sccb(struct i2c_client *i2c,
				  const struct regmap_config *config,
				  struct lock_class_key *lock_key,
				  const char *lock_name);
S
Srinivas Kandagatla 已提交
545 546 547 548
struct regmap *__regmap_init_slimbus(struct slim_device *slimbus,
				 const struct regmap_config *config,
				 struct lock_class_key *lock_key,
				 const char *lock_name);
549 550 551 552 553 554 555 556 557 558 559 560
struct regmap *__regmap_init_spi(struct spi_device *dev,
				 const struct regmap_config *config,
				 struct lock_class_key *lock_key,
				 const char *lock_name);
struct regmap *__regmap_init_spmi_base(struct spmi_device *dev,
				       const struct regmap_config *config,
				       struct lock_class_key *lock_key,
				       const char *lock_name);
struct regmap *__regmap_init_spmi_ext(struct spmi_device *dev,
				      const struct regmap_config *config,
				      struct lock_class_key *lock_key,
				      const char *lock_name);
561 562 563 564
struct regmap *__regmap_init_w1(struct device *w1_dev,
				 const struct regmap_config *config,
				 struct lock_class_key *lock_key,
				 const char *lock_name);
565 566 567 568 569 570 571 572 573
struct regmap *__regmap_init_mmio_clk(struct device *dev, const char *clk_id,
				      void __iomem *regs,
				      const struct regmap_config *config,
				      struct lock_class_key *lock_key,
				      const char *lock_name);
struct regmap *__regmap_init_ac97(struct snd_ac97 *ac97,
				  const struct regmap_config *config,
				  struct lock_class_key *lock_key,
				  const char *lock_name);
V
Vinod Koul 已提交
574 575 576 577
struct regmap *__regmap_init_sdw(struct sdw_slave *sdw,
				 const struct regmap_config *config,
				 struct lock_class_key *lock_key,
				 const char *lock_name);
578 579 580 581 582 583 584 585 586 587 588

struct regmap *__devm_regmap_init(struct device *dev,
				  const struct regmap_bus *bus,
				  void *bus_context,
				  const struct regmap_config *config,
				  struct lock_class_key *lock_key,
				  const char *lock_name);
struct regmap *__devm_regmap_init_i2c(struct i2c_client *i2c,
				      const struct regmap_config *config,
				      struct lock_class_key *lock_key,
				      const char *lock_name);
A
Akinobu Mita 已提交
589 590 591 592
struct regmap *__devm_regmap_init_sccb(struct i2c_client *i2c,
				       const struct regmap_config *config,
				       struct lock_class_key *lock_key,
				       const char *lock_name);
593 594 595 596 597 598 599 600 601 602 603 604
struct regmap *__devm_regmap_init_spi(struct spi_device *dev,
				      const struct regmap_config *config,
				      struct lock_class_key *lock_key,
				      const char *lock_name);
struct regmap *__devm_regmap_init_spmi_base(struct spmi_device *dev,
					    const struct regmap_config *config,
					    struct lock_class_key *lock_key,
					    const char *lock_name);
struct regmap *__devm_regmap_init_spmi_ext(struct spmi_device *dev,
					   const struct regmap_config *config,
					   struct lock_class_key *lock_key,
					   const char *lock_name);
605 606 607 608
struct regmap *__devm_regmap_init_w1(struct device *w1_dev,
				      const struct regmap_config *config,
				      struct lock_class_key *lock_key,
				      const char *lock_name);
609 610 611 612 613 614 615 616 617 618
struct regmap *__devm_regmap_init_mmio_clk(struct device *dev,
					   const char *clk_id,
					   void __iomem *regs,
					   const struct regmap_config *config,
					   struct lock_class_key *lock_key,
					   const char *lock_name);
struct regmap *__devm_regmap_init_ac97(struct snd_ac97 *ac97,
				       const struct regmap_config *config,
				       struct lock_class_key *lock_key,
				       const char *lock_name);
V
Vinod Koul 已提交
619 620 621 622
struct regmap *__devm_regmap_init_sdw(struct sdw_slave *sdw,
				 const struct regmap_config *config,
				 struct lock_class_key *lock_key,
				 const char *lock_name);
623 624 625 626
struct regmap *__devm_regmap_init_slimbus(struct slim_device *slimbus,
				 const struct regmap_config *config,
				 struct lock_class_key *lock_key,
				 const char *lock_name);
627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648
/*
 * Wrapper for regmap_init macros to include a unique lockdep key and name
 * for each call. No-op if CONFIG_LOCKDEP is not set.
 *
 * @fn: Real function to call (in the form __[*_]regmap_init[_*])
 * @name: Config variable name (#config in the calling macro)
 **/
#ifdef CONFIG_LOCKDEP
#define __regmap_lockdep_wrapper(fn, name, ...)				\
(									\
	({								\
		static struct lock_class_key _key;			\
		fn(__VA_ARGS__, &_key,					\
			KBUILD_BASENAME ":"				\
			__stringify(__LINE__) ":"			\
			"(" name ")->lock");				\
	})								\
)
#else
#define __regmap_lockdep_wrapper(fn, name, ...) fn(__VA_ARGS__, NULL, NULL)
#endif

649
/**
650
 * regmap_init() - Initialise register map
651 652 653 654 655 656 657 658 659 660
 *
 * @dev: Device that will be interacted with
 * @bus: Bus-specific callbacks to use with device
 * @bus_context: Data passed to bus-specific callbacks
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.  This function should generally not be called
 * directly, it should be called by bus-specific init functions.
 */
661 662 663
#define regmap_init(dev, bus, bus_context, config)			\
	__regmap_lockdep_wrapper(__regmap_init, #config,		\
				dev, bus, bus_context, config)
664
int regmap_attach_dev(struct device *dev, struct regmap *map,
665
		      const struct regmap_config *config);
666

667
/**
668
 * regmap_init_i2c() - Initialise register map
669 670 671 672 673 674 675
 *
 * @i2c: Device that will be interacted with
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
676 677 678
#define regmap_init_i2c(i2c, config)					\
	__regmap_lockdep_wrapper(__regmap_init_i2c, #config,		\
				i2c, config)
679

A
Akinobu Mita 已提交
680 681 682 683 684 685 686 687 688 689 690 691 692
/**
 * regmap_init_sccb() - Initialise register map
 *
 * @i2c: Device that will be interacted with
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
#define regmap_init_sccb(i2c, config)					\
	__regmap_lockdep_wrapper(__regmap_init_sccb, #config,		\
				i2c, config)

S
Srinivas Kandagatla 已提交
693 694 695 696 697 698 699 700 701 702 703 704 705
/**
 * regmap_init_slimbus() - Initialise register map
 *
 * @slimbus: Device that will be interacted with
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
#define regmap_init_slimbus(slimbus, config)				\
	__regmap_lockdep_wrapper(__regmap_init_slimbus, #config,	\
				slimbus, config)

706
/**
707
 * regmap_init_spi() - Initialise register map
708
 *
709
 * @dev: Device that will be interacted with
710 711 712 713 714
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
715 716 717
#define regmap_init_spi(dev, config)					\
	__regmap_lockdep_wrapper(__regmap_init_spi, #config,		\
				dev, config)
718 719

/**
720 721 722
 * regmap_init_spmi_base() - Create regmap for the Base register space
 *
 * @dev:	SPMI device that will be interacted with
723 724 725 726 727
 * @config:	Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
728 729 730
#define regmap_init_spmi_base(dev, config)				\
	__regmap_lockdep_wrapper(__regmap_init_spmi_base, #config,	\
				dev, config)
731 732

/**
733 734 735
 * regmap_init_spmi_ext() - Create regmap for Ext register space
 *
 * @dev:	Device that will be interacted with
736 737 738 739 740
 * @config:	Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
741 742 743
#define regmap_init_spmi_ext(dev, config)				\
	__regmap_lockdep_wrapper(__regmap_init_spmi_ext, #config,	\
				dev, config)
744

745 746 747 748 749 750 751 752 753 754 755 756 757
/**
 * regmap_init_w1() - Initialise register map
 *
 * @w1_dev: Device that will be interacted with
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
#define regmap_init_w1(w1_dev, config)					\
	__regmap_lockdep_wrapper(__regmap_init_w1, #config,		\
				w1_dev, config)

758
/**
759
 * regmap_init_mmio_clk() - Initialise register map with register clock
760 761 762 763 764 765 766 767 768
 *
 * @dev: Device that will be interacted with
 * @clk_id: register clock consumer ID
 * @regs: Pointer to memory-mapped IO region
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
769 770 771
#define regmap_init_mmio_clk(dev, clk_id, regs, config)			\
	__regmap_lockdep_wrapper(__regmap_init_mmio_clk, #config,	\
				dev, clk_id, regs, config)
772 773

/**
774
 * regmap_init_mmio() - Initialise register map
775 776 777 778 779 780 781 782
 *
 * @dev: Device that will be interacted with
 * @regs: Pointer to memory-mapped IO region
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
783 784 785 786
#define regmap_init_mmio(dev, regs, config)		\
	regmap_init_mmio_clk(dev, NULL, regs, config)

/**
787
 * regmap_init_ac97() - Initialise AC'97 register map
788 789 790 791 792 793 794
 *
 * @ac97: Device that will be interacted with
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
795 796 797
#define regmap_init_ac97(ac97, config)					\
	__regmap_lockdep_wrapper(__regmap_init_ac97, #config,		\
				ac97, config)
798
bool regmap_ac97_default_volatile(struct device *dev, unsigned int reg);
799

V
Vinod Koul 已提交
800 801 802 803 804 805 806 807 808 809 810 811 812 813
/**
 * regmap_init_sdw() - Initialise register map
 *
 * @sdw: Device that will be interacted with
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
#define regmap_init_sdw(sdw, config)					\
	__regmap_lockdep_wrapper(__regmap_init_sdw, #config,		\
				sdw, config)


814
/**
815
 * devm_regmap_init() - Initialise managed register map
816 817 818 819 820 821 822 823 824 825 826
 *
 * @dev: Device that will be interacted with
 * @bus: Bus-specific callbacks to use with device
 * @bus_context: Data passed to bus-specific callbacks
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer
 * to a struct regmap.  This function should generally not be called
 * directly, it should be called by bus-specific init functions.  The
 * map will be automatically freed by the device management code.
 */
827 828 829
#define devm_regmap_init(dev, bus, bus_context, config)			\
	__regmap_lockdep_wrapper(__devm_regmap_init, #config,		\
				dev, bus, bus_context, config)
830 831

/**
832
 * devm_regmap_init_i2c() - Initialise managed register map
833 834 835 836 837 838 839 840
 *
 * @i2c: Device that will be interacted with
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer
 * to a struct regmap.  The regmap will be automatically freed by the
 * device management code.
 */
841 842 843
#define devm_regmap_init_i2c(i2c, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_i2c, #config,	\
				i2c, config)
844

A
Akinobu Mita 已提交
845 846 847 848 849 850 851 852 853 854 855 856 857 858
/**
 * devm_regmap_init_sccb() - Initialise managed register map
 *
 * @i2c: Device that will be interacted with
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer
 * to a struct regmap.  The regmap will be automatically freed by the
 * device management code.
 */
#define devm_regmap_init_sccb(i2c, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_sccb, #config,	\
				i2c, config)

859
/**
860
 * devm_regmap_init_spi() - Initialise register map
861
 *
862
 * @dev: Device that will be interacted with
863 864 865 866 867 868
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer
 * to a struct regmap.  The map will be automatically freed by the
 * device management code.
 */
869 870 871
#define devm_regmap_init_spi(dev, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_spi, #config,	\
				dev, config)
872 873

/**
874 875 876
 * devm_regmap_init_spmi_base() - Create managed regmap for Base register space
 *
 * @dev:	SPMI device that will be interacted with
877 878 879 880 881 882
 * @config:	Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer
 * to a struct regmap.  The regmap will be automatically freed by the
 * device management code.
 */
883 884 885
#define devm_regmap_init_spmi_base(dev, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_spmi_base, #config,	\
				dev, config)
886 887

/**
888 889 890
 * devm_regmap_init_spmi_ext() - Create managed regmap for Ext register space
 *
 * @dev:	SPMI device that will be interacted with
891 892 893 894 895 896
 * @config:	Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer
 * to a struct regmap.  The regmap will be automatically freed by the
 * device management code.
 */
897 898 899 900
#define devm_regmap_init_spmi_ext(dev, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_spmi_ext, #config,	\
				dev, config)

901 902 903 904 905 906 907 908 909 910 911 912 913
/**
 * devm_regmap_init_w1() - Initialise managed register map
 *
 * @w1_dev: Device that will be interacted with
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer
 * to a struct regmap.  The regmap will be automatically freed by the
 * device management code.
 */
#define devm_regmap_init_w1(w1_dev, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_w1, #config,	\
				w1_dev, config)
914
/**
915
 * devm_regmap_init_mmio_clk() - Initialise managed register map with clock
916 917
 *
 * @dev: Device that will be interacted with
918
 * @clk_id: register clock consumer ID
919 920 921
 * @regs: Pointer to memory-mapped IO region
 * @config: Configuration for register map
 *
922 923 924
 * The return value will be an ERR_PTR() on error or a valid pointer
 * to a struct regmap.  The regmap will be automatically freed by the
 * device management code.
925
 */
926 927 928
#define devm_regmap_init_mmio_clk(dev, clk_id, regs, config)		\
	__regmap_lockdep_wrapper(__devm_regmap_init_mmio_clk, #config,	\
				dev, clk_id, regs, config)
929 930

/**
931
 * devm_regmap_init_mmio() - Initialise managed register map
932 933 934 935 936 937 938 939 940
 *
 * @dev: Device that will be interacted with
 * @regs: Pointer to memory-mapped IO region
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer
 * to a struct regmap.  The regmap will be automatically freed by the
 * device management code.
 */
941 942
#define devm_regmap_init_mmio(dev, regs, config)		\
	devm_regmap_init_mmio_clk(dev, NULL, regs, config)
943

944
/**
945
 * devm_regmap_init_ac97() - Initialise AC'97 register map
946 947 948 949 950 951 952 953 954 955 956
 *
 * @ac97: Device that will be interacted with
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer
 * to a struct regmap.  The regmap will be automatically freed by the
 * device management code.
 */
#define devm_regmap_init_ac97(ac97, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_ac97, #config,	\
				ac97, config)
957

V
Vinod Koul 已提交
958 959 960 961 962 963 964 965 966 967 968 969 970 971
/**
 * devm_regmap_init_sdw() - Initialise managed register map
 *
 * @sdw: Device that will be interacted with
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer
 * to a struct regmap. The regmap will be automatically freed by the
 * device management code.
 */
#define devm_regmap_init_sdw(sdw, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_sdw, #config,	\
				sdw, config)

972 973 974 975 976 977 978 979 980 981 982 983 984
/**
 * devm_regmap_init_slimbus() - Initialise managed register map
 *
 * @slimbus: Device that will be interacted with
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer
 * to a struct regmap. The regmap will be automatically freed by the
 * device management code.
 */
#define devm_regmap_init_slimbus(slimbus, config)			\
	__regmap_lockdep_wrapper(__devm_regmap_init_slimbus, #config,	\
				slimbus, config)
985 986
int regmap_mmio_attach_clk(struct regmap *map, struct clk *clk);
void regmap_mmio_detach_clk(struct regmap *map);
987
void regmap_exit(struct regmap *map);
988 989
int regmap_reinit_cache(struct regmap *map,
			const struct regmap_config *config);
M
Mark Brown 已提交
990
struct regmap *dev_get_regmap(struct device *dev, const char *name);
T
Tuomas Tynkkynen 已提交
991
struct device *regmap_get_device(struct regmap *map);
992
int regmap_write(struct regmap *map, unsigned int reg, unsigned int val);
993
int regmap_write_async(struct regmap *map, unsigned int reg, unsigned int val);
994 995
int regmap_raw_write(struct regmap *map, unsigned int reg,
		     const void *val, size_t val_len);
B
Ben Whitten 已提交
996 997
int regmap_noinc_write(struct regmap *map, unsigned int reg,
		     const void *val, size_t val_len);
998 999
int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,
			size_t val_count);
1000
int regmap_multi_reg_write(struct regmap *map, const struct reg_sequence *regs,
1001
			int num_regs);
1002
int regmap_multi_reg_write_bypassed(struct regmap *map,
1003
				    const struct reg_sequence *regs,
1004
				    int num_regs);
1005 1006
int regmap_raw_write_async(struct regmap *map, unsigned int reg,
			   const void *val, size_t val_len);
1007 1008 1009
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);
1010 1011
int regmap_noinc_read(struct regmap *map, unsigned int reg,
		      void *val, size_t val_len);
1012 1013
int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val,
		     size_t val_count);
1014 1015 1016
int regmap_update_bits_base(struct regmap *map, unsigned int reg,
			    unsigned int mask, unsigned int val,
			    bool *change, bool async, bool force);
1017
int regmap_get_val_bytes(struct regmap *map);
1018
int regmap_get_max_register(struct regmap *map);
1019
int regmap_get_reg_stride(struct regmap *map);
1020
int regmap_async_complete(struct regmap *map);
1021
bool regmap_can_raw_write(struct regmap *map);
1022 1023
size_t regmap_get_raw_read_max(struct regmap *map);
size_t regmap_get_raw_write_max(struct regmap *map);
1024

M
Mark Brown 已提交
1025
int regcache_sync(struct regmap *map);
1026 1027
int regcache_sync_region(struct regmap *map, unsigned int min,
			 unsigned int max);
1028 1029
int regcache_drop_region(struct regmap *map, unsigned int min,
			 unsigned int max);
1030
void regcache_cache_only(struct regmap *map, bool enable);
1031
void regcache_cache_bypass(struct regmap *map, bool enable);
1032
void regcache_mark_dirty(struct regmap *map);
1033

1034 1035 1036
bool regmap_check_range_table(struct regmap *map, unsigned int reg,
			      const struct regmap_access_table *table);

1037
int regmap_register_patch(struct regmap *map, const struct reg_sequence *regs,
M
Mark Brown 已提交
1038
			  int num_regs);
N
Nenghua Cao 已提交
1039 1040
int regmap_parse_val(struct regmap *map, const void *buf,
				unsigned int *val);
M
Mark Brown 已提交
1041

1042 1043 1044 1045 1046 1047 1048 1049 1050 1051
static inline bool regmap_reg_in_range(unsigned int reg,
				       const struct regmap_range *range)
{
	return reg >= range->range_min && reg <= range->range_max;
}

bool regmap_reg_in_ranges(unsigned int reg,
			  const struct regmap_range *ranges,
			  unsigned int nranges);

1052
/**
1053
 * struct reg_field - Description of an register field
1054 1055 1056
 *
 * @reg: Offset of the register within the regmap bank
 * @lsb: lsb of the register field.
1057
 * @msb: msb of the register field.
1058 1059
 * @id_size: port size if it has some ports
 * @id_offset: address offset for each ports
1060 1061 1062 1063 1064
 */
struct reg_field {
	unsigned int reg;
	unsigned int lsb;
	unsigned int msb;
1065 1066
	unsigned int id_size;
	unsigned int id_offset;
1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083
};

#define REG_FIELD(_reg, _lsb, _msb) {		\
				.reg = _reg,	\
				.lsb = _lsb,	\
				.msb = _msb,	\
				}

struct regmap_field *regmap_field_alloc(struct regmap *regmap,
		struct reg_field reg_field);
void regmap_field_free(struct regmap_field *field);

struct regmap_field *devm_regmap_field_alloc(struct device *dev,
		struct regmap *regmap, struct reg_field reg_field);
void devm_regmap_field_free(struct device *dev,	struct regmap_field *field);

int regmap_field_read(struct regmap_field *field, unsigned int *val);
1084 1085 1086
int regmap_field_update_bits_base(struct regmap_field *field,
				  unsigned int mask, unsigned int val,
				  bool *change, bool async, bool force);
1087 1088
int regmap_fields_read(struct regmap_field *field, unsigned int id,
		       unsigned int *val);
1089 1090 1091
int regmap_fields_update_bits_base(struct regmap_field *field,  unsigned int id,
				   unsigned int mask, unsigned int val,
				   bool *change, bool async, bool force);
1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110
/**
 * struct regmap_irq_type - IRQ type definitions.
 *
 * @type_reg_offset: Offset register for the irq type setting.
 * @type_rising_val: Register value to configure RISING type irq.
 * @type_falling_val: Register value to configure FALLING type irq.
 * @type_level_low_val: Register value to configure LEVEL_LOW type irq.
 * @type_level_high_val: Register value to configure LEVEL_HIGH type irq.
 * @types_supported: logical OR of IRQ_TYPE_* flags indicating supported types.
 */
struct regmap_irq_type {
	unsigned int type_reg_offset;
	unsigned int type_reg_mask;
	unsigned int type_rising_val;
	unsigned int type_falling_val;
	unsigned int type_level_low_val;
	unsigned int type_level_high_val;
	unsigned int types_supported;
};
1111

1112
/**
1113
 * struct regmap_irq - Description of an IRQ for the generic regmap irq_chip.
1114 1115 1116
 *
 * @reg_offset: Offset of the status/mask register within the bank
 * @mask:       Mask used to flag/control the register.
1117
 * @type:	IRQ trigger type setting details if supported.
1118 1119 1120 1121
 */
struct regmap_irq {
	unsigned int reg_offset;
	unsigned int mask;
1122
	struct regmap_irq_type type;
1123 1124
};

1125 1126 1127
#define REGMAP_IRQ_REG(_irq, _off, _mask)		\
	[_irq] = { .reg_offset = (_off), .mask = (_mask) }

1128 1129 1130 1131 1132 1133
#define REGMAP_IRQ_REG_LINE(_id, _reg_bits) \
	[_id] = {				\
		.mask = BIT((_id) % (_reg_bits)),	\
		.reg_offset = (_id) / (_reg_bits),	\
	}

1134 1135 1136 1137 1138 1139 1140 1141
#define REGMAP_IRQ_MAIN_REG_OFFSET(arr)				\
	{ .num_regs = ARRAY_SIZE((arr)), .offset = &(arr)[0] }

struct regmap_irq_sub_irq_map {
	unsigned int num_regs;
	unsigned int *offset;
};

1142
/**
1143
 * struct regmap_irq_chip - Description of a generic regmap irq_chip.
1144 1145 1146
 *
 * @name:        Descriptive name for IRQ controller.
 *
1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164
 * @main_status: Base main status register address. For chips which have
 *		 interrupts arranged in separate sub-irq blocks with own IRQ
 *		 registers and which have a main IRQ registers indicating
 *		 sub-irq blocks with unhandled interrupts. For such chips fill
 *		 sub-irq register information in status_base, mask_base and
 *		 ack_base.
 * @num_main_status_bits: Should be given to chips where number of meaningfull
 *			  main status bits differs from num_regs.
 * @sub_reg_offsets: arrays of mappings from main register bits to sub irq
 *		     registers. First item in array describes the registers
 *		     for first main status bit. Second array for second bit etc.
 *		     Offset is given as sub register status offset to
 *		     status_base. Should contain num_regs arrays.
 *		     Can be provided for chips with more complex mapping than
 *		     1.st bit to 1.st sub-reg, 2.nd bit to 2.nd sub-reg, ...
 * @num_main_regs: Number of 'main status' irq registers for chips which have
 *		   main_status set.
 *
1165 1166
 * @status_base: Base status register address.
 * @mask_base:   Base mask register address.
1167
 * @mask_writeonly: Base mask register is write only.
1168 1169
 * @unmask_base:  Base unmask register address. for chips who have
 *                separate mask and unmask registers
1170 1171
 * @ack_base:    Base ack address. If zero then the chip is clear on read.
 *               Using zero value is possible with @use_ack bit.
1172
 * @wake_base:   Base address for wake enables.  If zero unsupported.
1173
 * @type_base:   Base address for irq type.  If zero unsupported.
1174
 * @irq_reg_stride:  Stride to use for chips where registers are not contiguous.
1175
 * @init_ack_masked: Ack all masked interrupts once during initalization.
1176
 * @mask_invert: Inverted mask register: cleared bits are masked out.
1177
 * @use_ack:     Use @ack register even if it is zero.
1178
 * @ack_invert:  Inverted ack register: cleared bits for ack.
1179
 * @wake_invert: Inverted wake register: cleared bits are wake enabled.
1180
 * @type_invert: Invert the type flags.
1181 1182 1183
 * @type_in_mask: Use the mask registers for controlling irq type. For
 *                interrupts defining type_rising/falling_mask use mask_base
 *                for edge configuration and never update bits in type_base.
1184 1185 1186
 * @clear_on_unmask: For chips with interrupts cleared on read: read the status
 *                   registers before unmasking interrupts to clear any bits
 *                   set when they were masked.
1187
 * @runtime_pm:  Hold a runtime PM lock on the device when accessing it.
1188 1189 1190 1191 1192
 *
 * @num_regs:    Number of registers in each control bank.
 * @irqs:        Descriptors for individual IRQs.  Interrupt numbers are
 *               assigned based on the index in the array of the interrupt.
 * @num_irqs:    Number of descriptors.
1193 1194 1195
 * @num_type_reg:    Number of type registers.
 * @type_reg_stride: Stride to use for chips where type registers are not
 *			contiguous.
1196 1197 1198 1199 1200 1201
 * @handle_pre_irq:  Driver specific callback to handle interrupt from device
 *		     before regmap_irq_handler process the interrupts.
 * @handle_post_irq: Driver specific callback to handle interrupt from device
 *		     after handling the interrupts in regmap_irq_handler().
 * @irq_drv_data:    Driver specific IRQ data which is passed as parameter when
 *		     driver specific pre/post interrupt handler is called.
1202 1203 1204 1205
 *
 * This is not intended to handle every possible interrupt controller, but
 * it should handle a substantial proportion of those that are found in the
 * wild.
1206 1207 1208 1209
 */
struct regmap_irq_chip {
	const char *name;

1210 1211 1212 1213 1214
	unsigned int main_status;
	unsigned int num_main_status_bits;
	struct regmap_irq_sub_irq_map *sub_reg_offsets;
	int num_main_regs;

1215 1216
	unsigned int status_base;
	unsigned int mask_base;
1217
	unsigned int unmask_base;
1218
	unsigned int ack_base;
1219
	unsigned int wake_base;
1220
	unsigned int type_base;
1221
	unsigned int irq_reg_stride;
1222
	bool mask_writeonly:1;
1223 1224
	bool init_ack_masked:1;
	bool mask_invert:1;
1225
	bool use_ack:1;
1226
	bool ack_invert:1;
1227 1228
	bool wake_invert:1;
	bool runtime_pm:1;
1229
	bool type_invert:1;
1230
	bool type_in_mask:1;
1231
	bool clear_on_unmask:1;
1232 1233 1234 1235 1236

	int num_regs;

	const struct regmap_irq *irqs;
	int num_irqs;
1237 1238 1239

	int num_type_reg;
	unsigned int type_reg_stride;
1240 1241 1242 1243

	int (*handle_pre_irq)(void *irq_drv_data);
	int (*handle_post_irq)(void *irq_drv_data);
	void *irq_drv_data;
1244 1245 1246 1247 1248
};

struct regmap_irq_chip_data;

int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
M
Mark Brown 已提交
1249
			int irq_base, const struct regmap_irq_chip *chip,
1250 1251
			struct regmap_irq_chip_data **data);
void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *data);
1252 1253 1254 1255 1256 1257 1258 1259

int devm_regmap_add_irq_chip(struct device *dev, struct regmap *map, int irq,
			     int irq_flags, int irq_base,
			     const struct regmap_irq_chip *chip,
			     struct regmap_irq_chip_data **data);
void devm_regmap_del_irq_chip(struct device *dev, int irq,
			      struct regmap_irq_chip_data *data);

1260
int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data);
1261
int regmap_irq_get_virq(struct regmap_irq_chip_data *data, int irq);
1262
struct irq_domain *regmap_irq_get_domain(struct regmap_irq_chip_data *data);
1263

1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279
#else

/*
 * These stubs should only ever be called by generic code which has
 * regmap based facilities, if they ever get called at runtime
 * something is going wrong and something probably needs to select
 * REGMAP.
 */

static inline int regmap_write(struct regmap *map, unsigned int reg,
			       unsigned int val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1280 1281 1282 1283 1284 1285 1286
static inline int regmap_write_async(struct regmap *map, unsigned int reg,
				     unsigned int val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1287 1288 1289 1290 1291 1292 1293
static inline int regmap_raw_write(struct regmap *map, unsigned int reg,
				   const void *val, size_t val_len)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1294 1295 1296 1297 1298 1299 1300
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;
}

B
Ben Whitten 已提交
1301 1302 1303 1304 1305 1306 1307
static inline int regmap_noinc_write(struct regmap *map, unsigned int reg,
				    const void *val, size_t val_len)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328
static inline int regmap_bulk_write(struct regmap *map, unsigned int reg,
				    const void *val, size_t val_count)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

static inline int regmap_read(struct regmap *map, unsigned int reg,
			      unsigned int *val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

static inline int regmap_raw_read(struct regmap *map, unsigned int reg,
				  void *val, size_t val_len)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1329 1330 1331 1332 1333 1334 1335
static inline int regmap_noinc_read(struct regmap *map, unsigned int reg,
				    void *val, size_t val_len)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1336 1337 1338 1339 1340 1341 1342
static inline int regmap_bulk_read(struct regmap *map, unsigned int reg,
				   void *val, size_t val_count)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1343 1344 1345
static inline int regmap_update_bits_base(struct regmap *map, unsigned int reg,
					  unsigned int mask, unsigned int val,
					  bool *change, bool async, bool force)
1346 1347 1348 1349 1350
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1351 1352 1353
static inline int regmap_field_update_bits_base(struct regmap_field *field,
					unsigned int mask, unsigned int val,
					bool *change, bool async, bool force)
1354 1355 1356 1357 1358
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1359 1360 1361 1362
static inline int regmap_fields_update_bits_base(struct regmap_field *field,
				   unsigned int id,
				   unsigned int mask, unsigned int val,
				   bool *change, bool async, bool force)
1363 1364 1365 1366 1367
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1368 1369 1370 1371 1372 1373
static inline int regmap_get_val_bytes(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1374 1375 1376 1377 1378 1379
static inline int regmap_get_max_register(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1380 1381 1382 1383 1384 1385
static inline int regmap_get_reg_stride(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1386 1387 1388 1389 1390 1391
static inline int regcache_sync(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1392 1393 1394 1395 1396 1397 1398
static inline int regcache_sync_region(struct regmap *map, unsigned int min,
				       unsigned int max)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1399 1400 1401 1402 1403 1404 1405
static inline int regcache_drop_region(struct regmap *map, unsigned int min,
				       unsigned int max)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420
static inline void regcache_cache_only(struct regmap *map, bool enable)
{
	WARN_ONCE(1, "regmap API is disabled");
}

static inline void regcache_cache_bypass(struct regmap *map, bool enable)
{
	WARN_ONCE(1, "regmap API is disabled");
}

static inline void regcache_mark_dirty(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
}

1421 1422 1423 1424 1425
static inline void regmap_async_complete(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
}

1426
static inline int regmap_register_patch(struct regmap *map,
1427
					const struct reg_sequence *regs,
1428 1429 1430 1431 1432 1433
					int num_regs)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

N
Nenghua Cao 已提交
1434 1435 1436 1437 1438 1439 1440
static inline int regmap_parse_val(struct regmap *map, const void *buf,
				unsigned int *val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

M
Mark Brown 已提交
1441 1442 1443 1444 1445 1446
static inline struct regmap *dev_get_regmap(struct device *dev,
					    const char *name)
{
	return NULL;
}

T
Tuomas Tynkkynen 已提交
1447 1448 1449
static inline struct device *regmap_get_device(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
1450
	return NULL;
T
Tuomas Tynkkynen 已提交
1451 1452
}

1453 1454
#endif

1455
#endif