mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-03-24 01:09:47 +08:00
[dm][nvmem] support nvmem
Support for NVMEM(Non Volatile Memory) devices like EEPROM, EFUSES... Signed-off-by: GuEe-GUI <2991707448@qq.com>
This commit is contained in:
@@ -33,6 +33,7 @@ rsource "regulator/Kconfig"
|
||||
rsource "reset/Kconfig"
|
||||
rsource "thermal/Kconfig"
|
||||
rsource "virtio/Kconfig"
|
||||
rsource "nvmem/Kconfig"
|
||||
rsource "dma/Kconfig"
|
||||
rsource "mfd/Kconfig"
|
||||
rsource "ofw/Kconfig"
|
||||
|
||||
81
components/drivers/include/drivers/nvmem.h
Normal file
81
components/drivers/include/drivers/nvmem.h
Normal file
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2023-02-25 GuEe-GUI the first version
|
||||
*/
|
||||
|
||||
#ifndef __NVMEM_H__
|
||||
#define __NVMEM_H__
|
||||
|
||||
#include <ref.h>
|
||||
|
||||
#include <drivers/ofw.h>
|
||||
#include <drivers/core/dm.h>
|
||||
#include <drivers/core/driver.h>
|
||||
|
||||
struct rt_nvmem_device
|
||||
{
|
||||
struct rt_device parent;
|
||||
|
||||
int cells_nr;
|
||||
rt_list_t cell_nodes;
|
||||
|
||||
rt_ssize_t (*reg_read)(struct rt_nvmem_device *, int offset, void *val, rt_size_t bytes);
|
||||
rt_ssize_t (*reg_write)(struct rt_nvmem_device *, int offset, void *val, rt_size_t bytes);
|
||||
|
||||
rt_ssize_t size;
|
||||
int word_size;
|
||||
int stride;
|
||||
|
||||
rt_bool_t read_only;
|
||||
rt_bool_t ignore_wp;
|
||||
rt_base_t wp_pin;
|
||||
rt_uint8_t wp_pin_active;
|
||||
|
||||
struct rt_ref ref;
|
||||
struct rt_spinlock spinlock;
|
||||
|
||||
void *priv;
|
||||
};
|
||||
|
||||
struct rt_nvmem_cell
|
||||
{
|
||||
rt_list_t list;
|
||||
|
||||
int index;
|
||||
const char *id;
|
||||
const rt_bool_t free_able;
|
||||
|
||||
rt_uint32_t offset;
|
||||
rt_uint32_t bytes;
|
||||
rt_uint32_t bit_offset;
|
||||
rt_uint32_t nbits;
|
||||
|
||||
struct rt_ref ref;
|
||||
|
||||
struct rt_ofw_node *np;
|
||||
struct rt_nvmem_device *nvmem;
|
||||
};
|
||||
|
||||
rt_err_t rt_nvmem_device_register(struct rt_nvmem_device *ndev);
|
||||
rt_err_t rt_nvmem_device_unregister(struct rt_nvmem_device *ndev);
|
||||
|
||||
rt_err_t rt_nvmem_device_append_cell(struct rt_nvmem_device *ndev, struct rt_nvmem_cell *cell);
|
||||
|
||||
rt_ssize_t rt_nvmem_cell_read(struct rt_nvmem_cell *cell, void *buffer, rt_size_t len);
|
||||
rt_ssize_t rt_nvmem_cell_write(struct rt_nvmem_cell *cell, void *buffer, rt_size_t len);
|
||||
|
||||
rt_ssize_t rt_nvmem_cell_read_u8(struct rt_nvmem_cell *cell, rt_uint8_t *out_val);
|
||||
rt_ssize_t rt_nvmem_cell_read_u16(struct rt_nvmem_cell *cell, rt_uint16_t *out_val);
|
||||
rt_ssize_t rt_nvmem_cell_read_u32(struct rt_nvmem_cell *cell, rt_uint32_t *out_val);
|
||||
rt_ssize_t rt_nvmem_cell_read_u64(struct rt_nvmem_cell *cell, rt_uint64_t *out_val);
|
||||
|
||||
struct rt_nvmem_cell *rt_nvmem_get_cell_by_index(struct rt_device *dev, int index);
|
||||
struct rt_nvmem_cell *rt_nvmem_get_cell_by_name(struct rt_device *dev, const char *id);
|
||||
void rt_nvmem_put_cell(struct rt_nvmem_cell *cell);
|
||||
|
||||
#endif /* __NVMEM_H__ */
|
||||
@@ -125,6 +125,10 @@ extern "C" {
|
||||
#ifdef RT_USING_THERMAL
|
||||
#include "drivers/thermal.h"
|
||||
#endif /* RT_USING_THERMAL */
|
||||
|
||||
#ifdef RT_USING_NVMEM
|
||||
#include "drivers/nvmem.h"
|
||||
#endif /* RT_USING_NVMEM */
|
||||
#endif /* RT_USING_DM */
|
||||
|
||||
#ifdef RT_USING_RTC
|
||||
|
||||
12
components/drivers/nvmem/Kconfig
Normal file
12
components/drivers/nvmem/Kconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
menuconfig RT_USING_NVMEM
|
||||
bool "Using Non Volatile Memory (NVMEM) device drivers"
|
||||
depends on RT_USING_DM
|
||||
depends on RT_USING_OFW
|
||||
depends on RT_USING_PIN
|
||||
select RT_USING_ADT
|
||||
select RT_USING_ADT_REF
|
||||
default n
|
||||
|
||||
if RT_USING_NVMEM
|
||||
osource "$(SOC_DM_NVMEM_DIR)/Kconfig"
|
||||
endif
|
||||
15
components/drivers/nvmem/SConscript
Normal file
15
components/drivers/nvmem/SConscript
Normal file
@@ -0,0 +1,15 @@
|
||||
from building import *
|
||||
|
||||
group = []
|
||||
|
||||
if not GetDepend(['RT_USING_NVMEM']):
|
||||
Return('group')
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
CPPPATH = [cwd + '/../include']
|
||||
|
||||
src = ['nvmem.c']
|
||||
|
||||
group = DefineGroup('DeviceDrivers', src, depend = [''], CPPPATH = CPPPATH)
|
||||
|
||||
Return('group')
|
||||
548
components/drivers/nvmem/nvmem.c
Normal file
548
components/drivers/nvmem/nvmem.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user