mt76: mt7615: add preliminary support for mtd eeprom parsing
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
Lorenzo Bianconi
maintainerPATCH 1/1 mt76: mt7615: add preliminary support for mtd eeprom parsing
Calibration data are often available on a specific mtd partition on embedded devices. Take into account eeprom calibration data if available. Calibration free data parsing is currently missing
--- .../wireless/mediatek/mt76/mt7615/eeprom.c | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c +26 -6
@@ -42,13 +42,13 @@ static int mt7615_efuse_read(struct mt7615_dev *dev, u32 base,static int mt7615_efuse_init (struct mt7615_dev *dev) { -u32 base =mt7615_reg_map (dev,MT_EFUSE_BASE ); -int len =MT7615_EEPROM_SIZE ; -int ret, i; +u32 val, base =mt7615_reg_map (dev,MT_EFUSE_BASE ); +int i, len =MT7615_EEPROM_SIZE ;void *buf; -if (mt76_rr (dev, base +MT_EFUSE_BASE_CTRL ) &MT_EFUSE_BASE_CTRL_EMPTY ) -return -EINVAL ; + val =mt76_rr (dev, base +MT_EFUSE_BASE_CTRL ); +if (val &MT_EFUSE_BASE_CTRL_EMPTY ) +return 0 ; dev->mt76.otp.data =devm_kzalloc (dev->mt76.dev, len,GFP_KERNEL ); dev->mt76.otp.size = len;
@@ -57,6 +57,8 @@ static int mt7615_efuse_init(struct mt7615_dev *dev) buf = dev->mt76.otp.data;for (i =0 ; i +16 <= len; i +=16 ) { +int ret; + ret =mt7615_efuse_read (dev, base, i, buf + i);if (ret)return ret;
@@ -76,6 +78,18 @@ static int mt7615_eeprom_load(struct mt7615_dev *dev)return mt7615_efuse_init (dev); } +static int mt7615_check_eeprom (struct mt76_dev *dev) +{ +u16 val =get_unaligned_le16 (dev->eeprom.data); + +switch (val) { +case 0x7615 : +return 0 ; +default : +return -EINVAL ; + } +} +int mt7615_eeprom_init (struct mt7615_dev *dev) {int ret;
@@ -84,7 +98,13 @@ int mt7615_eeprom_init(struct mt7615_dev *dev)if (ret <0 )return ret; -memcpy (dev->mt76.eeprom.data, dev->mt76.otp.data,MT7615_EEPROM_SIZE ); +if (dev->mt76.otp.data) { + ret =mt7615_check_eeprom (&dev->mt76); +if (ret <0 ) +memcpy (dev->mt76.eeprom.data, dev->mt76.otp.data, +MT7615_EEPROM_SIZE ); +/* TODO: take into account cal free data */ + } dev->mt76.cap.has_2ghz = true; dev->mt76.cap.has_5ghz = true;
Signature · 1 line
2.20.1
Quoted 13 lines
Calibration data are often available on a specific mtd partition on embedded devices. Take into account eeprom calibration data if available. Calibration free data parsing is currently missing
Signed-off-by Lorenzo Bianconi <[email protected]>--- .../wireless/mediatek/mt76/mt7615/eeprom.c | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-)drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c +0
-0
[...]
Quoted 4 lines
int
mt7615_eeprom_init(struct mt7615_dev *dev)
{drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c +0
-0int ret;
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c int mt7615_eeprom_init(struct mt7615_dev *dev) · line 106
Quoted 10 lines
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c +6
-1@@ -84,7 +98,13 @@ int mt7615_eeprom_init(struct mt7615_dev *dev)if (ret <0 )return ret; -memcpy (dev->mt76.eeprom.data, dev->mt76.otp.data,MT7615_EEPROM_SIZE ); +if (dev->mt76.otp.data) { + ret =mt7615_check_eeprom (&dev->mt76); +if (ret <0 ) +memcpy (dev->mt76.eeprom.data, dev->mt76.otp.data, +MT7615_EEPROM_SIZE ); +/* TODO: take into account cal free data */
reviewing sdk code it seems we do not have cal free data here, I will post a v2 removing the comment
Regards,
Lorenzo
Quoted 7 lines
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c +1
-0+ } dev->mt76.cap.has_2ghz = true; dev->mt76.cap.has_5ghz = true;Signature · 1 line
2.20.1