mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-07 18:40:10 +00:00
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:
committed by
Felix Fietkau
parent
7d424a990e
commit
5bef3a406c
@@ -6,6 +6,7 @@
|
|||||||
#include <linux/of_net.h>
|
#include <linux/of_net.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
#include <linux/nvmem-consumer.h>
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
#include "mt76.h"
|
#include "mt76.h"
|
||||||
|
|
||||||
@@ -105,6 +106,37 @@ out_put_node:
|
|||||||
#endif
|
#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)
|
int mt76_get_of_eeprom(struct mt76_dev *dev, void *eep, int offset, int len)
|
||||||
{
|
{
|
||||||
struct device_node *np = dev->dev->of_node;
|
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)
|
if (!ret)
|
||||||
return 0;
|
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);
|
EXPORT_SYMBOL_GPL(mt76_get_of_eeprom);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user