summaryrefslogtreecommitdiffstats
path: root/target/linux/s3c24xx/patches-2.6.26/1077-introduce-fiq-hdq.patch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.26/1077-introduce-fiq-hdq.patch.patch')
-rwxr-xr-xtarget/linux/s3c24xx/patches-2.6.26/1077-introduce-fiq-hdq.patch.patch87
1 files changed, 87 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.26/1077-introduce-fiq-hdq.patch.patch b/target/linux/s3c24xx/patches-2.6.26/1077-introduce-fiq-hdq.patch.patch
new file mode 100755
index 0000000000..6513e5cf83
--- /dev/null
+++ b/target/linux/s3c24xx/patches-2.6.26/1077-introduce-fiq-hdq.patch.patch
@@ -0,0 +1,87 @@
+From 46f0b99a7b0e52e8dee4cdfe2e3599814f0388ed Mon Sep 17 00:00:00 2001
+From: Andy Green <andy@openmoko.com>
+Date: Fri, 25 Jul 2008 23:06:00 +0100
+Subject: [PATCH] introduce-fiq-hdq.patch
+
+This adds a platform driver and device which performs HDQ
+battery protocol using a single GPIO pin which is set
+through platform data.
+
+HDQ has some hard latency requirements which can't
+be met if interrupts are enabled, so normally using
+a GPIO for this will require blocking out all other
+interrupts and processes for several milliseconds
+per register being read or written.
+
+This HDQ protocol engine is a FSM implemented inside the
+the FIQ ISR and regulated by timer interrupts happening
+at 20us intervals. The path through the FSM on any
+"clock" is very short and should be over with in ~
+1us. Because FIQ has guaranteed latencies of <1us,
+it means we can service the HDQ protocol without
+blocking interrupts or any other process other than
+the caller that is waiting for the result. It's pretty
+cool performance from 1 GPIO ;-)
+
+Due to it being hard to do locking from the FIQ ISR
+the code simply sleeps 10ms or whatever the scheduler
+gives it and checks if the transfer took place yet.
+
+This platform driver doesn't have any knowledge about
+the device it is talking to, it just knows it is a
+HDQ device. It exports three functions for read, write
+and confirming HDQ is initialized. It also exports two
+/sys nodes that are usable by humans, one dumps the whole
+127 register HDQ register space
+
+# cat /sys/devices/platform/gta02-hdq.0/hdq/dump
+00 44 55 00 00 00 ba 04 a2 0d 50 00 00 00 00 00
+00 00 9a 1a 00 00 ff ff ff ff 29 00 00 00 80 2b
+00 00 00 00 00 00 ff ff 00 00 00 00 00 32 af 06
+a0 d8 37 4e 00 00 00 00 00 00 00 34 2e 03 b4 e7
+00 00 06 00 41 00 4c 02 00 00 00 00 00 00 00 00
+83 02 00 00 94 09 59 b9 a5 0d 7f 21 00 00 7a ff
+df ff 62 ff a7 04 2e 05 00 00 00 01 00 07 00 00
+2a 78 36 67 7b b5 1b a9 af 19 38 89 63 57 42 7c
+#
+
+and the other allows to set one register
+
+# echo 2 170 > /sys/devices/platform/gta02-hdq.0/hdq/write
+
+writes 0xAA into register 2.
+
+Signed-off-by: Andy Green <andy@openmoko.com>
+---
+ defconfig-2.6.24 | 1 +
+ drivers/power/Kconfig | 8 ++++++++
+ 2 files changed, 9 insertions(+), 0 deletions(-)
+
+diff --git a/defconfig-2.6.24 b/defconfig-2.6.24
+index 833e15e..6d750a5 100644
+--- a/defconfig-2.6.24
++++ b/defconfig-2.6.24
+@@ -1825,3 +1825,4 @@ CONFIG_TEXTSEARCH_FSM=m
+ CONFIG_PLIST=y
+ CONFIG_HAS_IOMEM=y
+ CONFIG_HAS_DMA=y
++CONFIG_GTA02_HDQ=y
+diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
+index feb8b0a..5ace872 100644
+--- a/drivers/power/Kconfig
++++ b/drivers/power/Kconfig
+@@ -63,3 +63,11 @@ config GTA02_HDQ
+ at least BATTERY_BQ27000_HDQ as well
+
+ endif # POWER_SUPPLY
++
++config GTA02_HDQ
++ tristate "Neo Freerunner HDQ"
++ depends on MACH_NEO1973_GTA02 && FIQ && S3C2440_C_FIQ
++ help
++ Say Y to enable support for communicating with an HDQ battery
++ on the Neo Freerunner. You probably want to select
++ at least BATTERY_BQ27000_HDQ as well
+--
+1.5.6.3
+