mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
Merge back earlier 'pm-sleep' material for v4.4.
This commit is contained in:
commit
a5e22db268
@ -256,3 +256,15 @@ Description:
|
|||||||
Writing a "1" enables this printing while writing a "0"
|
Writing a "1" enables this printing while writing a "0"
|
||||||
disables it. The default value is "0". Reading from this file
|
disables it. The default value is "0". Reading from this file
|
||||||
will display the current value.
|
will display the current value.
|
||||||
|
|
||||||
|
What: /sys/power/pm_wakeup_irq
|
||||||
|
Date: April 2015
|
||||||
|
Contact: Alexandra Yates <alexandra.yates@linux.intel.org>
|
||||||
|
Description:
|
||||||
|
The /sys/power/pm_wakeup_irq file reports to user space the IRQ
|
||||||
|
number of the first wakeup interrupt (that is, the first
|
||||||
|
interrupt from an IRQ line armed for system wakeup) seen by the
|
||||||
|
kernel during the most recent system suspend/resume cycle.
|
||||||
|
|
||||||
|
This output is useful for system wakeup diagnostics of spurious
|
||||||
|
wakeup interrupts.
|
||||||
|
@ -25,6 +25,9 @@
|
|||||||
*/
|
*/
|
||||||
bool events_check_enabled __read_mostly;
|
bool events_check_enabled __read_mostly;
|
||||||
|
|
||||||
|
/* First wakeup IRQ seen by the kernel in the last cycle. */
|
||||||
|
unsigned int pm_wakeup_irq __read_mostly;
|
||||||
|
|
||||||
/* If set and the system is suspending, terminate the suspend. */
|
/* If set and the system is suspending, terminate the suspend. */
|
||||||
static bool pm_abort_suspend __read_mostly;
|
static bool pm_abort_suspend __read_mostly;
|
||||||
|
|
||||||
@ -91,7 +94,7 @@ struct wakeup_source *wakeup_source_create(const char *name)
|
|||||||
if (!ws)
|
if (!ws)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
wakeup_source_prepare(ws, name ? kstrdup(name, GFP_KERNEL) : NULL);
|
wakeup_source_prepare(ws, name ? kstrdup_const(name, GFP_KERNEL) : NULL);
|
||||||
return ws;
|
return ws;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(wakeup_source_create);
|
EXPORT_SYMBOL_GPL(wakeup_source_create);
|
||||||
@ -154,7 +157,7 @@ void wakeup_source_destroy(struct wakeup_source *ws)
|
|||||||
|
|
||||||
wakeup_source_drop(ws);
|
wakeup_source_drop(ws);
|
||||||
wakeup_source_record(ws);
|
wakeup_source_record(ws);
|
||||||
kfree(ws->name);
|
kfree_const(ws->name);
|
||||||
kfree(ws);
|
kfree(ws);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(wakeup_source_destroy);
|
EXPORT_SYMBOL_GPL(wakeup_source_destroy);
|
||||||
@ -868,6 +871,15 @@ EXPORT_SYMBOL_GPL(pm_system_wakeup);
|
|||||||
void pm_wakeup_clear(void)
|
void pm_wakeup_clear(void)
|
||||||
{
|
{
|
||||||
pm_abort_suspend = false;
|
pm_abort_suspend = false;
|
||||||
|
pm_wakeup_irq = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pm_system_irq_wakeup(unsigned int irq_number)
|
||||||
|
{
|
||||||
|
if (pm_wakeup_irq == 0) {
|
||||||
|
pm_wakeup_irq = irq_number;
|
||||||
|
pm_system_wakeup();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -387,10 +387,12 @@ extern int unregister_pm_notifier(struct notifier_block *nb);
|
|||||||
|
|
||||||
/* drivers/base/power/wakeup.c */
|
/* drivers/base/power/wakeup.c */
|
||||||
extern bool events_check_enabled;
|
extern bool events_check_enabled;
|
||||||
|
extern unsigned int pm_wakeup_irq;
|
||||||
|
|
||||||
extern bool pm_wakeup_pending(void);
|
extern bool pm_wakeup_pending(void);
|
||||||
extern void pm_system_wakeup(void);
|
extern void pm_system_wakeup(void);
|
||||||
extern void pm_wakeup_clear(void);
|
extern void pm_wakeup_clear(void);
|
||||||
|
extern void pm_system_irq_wakeup(unsigned int irq_number);
|
||||||
extern bool pm_get_wakeup_count(unsigned int *count, bool block);
|
extern bool pm_get_wakeup_count(unsigned int *count, bool block);
|
||||||
extern bool pm_save_wakeup_count(unsigned int count);
|
extern bool pm_save_wakeup_count(unsigned int count);
|
||||||
extern void pm_wakep_autosleep_enabled(bool set);
|
extern void pm_wakep_autosleep_enabled(bool set);
|
||||||
@ -440,6 +442,7 @@ static inline int unregister_pm_notifier(struct notifier_block *nb)
|
|||||||
static inline bool pm_wakeup_pending(void) { return false; }
|
static inline bool pm_wakeup_pending(void) { return false; }
|
||||||
static inline void pm_system_wakeup(void) {}
|
static inline void pm_system_wakeup(void) {}
|
||||||
static inline void pm_wakeup_clear(void) {}
|
static inline void pm_wakeup_clear(void) {}
|
||||||
|
static inline void pm_system_irq_wakeup(unsigned int irq_number) {}
|
||||||
|
|
||||||
static inline void lock_system_sleep(void) {}
|
static inline void lock_system_sleep(void) {}
|
||||||
static inline void unlock_system_sleep(void) {}
|
static inline void unlock_system_sleep(void) {}
|
||||||
|
@ -21,7 +21,7 @@ bool irq_pm_check_wakeup(struct irq_desc *desc)
|
|||||||
desc->istate |= IRQS_SUSPENDED | IRQS_PENDING;
|
desc->istate |= IRQS_SUSPENDED | IRQS_PENDING;
|
||||||
desc->depth++;
|
desc->depth++;
|
||||||
irq_disable(desc);
|
irq_disable(desc);
|
||||||
pm_system_wakeup();
|
pm_system_irq_wakeup(irq_desc_get_irq(desc));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -272,6 +272,22 @@ static inline void pm_print_times_init(void)
|
|||||||
{
|
{
|
||||||
pm_print_times_enabled = !!initcall_debug;
|
pm_print_times_enabled = !!initcall_debug;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t pm_wakeup_irq_show(struct kobject *kobj,
|
||||||
|
struct kobj_attribute *attr,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
return pm_wakeup_irq ? sprintf(buf, "%u\n", pm_wakeup_irq) : -ENODATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t pm_wakeup_irq_store(struct kobject *kobj,
|
||||||
|
struct kobj_attribute *attr,
|
||||||
|
const char *buf, size_t n)
|
||||||
|
{
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
power_attr(pm_wakeup_irq);
|
||||||
|
|
||||||
#else /* !CONFIG_PM_SLEEP_DEBUG */
|
#else /* !CONFIG_PM_SLEEP_DEBUG */
|
||||||
static inline void pm_print_times_init(void) {}
|
static inline void pm_print_times_init(void) {}
|
||||||
#endif /* CONFIG_PM_SLEEP_DEBUG */
|
#endif /* CONFIG_PM_SLEEP_DEBUG */
|
||||||
@ -604,6 +620,7 @@ static struct attribute * g[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PM_SLEEP_DEBUG
|
#ifdef CONFIG_PM_SLEEP_DEBUG
|
||||||
&pm_print_times_attr.attr,
|
&pm_print_times_attr.attr,
|
||||||
|
&pm_wakeup_irq_attr.attr,
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_FREEZER
|
#ifdef CONFIG_FREEZER
|
||||||
|
Loading…
x
Reference in New Issue
Block a user