Thread (21 messages) 21 messages, 6 authors, 2017-03-28

Re: [PATCH 3/7] ath9k: Add support for reading the EEPROM data using the nvmem API

From: Alban <albeu@free.fr>
Date: 2017-03-23 14:44:25
Also in: linux-wireless, lkml

On Tue, 14 Mar 2017 00:53:55 +0100
Christian Lamparter [off-list ref] wrote:
On Monday, March 13, 2017 10:05:11 PM CET Alban wrote:
quoted
Currently SoC platforms use a firmware request to get the EEPROM data.
This is mostly a hack and rely on using a user-helper scripts which is
deprecated. A nicer alternative is to use the nvmem API which was
designed for this kind of task.

Furthermore we let CONFIG_ATH9K_AHB select CONFIG_NVMEM as such
devices will generally use this method for loading the EEPROM data.

Signed-off-by: Alban <albeu@free.fr>
---
@@ -654,6 +656,25 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc,
 	if (ret)
 		return ret;
 
+	/* If the EEPROM hasn't been retrieved via firmware request
+	 * use the nvmem API insted.
+	 */
+	if (!ah->eeprom_blob) {
+		struct nvmem_cell *eeprom_cell;
+
+		eeprom_cell = nvmem_cell_get(ah->dev, "eeprom");
+		if (!IS_ERR(eeprom_cell)) {
+			ah->eeprom_data = nvmem_cell_read(
+				eeprom_cell, &ah->eeprom_size);
+			nvmem_cell_put(eeprom_cell);
+
+			if (IS_ERR(ah->eeprom_data)) {
+				dev_err(ah->dev, "failed to read eeprom");
+				return PTR_ERR(ah->eeprom_data);
+			}
+		}
+	}
+
 	if (ath9k_led_active_high != -1)
 		ah->config.led_active_high = ath9k_led_active_high == 1;
   
Are you sure this works with AR93XX SoCs that have the calibration data
in the OTP?
I only tested this on an ar9132 platform, so it might well be that a
few things are missing for the newer SoC. However this shouldn't break
anything existing as a platform needs to define an nvmem cell on the
athk9 device for this code to be used at all.

Alban

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help