aboutsummaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorAndy Green <andy@openmoko.com>2008-11-19 17:09:46 +0000
committerAndy Green <agreen@pads.home.warmcat.com>2008-11-19 17:09:46 +0000
commit2204d8b104b812411a39118ffb436dfbd479787a (patch)
treec44cf815b492a2b81717947a4836a264692bb440 /arch
parentd4f8c947ca4693e5a08c252bcd2f0bb6d1e99592 (diff)
add-use-pcf50633-resume-callback-jbt6k74.patch
Adds the resume callback stuff to glamo, then changes jbt6k74 to no longer use a sleeping workqueue, but to make its resume actions dependent on pcf50633 and glamo resume (for backlight and communication to LCM respectively) Signed-off-by: Andy Green <andy@openmoko.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-s3c2440/mach-gta02.c39
1 files changed, 37 insertions, 2 deletions
diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c
index d7882ea5a14..9ba1036494d 100644
--- a/arch/arm/mach-s3c2440/mach-gta02.c
+++ b/arch/arm/mach-s3c2440/mach-gta02.c
@@ -88,6 +88,12 @@
/* arbitrates which sensor IRQ owns the shared SPI bus */
static spinlock_t motion_irq_lock;
+/* the dependency of jbt / LCM on pcf50633 resume */
+struct resume_dependency resume_dep_jbt_pcf;
+/* the dependency of jbt / LCM on glamo resume */
+struct resume_dependency resume_dep_jbt_glamo;
+
+
/* define FIQ IPC struct */
/*
* contains stuff FIQ ISR modifies and normal kernel code can see and use
@@ -857,21 +863,50 @@ static struct s3c2410_ts_mach_info gta02_ts_cfg = {
/* SPI: LCM control interface attached to Glamo3362 */
-void gta02_jbt6k74_reset(int devidx, int level)
+static void gta02_jbt6k74_reset(int devidx, int level)
{
glamo_lcm_reset(level);
}
/* finally bring up deferred backlight resume now LCM is resumed itself */
-void gta02_jbt6k74_resuming(int devidx)
+static void gta02_jbt6k74_resuming(int devidx)
{
pcf50633_backlight_resume(pcf50633_global);
}
+static int gta02_jbt6k74_all_dependencies_resumed(int devidx)
+{
+ if (!resume_dep_jbt_pcf.called_flag)
+ return 0;
+
+ if (!resume_dep_jbt_glamo.called_flag)
+ return 0;
+
+ return 1;
+}
+
+/* register jbt resume action to be dependent on pcf50633 and glamo resume */
+
+static void gta02_jbt6k74_suspending(int devindex, struct spi_device *spi)
+{
+ void jbt6k74_resume(void *spi); /* little white lies about types */
+
+ resume_dep_jbt_pcf.callback = jbt6k74_resume;
+ resume_dep_jbt_pcf.context = (void *)spi;
+ pcf50633_register_resume_dependency(pcf50633_global,
+ &resume_dep_jbt_pcf);
+ resume_dep_jbt_glamo.callback = jbt6k74_resume;
+ resume_dep_jbt_glamo.context = (void *)spi;
+ glamo_register_resume_dependency(&resume_dep_jbt_glamo);
+}
+
+
const struct jbt6k74_platform_data jbt6k74_pdata = {
.reset = gta02_jbt6k74_reset,
.resuming = gta02_jbt6k74_resuming,
+ .suspending = gta02_jbt6k74_suspending,
+ .all_dependencies_resumed = gta02_jbt6k74_all_dependencies_resumed,
};
static struct spi_board_info gta02_spi_board_info[] = {