From 008ac71593cf51e221d564c3be20b9d43465ea50 Mon Sep 17 00:00:00 2001 From: Christian Marangi Date: Sat, 25 Mar 2023 14:56:52 +0100 Subject: [PATCH] wifi: mt76: add support for providing precal in nvmem cells Add support for providing precal in nvmem cells by adding nvmem cell as an alternative source for mt76_get_of_eeprom(). Nvmem cells will follow standard nvmem cell definition and needs to be called 'precal' to be correctly identified. Signed-off-by: Christian Marangi --- eeprom.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/eeprom.c b/eeprom.c index b2e6e1ed3..2f744c95f 100644 --- a/eeprom.c +++ b/eeprom.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include "mt76.h" @@ -104,6 +105,37 @@ int mt76_get_of_epprom_from_mtd(struct mt76_dev *dev, void *eep, int offset, int } #endif +int mt76_get_of_epprom_from_nvmem(struct mt76_dev *dev, void *eep, int len) +{ + struct device_node *np = dev->dev->of_node; + struct nvmem_cell *cell; + const void *data; + size_t retlen; + int ret = 0; + + cell = of_nvmem_cell_get(np, "precal"); + if (IS_ERR(cell)) + return PTR_ERR(cell); + + data = nvmem_cell_read(cell, &retlen); + nvmem_cell_put(cell); + + if (IS_ERR(data)) + return PTR_ERR(data); + + if (retlen < len) { + ret = -EINVAL; + goto exit; + } + + memcpy(eep, data, len); + +exit: + kfree(data); + + return ret; +} + int mt76_get_of_eeprom(struct mt76_dev *dev, void *eep, int offset, int len) { struct device_node *np = dev->dev->of_node; @@ -122,6 +154,8 @@ int mt76_get_of_eeprom(struct mt76_dev *dev, void *eep, int offset, int len) goto exit; #endif + ret = mt76_get_of_epprom_from_nvmem(dev, epp, len); + exit: return ret; }