diff options
author | Andy Green <andy@openmoko.com> | 2008-11-19 17:09:46 +0000 |
---|---|---|
committer | Andy Green <agreen@pads.home.warmcat.com> | 2008-11-19 17:09:46 +0000 |
commit | 2204d8b104b812411a39118ffb436dfbd479787a (patch) | |
tree | c44cf815b492a2b81717947a4836a264692bb440 /arch/arm/mach-s3c2440 | |
parent | d4f8c947ca4693e5a08c252bcd2f0bb6d1e99592 (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/arm/mach-s3c2440')
-rw-r--r-- | arch/arm/mach-s3c2440/mach-gta02.c | 39 |
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[] = { |