wifi: mt76: add support for providing eeprom in nvmem cells
Add support for providing eeprom 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 'eeprom' to be correctly identified. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> Reviewed-by: Daniel Golle <daniel@makrotopia.org> Tested-by: Daniel Golle <daniel@makrotopia.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
7d424a990e
commit
5bef3a406c
1 changed files with 37 additions and 1 deletions
|
@ -6,6 +6,7 @@
|
|||
#include <linux/of_net.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/nvmem-consumer.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include "mt76.h"
|
||||
|
||||
|
@ -105,6 +106,37 @@ out_put_node:
|
|||
#endif
|
||||
}
|
||||
|
||||
static 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, "eeprom");
|
||||
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;
|
||||
|
@ -117,7 +149,11 @@ int mt76_get_of_eeprom(struct mt76_dev *dev, void *eep, int offset, int len)
|
|||
if (!ret)
|
||||
return 0;
|
||||
|
||||
return mt76_get_of_epprom_from_mtd(dev, eep, offset, len);
|
||||
ret = mt76_get_of_epprom_from_mtd(dev, eep, offset, len);
|
||||
if (!ret)
|
||||
return 0;
|
||||
|
||||
return mt76_get_of_epprom_from_nvmem(dev, eep, len);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76_get_of_eeprom);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue