From 6e93fbb0d50f9afc75ef5dfbe5ba8d042156212b Mon Sep 17 00:00:00 2001 From: Vasily Khoruzhick Date: Thu, 1 Oct 2009 20:58:18 -0500 Subject: Fix s3c-adc suspend Fix for a bug that shows when the s3c2410 TS driver requests a conversion from the s3c-adc driver and the machine goes into suspend. In this case the touchscreen stops working. Note: Nelson edited the original patch with a few small changes. Reported-by: Radek Polak Signed-off-by: Vasily Khoruzhick Signed-off-by: Nelson Castillo --- arch/arm/plat-s3c24xx/adc.c | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/arch/arm/plat-s3c24xx/adc.c b/arch/arm/plat-s3c24xx/adc.c index 9056bcc6c17..4ce45c5da53 100644 --- a/arch/arm/plat-s3c24xx/adc.c +++ b/arch/arm/plat-s3c24xx/adc.c @@ -43,6 +43,7 @@ struct s3c_adc_client { unsigned int nr_samples; unsigned char is_ts; unsigned char channel; + unsigned selected; void (*select_cb)(unsigned selected); void (*convert_cb)(unsigned val1, unsigned val2, @@ -68,6 +69,7 @@ static struct adc_device *adc_dev; static LIST_HEAD(adc_pending); #define adc_dbg(_adc, msg...) dev_dbg(&(_adc)->pdev->dev, msg) +#define adc_info(_adc, msg...) dev_info(&(_adc)->pdev->dev, msg) #define AUTOPST (S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | \ S3C2410_ADCTSC_XP_SEN | S3C2410_ADCTSC_AUTO_PST | \ @@ -91,7 +93,10 @@ static inline void s3c_adc_select(struct adc_device *adc, { unsigned con = readl(adc->regs + S3C2410_ADCCON); - client->select_cb(1); + if (!client->selected) { + client->selected = 1; + client->select_cb(1); + } con &= ~S3C2410_ADCCON_MUXMASK; con &= ~S3C2410_ADCCON_STDBM; @@ -115,12 +120,9 @@ void s3c_adc_try(struct adc_device *adc) { struct s3c_adc_client *next = adc->ts_pend; - if (!next && !list_empty(&adc_pending)) { + if (!next && !list_empty(&adc_pending)) next = list_first_entry(&adc_pending, struct s3c_adc_client, pend); - list_del(&next->pend); - } else - adc->ts_pend = NULL; if (next) { adc_dbg(adc, "new client is %p\n", next); @@ -229,9 +231,16 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw) /* fire another conversion for this */ client->select_cb(1); + client->selected = 1; s3c_adc_convert(adc); } else { local_irq_save(flags); + client->selected = 0; + if (!adc->cur->is_ts) + list_del(&adc->cur->pend); + else + adc->ts_pend = NULL; + (client->select_cb)(0); adc->cur = NULL; @@ -341,20 +350,43 @@ static int s3c_adc_suspend(struct platform_device *pdev, pm_message_t state) writel(con, adc->regs + S3C2410_ADCCON); clk_disable(adc->clk); + disable_irq(IRQ_ADC); + + if (!list_empty(&adc_pending) || adc->ts_pend) + adc_info(adc, "%s:We still have clients pending\n", __func__); return 0; } +static struct work_struct resume_work; + +static void adc_resume_work(struct work_struct *work) +{ + struct adc_device *adc = platform_get_drvdata(adc_dev->pdev); + + adc_info(adc, "%s:We still have clients pending\n", __func__); + s3c_adc_try(adc_dev); +} + static int s3c_adc_resume(struct platform_device *pdev) { struct adc_device *adc = platform_get_drvdata(pdev); + enable_irq(IRQ_ADC); clk_enable(adc->clk); writel(adc->prescale | S3C2410_ADCCON_PRSCEN, adc->regs + S3C2410_ADCCON); writel(adc->delay, adc->regs + S3C2410_ADCDLY); + /* Schedule task if there are clients pending. */ + if (!list_empty(&adc_pending) || adc_dev->ts_pend) { + INIT_WORK(&resume_work, adc_resume_work); + if (!schedule_work(&resume_work)) + dev_err(&pdev->dev, + "Failed to schedule adc_resume work!\n"); + } + return 0; } -- cgit v1.2.3 From f0e09a4bde4a0c7000cd906b2efde42ad0310526 Mon Sep 17 00:00:00 2001 From: Radek Polak Date: Fri, 2 Oct 2009 20:54:29 +0200 Subject: GTA01/GTA02: disable android drivers in default configs Android drivers are not needed for standard linux systems. We can save memory by disabling them. Android low memory killer (CONFIG_ANDROID_LOW_MEMORY_KILLER) also prevents using swap by killing applications before swapping can start on non android systems. Reported-by: Jim Morris Signed-off-by: Radek Polak Signed-off-by: Nelson Castillo --- arch/arm/configs/gta01_moredrivers_defconfig | 21 ++++++++++----------- arch/arm/configs/gta02_moredrivers_defconfig | 19 ++++++++----------- arch/arm/configs/gta02_packaging_defconfig | 19 ++++++++----------- 3 files changed, 26 insertions(+), 33 deletions(-) diff --git a/arch/arm/configs/gta01_moredrivers_defconfig b/arch/arm/configs/gta01_moredrivers_defconfig index 411acab046f..68b95e7e9e6 100644 --- a/arch/arm/configs/gta01_moredrivers_defconfig +++ b/arch/arm/configs/gta01_moredrivers_defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29-rc3 -# Tue Feb 24 02:13:21 2009 +# Fri Oct 2 16:49:49 2009 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -203,6 +203,7 @@ CONFIG_S3C_GPIO_SPACE=0 CONFIG_S3C_GPIO_TRACK=y CONFIG_S3C_DMA=y CONFIG_S3C_PWM=y +CONFIG_S3C_DEV_USB_HOST=y # # S3C2400 Machines @@ -1159,6 +1160,7 @@ CONFIG_WATCHDOG=y # # CONFIG_SOFT_WATCHDOG is not set CONFIG_S3C2410_WATCHDOG=m +CONFIG_PCF50606_WATCHDOG=y # # USB-based Watchdog Cards @@ -1686,17 +1688,14 @@ CONFIG_STAGING=y # # Android # -CONFIG_ANDROID=y -CONFIG_ANDROID_BINDER_IPC=y -CONFIG_ANDROID_LOGGER=y -CONFIG_ANDROID_RAM_CONSOLE=y -CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y -# CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION is not set -# CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT is not set -CONFIG_ANDROID_TIMED_GPIO=y -CONFIG_ANDROID_LOW_MEMORY_KILLER=y +# CONFIG_ANDROID is not set +# CONFIG_ANDROID_BINDER_IPC is not set +# CONFIG_ANDROID_LOGGER is not set +# CONFIG_ANDROID_RAM_CONSOLE is not set +# CONFIG_ANDROID_TIMED_GPIO is not set +# CONFIG_ANDROID_LOW_MEMORY_KILLER is not set # CONFIG_ANDROID_WAKELOCK is not set -CONFIG_ANDROID_PARANOID_NETWORK=y +# CONFIG_ANDROID_PARANOID_NETWORK is not set # # File systems diff --git a/arch/arm/configs/gta02_moredrivers_defconfig b/arch/arm/configs/gta02_moredrivers_defconfig index 13b41215faa..e4fe9a945d5 100644 --- a/arch/arm/configs/gta02_moredrivers_defconfig +++ b/arch/arm/configs/gta02_moredrivers_defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29-rc3 -# Sun Apr 19 23:22:38 2009 +# Fri Oct 2 20:52:45 2009 # CONFIG_ARM=y CONFIG_HAVE_PWM=y @@ -1782,17 +1782,14 @@ CONFIG_STAGING=y # # Android # -CONFIG_ANDROID=y -CONFIG_ANDROID_BINDER_IPC=y -CONFIG_ANDROID_LOGGER=y -CONFIG_ANDROID_RAM_CONSOLE=y -CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y -# CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION is not set -# CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT is not set -CONFIG_ANDROID_TIMED_GPIO=y -CONFIG_ANDROID_LOW_MEMORY_KILLER=y +# CONFIG_ANDROID is not set +# CONFIG_ANDROID_BINDER_IPC is not set +# CONFIG_ANDROID_LOGGER is not set +# CONFIG_ANDROID_RAM_CONSOLE is not set +# CONFIG_ANDROID_TIMED_GPIO is not set +# CONFIG_ANDROID_LOW_MEMORY_KILLER is not set # CONFIG_ANDROID_WAKELOCK is not set -CONFIG_ANDROID_PARANOID_NETWORK=y +# CONFIG_ANDROID_PARANOID_NETWORK is not set # # File systems diff --git a/arch/arm/configs/gta02_packaging_defconfig b/arch/arm/configs/gta02_packaging_defconfig index 03c72d5652b..e2dbbef7b44 100644 --- a/arch/arm/configs/gta02_packaging_defconfig +++ b/arch/arm/configs/gta02_packaging_defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.29-rc3 -# Sun Apr 19 22:57:25 2009 +# Fri Oct 2 20:51:57 2009 # CONFIG_ARM=y CONFIG_HAVE_PWM=y @@ -1785,17 +1785,14 @@ CONFIG_STAGING=y # # Android # -CONFIG_ANDROID=y -CONFIG_ANDROID_BINDER_IPC=y -CONFIG_ANDROID_LOGGER=y -CONFIG_ANDROID_RAM_CONSOLE=y -CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y -# CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION is not set -# CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT is not set -CONFIG_ANDROID_TIMED_GPIO=y -CONFIG_ANDROID_LOW_MEMORY_KILLER=y +# CONFIG_ANDROID is not set +# CONFIG_ANDROID_BINDER_IPC is not set +# CONFIG_ANDROID_LOGGER is not set +# CONFIG_ANDROID_RAM_CONSOLE is not set +# CONFIG_ANDROID_TIMED_GPIO is not set +# CONFIG_ANDROID_LOW_MEMORY_KILLER is not set # CONFIG_ANDROID_WAKELOCK is not set -CONFIG_ANDROID_PARANOID_NETWORK=y +# CONFIG_ANDROID_PARANOID_NETWORK is not set # # File systems -- cgit v1.2.3 From 8c65792a5c83c76d662a617a7c4e1ae8104bb6a5 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 4 Nov 2009 20:09:03 +0100 Subject: glamo-spi: missing semicolon after MODULE_AUTHOR() Fix compilation error due to missing semicolon Signed-off-by: Martin Jansa Signed-off-by: Paul Fertser --- drivers/mfd/glamo/glamo-lcm-spi.c | 2 +- drivers/mfd/glamo/glamo-spi-gpio.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/mfd/glamo/glamo-lcm-spi.c b/drivers/mfd/glamo/glamo-lcm-spi.c index a7129fe798c..446f0581e9e 100644 --- a/drivers/mfd/glamo/glamo-lcm-spi.c +++ b/drivers/mfd/glamo/glamo-lcm-spi.c @@ -236,5 +236,5 @@ module_init(glamo_spi_init); module_exit(glamo_spi_exit); MODULE_DESCRIPTION("Smedia Glamo 336x/337x LCM serial command SPI Driver"); -MODULE_AUTHOR("Harald Welte ") +MODULE_AUTHOR("Harald Welte "); MODULE_LICENSE("GPL"); diff --git a/drivers/mfd/glamo/glamo-spi-gpio.c b/drivers/mfd/glamo/glamo-spi-gpio.c index b92e48a17b7..6ebf4982d6c 100644 --- a/drivers/mfd/glamo/glamo-spi-gpio.c +++ b/drivers/mfd/glamo/glamo-spi-gpio.c @@ -274,5 +274,5 @@ module_init(glamo_spi_init); module_exit(glamo_spi_exit); MODULE_DESCRIPTION("Smedia Glamo 336x/337x LCM serial command SPI Driver"); -MODULE_AUTHOR("Harald Welte ") +MODULE_AUTHOR("Harald Welte "); MODULE_LICENSE("GPL"); -- cgit v1.2.3 From bdaf2752eb06b600098f89661baa3e478cd52105 Mon Sep 17 00:00:00 2001 From: Michael Trimarchi Date: Thu, 26 Nov 2009 01:51:19 +0100 Subject: input: lis302dl: fix the resume path This fix the resume path of the accelerometer. If the accelerometer is not power up, restore to initial status. Move the REG_CTRL1 to the last one position avoid writing on the register when the device is in power down mode. Signed-off-by: Michael Trimarchi Signed-off-by: Paul Fertser --- drivers/input/misc/lis302dl.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/input/misc/lis302dl.c b/drivers/input/misc/lis302dl.c index f31e5488440..d345bfb2718 100644 --- a/drivers/input/misc/lis302dl.c +++ b/drivers/input/misc/lis302dl.c @@ -818,7 +818,6 @@ static int __devexit lis302dl_remove(struct spi_device *spi) #ifdef CONFIG_PM static u8 regs_to_save[] = { - LIS302DL_REG_CTRL1, LIS302DL_REG_CTRL2, LIS302DL_REG_CTRL3, LIS302DL_REG_FF_WU_CFG_1, @@ -833,7 +832,7 @@ static u8 regs_to_save[] = { LIS302DL_REG_CLICK_TIME_LIMIT, LIS302DL_REG_CLICK_LATENCY, LIS302DL_REG_CLICK_WINDOW, - + LIS302DL_REG_CTRL1, }; static int lis302dl_suspend(struct spi_device *spi, pm_message_t state) @@ -906,11 +905,6 @@ static int lis302dl_resume(struct spi_device *spi) if (__lis302dl_reset_device(lis)) dev_err(&spi->dev, "device BOOT reload failed\n"); - lis->regs[LIS302DL_REG_CTRL1] |= LIS302DL_CTRL1_PD | - LIS302DL_CTRL1_Xen | - LIS302DL_CTRL1_Yen | - LIS302DL_CTRL1_Zen; - /* restore registers after resume */ for (n = 0; n < ARRAY_SIZE(regs_to_save); n++) __reg_write(lis, regs_to_save[n], lis->regs[regs_to_save[n]]); -- cgit v1.2.3 From b90406de472c1aa5371ab593a2bb79136d5de658 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 26 Nov 2009 11:55:33 +0300 Subject: mfd: glamo: Enable FIFO stage for the LCD engine's memory access By avoiding conflicts of memory access inside Glamo, this doubles the speed of internal memory access. Signed-off-by: Thomas White Signed-off-by: Paul Fertser --- drivers/mfd/glamo/glamo-fb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/mfd/glamo/glamo-fb.c b/drivers/mfd/glamo/glamo-fb.c index 44ab9a39787..21165d97fb2 100644 --- a/drivers/mfd/glamo/glamo-fb.c +++ b/drivers/mfd/glamo/glamo-fb.c @@ -128,7 +128,7 @@ static struct glamo_script glamo_regs[] = { * 01 00 0 100 0 000 01 0 0 */ /* The following values assume 640*480@16bpp */ { GLAMO_REG_LCD_A_BASE1, 0x0000 }, /* display A base address 15:0 */ - { GLAMO_REG_LCD_A_BASE2, 0x0000 }, /* display A base address 22:16 */ + { GLAMO_REG_LCD_A_BASE2, 0x4000 }, /* display A base address 22:16 */ { GLAMO_REG_LCD_B_BASE1, 0x6000 }, /* display B base address 15:0 */ { GLAMO_REG_LCD_B_BASE2, 0x0009 }, /* display B base address 22:16 */ { GLAMO_REG_LCD_CURSOR_BASE1, 0xC000 }, /* cursor base address 15:0 */ -- cgit v1.2.3