mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
change prefix for kernelpatchbase 2.6.26
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@13619 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
386
target/linux/s3c24xx/patches-2.6.26/1142-add-resume-reason-sysfs.patch.patch
Executable file
386
target/linux/s3c24xx/patches-2.6.26/1142-add-resume-reason-sysfs.patch.patch
Executable file
@@ -0,0 +1,386 @@
|
||||
From 95b8e195427ce0c6b495925813d7e10949af8ce3 Mon Sep 17 00:00:00 2001
|
||||
From: Andy Green <andy@openmoko.com>
|
||||
Date: Fri, 25 Jul 2008 23:06:10 +0100
|
||||
Subject: [PATCH] add-resume-reason-sysfs.patch
|
||||
|
||||
If you have U-Boot with uboot-add-find-wake-reason.patch, this
|
||||
patch will get you a wake reason report from
|
||||
|
||||
cat /sys/devices/platform/neo1973-resume.0/resume_reason
|
||||
|
||||
it looks like this:
|
||||
|
||||
EINT00_ACCEL1
|
||||
EINT01_GSM
|
||||
EINT02_BLUETOOTH
|
||||
EINT03_DEBUGBRD
|
||||
EINT04_JACK
|
||||
EINT05_WLAN
|
||||
EINT06_AUXKEY
|
||||
EINT07_HOLDKEY
|
||||
EINT08_ACCEL2
|
||||
* EINT09_PMU
|
||||
adpins
|
||||
adprem
|
||||
usbins
|
||||
usbrem
|
||||
rtcalarm
|
||||
second
|
||||
onkeyr
|
||||
onkeyf
|
||||
exton1r
|
||||
exton1f
|
||||
exton2r
|
||||
exton2f
|
||||
exton3r
|
||||
exton3f
|
||||
* batfull
|
||||
chghalt
|
||||
thlimon
|
||||
thlimoff
|
||||
usblimon
|
||||
usblimoff
|
||||
adcrdy
|
||||
onkey1s
|
||||
lowsys
|
||||
lowbat
|
||||
hightmp
|
||||
autopwrfail
|
||||
dwn1pwrfail
|
||||
dwn2pwrfail
|
||||
ledpwrfail
|
||||
ledovp
|
||||
ldo1pwrfail
|
||||
ldo2pwrfail
|
||||
ldo3pwrfail
|
||||
ldo4pwrfail
|
||||
ldo5pwrfail
|
||||
ldo6pwrfail
|
||||
hcidopwrfail
|
||||
hcidoovl
|
||||
EINT10_NULL
|
||||
EINT11_NULL
|
||||
EINT12_GLAMO
|
||||
EINT13_NULL
|
||||
EINT14_NULL
|
||||
EINT15_NULL
|
||||
|
||||
This shows a problem, false wake from suspend due to battery full
|
||||
|
||||
Signed-off-by: Andy Green <andy@openmoko.com>
|
||||
---
|
||||
arch/arm/mach-s3c2440/mach-gta02.c | 5 +
|
||||
arch/arm/plat-s3c24xx/Makefile | 4 +-
|
||||
arch/arm/plat-s3c24xx/neo1973_pm_resume_reason.c | 134 ++++++++++++++++++++++
|
||||
drivers/i2c/chips/pcf50633.c | 80 +++++++++++++
|
||||
include/linux/pcf50633.h | 6 +
|
||||
5 files changed, 227 insertions(+), 2 deletions(-)
|
||||
create mode 100644 arch/arm/plat-s3c24xx/neo1973_pm_resume_reason.c
|
||||
|
||||
diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c
|
||||
index 9e8fae7..90b62c1 100644
|
||||
--- a/arch/arm/mach-s3c2440/mach-gta02.c
|
||||
+++ b/arch/arm/mach-s3c2440/mach-gta02.c
|
||||
@@ -378,6 +378,10 @@ struct platform_device gta02_version_device = {
|
||||
.num_resources = 0,
|
||||
};
|
||||
|
||||
+struct platform_device gta02_resume_reason_device = {
|
||||
+ .name = "neo1973-resume",
|
||||
+ .num_resources = 0,
|
||||
+};
|
||||
|
||||
static struct map_desc gta02_iodesc[] __initdata = {
|
||||
{
|
||||
@@ -737,6 +741,7 @@ static struct platform_device *gta02_devices[] __initdata = {
|
||||
>a02_nor_flash,
|
||||
&sc32440_fiq_device,
|
||||
>a02_version_device,
|
||||
+ >a02_resume_reason_device,
|
||||
&s3c24xx_pwm_device,
|
||||
};
|
||||
|
||||
diff --git a/arch/arm/plat-s3c24xx/Makefile b/arch/arm/plat-s3c24xx/Makefile
|
||||
index c173f7b..f60dc5f 100644
|
||||
--- a/arch/arm/plat-s3c24xx/Makefile
|
||||
+++ b/arch/arm/plat-s3c24xx/Makefile
|
||||
@@ -34,5 +34,5 @@ obj-$(CONFIG_MACH_NEO1973) += neo1973_version.o \
|
||||
neo1973_pm_gsm.o \
|
||||
neo1973_pm_gps.o \
|
||||
neo1973_pm_bt.o \
|
||||
- neo1973_shadow.o
|
||||
-
|
||||
+ neo1973_shadow.o \
|
||||
+ neo1973_pm_resume_reason.o
|
||||
diff --git a/arch/arm/plat-s3c24xx/neo1973_pm_resume_reason.c b/arch/arm/plat-s3c24xx/neo1973_pm_resume_reason.c
|
||||
new file mode 100644
|
||||
index 0000000..cca42dc
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/plat-s3c24xx/neo1973_pm_resume_reason.c
|
||||
@@ -0,0 +1,134 @@
|
||||
+/*
|
||||
+ * Resume reason sysfs for the FIC Neo1973 GSM Phone
|
||||
+ *
|
||||
+ * (C) 2008 by Openmoko Inc.
|
||||
+ * Author: Andy Green <andy@openmoko.com>
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License resume_reason 2 as
|
||||
+ * published by the Free Software Foundation
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/io.h>
|
||||
+
|
||||
+#include <asm/hardware.h>
|
||||
+#include <asm/mach-types.h>
|
||||
+
|
||||
+#ifdef CONFIG_MACH_NEO1973_GTA02
|
||||
+#include <asm/arch/gta02.h>
|
||||
+#include <linux/pcf50633.h>
|
||||
+
|
||||
+
|
||||
+static unsigned int *gstatus4_mapped;
|
||||
+static char *resume_reasons[] = {
|
||||
+ "EINT00_ACCEL1",
|
||||
+ "EINT01_GSM",
|
||||
+ "EINT02_BLUETOOTH",
|
||||
+ "EINT03_DEBUGBRD",
|
||||
+ "EINT04_JACK",
|
||||
+ "EINT05_WLAN",
|
||||
+ "EINT06_AUXKEY",
|
||||
+ "EINT07_HOLDKEY",
|
||||
+ "EINT08_ACCEL2",
|
||||
+ "EINT09_PMU",
|
||||
+ "EINT10_NULL",
|
||||
+ "EINT11_NULL",
|
||||
+ "EINT12_GLAMO",
|
||||
+ "EINT13_NULL",
|
||||
+ "EINT14_NULL",
|
||||
+ "EINT15_NULL",
|
||||
+ NULL
|
||||
+};
|
||||
+
|
||||
+static ssize_t resume_reason_read(struct device *dev,
|
||||
+ struct device_attribute *attr,
|
||||
+ char *buf)
|
||||
+{
|
||||
+ int bit = 0;
|
||||
+ char *end = buf;
|
||||
+
|
||||
+ for (bit = 0; resume_reasons[bit]; bit++) {
|
||||
+ if ((*gstatus4_mapped) & (1 << bit))
|
||||
+ end += sprintf(end, "* %s\n", resume_reasons[bit]);
|
||||
+ else
|
||||
+ end += sprintf(end, " %s\n", resume_reasons[bit]);
|
||||
+
|
||||
+ if (bit == 9) /* PMU */
|
||||
+ end += pcf50633_report_resumers(pcf50633_global, end);
|
||||
+ }
|
||||
+
|
||||
+ return end - buf;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static DEVICE_ATTR(resume_reason, 0644, resume_reason_read, NULL);
|
||||
+
|
||||
+static struct attribute *neo1973_resume_reason_sysfs_entries[] = {
|
||||
+ &dev_attr_resume_reason.attr,
|
||||
+ NULL
|
||||
+};
|
||||
+
|
||||
+static struct attribute_group neo1973_resume_reason_attr_group = {
|
||||
+ .name = NULL,
|
||||
+ .attrs = neo1973_resume_reason_sysfs_entries,
|
||||
+};
|
||||
+
|
||||
+static int __init neo1973_resume_reason_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ dev_info(&pdev->dev, "starting\n");
|
||||
+
|
||||
+ switch (machine_arch_type) {
|
||||
+#ifdef CONFIG_MACH_NEO1973_GTA01
|
||||
+ case MACH_TYPE_NEO1973_GTA01:
|
||||
+ return -EINVAL;
|
||||
+#endif /* CONFIG_MACH_NEO1973_GTA01 */
|
||||
+ default:
|
||||
+ gstatus4_mapped = ioremap(0x560000BC, 0x4);
|
||||
+ if (!gstatus4_mapped) {
|
||||
+ dev_err(&pdev->dev, "failed to ioremap() memory region\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return sysfs_create_group(&pdev->dev.kobj, &neo1973_resume_reason_attr_group);
|
||||
+}
|
||||
+
|
||||
+static int neo1973_resume_reason_remove(struct platform_device *pdev)
|
||||
+{
|
||||
+ sysfs_remove_group(&pdev->dev.kobj, &neo1973_resume_reason_attr_group);
|
||||
+ iounmap(gstatus4_mapped);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct platform_driver neo1973_resume_reason_driver = {
|
||||
+ .probe = neo1973_resume_reason_probe,
|
||||
+ .remove = neo1973_resume_reason_remove,
|
||||
+ .driver = {
|
||||
+ .name = "neo1973-resume",
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static int __devinit neo1973_resume_reason_init(void)
|
||||
+{
|
||||
+ return platform_driver_register(&neo1973_resume_reason_driver);
|
||||
+}
|
||||
+
|
||||
+static void neo1973_resume_reason_exit(void)
|
||||
+{
|
||||
+ platform_driver_unregister(&neo1973_resume_reason_driver);
|
||||
+}
|
||||
+
|
||||
+module_init(neo1973_resume_reason_init);
|
||||
+module_exit(neo1973_resume_reason_exit);
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_AUTHOR("Andy Green <andy@openmoko.com>");
|
||||
+MODULE_DESCRIPTION("Neo1973 resume_reason");
|
||||
+#endif
|
||||
diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c
|
||||
index da58aa3..d2ff2c1 100644
|
||||
--- a/drivers/i2c/chips/pcf50633.c
|
||||
+++ b/drivers/i2c/chips/pcf50633.c
|
||||
@@ -120,6 +120,8 @@ struct pcf50633_data {
|
||||
int allow_close;
|
||||
int onkey_seconds;
|
||||
int irq;
|
||||
+ int have_been_suspended;
|
||||
+ unsigned char pcfirq_resume[5];
|
||||
|
||||
int coldplug_done; /* cleared by probe, set by first work service */
|
||||
int flag_bat_voltage_read; /* ipc to /sys batt voltage read func */
|
||||
@@ -597,6 +599,17 @@ static void pcf50633_work(struct work_struct *work)
|
||||
return;
|
||||
}
|
||||
|
||||
+ /* hey did we just resume? */
|
||||
+
|
||||
+ if (pcf->have_been_suspended) {
|
||||
+ pcf->have_been_suspended = 0;
|
||||
+ /*
|
||||
+ * grab a copy of resume interrupt reasons
|
||||
+ * from pcf50633 POV
|
||||
+ */
|
||||
+ memcpy(pcf->pcfirq_resume, pcfirq, sizeof(pcf->pcfirq_resume));
|
||||
+ }
|
||||
+
|
||||
if (!pcf->coldplug_done) {
|
||||
DEBUGP("PMU Coldplug init\n");
|
||||
|
||||
@@ -1856,6 +1869,71 @@ static int pcf50633_detach_client(struct i2c_client *client)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/* you're going to need >300 bytes in buf */
|
||||
+
|
||||
+int pcf50633_report_resumers(struct pcf50633_data *pcf, char *buf)
|
||||
+{
|
||||
+ static char *int_names[] = {
|
||||
+ "adpins",
|
||||
+ "adprem",
|
||||
+ "usbins",
|
||||
+ "usbrem",
|
||||
+ NULL,
|
||||
+ NULL,
|
||||
+ "rtcalarm",
|
||||
+ "second",
|
||||
+
|
||||
+ "onkeyr",
|
||||
+ "onkeyf",
|
||||
+ "exton1r",
|
||||
+ "exton1f",
|
||||
+ "exton2r",
|
||||
+ "exton2f",
|
||||
+ "exton3r",
|
||||
+ "exton3f",
|
||||
+
|
||||
+ "batfull",
|
||||
+ "chghalt",
|
||||
+ "thlimon",
|
||||
+ "thlimoff",
|
||||
+ "usblimon",
|
||||
+ "usblimoff",
|
||||
+ "adcrdy",
|
||||
+ "onkey1s",
|
||||
+
|
||||
+ "lowsys",
|
||||
+ "lowbat",
|
||||
+ "hightmp",
|
||||
+ "autopwrfail",
|
||||
+ "dwn1pwrfail",
|
||||
+ "dwn2pwrfail",
|
||||
+ "ledpwrfail",
|
||||
+ "ledovp",
|
||||
+
|
||||
+ "ldo1pwrfail",
|
||||
+ "ldo2pwrfail",
|
||||
+ "ldo3pwrfail",
|
||||
+ "ldo4pwrfail",
|
||||
+ "ldo5pwrfail",
|
||||
+ "ldo6pwrfail",
|
||||
+ "hcidopwrfail",
|
||||
+ "hcidoovl"
|
||||
+ };
|
||||
+ char *end = buf;
|
||||
+ int n;
|
||||
+
|
||||
+ for (n = 0; n < 40; n++)
|
||||
+ if (int_names[n]) {
|
||||
+ if (pcf->pcfirq_resume[n >> 3] & (1 >> (n & 7)))
|
||||
+ end += sprintf(end, " * %s\n", int_names[n]);
|
||||
+ else
|
||||
+ end += sprintf(end, " %s\n", int_names[n]);
|
||||
+ }
|
||||
+
|
||||
+ return end - buf;
|
||||
+}
|
||||
+
|
||||
+
|
||||
#ifdef CONFIG_PM
|
||||
#define INT1M_RESUMERS (PCF50633_INT1_ADPINS | \
|
||||
PCF50633_INT1_ADPREM | \
|
||||
@@ -1938,6 +2016,8 @@ static int pcf50633_suspend(struct device *dev, pm_message_t state)
|
||||
__reg_write(pcf, PCF50633_REG_INT4M, ~INT4M_RESUMERS & 0xff);
|
||||
__reg_write(pcf, PCF50633_REG_INT5M, ~INT5M_RESUMERS & 0xff);
|
||||
|
||||
+ pcf->have_been_suspended = 1;
|
||||
+
|
||||
mutex_unlock(&pcf->lock);
|
||||
|
||||
return 0;
|
||||
diff --git a/include/linux/pcf50633.h b/include/linux/pcf50633.h
|
||||
index f427985..39d919d 100644
|
||||
--- a/include/linux/pcf50633.h
|
||||
+++ b/include/linux/pcf50633.h
|
||||
@@ -64,6 +64,12 @@ pcf50633_charge_enable(struct pcf50633_data *pcf, int on);
|
||||
extern void
|
||||
pcf50633_backlight_resume(struct pcf50633_data *pcf);
|
||||
|
||||
+extern u_int16_t
|
||||
+pcf50633_battvolt(struct pcf50633_data *pcf);
|
||||
+
|
||||
+extern int
|
||||
+pcf50633_report_resumers(struct pcf50633_data *pcf, char *buf);
|
||||
+
|
||||
#define PCF50633_FEAT_EXTON 0x00000001 /* not yet supported */
|
||||
#define PCF50633_FEAT_MBC 0x00000002
|
||||
#define PCF50633_FEAT_BBC 0x00000004 /* not yet supported */
|
||||
--
|
||||
1.5.6.3
|
||||
|
||||
Reference in New Issue
Block a user