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: Juuso Oikarinen <juuso.oikarinen@nokia.com> Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
71449f8d70
commit
38ad2d87d4
5 changed files with 63 additions and 0 deletions
|
@ -1118,3 +1118,31 @@ out:
|
||||||
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 {
|
||||||
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 {
|
||||||
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);
|
||||||
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 {
|
||||||
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 {
|
||||||
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)
|
||||||
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 = {
|
||||||
.itrim = {
|
.itrim = {
|
||||||
.enable = false,
|
.enable = false,
|
||||||
.timeout = 50000,
|
.timeout = 50000,
|
||||||
|
},
|
||||||
|
.pm_config = {
|
||||||
|
.host_clk_settling_time = 5000,
|
||||||
|
.host_fast_wakeup_support = false
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue