Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 314845
b: refs/heads/master
c: 26b5858
h: refs/heads/master
i:
  314843: 5f8d7a7
v: v3
  • Loading branch information
Luciano Coelho committed Jun 21, 2012
1 parent 97837c4 commit c98b88e
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c954910bc4501447cc647d5fca5bd0d9439e177d
refs/heads/master: 26b5858a67e4316ecd8159e2c0dc5591ef68226a
3 changes: 3 additions & 0 deletions trunk/drivers/net/wireless/ti/wlcore/acx.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,10 @@ int wl1271_acx_sleep_auth(struct wl1271 *wl, u8 sleep_auth)
auth->sleep_auth = sleep_auth;

ret = wl1271_cmd_configure(wl, ACX_SLEEP_AUTH, auth, sizeof(*auth));
if (ret < 0)
goto out;

wl->sleep_auth = sleep_auth;
out:
kfree(auth);
return ret;
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/net/wireless/ti/wlcore/acx.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ enum wl1271_psm_mode {

/* Extreme low power */
WL1271_PSM_ELP = 2,

WL1271_PSM_MAX = WL1271_PSM_ELP,
};

struct acx_sleep_auth {
Expand Down
58 changes: 58 additions & 0 deletions trunk/drivers/net/wireless/ti/wlcore/debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -963,6 +963,63 @@ static const struct file_operations fw_stats_raw_ops = {
.llseek = default_llseek,
};

static ssize_t sleep_auth_read(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
struct wl1271 *wl = file->private_data;

return wl1271_format_buffer(user_buf, count,
ppos, "%d\n",
wl->sleep_auth);
}

static ssize_t sleep_auth_write(struct file *file,
const char __user *user_buf,
size_t count, loff_t *ppos)
{
struct wl1271 *wl = file->private_data;
unsigned long value;
int ret;

ret = kstrtoul_from_user(user_buf, count, 0, &value);
if (ret < 0) {
wl1271_warning("illegal value in sleep_auth");
return -EINVAL;
}

if (value < 0 || value > WL1271_PSM_MAX) {
wl1271_warning("sleep_auth must be between 0 and %d",
WL1271_PSM_MAX);
return -ERANGE;
}

mutex_lock(&wl->mutex);

if (wl->state == WL1271_STATE_OFF)
goto out;

ret = wl1271_ps_elp_wakeup(wl);
if (ret < 0)
goto out;

ret = wl1271_acx_sleep_auth(wl, value);
if (ret < 0)
goto out_sleep;

out_sleep:
wl1271_ps_elp_sleep(wl);
out:
mutex_unlock(&wl->mutex);
return count;
}

static const struct file_operations sleep_auth_ops = {
.read = sleep_auth_read,
.write = sleep_auth_write,
.open = simple_open,
.llseek = default_llseek,
};

static int wl1271_debugfs_add_files(struct wl1271 *wl,
struct dentry *rootdir)
{
Expand All @@ -988,6 +1045,7 @@ static int wl1271_debugfs_add_files(struct wl1271 *wl,
DEBUGFS_ADD(irq_blk_threshold, rootdir);
DEBUGFS_ADD(irq_timeout, rootdir);
DEBUGFS_ADD(fw_stats_raw, rootdir);
DEBUGFS_ADD(sleep_auth, rootdir);

streaming = debugfs_create_dir("rx_streaming", rootdir);
if (!streaming || IS_ERR(streaming))
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/net/wireless/ti/wlcore/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1082,6 +1082,7 @@ int wl1271_plt_stop(struct wl1271 *wl)
mutex_lock(&wl->mutex);
wl1271_power_off(wl);
wl->flags = 0;
wl->sleep_auth = WL1271_PSM_CAM;
wl->state = WL1271_STATE_OFF;
wl->plt = false;
wl->rx_counter = 0;
Expand Down Expand Up @@ -1740,6 +1741,7 @@ static void wl1271_op_stop(struct ieee80211_hw *hw)
wl->ap_fw_ps_map = 0;
wl->ap_ps_map = 0;
wl->sched_scanning = false;
wl->sleep_auth = WL1271_PSM_CAM;
memset(wl->roles_map, 0, sizeof(wl->roles_map));
memset(wl->links_map, 0, sizeof(wl->links_map));
memset(wl->roc_map, 0, sizeof(wl->roc_map));
Expand Down Expand Up @@ -5174,6 +5176,7 @@ struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size)
wl->channel_type = NL80211_CHAN_NO_HT;
wl->flags = 0;
wl->sg_enabled = true;
wl->sleep_auth = WL1271_PSM_CAM;
wl->hw_pg_ver = -1;
wl->ap_ps_map = 0;
wl->ap_fw_ps_map = 0;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/net/wireless/ti/wlcore/ps.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ void wl1271_ps_elp_sleep(struct wl1271 *wl)
struct wl12xx_vif *wlvif;
u32 timeout;

if (wl->quirks & WLCORE_QUIRK_NO_ELP)
if (wl->sleep_auth != WL1271_PSM_ELP)
return;

/* we shouldn't get consecutive sleep requests */
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/net/wireless/ti/wlcore/wlcore.h
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,9 @@ struct wl1271 {

/* mutex for protecting the tx_flush function */
struct mutex flush_mutex;

/* sleep auth value currently configured to FW */
int sleep_auth;
};

int __devinit wlcore_probe(struct wl1271 *wl, struct platform_device *pdev);
Expand Down

0 comments on commit c98b88e

Please sign in to comment.