Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 441101f6 authored by Luciano Coelho's avatar Luciano Coelho
Browse files

wlcore: add quirk to disable ELP



ELP is a very complicated process in the firmware.  Due to its
complexity, in some early firmware revisions, the ELP feature is
disabled.  To support this cases, this patch adds a quirk that
disables ELP mode.

When ELP is not supported, do not attempt to enter ELP when requested by
the driver.

Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
Signed-off-by: default avatarArik Nemtsov <arik@wizery.com>
Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
parent 4263c5f2
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -408,11 +408,6 @@ int wlcore_boot_run_firmware(struct wl1271 *wl)
	wl1271_debug(DEBUG_MAILBOX, "MBOX ptrs: 0x%x 0x%x",
		     wl->mbox_ptr[0], wl->mbox_ptr[1]);

	/*
	 * TODO: wl12xx used to set the partition here, but it seems
	 * that it can be done later.  Make sure this is okay.
	 */

	wl1271_boot_fw_version(wl);

	/*
+11 −4
Original line number Diff line number Diff line
@@ -581,12 +581,19 @@ int wl1271_init_vif_specific(struct wl1271 *wl, struct ieee80211_vif *vif)
			if (ret < 0)
				return ret;
		} else if (!wl->sta_count) {
			if (wl->quirks & WLCORE_QUIRK_NO_ELP) {
				/* Configure for power always on */
				ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
				if (ret < 0)
					return ret;
			} else {
				/* Configure for ELP power saving */
				ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_ELP);
				if (ret < 0)
					return ret;
			}
		}
	}

	/* Mode specific init */
	if (is_ap) {
+3 −0
Original line number Diff line number Diff line
@@ -73,6 +73,9 @@ void wl1271_ps_elp_sleep(struct wl1271 *wl)
{
	struct wl12xx_vif *wlvif;

	if (wl->quirks & WLCORE_QUIRK_NO_ELP)
		return;

	/* we shouldn't get consecutive sleep requests */
	if (WARN_ON(test_and_set_bit(WL1271_FLAG_ELP_REQUESTED, &wl->flags)))
		return;
+3 −0
Original line number Diff line number Diff line
@@ -324,6 +324,9 @@ int wlcore_free_hw(struct wl1271 *wl);
/* Older firmwares use an old NVS format */
#define WLCORE_QUIRK_LEGACY_NVS			BIT(5)

/* Some firmwares may not support ELP */
#define WLCORE_QUIRK_NO_ELP			BIT(6)

/* TODO: move to the lower drivers when all usages are abstracted */
#define CHIP_ID_1271_PG10              (0x4030101)
#define CHIP_ID_1271_PG20              (0x4030111)