Commit 38ad2d87 authored by Juuso Oikarinen's avatar Juuso Oikarinen Committed by John W. Linville

wl1271: Add support for acx_pm_config

This acx configures host clock parameters in correspondence with the clock
request line - the settling time of the clock, and whether fast wake-up is
supported.
Signed-off-by: default avatarJuuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: default avatarLuciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: default avatarLuciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 71449f8d
...@@ -1118,3 +1118,31 @@ int wl1271_acx_arp_ip_filter(struct wl1271 *wl, bool enable, u8 *address, ...@@ -1118,3 +1118,31 @@ int wl1271_acx_arp_ip_filter(struct wl1271 *wl, bool enable, u8 *address,
kfree(acx); kfree(acx);
return ret; return ret;
} }
int wl1271_acx_pm_config(struct wl1271 *wl)
{
struct wl1271_acx_pm_config *acx = NULL;
struct conf_pm_config_settings *c = &wl->conf.pm_config;
int ret = 0;
wl1271_debug(DEBUG_ACX, "acx pm config");
acx = kzalloc(sizeof(*acx), GFP_KERNEL);
if (!acx) {
ret = -ENOMEM;
goto out;
}
acx->host_clk_settling_time = cpu_to_le32(c->host_clk_settling_time);
acx->host_fast_wakeup_support = c->host_fast_wakeup_support;
ret = wl1271_cmd_configure(wl, ACX_PM_CONFIG, acx, sizeof(*acx));
if (ret < 0) {
wl1271_warning("acx pm config failed: %d", ret);
goto out;
}
out:
kfree(acx);
return ret;
}
...@@ -961,6 +961,13 @@ struct wl1271_acx_arp_filter { ...@@ -961,6 +961,13 @@ struct wl1271_acx_arp_filter {
used. */ used. */
} __attribute__((packed)); } __attribute__((packed));
struct wl1271_acx_pm_config {
struct acx_header header;
__le32 host_clk_settling_time;
u8 host_fast_wakeup_support;
u8 padding[3];
} __attribute__ ((packed));
enum { enum {
ACX_WAKE_UP_CONDITIONS = 0x0002, ACX_WAKE_UP_CONDITIONS = 0x0002,
...@@ -1025,6 +1032,7 @@ enum { ...@@ -1025,6 +1032,7 @@ enum {
DOT11_RX_DOT11_MODE = 0x1012, DOT11_RX_DOT11_MODE = 0x1012,
DOT11_RTS_THRESHOLD = 0x1013, DOT11_RTS_THRESHOLD = 0x1013,
DOT11_GROUP_ADDRESS_TBL = 0x1014, DOT11_GROUP_ADDRESS_TBL = 0x1014,
ACX_PM_CONFIG = 0x1016,
MAX_DOT11_IE = DOT11_GROUP_ADDRESS_TBL, MAX_DOT11_IE = DOT11_GROUP_ADDRESS_TBL,
...@@ -1073,5 +1081,6 @@ int wl1271_acx_smart_reflex(struct wl1271 *wl); ...@@ -1073,5 +1081,6 @@ int wl1271_acx_smart_reflex(struct wl1271 *wl);
int wl1271_acx_bet_enable(struct wl1271 *wl, bool enable); int wl1271_acx_bet_enable(struct wl1271 *wl, bool enable);
int wl1271_acx_arp_ip_filter(struct wl1271 *wl, bool enable, u8 *address, int wl1271_acx_arp_ip_filter(struct wl1271 *wl, bool enable, u8 *address,
u8 version); u8 version);
int wl1271_acx_pm_config(struct wl1271 *wl);
#endif /* __WL1271_ACX_H__ */ #endif /* __WL1271_ACX_H__ */
...@@ -904,6 +904,22 @@ struct conf_itrim_settings { ...@@ -904,6 +904,22 @@ struct conf_itrim_settings {
u32 timeout; u32 timeout;
}; };
struct conf_pm_config_settings {
/*
* Host clock settling time
*
* Range: 0 - 30000 us
*/
u32 host_clk_settling_time;
/*
* Host fast wakeup support
*
* Range: true, false
*/
bool host_fast_wakeup_support;
};
struct conf_drv_settings { struct conf_drv_settings {
struct conf_sg_settings sg; struct conf_sg_settings sg;
struct conf_rx_settings rx; struct conf_rx_settings rx;
...@@ -911,6 +927,7 @@ struct conf_drv_settings { ...@@ -911,6 +927,7 @@ struct conf_drv_settings {
struct conf_conn_settings conn; struct conf_conn_settings conn;
struct conf_init_settings init; struct conf_init_settings init;
struct conf_itrim_settings itrim; struct conf_itrim_settings itrim;
struct conf_pm_config_settings pm_config;
}; };
#endif #endif
...@@ -303,6 +303,11 @@ int wl1271_hw_init(struct wl1271 *wl) ...@@ -303,6 +303,11 @@ int wl1271_hw_init(struct wl1271 *wl)
if (ret < 0) if (ret < 0)
goto out_free_memmap; goto out_free_memmap;
/* configure PM */
ret = wl1271_acx_pm_config(wl);
if (ret < 0)
goto out_free_memmap;
return 0; return 0;
out_free_memmap: out_free_memmap:
......
...@@ -321,6 +321,10 @@ static struct conf_drv_settings default_conf = { ...@@ -321,6 +321,10 @@ static struct conf_drv_settings default_conf = {
.itrim = { .itrim = {
.enable = false, .enable = false,
.timeout = 50000, .timeout = 50000,
},
.pm_config = {
.host_clk_settling_time = 5000,
.host_fast_wakeup_support = false
} }
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment