Commit c95cf3d0 authored by David-John Willis's avatar David-John Willis Committed by John W. Linville
Browse files

wl1251: add NVS in EEPROM support



wl1251 supports also that NVS is stored in a separate EEPROM, add support
for that.

kvalo: use platform data instead Kconfig and use kernel style

Signed-off-by: default avatarDavid-John Willis <John.Willis@Distant-earth.com>
Signed-off-by: default avatarKalle Valo <kalle.valo@nokia.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 7010193a
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -269,6 +269,7 @@ struct wl1251 {


	void (*set_power)(bool enable);
	void (*set_power)(bool enable);
	int irq;
	int irq;
	bool use_eeprom;


	enum wl1251_state state;
	enum wl1251_state state;
	struct mutex mutex;
	struct mutex mutex;
+13 −7
Original line number Original line Diff line number Diff line
@@ -494,6 +494,11 @@ int wl1251_boot(struct wl1251 *wl)
		goto out;
		goto out;


	/* 2. start processing NVS file */
	/* 2. start processing NVS file */
	if (wl->use_eeprom) {
		wl1251_reg_write32(wl, ACX_REG_EE_START, START_EEPROM_MGR);
		msleep(4000);
		wl1251_reg_write32(wl, ACX_EEPROMLESS_IND_REG, USE_EEPROM);
	} else {
		ret = wl1251_boot_upload_nvs(wl);
		ret = wl1251_boot_upload_nvs(wl);
		if (ret < 0)
		if (ret < 0)
			goto out;
			goto out;
@@ -501,6 +506,7 @@ int wl1251_boot(struct wl1251 *wl)
		/* write firmware's last address (ie. it's length) to
		/* write firmware's last address (ie. it's length) to
		 * ACX_EEPROMLESS_IND_REG */
		 * ACX_EEPROMLESS_IND_REG */
		wl1251_reg_write32(wl, ACX_EEPROMLESS_IND_REG, wl->fw_len);
		wl1251_reg_write32(wl, ACX_EEPROMLESS_IND_REG, wl->fw_len);
	}


	/* 6. read the EEPROM parameters */
	/* 6. read the EEPROM parameters */
	tmp = wl1251_reg_read32(wl, SCR_PAD2);
	tmp = wl1251_reg_read32(wl, SCR_PAD2);
+6 −0
Original line number Original line Diff line number Diff line
@@ -370,6 +370,7 @@ enum wl12xx_acx_int_reg {
 EEPROM location specified in the EE_ADDR register.
 EEPROM location specified in the EE_ADDR register.
 The Wlan hardware hardware clears this bit automatically.
 The Wlan hardware hardware clears this bit automatically.
*===============================================*/
*===============================================*/
#define EE_CTL                              (REGISTERS_BASE + 0x2000)
#define ACX_EE_CTL_REG                      EE_CTL
#define ACX_EE_CTL_REG                      EE_CTL
#define EE_WRITE                            0x00000001ul
#define EE_WRITE                            0x00000001ul
#define EE_READ                             0x00000002ul
#define EE_READ                             0x00000002ul
@@ -380,6 +381,7 @@ enum wl12xx_acx_int_reg {
  This register specifies the address
  This register specifies the address
  within the EEPROM from/to which to read/write data.
  within the EEPROM from/to which to read/write data.
  ===============================================*/
  ===============================================*/
#define EE_ADDR                             (REGISTERS_BASE + 0x2008)
#define ACX_EE_ADDR_REG                     EE_ADDR
#define ACX_EE_ADDR_REG                     EE_ADDR


/*===============================================
/*===============================================
@@ -389,8 +391,12 @@ enum wl12xx_acx_int_reg {
  data from the EEPROM or the write data
  data from the EEPROM or the write data
  to be written to the EEPROM.
  to be written to the EEPROM.
  ===============================================*/
  ===============================================*/
#define EE_DATA                             (REGISTERS_BASE + 0x2004)
#define ACX_EE_DATA_REG                     EE_DATA
#define ACX_EE_DATA_REG                     EE_DATA


#define EEPROM_ACCESS_TO                    10000   /* timeout counter */
#define START_EEPROM_MGR                    0x00000001

/*===============================================
/*===============================================
  EEPROM Base Address  - 32bit RW
  EEPROM Base Address  - 32bit RW
  ------------------------------------------
  ------------------------------------------
+2 −0
Original line number Original line Diff line number Diff line
@@ -270,6 +270,8 @@ static int __devinit wl1251_spi_probe(struct spi_device *spi)
		return -ENODEV;
		return -ENODEV;
	}
	}


	wl->use_eeprom = pdata->use_eeprom;

	ret = request_irq(wl->irq, wl1251_irq, 0, DRIVER_NAME, wl);
	ret = request_irq(wl->irq, wl1251_irq, 0, DRIVER_NAME, wl);
	if (ret < 0) {
	if (ret < 0) {
		wl1251_error("request_irq() failed: %d", ret);
		wl1251_error("request_irq() failed: %d", ret);
+1 −0
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@


struct wl12xx_platform_data {
struct wl12xx_platform_data {
	void (*set_power)(bool enable);
	void (*set_power)(bool enable);
	bool use_eeprom;
};
};


#endif
#endif