summaryrefslogtreecommitdiff
path: root/target/linux/s3c24xx/patches-2.6.24/1089-debug-suspend-dump-gpio-states-add-GPA.patch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1089-debug-suspend-dump-gpio-states-add-GPA.patch.patch')
-rw-r--r--target/linux/s3c24xx/patches-2.6.24/1089-debug-suspend-dump-gpio-states-add-GPA.patch.patch451
1 files changed, 451 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1089-debug-suspend-dump-gpio-states-add-GPA.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1089-debug-suspend-dump-gpio-states-add-GPA.patch.patch
new file mode 100644
index 0000000..276fa25
--- /dev/null
+++ b/target/linux/s3c24xx/patches-2.6.24/1089-debug-suspend-dump-gpio-states-add-GPA.patch.patch
@@ -0,0 +1,451 @@
+From 475826b7d7ef66e80b64d97ea9e8aca56d97e313 Mon Sep 17 00:00:00 2001
+From: Andy Green <andy@openmoko.com>
+Date: Sun, 13 Apr 2008 07:25:49 +0100
+Subject: [PATCH] debug-suspend-dump-gpio-states-add-GPA.patch
+
+Add support for GPA[] GPIO bus since we have some NCs
+but they seem to output-only IO cells so no matter
+
+Signed-off-by: Andy Green <andy@openmoko.com>
+---
+ arch/arm/plat-s3c24xx/gpio.c | 420 ++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 420 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/plat-s3c24xx/gpio.c b/arch/arm/plat-s3c24xx/gpio.c
+index ec3a09c..7cab212 100644
+--- a/arch/arm/plat-s3c24xx/gpio.c
++++ b/arch/arm/plat-s3c24xx/gpio.c
+@@ -32,6 +32,7 @@
+ #include <asm/io.h>
+
+ #include <asm/arch/regs-gpio.h>
++#include <asm/arch/regs-gpioj.h>
+
+ void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)
+ {
+@@ -186,3 +187,422 @@ int s3c2410_gpio_getirq(unsigned int pin)
+ }
+
+ EXPORT_SYMBOL(s3c2410_gpio_getirq);
++
++static void pretty_dump(u32 cfg, u32 state, u32 pull,
++ const char ** function_names_2,
++ const char ** function_names_3,
++ const char * prefix,
++ int count)
++{
++ int n;
++ const char *tag_type = NULL,
++ *tag_state = NULL,
++ *tag_pulldown = NULL,
++ * level0 = "0",
++ * level1 = "1";
++
++ for (n = 0; n < count; n++) {
++ switch ((cfg >> (2 * n)) & 3) {
++ case 0:
++ tag_type = "input ";
++ break;
++ case 1:
++ tag_type = "OUTPUT ";
++ break;
++ case 2:
++ if (function_names_2) {
++ if (function_names_2[n])
++ tag_type = function_names_2[n];
++ else
++ tag_type = "*** ILLEGAL CFG (2) *** ";
++ } else
++ tag_type = "(function) ";
++ break;
++ default:
++ if (function_names_3) {
++ if (function_names_3[n])
++ tag_type = function_names_3[n];
++ else
++ tag_type = "*** ILLEGAL CFG (3) *** ";
++ } else
++ tag_type = "(function) ";
++ break;
++ }
++ if ((state >> n) & 1)
++ tag_state = level1;
++ else
++ tag_state = level0;
++
++ if (((pull >> n) & 1))
++ tag_pulldown = "";
++ else
++ tag_pulldown = "(pulldown)";
++
++ printk(KERN_INFO"%s%02d: %s %s %s\n", prefix, n, tag_type,
++ tag_state, tag_pulldown);
++ }
++ printk(KERN_INFO"\n");
++}
++
++static void pretty_dump_a(u32 cfg, u32 state,
++ const char ** function_names,
++ const char * prefix,
++ int count)
++{
++ int n;
++ const char *tag_type = NULL,
++ *tag_state = NULL,
++ * level0 = "0",
++ * level1 = "1";
++
++ for (n = 0; n < count; n++) {
++ switch ((cfg >> n) & 1) {
++ case 0:
++ tag_type = "OUTPUT ";
++ break;
++ default:
++ if (function_names) {
++ if (function_names[n])
++ tag_type = function_names[n];
++ else
++ tag_type = "*** ILLEGAL CFG *** ";
++ } else
++ tag_type = "(function) ";
++ break;
++ }
++ if ((state >> n) & 1)
++ tag_state = level1;
++ else
++ tag_state = level0;
++
++ printk(KERN_INFO"%s%02d: %s %s\n", prefix, n, tag_type,
++ tag_state);
++ }
++ printk(KERN_INFO"\n");
++}
++
++static const char * funcs_a[] = {
++ "ADDR0 ",
++ "ADDR16 ",
++ "ADDR17 ",
++ "ADDR18 ",
++ "ADDR19 ",
++ "ADDR20 ",
++ "ADDR21 ",
++ "ADDR22 ",
++ "ADDR23 ",
++ "ADDR24 ",
++ "ADDR25 ",
++ "ADDR26 ",
++ "nGCS[1] ",
++ "nGCS[2] ",
++ "nGCS[3] ",
++ "nGCS[4] ",
++ "nGCS[5] ",
++ "CLE ",
++ "ALE ",
++ "nFWE ",
++ "nFRE ",
++ "nRSTOUT ",
++ "nFCE ",
++ NULL,
++ NULL
++};
++
++
++static const char * funcs_b2[] = {
++ "TOUT0 ",
++ "TOUT1 ",
++ "TOUT2 ",
++ "TOUT3 ",
++ "TCLK[0] ",
++ "nXBACK ",
++ "nXBREQ ",
++ "nXDACK1 ",
++ "nXDREQ1 ",
++ "nXDACK0 ",
++ "nXDREQ0 ",
++};
++static const char * funcs_b3[] = {
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++};
++
++static const char * funcs_c2[] = {
++ "LEND ",
++ "VCLK ",
++ "VLINE ",
++ "VFRAME ",
++ "VM ",
++ "LCD_LPCOE ",
++ "LCD_LPCREV ",
++ "LCD_LPCREVB",
++ "VD[0] ",
++ "VD[1] ",
++ "VD[2] ",
++ "VD[3] ",
++ "VD[4] ",
++ "VD[5] ",
++ "VD[6] ",
++ "VD[7] ",
++};
++static const char * funcs_c3[] = {
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ "I2SSDI ",
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++};
++
++static const char * funcs_d2[] = {
++ "VD[8] ",
++ "VD[9] ",
++ "VD[10] ",
++ "VD[11] ",
++ "VD[12] ",
++ "VD[13] ",
++ "VD[14] ",
++ "VD[15] ",
++ "VD[16] ",
++ "VD[17] ",
++ "VD[18] ",
++ "VD[19] ",
++ "VD[20] ",
++ "VD[21] ",
++ "VD[22] ",
++ "VD[23] ",
++};
++static const char * funcs_d3[] = {
++ "nSPICS1 ",
++ "SPICLK1 ",
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ "SPIMISO1 ",
++ "SPIMOSI1 ",
++ "SPICLK1 ",
++ NULL,
++ NULL,
++ NULL,
++ "nSS1 ",
++ "nSS0 ",
++};
++
++static const char * funcs_e2[] = {
++ "I2SLRCK ",
++ "I2SSCLK ",
++ "CDCLK ",
++ "I2SDI ",
++ "I2SDO ",
++ "SDCLK ",
++ "SDCMD ",
++ "SDDAT0 ",
++ "SDDAT1 ",
++ "SDDAT2 ",
++ "SDDAT3 ",
++ "SPIMISO0 ",
++ "SPIMOSI0 ",
++ "SPICLK0 ",
++ "IICSCL ",
++ "IICSDA ",
++};
++static const char * funcs_e3[] = {
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++};
++
++static const char * funcs_f2[] = {
++ "EINT[0] ",
++ "EINT[1] ",
++ "EINT[2] ",
++ "EINT[3] ",
++ "EINT[4] ",
++ "EINT[5] ",
++ "EINT[6] ",
++ "EINT[7] ",
++};
++static const char * funcs_f3[] = {
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++};
++
++
++static const char * funcs_g2[] = {
++ "EINT[8] ",
++ "EINT[9] ",
++ "EINT[10] ",
++ "EINT[11] ",
++ "EINT[12] ",
++ "EINT[13] ",
++ "EINT[14] ",
++ "EINT[15] ",
++ "EINT[16] ",
++ "EINT[17] ",
++ "EINT[18] ",
++ "EINT[19] ",
++ "EINT[20] ",
++ "EINT[21] ",
++ "EINT[22] ",
++ "EINT[23] ",
++};
++static const char * funcs_g3[] = {
++ NULL,
++ NULL,
++ "nSS0 ",
++ "nSS1 ",
++ "LCD_PWRDN ",
++ "SPIMISO1 ",
++ "SPIMOSI1 ",
++ "SPICLK1 ",
++ NULL,
++ "nRTS1 ",
++ "nCTS1 ",
++ "TCLK[1] ",
++ "nSPICS0 ",
++ NULL,
++ NULL,
++ NULL,
++};
++
++static const char * funcs_h2[] = {
++ "nCTS0 ",
++ "nRTS0 ",
++ "TXD[0] ",
++ "RXD[0] ",
++ "TXD[1] ",
++ "RXD[1] ",
++ "TXD[2] ",
++ "RXD[2] ",
++ "UEXTCLK ",
++ "CLKOUT0 ",
++ "CLKOUT1 ",
++};
++static const char * funcs_h3[] = {
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ "nRTS1 ",
++ "nCTS1 ",
++ NULL,
++ "nSPICS0 ",
++ NULL,
++};
++
++static const char * funcs_j2[] = {
++ "CAMDATA[0] ",
++ "CAMDATA[1] ",
++ "CAMDATA[2] ",
++ "CAMDATA[3] ",
++ "CAMDATA[4] ",
++ "CAMDATA[5] ",
++ "CAMDATA[6] ",
++ "CAMDATA[7] ",
++ "CAMPCLK ",
++ "CAMVSYNC ",
++ "CAMHREF ",
++ "CAMCLKOUT ",
++ "CAMRESET ",
++};
++static const char * funcs_j3[] = {
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++ NULL,
++};
++
++/* used to dump GPIO states at suspend */
++void s3c24xx_dump_gpio_states(void)
++{
++ pretty_dump_a(__raw_readl(S3C2410_GPACON),
++ __raw_readl(S3C2410_GPADAT),
++ funcs_a, "GPA", 25);
++ pretty_dump(__raw_readl(S3C2410_GPBCON),
++ __raw_readl(S3C2410_GPBDAT),
++ __raw_readl(S3C2410_GPBUP),
++ funcs_b2, funcs_b3, "GPB", 11);
++ pretty_dump(__raw_readl(S3C2410_GPCCON),
++ __raw_readl(S3C2410_GPCDAT),
++ __raw_readl(S3C2410_GPCUP),
++ funcs_c2, funcs_c3, "GPC", 16);
++ pretty_dump(__raw_readl(S3C2410_GPDCON),
++ __raw_readl(S3C2410_GPDDAT),
++ __raw_readl(S3C2410_GPDUP),
++ funcs_d2, funcs_d3, "GPD", 16);
++ pretty_dump(__raw_readl(S3C2410_GPECON),
++ __raw_readl(S3C2410_GPEDAT),
++ __raw_readl(S3C2410_GPEUP),
++ funcs_e2, funcs_e3, "GPE", 16);
++ pretty_dump(__raw_readl(S3C2410_GPFCON),
++ __raw_readl(S3C2410_GPFDAT),
++ __raw_readl(S3C2410_GPFUP),
++ funcs_f2, funcs_f3, "GPF", 8);
++ pretty_dump(__raw_readl(S3C2410_GPGCON),
++ __raw_readl(S3C2410_GPGDAT),
++ __raw_readl(S3C2410_GPGUP),
++ funcs_g2, funcs_g3, "GPG", 16);
++ pretty_dump(__raw_readl(S3C2410_GPHCON),
++ __raw_readl(S3C2410_GPHDAT),
++ __raw_readl(S3C2410_GPHUP),
++ funcs_h2, funcs_h3, "GPH", 11);
++ pretty_dump(__raw_readl(S3C2440_GPJCON),
++ __raw_readl(S3C2440_GPJDAT),
++ __raw_readl(S3C2440_GPJUP),
++ funcs_j2, funcs_j3, "GPJ", 13);
++
++}
++EXPORT_SYMBOL(s3c24xx_dump_gpio_states);
+--
+1.5.6.5
+