regmap.h 62.8 KB
Newer Older
1
/* SPDX-License-Identifier: GPL-2.0-only */
2 3 4 5 6 7 8 9 10 11 12 13
#ifndef __LINUX_REGMAP_H
#define __LINUX_REGMAP_H

/*
 * Register map access API
 *
 * Copyright 2011 Wolfson Microelectronics plc
 *
 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
 */

#include <linux/list.h>
14
#include <linux/rbtree.h>
15
#include <linux/ktime.h>
16
#include <linux/delay.h>
17
#include <linux/err.h>
18
#include <linux/bug.h>
19
#include <linux/lockdep.h>
20
#include <linux/iopoll.h>
21
#include <linux/fwnode.h>
22

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

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

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

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

M
Marco Felsch 已提交
78 79 80 81 82 83 84
#define REG_SEQ(_reg, _def, _delay_us) {		\
				.reg = _reg,		\
				.def = _def,		\
				.delay_us = _delay_us,	\
				}
#define REG_SEQ0(_reg, _def)	REG_SEQ(_reg, _def, 0)

85 86
/**
 * regmap_read_poll_timeout - Poll until a condition is met or a timeout occurs
87
 *
88 89 90 91 92 93
 * @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
94
 *            is used (see Documentation/timers/timers-howto.rst).
95 96 97 98 99 100 101 102 103 104 105
 * @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) \
({ \
106 107 108 109
	int __ret, __tmp; \
	__tmp = read_poll_timeout(regmap_read, __ret, __ret || (cond), \
			sleep_us, timeout_us, false, (map), (addr), &(val)); \
	__ret ?: __tmp; \
110 111
})

112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
/**
 * regmap_read_poll_timeout_atomic - Poll until a condition is met or a timeout occurs
 *
 * @map: Regmap to read from
 * @addr: Address to poll
 * @val: Unsigned integer variable to read the value into
 * @cond: Break condition (usually involving @val)
 * @delay_us: Time to udelay between reads in us (0 tight-loops).
 *            Should be less than ~10us since udelay is used
 *            (see Documentation/timers/timers-howto.rst).
 * @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.
 *
 * This is modelled after the readx_poll_timeout_atomic macros in linux/iopoll.h.
 *
 * Note: In general regmap cannot be used in atomic context. If you want to use
 * this macro then first setup your regmap for atomic use (flat or no cache
 * and MMIO regmap).
 */
#define regmap_read_poll_timeout_atomic(map, addr, val, cond, delay_us, timeout_us) \
({ \
	u64 __timeout_us = (timeout_us); \
	unsigned long __delay_us = (delay_us); \
	ktime_t __timeout = ktime_add_us(ktime_get(), __timeout_us); \
	int __ret; \
	for (;;) { \
		__ret = regmap_read((map), (addr), &(val)); \
		if (__ret) \
			break; \
		if (cond) \
			break; \
		if ((__timeout_us) && \
		    ktime_compare(ktime_get(), __timeout) > 0) { \
			__ret = regmap_read((map), (addr), &(val)); \
			break; \
		} \
		if (__delay_us) \
			udelay(__delay_us); \
	} \
	__ret ?: ((cond) ? 0 : -ETIMEDOUT); \
})

157 158 159 160 161 162 163 164
/**
 * 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
165
 *            is used (see Documentation/timers/timers-howto.rst).
166 167 168 169 170 171 172 173 174 175 176
 * @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) \
({ \
177 178 179 180
	int __ret, __tmp; \
	__tmp = read_poll_timeout(regmap_field_read, __ret, __ret || (cond), \
			sleep_us, timeout_us, false, (field), &(val)); \
	__ret ?: __tmp; \
181 182
})

183 184
#ifdef CONFIG_REGMAP

185 186 187 188 189 190 191 192
enum regmap_endian {
	/* Unspecified -> 0 -> Backwards compatible default */
	REGMAP_ENDIAN_DEFAULT = 0,
	REGMAP_ENDIAN_BIG,
	REGMAP_ENDIAN_LITTLE,
	REGMAP_ENDIAN_NATIVE,
};

193
/**
194 195
 * struct regmap_range - A register range, used for access related checks
 *                       (readable/writeable/volatile/precious checks)
196 197 198 199 200 201 202 203 204
 *
 * @range_min: address of first register
 * @range_max: address of last register
 */
struct regmap_range {
	unsigned int range_min;
	unsigned int range_max;
};

205 206
#define regmap_reg_range(low, high) { .range_min = low, .range_max = high, }

207 208
/**
 * struct regmap_access_table - A table of register ranges for access checks
209 210 211 212 213
 *
 * @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
214 215 216 217 218
 *
 * 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.
219 220 221 222 223 224 225 226
 */
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;
};

227 228 229
typedef void (*regmap_lock)(void *);
typedef void (*regmap_unlock)(void *);

230
/**
231
 * struct regmap_config - Configuration for the register map of a device.
232
 *
233 234 235
 * @name: Optional name of the regmap. Useful when a device has multiple
 *        register regions.
 *
236
 * @reg_bits: Number of bits in a register address, mandatory.
237 238 239
 * @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.
240
 * @pad_bits: Number of bits of padding between register and value.
241
 * @val_bits: Number of bits in a register value, mandatory.
242
 *
243
 * @writeable_reg: Optional callback returning true if the register
244 245 246 247
 *		   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).
248
 * @readable_reg: Optional callback returning true if the register
249 250 251 252
 *		  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).
253
 * @volatile_reg: Optional callback returning true if the register
254 255 256 257
 *		  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 已提交
258
 * @precious_reg: Optional callback returning true if the register
259
 *		  should not be read outside of a call from the driver
L
Laszlo Papp 已提交
260
 *		  (e.g., a clear on read interrupt status register). If this
261 262 263
 *                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 已提交
264 265 266 267 268 269 270
 * @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).
271 272 273 274 275 276 277
 * @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).
278
 * @disable_locking: This regmap is either protected by external means or
279
 *                   is guaranteed not to be accessed from multiple threads.
280
 *                   Don't use any locking mechanisms.
281 282 283 284 285 286
 * @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).
287 288
 * @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 已提交
289 290 291
 *		  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.
292 293 294 295 296 297 298
 * @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.
299
 * @max_register: Optional, specifies the maximum valid register address.
300 301 302 303 304
 * @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 已提交
305
 * @wr_noinc_table: As above, for no increment writeable registers.
306
 * @rd_noinc_table: As above, for no increment readable registers.
307 308 309
 * @reg_defaults: Power on reset values for registers (for use with
 *                register cache support).
 * @num_reg_defaults: Number of elements in reg_defaults.
310
 *
311
 * @read_flag_mask: Mask to be set in the top bytes of the register when doing
312
 *                  a read.
313
 * @write_flag_mask: Mask to be set in the top bytes of the register when doing
314
 *                   a write. If both read_flag_mask and write_flag_mask are
315 316 317 318
 *                   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.
319 320 321 322
 * @use_relaxed_mmio: If set, MMIO R/W operations will not use memory barriers.
 *                    This can avoid load on devices which don't require strict
 *                    orderings, but drivers should carefully add any explicit
 *                    memory barriers when they may require them.
323 324 325 326 327 328
 * @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.
329 330 331
 * @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
332 333 334 335 336
 *
 * @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.
337 338 339 340 341 342
 * @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.
343 344 345
 *
 * @ranges: Array of configuration entries for virtual address ranges.
 * @num_ranges: Number of range configuration entries.
346
 * @use_hwlock: Indicate if a hardware spinlock should be used.
347 348 349
 * @hwlock_id: Specify the hardware spinlock id.
 * @hwlock_mode: The hardware spinlock mode, should be HWLOCK_IRQSTATE,
 *		 HWLOCK_IRQ or 0.
350
 * @can_sleep: Optional, specifies whether regmap operations can sleep.
351
 */
352
struct regmap_config {
353 354
	const char *name;

355
	int reg_bits;
356
	int reg_stride;
357
	int pad_bits;
358
	int val_bits;
359 360 361 362

	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);
363
	bool (*precious_reg)(struct device *dev, unsigned int reg);
B
Ben Whitten 已提交
364
	bool (*writeable_noinc_reg)(struct device *dev, unsigned int reg);
365
	bool (*readable_noinc_reg)(struct device *dev, unsigned int reg);
366 367

	bool disable_locking;
368 369 370
	regmap_lock lock;
	regmap_unlock unlock;
	void *lock_arg;
371

372 373 374 375 376
	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;

377
	unsigned int max_register;
378 379 380 381
	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 已提交
382
	const struct regmap_access_table *wr_noinc_table;
383
	const struct regmap_access_table *rd_noinc_table;
384
	const struct reg_default *reg_defaults;
385 386 387 388
	unsigned int num_reg_defaults;
	enum regcache_type cache_type;
	const void *reg_defaults_raw;
	unsigned int num_reg_defaults_raw;
389

390 391
	unsigned long read_flag_mask;
	unsigned long write_flag_mask;
392
	bool zero_flag_mask;
393

394 395
	bool use_single_read;
	bool use_single_write;
396
	bool use_relaxed_mmio;
397
	bool can_multi_write;
398 399 400

	enum regmap_endian reg_format_endian;
	enum regmap_endian val_format_endian;
401

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

405
	bool use_hwlock;
406 407
	unsigned int hwlock_id;
	unsigned int hwlock_mode;
408 409

	bool can_sleep;
410 411 412
};

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

435 436 437 438 439 440 441 442 443 444 445 446
	/* 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;
447 448
};

449 450
struct regmap_async;

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

/**
473 474
 * struct regmap_bus - Description of a hardware bus for the register map
 *                     infrastructure.
475
 *
476
 * @fast_io: Register IO is fast. Use a spinlock instead of a mutex
477 478 479
 *	     to perform locking. This field is ignored if custom lock/unlock
 *	     functions are used (see fields lock/unlock of
 *	     struct regmap_config).
480 481 482
 * @write: Write operation.
 * @gather_write: Write operation with split register/value, return -ENOTSUPP
 *                if not implemented  on a given device.
483 484
 * @async_write: Write operation which completes asynchronously, optional and
 *               must serialise with respect to non-async I/O.
485 486
 * @reg_write: Write a single register value to the given register address. This
 *             write operation has to complete when returning from the function.
487 488 489 490
 * @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.
491 492
 * @read: Read operation.  Data is returned in the buffer used to transmit
 *         data.
493 494
 * @reg_read: Read a single register value from a given register address.
 * @free_context: Free context.
495
 * @async_alloc: Allocate a regmap_async() structure.
496 497
 * @read_flag_mask: Mask to be set in the top byte of the register when doing
 *                  a read.
498 499 500 501 502 503
 * @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.
504 505
 * @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.
506
 * @free_on_exit: kfree this on exit of regmap
507 508
 */
struct regmap_bus {
509
	bool fast_io;
510 511
	regmap_hw_write write;
	regmap_hw_gather_write gather_write;
512
	regmap_hw_async_write async_write;
513
	regmap_hw_reg_write reg_write;
514
	regmap_hw_reg_update_bits reg_update_bits;
515
	regmap_hw_read read;
516
	regmap_hw_reg_read reg_read;
517
	regmap_hw_free_context free_context;
518
	regmap_hw_async_alloc async_alloc;
519
	u8 read_flag_mask;
520 521
	enum regmap_endian reg_format_endian_default;
	enum regmap_endian val_format_endian_default;
522 523
	size_t max_raw_read;
	size_t max_raw_write;
524
	bool free_on_exit;
525 526
};

527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543
/*
 * __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);
S
Sander Vanheule 已提交
544 545 546 547
struct regmap *__regmap_init_mdio(struct mdio_device *mdio_dev,
				 const struct regmap_config *config,
				 struct lock_class_key *lock_key,
				 const char *lock_name);
A
Akinobu Mita 已提交
548 549 550 551
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 已提交
552 553 554 555
struct regmap *__regmap_init_slimbus(struct slim_device *slimbus,
				 const struct regmap_config *config,
				 struct lock_class_key *lock_key,
				 const char *lock_name);
556 557 558 559 560 561 562 563 564 565 566 567
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);
568 569 570 571
struct regmap *__regmap_init_w1(struct device *w1_dev,
				 const struct regmap_config *config,
				 struct lock_class_key *lock_key,
				 const char *lock_name);
572 573 574 575 576 577 578 579 580
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 已提交
581 582 583 584
struct regmap *__regmap_init_sdw(struct sdw_slave *sdw,
				 const struct regmap_config *config,
				 struct lock_class_key *lock_key,
				 const char *lock_name);
585 586 587 588
struct regmap *__regmap_init_sdw_mbq(struct sdw_slave *sdw,
				     const struct regmap_config *config,
				     struct lock_class_key *lock_key,
				     const char *lock_name);
589 590 591 592
struct regmap *__regmap_init_spi_avmm(struct spi_device *spi,
				      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

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);
S
Sander Vanheule 已提交
604 605 606 607
struct regmap *__devm_regmap_init_mdio(struct mdio_device *mdio_dev,
				      const struct regmap_config *config,
				      struct lock_class_key *lock_key,
				      const char *lock_name);
A
Akinobu Mita 已提交
608 609 610 611
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);
612 613 614 615 616 617 618 619 620 621 622 623
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);
624 625 626 627
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);
628 629 630 631 632 633 634 635 636 637
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 已提交
638 639 640 641
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);
642 643 644 645
struct regmap *__devm_regmap_init_sdw_mbq(struct sdw_slave *sdw,
					  const struct regmap_config *config,
					  struct lock_class_key *lock_key,
					  const char *lock_name);
646 647 648 649
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);
V
Vitor Soares 已提交
650 651 652 653
struct regmap *__devm_regmap_init_i3c(struct i3c_device *i3c,
				 const struct regmap_config *config,
				 struct lock_class_key *lock_key,
				 const char *lock_name);
654 655 656 657
struct regmap *__devm_regmap_init_spi_avmm(struct spi_device *spi,
					   const struct regmap_config *config,
					   struct lock_class_key *lock_key,
					   const char *lock_name);
658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679
/*
 * 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

680
/**
681
 * regmap_init() - Initialise register map
682 683 684 685 686 687 688 689 690 691
 *
 * @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.
 */
692 693 694
#define regmap_init(dev, bus, bus_context, config)			\
	__regmap_lockdep_wrapper(__regmap_init, #config,		\
				dev, bus, bus_context, config)
695
int regmap_attach_dev(struct device *dev, struct regmap *map,
696
		      const struct regmap_config *config);
697

698
/**
699
 * regmap_init_i2c() - Initialise register map
700 701 702 703 704 705 706
 *
 * @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.
 */
707 708 709
#define regmap_init_i2c(i2c, config)					\
	__regmap_lockdep_wrapper(__regmap_init_i2c, #config,		\
				i2c, config)
710

S
Sander Vanheule 已提交
711 712 713 714 715 716 717 718 719 720 721 722 723
/**
 * regmap_init_mdio() - Initialise register map
 *
 * @mdio_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_mdio(mdio_dev, config)				\
	__regmap_lockdep_wrapper(__regmap_init_mdio, #config,		\
				mdio_dev, config)

A
Akinobu Mita 已提交
724 725 726 727 728 729 730 731 732 733 734 735 736
/**
 * 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 已提交
737 738 739 740 741 742 743 744 745 746 747 748 749
/**
 * 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)

750
/**
751
 * regmap_init_spi() - Initialise register map
752
 *
753
 * @dev: Device that will be interacted with
754 755 756 757 758
 * @config: Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
759 760 761
#define regmap_init_spi(dev, config)					\
	__regmap_lockdep_wrapper(__regmap_init_spi, #config,		\
				dev, config)
762 763

/**
764 765 766
 * regmap_init_spmi_base() - Create regmap for the Base register space
 *
 * @dev:	SPMI device that will be interacted with
767 768 769 770 771
 * @config:	Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
772 773 774
#define regmap_init_spmi_base(dev, config)				\
	__regmap_lockdep_wrapper(__regmap_init_spmi_base, #config,	\
				dev, config)
775 776

/**
777 778 779
 * regmap_init_spmi_ext() - Create regmap for Ext register space
 *
 * @dev:	Device that will be interacted with
780 781 782 783 784
 * @config:	Configuration for register map
 *
 * The return value will be an ERR_PTR() on error or a valid pointer to
 * a struct regmap.
 */
785 786 787
#define regmap_init_spmi_ext(dev, config)				\
	__regmap_lockdep_wrapper(__regmap_init_spmi_ext, #config,	\
				dev, config)
788

789 790 791 792 793 794 795 796 797 798 799 800 801
/**
 * 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)

802
/**
803
 * regmap_init_mmio_clk() - Initialise register map with register clock
804 805 806 807 808 809 810 811 812
 *
 * @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.
 */
813 814 815
#define regmap_init_mmio_clk(dev, clk_id, regs, config)			\
	__regmap_lockdep_wrapper(__regmap_init_mmio_clk, #config,	\
				dev, clk_id, regs, config)
816 817

/**
818
 * regmap_init_mmio() - Initialise register map
819 820 821 822 823 824 825 826
 *
 * @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.
 */
827 828 829 830
#define regmap_init_mmio(dev, regs, config)		\
	regmap_init_mmio_clk(dev, NULL, regs, config)

/**
831
 * regmap_init_ac97() - Initialise AC'97 register map
832 833 834 835 836 837 838
 *
 * @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.
 */
839 840 841
#define regmap_init_ac97(ac97, config)					\
	__regmap_lockdep_wrapper(__regmap_init_ac97, #config,		\
				ac97, config)
842
bool regmap_ac97_default_volatile(struct device *dev, unsigned int reg);
843

V
Vinod Koul 已提交
844 845 846 847 848 849 850 851 852 853 854 855 856
/**
 * 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)

857 858 859 860 861 862 863 864 865 866 867 868 869
/**
 * regmap_init_sdw_mbq() - 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_mbq(sdw, config)					\
	__regmap_lockdep_wrapper(__regmap_init_sdw_mbq, #config,		\
				sdw, config)

870 871 872 873 874 875 876 877 878 879 880 881 882
/**
 * regmap_init_spi_avmm() - Initialize register map for Intel SPI Slave
 * to AVMM Bus Bridge
 *
 * @spi: 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_spi_avmm(spi, config)					\
	__regmap_lockdep_wrapper(__regmap_init_spi_avmm, #config,		\
				 spi, config)
V
Vinod Koul 已提交
883

884
/**
885
 * devm_regmap_init() - Initialise managed register map
886 887 888 889 890 891 892 893 894 895 896
 *
 * @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.
 */
897 898 899
#define devm_regmap_init(dev, bus, bus_context, config)			\
	__regmap_lockdep_wrapper(__devm_regmap_init, #config,		\
				dev, bus, bus_context, config)
900 901

/**
902
 * devm_regmap_init_i2c() - Initialise managed register map
903 904 905 906 907 908 909 910
 *
 * @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.
 */
911 912 913
#define devm_regmap_init_i2c(i2c, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_i2c, #config,	\
				i2c, config)
914

S
Sander Vanheule 已提交
915 916 917 918 919 920 921 922 923 924 925 926 927 928
/**
 * devm_regmap_init_mdio() - Initialise managed register map
 *
 * @mdio_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_mdio(mdio_dev, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_mdio, #config,	\
				mdio_dev, config)

A
Akinobu Mita 已提交
929 930 931 932 933 934 935 936 937 938 939 940 941 942
/**
 * 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)

943
/**
944
 * devm_regmap_init_spi() - Initialise register map
945
 *
946
 * @dev: Device that will be interacted with
947 948 949 950 951 952
 * @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.
 */
953 954 955
#define devm_regmap_init_spi(dev, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_spi, #config,	\
				dev, config)
956 957

/**
958 959 960
 * devm_regmap_init_spmi_base() - Create managed regmap for Base register space
 *
 * @dev:	SPMI device that will be interacted with
961 962 963 964 965 966
 * @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.
 */
967 968 969
#define devm_regmap_init_spmi_base(dev, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_spmi_base, #config,	\
				dev, config)
970 971

/**
972 973 974
 * devm_regmap_init_spmi_ext() - Create managed regmap for Ext register space
 *
 * @dev:	SPMI device that will be interacted with
975 976 977 978 979 980
 * @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.
 */
981 982 983 984
#define devm_regmap_init_spmi_ext(dev, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_spmi_ext, #config,	\
				dev, config)

985 986 987 988 989 990 991 992 993 994 995 996 997
/**
 * 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)
998
/**
999
 * devm_regmap_init_mmio_clk() - Initialise managed register map with clock
1000 1001
 *
 * @dev: Device that will be interacted with
1002
 * @clk_id: register clock consumer ID
1003 1004 1005
 * @regs: Pointer to memory-mapped IO region
 * @config: Configuration for register map
 *
1006 1007 1008
 * 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.
1009
 */
1010 1011 1012
#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)
1013 1014

/**
1015
 * devm_regmap_init_mmio() - Initialise managed register map
1016 1017 1018 1019 1020 1021 1022 1023 1024
 *
 * @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.
 */
1025 1026
#define devm_regmap_init_mmio(dev, regs, config)		\
	devm_regmap_init_mmio_clk(dev, NULL, regs, config)
1027

1028
/**
1029
 * devm_regmap_init_ac97() - Initialise AC'97 register map
1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040
 *
 * @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)
1041

V
Vinod Koul 已提交
1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055
/**
 * 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)

1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069
/**
 * devm_regmap_init_sdw_mbq() - 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_mbq(sdw, config)			\
	__regmap_lockdep_wrapper(__devm_regmap_init_sdw_mbq, #config,   \
				sdw, config)

1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082
/**
 * 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)
V
Vitor Soares 已提交
1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097

/**
 * devm_regmap_init_i3c() - Initialise managed register map
 *
 * @i3c: 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_i3c(i3c, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_i3c, #config,	\
				i3c, config)

1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112
/**
 * devm_regmap_init_spi_avmm() - Initialize register map for Intel SPI Slave
 * to AVMM Bus Bridge
 *
 * @spi: 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 map will be automatically freed by the
 * device management code.
 */
#define devm_regmap_init_spi_avmm(spi, config)				\
	__regmap_lockdep_wrapper(__devm_regmap_init_spi_avmm, #config,	\
				 spi, config)

1113 1114
int regmap_mmio_attach_clk(struct regmap *map, struct clk *clk);
void regmap_mmio_detach_clk(struct regmap *map);
1115
void regmap_exit(struct regmap *map);
1116 1117
int regmap_reinit_cache(struct regmap *map,
			const struct regmap_config *config);
M
Mark Brown 已提交
1118
struct regmap *dev_get_regmap(struct device *dev, const char *name);
T
Tuomas Tynkkynen 已提交
1119
struct device *regmap_get_device(struct regmap *map);
1120
int regmap_write(struct regmap *map, unsigned int reg, unsigned int val);
1121
int regmap_write_async(struct regmap *map, unsigned int reg, unsigned int val);
1122 1123
int regmap_raw_write(struct regmap *map, unsigned int reg,
		     const void *val, size_t val_len);
B
Ben Whitten 已提交
1124 1125
int regmap_noinc_write(struct regmap *map, unsigned int reg,
		     const void *val, size_t val_len);
1126 1127
int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,
			size_t val_count);
1128
int regmap_multi_reg_write(struct regmap *map, const struct reg_sequence *regs,
1129
			int num_regs);
1130
int regmap_multi_reg_write_bypassed(struct regmap *map,
1131
				    const struct reg_sequence *regs,
1132
				    int num_regs);
1133 1134
int regmap_raw_write_async(struct regmap *map, unsigned int reg,
			   const void *val, size_t val_len);
1135 1136 1137
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);
1138 1139
int regmap_noinc_read(struct regmap *map, unsigned int reg,
		      void *val, size_t val_len);
1140 1141
int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val,
		     size_t val_count);
1142 1143 1144
int regmap_update_bits_base(struct regmap *map, unsigned int reg,
			    unsigned int mask, unsigned int val,
			    bool *change, bool async, bool force);
1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180

static inline int regmap_update_bits(struct regmap *map, unsigned int reg,
				     unsigned int mask, unsigned int val)
{
	return regmap_update_bits_base(map, reg, mask, val, NULL, false, false);
}

static inline int regmap_update_bits_async(struct regmap *map, unsigned int reg,
					   unsigned int mask, unsigned int val)
{
	return regmap_update_bits_base(map, reg, mask, val, NULL, true, false);
}

static inline int regmap_update_bits_check(struct regmap *map, unsigned int reg,
					   unsigned int mask, unsigned int val,
					   bool *change)
{
	return regmap_update_bits_base(map, reg, mask, val,
				       change, false, false);
}

static inline int
regmap_update_bits_check_async(struct regmap *map, unsigned int reg,
			       unsigned int mask, unsigned int val,
			       bool *change)
{
	return regmap_update_bits_base(map, reg, mask, val,
				       change, true, false);
}

static inline int regmap_write_bits(struct regmap *map, unsigned int reg,
				    unsigned int mask, unsigned int val)
{
	return regmap_update_bits_base(map, reg, mask, val, NULL, false, true);
}

1181
int regmap_get_val_bytes(struct regmap *map);
1182
int regmap_get_max_register(struct regmap *map);
1183
int regmap_get_reg_stride(struct regmap *map);
1184
int regmap_async_complete(struct regmap *map);
1185
bool regmap_can_raw_write(struct regmap *map);
1186 1187
size_t regmap_get_raw_read_max(struct regmap *map);
size_t regmap_get_raw_write_max(struct regmap *map);
1188

M
Mark Brown 已提交
1189
int regcache_sync(struct regmap *map);
1190 1191
int regcache_sync_region(struct regmap *map, unsigned int min,
			 unsigned int max);
1192 1193
int regcache_drop_region(struct regmap *map, unsigned int min,
			 unsigned int max);
1194
void regcache_cache_only(struct regmap *map, bool enable);
1195
void regcache_cache_bypass(struct regmap *map, bool enable);
1196
void regcache_mark_dirty(struct regmap *map);
1197

1198 1199 1200
bool regmap_check_range_table(struct regmap *map, unsigned int reg,
			      const struct regmap_access_table *table);

1201
int regmap_register_patch(struct regmap *map, const struct reg_sequence *regs,
M
Mark Brown 已提交
1202
			  int num_regs);
N
Nenghua Cao 已提交
1203 1204
int regmap_parse_val(struct regmap *map, const void *buf,
				unsigned int *val);
M
Mark Brown 已提交
1205

1206 1207 1208 1209 1210 1211 1212 1213 1214 1215
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);

1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230
static inline int regmap_set_bits(struct regmap *map,
				  unsigned int reg, unsigned int bits)
{
	return regmap_update_bits_base(map, reg, bits, bits,
				       NULL, false, false);
}

static inline int regmap_clear_bits(struct regmap *map,
				    unsigned int reg, unsigned int bits)
{
	return regmap_update_bits_base(map, reg, bits, 0, NULL, false, false);
}

int regmap_test_bits(struct regmap *map, unsigned int reg, unsigned int bits);

1231
/**
1232
 * struct reg_field - Description of an register field
1233 1234 1235
 *
 * @reg: Offset of the register within the regmap bank
 * @lsb: lsb of the register field.
1236
 * @msb: msb of the register field.
1237 1238
 * @id_size: port size if it has some ports
 * @id_offset: address offset for each ports
1239 1240 1241 1242 1243
 */
struct reg_field {
	unsigned int reg;
	unsigned int lsb;
	unsigned int msb;
1244 1245
	unsigned int id_size;
	unsigned int id_offset;
1246 1247 1248 1249 1250 1251 1252 1253
};

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

1254 1255 1256 1257 1258 1259 1260 1261
#define REG_FIELD_ID(_reg, _lsb, _msb, _size, _offset) {	\
				.reg = _reg,			\
				.lsb = _lsb,			\
				.msb = _msb,			\
				.id_size = _size,		\
				.id_offset = _offset,		\
				}

1262 1263 1264 1265 1266 1267 1268 1269
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);

1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280
int regmap_field_bulk_alloc(struct regmap *regmap,
			     struct regmap_field **rm_field,
			     struct reg_field *reg_field,
			     int num_fields);
void regmap_field_bulk_free(struct regmap_field *field);
int devm_regmap_field_bulk_alloc(struct device *dev, struct regmap *regmap,
				 struct regmap_field **field,
				 struct reg_field *reg_field, int num_fields);
void devm_regmap_field_bulk_free(struct device *dev,
				 struct regmap_field *field);

1281
int regmap_field_read(struct regmap_field *field, unsigned int *val);
1282 1283 1284
int regmap_field_update_bits_base(struct regmap_field *field,
				  unsigned int mask, unsigned int val,
				  bool *change, bool async, bool force);
1285 1286
int regmap_fields_read(struct regmap_field *field, unsigned int id,
		       unsigned int *val);
1287 1288 1289
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);
1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348

static inline int regmap_field_write(struct regmap_field *field,
				     unsigned int val)
{
	return regmap_field_update_bits_base(field, ~0, val,
					     NULL, false, false);
}

static inline int regmap_field_force_write(struct regmap_field *field,
					   unsigned int val)
{
	return regmap_field_update_bits_base(field, ~0, val, NULL, false, true);
}

static inline int regmap_field_update_bits(struct regmap_field *field,
					   unsigned int mask, unsigned int val)
{
	return regmap_field_update_bits_base(field, mask, val,
					     NULL, false, false);
}

static inline int
regmap_field_force_update_bits(struct regmap_field *field,
			       unsigned int mask, unsigned int val)
{
	return regmap_field_update_bits_base(field, mask, val,
					     NULL, false, true);
}

static inline int regmap_fields_write(struct regmap_field *field,
				      unsigned int id, unsigned int val)
{
	return regmap_fields_update_bits_base(field, id, ~0, val,
					      NULL, false, false);
}

static inline int regmap_fields_force_write(struct regmap_field *field,
					    unsigned int id, unsigned int val)
{
	return regmap_fields_update_bits_base(field, id, ~0, val,
					      NULL, false, true);
}

static inline int
regmap_fields_update_bits(struct regmap_field *field, unsigned int id,
			  unsigned int mask, unsigned int val)
{
	return regmap_fields_update_bits_base(field, id, mask, val,
					      NULL, false, false);
}

static inline int
regmap_fields_force_update_bits(struct regmap_field *field, unsigned int id,
				unsigned int mask, unsigned int val)
{
	return regmap_fields_update_bits_base(field, id, mask, val,
					      NULL, false, true);
}

1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367
/**
 * 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;
};
1368

1369
/**
1370
 * struct regmap_irq - Description of an IRQ for the generic regmap irq_chip.
1371 1372 1373
 *
 * @reg_offset: Offset of the status/mask register within the bank
 * @mask:       Mask used to flag/control the register.
1374
 * @type:	IRQ trigger type setting details if supported.
1375 1376 1377 1378
 */
struct regmap_irq {
	unsigned int reg_offset;
	unsigned int mask;
1379
	struct regmap_irq_type type;
1380 1381
};

1382 1383 1384
#define REGMAP_IRQ_REG(_irq, _off, _mask)		\
	[_irq] = { .reg_offset = (_off), .mask = (_mask) }

1385 1386 1387 1388 1389 1390
#define REGMAP_IRQ_REG_LINE(_id, _reg_bits) \
	[_id] = {				\
		.mask = BIT((_id) % (_reg_bits)),	\
		.reg_offset = (_id) / (_reg_bits),	\
	}

1391 1392 1393 1394 1395 1396 1397 1398
#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;
};

1399
/**
1400
 * struct regmap_irq_chip - Description of a generic regmap irq_chip.
1401 1402 1403
 *
 * @name:        Descriptive name for IRQ controller.
 *
1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418
 * @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, ...
1419 1420 1421
 *		     When used with not_fixed_stride, each one-element array
 *		     member contains offset calculated as address from each
 *		     peripheral to first peripheral.
1422 1423 1424
 * @num_main_regs: Number of 'main status' irq registers for chips which have
 *		   main_status set.
 *
1425 1426
 * @status_base: Base status register address.
 * @mask_base:   Base mask register address.
1427
 * @mask_writeonly: Base mask register is write only.
1428 1429
 * @unmask_base:  Base unmask register address. for chips who have
 *                separate mask and unmask registers
1430 1431
 * @ack_base:    Base ack address. If zero then the chip is clear on read.
 *               Using zero value is possible with @use_ack bit.
1432
 * @wake_base:   Base address for wake enables.  If zero unsupported.
1433
 * @type_base:   Base address for irq type.  If zero unsupported.
1434
 * @virt_reg_base:   Base addresses for extra config regs.
1435
 * @irq_reg_stride:  Stride to use for chips where registers are not contiguous.
1436
 * @init_ack_masked: Ack all masked interrupts once during initalization.
1437
 * @mask_invert: Inverted mask register: cleared bits are masked out.
1438
 * @use_ack:     Use @ack register even if it is zero.
1439
 * @ack_invert:  Inverted ack register: cleared bits for ack.
1440
 * @clear_ack:  Use this to set 1 and 0 or vice-versa to clear interrupts.
1441
 * @wake_invert: Inverted wake register: cleared bits are wake enabled.
1442
 * @type_invert: Invert the type flags.
1443 1444 1445
 * @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.
1446 1447 1448
 * @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.
1449 1450 1451
 * @not_fixed_stride: Used when chip peripherals are not laid out with fixed
 * 		      stride. Must be used with sub_reg_offsets containing the
 * 		      offsets to each peripheral.
1452
 * @status_invert: Inverted status register: cleared bits are active interrupts.
1453
 * @runtime_pm:  Hold a runtime PM lock on the device when accessing it.
1454 1455 1456 1457 1458
 *
 * @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.
1459
 * @num_type_reg:    Number of type registers.
1460 1461
 * @num_virt_regs:   Number of non-standard irq configuration registers.
 *		     If zero unsupported.
1462 1463
 * @type_reg_stride: Stride to use for chips where type registers are not
 *			contiguous.
1464 1465 1466 1467
 * @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().
1468 1469
 * @set_type_virt:   Driver specific callback to extend regmap_irq_set_type()
 *		     and configure virt regs.
1470 1471
 * @irq_drv_data:    Driver specific IRQ data which is passed as parameter when
 *		     driver specific pre/post interrupt handler is called.
1472 1473 1474 1475
 *
 * 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.
1476 1477 1478 1479
 */
struct regmap_irq_chip {
	const char *name;

1480 1481 1482 1483 1484
	unsigned int main_status;
	unsigned int num_main_status_bits;
	struct regmap_irq_sub_irq_map *sub_reg_offsets;
	int num_main_regs;

1485 1486
	unsigned int status_base;
	unsigned int mask_base;
1487
	unsigned int unmask_base;
1488
	unsigned int ack_base;
1489
	unsigned int wake_base;
1490
	unsigned int type_base;
1491
	unsigned int *virt_reg_base;
1492
	unsigned int irq_reg_stride;
1493
	bool mask_writeonly:1;
1494 1495
	bool init_ack_masked:1;
	bool mask_invert:1;
1496
	bool use_ack:1;
1497
	bool ack_invert:1;
1498
	bool clear_ack:1;
1499 1500
	bool wake_invert:1;
	bool runtime_pm:1;
1501
	bool type_invert:1;
1502
	bool type_in_mask:1;
1503
	bool clear_on_unmask:1;
1504
	bool not_fixed_stride:1;
1505
	bool status_invert:1;
1506 1507 1508 1509 1510

	int num_regs;

	const struct regmap_irq *irqs;
	int num_irqs;
1511 1512

	int num_type_reg;
1513
	int num_virt_regs;
1514
	unsigned int type_reg_stride;
1515 1516 1517

	int (*handle_pre_irq)(void *irq_drv_data);
	int (*handle_post_irq)(void *irq_drv_data);
1518 1519
	int (*set_type_virt)(unsigned int **buf, unsigned int type,
			     unsigned long hwirq, int reg);
1520
	void *irq_drv_data;
1521 1522 1523 1524 1525
};

struct regmap_irq_chip_data;

int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
M
Mark Brown 已提交
1526
			int irq_base, const struct regmap_irq_chip *chip,
1527
			struct regmap_irq_chip_data **data);
1528 1529 1530 1531 1532
int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
			       struct regmap *map, int irq,
			       int irq_flags, int irq_base,
			       const struct regmap_irq_chip *chip,
			       struct regmap_irq_chip_data **data);
1533
void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *data);
1534 1535 1536 1537 1538

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);
1539 1540 1541 1542 1543 1544
int devm_regmap_add_irq_chip_fwnode(struct device *dev,
				    struct fwnode_handle *fwnode,
				    struct regmap *map, int irq,
				    int irq_flags, int irq_base,
				    const struct regmap_irq_chip *chip,
				    struct regmap_irq_chip_data **data);
1545 1546 1547
void devm_regmap_del_irq_chip(struct device *dev, int irq,
			      struct regmap_irq_chip_data *data);

1548
int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data);
1549
int regmap_irq_get_virq(struct regmap_irq_chip_data *data, int irq);
1550
struct irq_domain *regmap_irq_get_domain(struct regmap_irq_chip_data *data);
1551

1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567
#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;
}

1568 1569 1570 1571 1572 1573 1574
static inline int regmap_write_async(struct regmap *map, unsigned int reg,
				     unsigned int val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1575 1576 1577 1578 1579 1580 1581
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;
}

1582 1583 1584 1585 1586 1587 1588
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 已提交
1589 1590 1591 1592 1593 1594 1595
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;
}

1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616
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;
}

1617 1618 1619 1620 1621 1622 1623
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;
}

1624 1625 1626 1627 1628 1629 1630
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;
}

1631 1632 1633
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)
1634 1635 1636 1637 1638
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659
static inline int regmap_set_bits(struct regmap *map,
				  unsigned int reg, unsigned int bits)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

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

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

1660 1661 1662
static inline int regmap_field_update_bits_base(struct regmap_field *field,
					unsigned int mask, unsigned int val,
					bool *change, bool async, bool force)
1663 1664 1665 1666 1667
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1668 1669 1670 1671
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)
1672 1673 1674 1675 1676
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773
static inline int regmap_update_bits(struct regmap *map, unsigned int reg,
				     unsigned int mask, unsigned int val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

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

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

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

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

static inline int regmap_field_write(struct regmap_field *field,
				     unsigned int val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

static inline int regmap_field_force_write(struct regmap_field *field,
					   unsigned int val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

static inline int regmap_field_update_bits(struct regmap_field *field,
					   unsigned int mask, unsigned int val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

static inline int
regmap_field_force_update_bits(struct regmap_field *field,
			       unsigned int mask, unsigned int val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

static inline int regmap_fields_write(struct regmap_field *field,
				      unsigned int id, unsigned int val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

static inline int regmap_fields_force_write(struct regmap_field *field,
					    unsigned int id, unsigned int val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

static inline int
regmap_fields_update_bits(struct regmap_field *field, unsigned int id,
			  unsigned int mask, unsigned int val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

static inline int
regmap_fields_force_update_bits(struct regmap_field *field, unsigned int id,
				unsigned int mask, unsigned int val)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1774 1775 1776 1777 1778 1779
static inline int regmap_get_val_bytes(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1780 1781 1782 1783 1784 1785
static inline int regmap_get_max_register(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1786 1787 1788 1789 1790 1791
static inline int regmap_get_reg_stride(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1792 1793 1794 1795 1796 1797
static inline int regcache_sync(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1798 1799 1800 1801 1802 1803 1804
static inline int regcache_sync_region(struct regmap *map, unsigned int min,
				       unsigned int max)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1805 1806 1807 1808 1809 1810 1811
static inline int regcache_drop_region(struct regmap *map, unsigned int min,
				       unsigned int max)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826
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");
}

1827 1828 1829 1830 1831
static inline void regmap_async_complete(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
}

1832
static inline int regmap_register_patch(struct regmap *map,
1833
					const struct reg_sequence *regs,
1834 1835 1836 1837 1838 1839
					int num_regs)
{
	WARN_ONCE(1, "regmap API is disabled");
	return -EINVAL;
}

N
Nenghua Cao 已提交
1840 1841 1842 1843 1844 1845 1846
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 已提交
1847 1848 1849 1850 1851 1852
static inline struct regmap *dev_get_regmap(struct device *dev,
					    const char *name)
{
	return NULL;
}

T
Tuomas Tynkkynen 已提交
1853 1854 1855
static inline struct device *regmap_get_device(struct regmap *map)
{
	WARN_ONCE(1, "regmap API is disabled");
1856
	return NULL;
T
Tuomas Tynkkynen 已提交
1857 1858
}

1859 1860
#endif

1861
#endif