xref: /linux-6.15/include/linux/nvmem-provider.h (revision e00a844a)
1 /*
2  * nvmem framework provider.
3  *
4  * Copyright (C) 2015 Srinivas Kandagatla <[email protected]>
5  * Copyright (C) 2013 Maxime Ripard <[email protected]>
6  *
7  * This file is licensed under the terms of the GNU General Public
8  * License version 2.  This program is licensed "as is" without any
9  * warranty of any kind, whether express or implied.
10  */
11 
12 #ifndef _LINUX_NVMEM_PROVIDER_H
13 #define _LINUX_NVMEM_PROVIDER_H
14 
15 #include <linux/err.h>
16 #include <linux/errno.h>
17 
18 struct nvmem_device;
19 struct nvmem_cell_info;
20 typedef int (*nvmem_reg_read_t)(void *priv, unsigned int offset,
21 				void *val, size_t bytes);
22 typedef int (*nvmem_reg_write_t)(void *priv, unsigned int offset,
23 				 void *val, size_t bytes);
24 
25 struct nvmem_config {
26 	struct device		*dev;
27 	const char		*name;
28 	int			id;
29 	struct module		*owner;
30 	const struct nvmem_cell_info	*cells;
31 	int			ncells;
32 	bool			read_only;
33 	bool			root_only;
34 	nvmem_reg_read_t	reg_read;
35 	nvmem_reg_write_t	reg_write;
36 	int	size;
37 	int	word_size;
38 	int	stride;
39 	void	*priv;
40 	/* To be only used by old driver/misc/eeprom drivers */
41 	bool			compat;
42 	struct device		*base_dev;
43 };
44 
45 #if IS_ENABLED(CONFIG_NVMEM)
46 
47 struct nvmem_device *nvmem_register(const struct nvmem_config *cfg);
48 int nvmem_unregister(struct nvmem_device *nvmem);
49 
50 #else
51 
52 static inline struct nvmem_device *nvmem_register(const struct nvmem_config *c)
53 {
54 	return ERR_PTR(-ENOSYS);
55 }
56 
57 static inline int nvmem_unregister(struct nvmem_device *nvmem)
58 {
59 	return -ENOSYS;
60 }
61 
62 #endif /* CONFIG_NVMEM */
63 #endif  /* ifndef _LINUX_NVMEM_PROVIDER_H */
64