Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.20-rc2 124 lines 3.7 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * nvmem framework provider. 4 * 5 * Copyright (C) 2015 Srinivas Kandagatla <srinivas.kandagatla@linaro.org> 6 * Copyright (C) 2013 Maxime Ripard <maxime.ripard@free-electrons.com> 7 */ 8 9#ifndef _LINUX_NVMEM_PROVIDER_H 10#define _LINUX_NVMEM_PROVIDER_H 11 12#include <linux/err.h> 13#include <linux/errno.h> 14 15struct nvmem_device; 16struct nvmem_cell_info; 17typedef int (*nvmem_reg_read_t)(void *priv, unsigned int offset, 18 void *val, size_t bytes); 19typedef int (*nvmem_reg_write_t)(void *priv, unsigned int offset, 20 void *val, size_t bytes); 21 22/** 23 * struct nvmem_config - NVMEM device configuration 24 * 25 * @dev: Parent device. 26 * @name: Optional name. 27 * @id: Optional device ID used in full name. Ignored if name is NULL. 28 * @owner: Pointer to exporter module. Used for refcounting. 29 * @cells: Optional array of pre-defined NVMEM cells. 30 * @ncells: Number of elements in cells. 31 * @read_only: Device is read-only. 32 * @root_only: Device is accessibly to root only. 33 * @reg_read: Callback to read data. 34 * @reg_write: Callback to write data. 35 * @size: Device size. 36 * @word_size: Minimum read/write access granularity. 37 * @stride: Minimum read/write access stride. 38 * @priv: User context passed to read/write callbacks. 39 * 40 * Note: A default "nvmem<id>" name will be assigned to the device if 41 * no name is specified in its configuration. In such case "<id>" is 42 * generated with ida_simple_get() and provided id field is ignored. 43 * 44 * Note: Specifying name and setting id to -1 implies a unique device 45 * whose name is provided as-is (kept unaltered). 46 */ 47struct nvmem_config { 48 struct device *dev; 49 const char *name; 50 int id; 51 struct module *owner; 52 const struct nvmem_cell_info *cells; 53 int ncells; 54 bool read_only; 55 bool root_only; 56 nvmem_reg_read_t reg_read; 57 nvmem_reg_write_t reg_write; 58 int size; 59 int word_size; 60 int stride; 61 void *priv; 62 /* To be only used by old driver/misc/eeprom drivers */ 63 bool compat; 64 struct device *base_dev; 65}; 66 67/** 68 * struct nvmem_cell_table - NVMEM cell definitions for given provider 69 * 70 * @nvmem_name: Provider name. 71 * @cells: Array of cell definitions. 72 * @ncells: Number of cell definitions in the array. 73 * @node: List node. 74 * 75 * This structure together with related helper functions is provided for users 76 * that don't can't access the nvmem provided structure but wish to register 77 * cell definitions for it e.g. board files registering an EEPROM device. 78 */ 79struct nvmem_cell_table { 80 const char *nvmem_name; 81 const struct nvmem_cell_info *cells; 82 size_t ncells; 83 struct list_head node; 84}; 85 86#if IS_ENABLED(CONFIG_NVMEM) 87 88struct nvmem_device *nvmem_register(const struct nvmem_config *cfg); 89void nvmem_unregister(struct nvmem_device *nvmem); 90 91struct nvmem_device *devm_nvmem_register(struct device *dev, 92 const struct nvmem_config *cfg); 93 94int devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem); 95 96void nvmem_add_cell_table(struct nvmem_cell_table *table); 97void nvmem_del_cell_table(struct nvmem_cell_table *table); 98 99#else 100 101static inline struct nvmem_device *nvmem_register(const struct nvmem_config *c) 102{ 103 return ERR_PTR(-EOPNOTSUPP); 104} 105 106static inline void nvmem_unregister(struct nvmem_device *nvmem) {} 107 108static inline struct nvmem_device * 109devm_nvmem_register(struct device *dev, const struct nvmem_config *c) 110{ 111 return nvmem_register(c); 112} 113 114static inline int 115devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem) 116{ 117 return -EOPNOTSUPP; 118} 119 120static inline void nvmem_add_cell_table(struct nvmem_cell_table *table) {} 121static inline void nvmem_del_cell_table(struct nvmem_cell_table *table) {} 122 123#endif /* CONFIG_NVMEM */ 124#endif /* ifndef _LINUX_NVMEM_PROVIDER_H */