diff options
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.26/1239-fix-hdq-probe.patch.patch')
-rwxr-xr-x | target/linux/s3c24xx/patches-2.6.26/1239-fix-hdq-probe.patch.patch | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.26/1239-fix-hdq-probe.patch.patch b/target/linux/s3c24xx/patches-2.6.26/1239-fix-hdq-probe.patch.patch new file mode 100755 index 0000000000..fbf74184ef --- /dev/null +++ b/target/linux/s3c24xx/patches-2.6.26/1239-fix-hdq-probe.patch.patch @@ -0,0 +1,107 @@ +From 5be7f629cff94bd67ba7d95c800763a9026708f2 Mon Sep 17 00:00:00 2001 +From: Andy Green <andy@openmoko.com> +Date: Wed, 6 Aug 2008 12:16:38 +0100 +Subject: [PATCH] fix-hdq-probe.patch + +Signed-off-by: Andy Green <andy@openmoko.com> +--- + arch/arm/mach-s3c2440/mach-gta02.c | 9 ++++----- + drivers/power/gta02_hdq.c | 22 ++++++++++++++++------ + 2 files changed, 20 insertions(+), 11 deletions(-) + +diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c +index be2d901..aeedd42 100644 +--- a/arch/arm/mach-s3c2440/mach-gta02.c ++++ b/arch/arm/mach-s3c2440/mach-gta02.c +@@ -38,6 +38,7 @@ + #include <linux/spi/glamo.h> + #include <linux/spi/spi_bitbang.h> + #include <linux/mmc/host.h> ++#include <linux/version.h> + + #include <linux/mtd/mtd.h> + #include <linux/mtd/nand.h> +@@ -111,8 +112,7 @@ static int gta02_charger_active_status; + */ + struct fiq_ipc fiq_ipc; + EXPORT_SYMBOL(fiq_ipc); +- +-#define DIVISOR_FROM_US(x) ((x) << 1) ++#define DIVISOR_FROM_US(x) ((x) << 3) + + #define FIQ_DIVISOR_VIBRATOR DIVISOR_FROM_US(100) + +@@ -184,9 +184,9 @@ FIQ_HANDLER_ENTRY(256, 512) + if (hdq_shifter & 1) + hdq_ctr = 50 / HDQ_SAMPLE_PERIOD_US; + else +- hdq_ctr = 120 / HDQ_SAMPLE_PERIOD_US; ++ hdq_ctr = 140 / HDQ_SAMPLE_PERIOD_US; + /* carefully precompute the other phase length */ +- hdq_ctr2 = (210 - (hdq_ctr * HDQ_SAMPLE_PERIOD_US)) / ++ hdq_ctr2 = (220 - (hdq_ctr * HDQ_SAMPLE_PERIOD_US)) / + HDQ_SAMPLE_PERIOD_US; + hdq_state = HDQB_ADS_LOW; + hdq_shifter >>= 1; +@@ -782,7 +782,6 @@ struct platform_device gta02_hdq_device = { + }; + #endif + +- + /* NOR Flash */ + + #define GTA02_FLASH_BASE 0x18000000 /* GCS3 */ +diff --git a/drivers/power/gta02_hdq.c b/drivers/power/gta02_hdq.c +index 5a79fd6..6c228b4 100644 +--- a/drivers/power/gta02_hdq.c ++++ b/drivers/power/gta02_hdq.c +@@ -40,7 +40,7 @@ int gta02hdq_read(int address) + mutex_lock(&fiq_ipc.hdq_lock); + + fiq_ipc.hdq_ads = address | HDQ_READ; +- fiq_ipc.hdq_request_ctr++; ++ fiq_ipc.hdq_request_ctr = fiq_ipc.hdq_transaction_ctr + 1; + fiq_kick(); + /* + * FIQ takes care of it while we block our calling process +@@ -53,9 +53,13 @@ int gta02hdq_read(int address) + if (fiq_ipc.hdq_request_ctr != fiq_ipc.hdq_transaction_ctr) + continue; + +- if (fiq_ipc.hdq_error) ++ if (fiq_ipc.hdq_error) { ++ printk(KERN_ERR "hdq timeout %d, %d / %d\n", ++ fiq_ipc.hdq_error, fiq_ipc.hdq_request_ctr, ++ fiq_ipc.hdq_transaction_ctr); + goto done; /* didn't see a response in good time */ +- ++ } ++ + ret = fiq_ipc.hdq_rx_data; + goto done; + } +@@ -193,12 +197,18 @@ static int __init gta02hdq_probe(struct platform_device *pdev) + { + struct resource *r = platform_get_resource(pdev, 0, 0); + +- if (!machine_is_neo1973_gta02()) ++ printk(KERN_ERR "gta02hdq driver starting\n"); ++ ++ if (!machine_is_neo1973_gta02()) { ++ printk(KERN_ERR "gta02hdq_probe only for GTA02\n"); + return -EIO; ++ } + +- if (!r) ++ if (!r) { ++ printk(KERN_ERR "gta02hdq_probe missing resource for GPIO\n"); + return -EINVAL; +- ++ } ++ + platform_set_drvdata(pdev, NULL); + + mutex_init(&fiq_ipc.hdq_lock); +-- +1.5.6.3 + |