1 /* SPDX-License-Identifier: GPL-2.0 */ 2 3 #ifndef _LINUX_NVMEM_INTERNALS_H 4 #define _LINUX_NVMEM_INTERNALS_H 5 6 #include <linux/device.h> 7 #include <linux/nvmem-consumer.h> 8 #include <linux/nvmem-provider.h> 9 10 struct nvmem_device { 11 struct module *owner; 12 struct device dev; 13 struct list_head node; 14 int stride; 15 int word_size; 16 int id; 17 struct kref refcnt; 18 size_t size; 19 bool read_only; 20 bool root_only; 21 int flags; 22 enum nvmem_type type; 23 struct bin_attribute eeprom; 24 struct device *base_dev; 25 struct list_head cells; 26 void (*fixup_dt_cell_info)(struct nvmem_device *nvmem, 27 struct nvmem_cell_info *cell); 28 const struct nvmem_keepout *keepout; 29 unsigned int nkeepout; 30 nvmem_reg_read_t reg_read; 31 nvmem_reg_write_t reg_write; 32 struct gpio_desc *wp_gpio; 33 struct nvmem_layout *layout; 34 void *priv; 35 bool sysfs_cells_populated; 36 }; 37 38 int nvmem_add_cells_from_dt(struct nvmem_device *nvmem, struct device_node *np); 39 40 #if IS_ENABLED(CONFIG_OF) 41 int nvmem_layout_bus_register(void); 42 void nvmem_layout_bus_unregister(void); 43 int nvmem_populate_layout(struct nvmem_device *nvmem); 44 void nvmem_destroy_layout(struct nvmem_device *nvmem); 45 #else /* CONFIG_OF */ 46 static inline int nvmem_layout_bus_register(void) 47 { 48 return 0; 49 } 50 51 static inline void nvmem_layout_bus_unregister(void) {} 52 53 static inline int nvmem_populate_layout(struct nvmem_device *nvmem) 54 { 55 return 0; 56 } 57 58 static inline void nvmem_destroy_layout(struct nvmem_device *nvmem) { } 59 #endif /* CONFIG_OF */ 60 61 #endif /* ifndef _LINUX_NVMEM_INTERNALS_H */ 62