qcacld-3.0: Add gpio irq as wakeup source
On some third party platform, the in-band bus suspend-resume is not supported well, instead add gpio irq as wakeup source to support out-of-band suspend-resume. Change-Id: I7621f04d093013e15719b5c84dc244604be238df CRs-Fixed: 2815754
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2012-2018, 2020 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "wlan_pmo_pkt_filter_cfg.h"
|
||||
#include "wlan_pmo_runtime_pm_cfg.h"
|
||||
#include "wlan_pmo_wow_pulse_cfg.h"
|
||||
#include "wlan_pmo_gpio_wakeup_cfg.h"
|
||||
|
||||
#define CFG_PMO_ALL \
|
||||
CFG_EXTWOW_ALL \
|
||||
@@ -32,6 +33,7 @@
|
||||
CFG_PMO_APF_ALL \
|
||||
CFG_PMO_COMMON_ALL \
|
||||
CFG_RUNTIME_PM_ALL \
|
||||
CFG_WOW_PULSE_ALL
|
||||
CFG_WOW_PULSE_ALL \
|
||||
CFG_GPIO_WAKEUP_ALL
|
||||
|
||||
#endif /* WLAN_PMO_CFG_H__ */
|
||||
|
@@ -250,6 +250,22 @@ enum active_apf_mode {
|
||||
ACTIVE_APF_MODE_COUNT
|
||||
};
|
||||
|
||||
/**
|
||||
* enum pmo_gpio_wakeup_mode - gpio wakeup mode
|
||||
* @PMO_GPIO_WAKEUP_MODE_INVALID: gpio wakeup trigger invalid
|
||||
* @PMO_GPIO_WAKEUP_MODE_RISING: gpio wakeup trigger rising
|
||||
* @PMO_GPIO_WAKEUP_MODE_FALLING: gpio wakeup trigger failing
|
||||
* @PMO_GPIO_WAKEUP_MODE_HIGH: gpio wakeup trigger high
|
||||
* @PMO_GPIO_WAKEUP_MODE_LOW: gpio wakeup trigger low
|
||||
*/
|
||||
enum pmo_gpio_wakeup_mode {
|
||||
PMO_GPIO_WAKEUP_MODE_INVALID,
|
||||
PMO_GPIO_WAKEUP_MODE_RISING,
|
||||
PMO_GPIO_WAKEUP_MODE_FALLING,
|
||||
PMO_GPIO_WAKEUP_MODE_HIGH,
|
||||
PMO_GPIO_WAKEUP_MODE_LOW,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct pmo_psoc_cfg - user configuration required for pmo
|
||||
* @ptrn_match_enable_all_vdev: true when pattern match is enable for all vdev
|
||||
@@ -307,6 +323,9 @@ enum active_apf_mode {
|
||||
* @ito_repeat_count: Indicates ito repeated count
|
||||
* @is_mod_dtim_on_sys_suspend_enabled: true when mod dtim is enabled for
|
||||
* system suspend wow else false
|
||||
* @enable_gpio_wakeup: enable gpio wakeup
|
||||
* @gpio_wakeup_pin: gpio wakeup pin
|
||||
* @gpio_wakeup_mode: gpio wakeup mode
|
||||
*/
|
||||
struct pmo_psoc_cfg {
|
||||
bool ptrn_match_enable_all_vdev;
|
||||
@@ -371,6 +390,11 @@ struct pmo_psoc_cfg {
|
||||
enum active_apf_mode active_mc_bc_apf_mode;
|
||||
uint8_t ito_repeat_count;
|
||||
bool is_mod_dtim_on_sys_suspend_enabled;
|
||||
#ifdef WLAN_ENABLE_GPIO_WAKEUP
|
||||
bool enable_gpio_wakeup;
|
||||
uint32_t gpio_wakeup_pin;
|
||||
enum pmo_gpio_wakeup_mode gpio_wakeup_mode;
|
||||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
|
93
components/pmo/dispatcher/inc/wlan_pmo_gpio_wakeup_cfg.h
Normal file
93
components/pmo/dispatcher/inc/wlan_pmo_gpio_wakeup_cfg.h
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef WLAN_PMO_GPIO_WAKEUP_CFG_H__
|
||||
#define WLAN_PMO_GPIO_WAKEUP_CFG_H__
|
||||
|
||||
#ifdef WLAN_ENABLE_GPIO_WAKEUP
|
||||
/*
|
||||
* <ini>
|
||||
* genable_gpio_wakeup - Enable gpio wakeup
|
||||
* @Min: 0
|
||||
* @Max: 1
|
||||
* @Default: 0
|
||||
*
|
||||
* Enable gpio wakeup
|
||||
*
|
||||
* Supported Feature: gpio wakeup
|
||||
*
|
||||
* Usage: External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PMO_ENABLE_GPIO_WAKEUP CFG_INI_BOOL("genable_gpio_wakeup", \
|
||||
0, \
|
||||
"Enable gpio wakeup")
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* ggpio_wakeup_pin - Wakeup gpio pin of host platform
|
||||
* @Min: 0
|
||||
* @Max: 255
|
||||
* @Default: 255
|
||||
*
|
||||
* Wakeup gpio pin of host platform
|
||||
*
|
||||
* Supported Feature: gpio wakeup
|
||||
*
|
||||
* Usage: External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PMO_GPIO_WAKEUP_PIN CFG_INI_UINT("ggpio_wakeup_pin", \
|
||||
0, 255, 255, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"Wakeup gpio pin of host platform")
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* ggpio_wakeup_mode - Wakeup gpio mode
|
||||
* @Min: 0
|
||||
* @Max: 4
|
||||
* @Default: 0
|
||||
*
|
||||
* Wakeup gpio mode
|
||||
* 1 indicates rising trigger
|
||||
* 2 indicates failing trigger
|
||||
* 3 indicates high trigger
|
||||
* 4 indicates low trigger
|
||||
*
|
||||
* Supported Feature: gpio wakeup
|
||||
*
|
||||
* Usage: External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_PMO_GPIO_WAKEUP_MODE CFG_INI_UINT("ggpio_wakeup_mode", \
|
||||
0, 4, 0, \
|
||||
CFG_VALUE_OR_DEFAULT, \
|
||||
"Wakeup gpio mode")
|
||||
|
||||
#define CFG_GPIO_WAKEUP_ALL \
|
||||
CFG(CFG_PMO_ENABLE_GPIO_WAKEUP) \
|
||||
CFG(CFG_PMO_GPIO_WAKEUP_PIN) \
|
||||
CFG(CFG_PMO_GPIO_WAKEUP_MODE)
|
||||
#else
|
||||
#define CFG_GPIO_WAKEUP_ALL
|
||||
#endif /* WLAN_ENABLE_GPIO_WAKEUP */
|
||||
#endif /* WLAN_PMO_GPIO_WAKEUP_CFG_H__ */
|
@@ -1138,6 +1138,51 @@ static inline bool ucfg_pmo_is_apf_enabled(struct wlan_objmgr_psoc *psoc)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_ENABLE_GPIO_WAKEUP
|
||||
/**
|
||||
* ucfg_pmo_get_enable_gpio_wakeup() - to get gpio wakeup enable configuration
|
||||
* @psoc: objmgr psoc handle
|
||||
*
|
||||
* Return: gpio wakeup enable configuration
|
||||
*/
|
||||
bool ucfg_pmo_is_gpio_wakeup_enabled(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* ucfg_pmo_get_gpio_wakeup_pin() - to get gpio wakeup pin number
|
||||
* @psoc: objmgr psoc handle
|
||||
*
|
||||
* Return: gpio wakeup pin number
|
||||
*/
|
||||
uint32_t ucfg_pmo_get_gpio_wakeup_pin(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* ucfg_pmo_get_gpio_wakeup_mode() - to get gpio wakeup interrupt mode
|
||||
* @psoc: objmgr psoc handle
|
||||
*
|
||||
* Return: gpio wakeup mode
|
||||
*/
|
||||
enum pmo_gpio_wakeup_mode
|
||||
ucfg_pmo_get_gpio_wakeup_mode(struct wlan_objmgr_psoc *psoc);
|
||||
#else
|
||||
static inline bool
|
||||
ucfg_pmo_is_gpio_wakeup_enabled(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline uint32_t
|
||||
ucfg_pmo_get_gpio_wakeup_pin(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline enum pmo_gpio_wakeup_mode
|
||||
ucfg_pmo_get_gpio_wakeup_mode(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return PMO_GPIO_WAKEUP_MODE_INVALID;
|
||||
}
|
||||
#endif
|
||||
|
||||
#else /* WLAN_POWER_MANAGEMENT_OFFLOAD */
|
||||
static inline QDF_STATUS
|
||||
ucfg_pmo_psoc_open(struct wlan_objmgr_psoc *psoc)
|
||||
|
مرجع در شماره جدید
Block a user