root/drivers/nvmem/internals.h
/* SPDX-License-Identifier: GPL-2.0 */

#ifndef _LINUX_NVMEM_INTERNALS_H
#define _LINUX_NVMEM_INTERNALS_H

#include <linux/device.h>
#include <linux/nvmem-consumer.h>
#include <linux/nvmem-provider.h>

struct nvmem_device {
        struct module           *owner;
        struct device           dev;
        struct list_head        node;
        int                     stride;
        int                     word_size;
        int                     id;
        struct kref             refcnt;
        size_t                  size;
        bool                    read_only;
        bool                    root_only;
        int                     flags;
        enum nvmem_type         type;
        struct bin_attribute    eeprom;
        struct device           *base_dev;
        struct list_head        cells;
        void (*fixup_dt_cell_info)(struct nvmem_device *nvmem,
                                   struct nvmem_cell_info *cell);
        const struct nvmem_keepout *keepout;
        unsigned int            nkeepout;
        nvmem_reg_read_t        reg_read;
        nvmem_reg_write_t       reg_write;
        struct gpio_desc        *wp_gpio;
        struct nvmem_layout     *layout;
        void *priv;
        bool                    sysfs_cells_populated;
};

#if IS_ENABLED(CONFIG_OF)
int nvmem_layout_bus_register(void);
void nvmem_layout_bus_unregister(void);
int nvmem_populate_layout(struct nvmem_device *nvmem);
void nvmem_destroy_layout(struct nvmem_device *nvmem);
#else /* CONFIG_OF */
static inline int nvmem_layout_bus_register(void)
{
        return 0;
}

static inline void nvmem_layout_bus_unregister(void) {}

static inline int nvmem_populate_layout(struct nvmem_device *nvmem)
{
        return 0;
}

static inline void nvmem_destroy_layout(struct nvmem_device *nvmem) { }
#endif /* CONFIG_OF */

#endif  /* ifndef _LINUX_NVMEM_INTERNALS_H */