summaryrefslogtreecommitdiff
path: root/target/linux/s3c24xx/patches/0094-debug-glamo-dump-regs.patch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/s3c24xx/patches/0094-debug-glamo-dump-regs.patch.patch')
-rwxr-xr-xtarget/linux/s3c24xx/patches/0094-debug-glamo-dump-regs.patch.patch133
1 files changed, 133 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches/0094-debug-glamo-dump-regs.patch.patch b/target/linux/s3c24xx/patches/0094-debug-glamo-dump-regs.patch.patch
new file mode 100755
index 0000000000..f7ab57ac70
--- /dev/null
+++ b/target/linux/s3c24xx/patches/0094-debug-glamo-dump-regs.patch.patch
@@ -0,0 +1,133 @@
+From 1dd60fdf9fe229443304a5f53c265d9f2b35a7ec Mon Sep 17 00:00:00 2001
+From: warmcat <andy@warmcat.com>
+Date: Fri, 25 Jul 2008 23:06:02 +0100
+Subject: [PATCH] debug-glamo-dump-regs.patch
+ From: Andy Green <andy@openmoko.com>
+
+Sigend-off-by: Andy Green <andy@openmoko.com>
+---
+ drivers/mfd/glamo/glamo-core.c | 91 +++++++++++++++++++++++++++++++++++++++-
+ 1 files changed, 90 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/mfd/glamo/glamo-core.c b/drivers/mfd/glamo/glamo-core.c
+index 4d8e47f..accd933 100644
+--- a/drivers/mfd/glamo/glamo-core.c
++++ b/drivers/mfd/glamo/glamo-core.c
+@@ -977,10 +977,92 @@ static int glamo_supported(struct glamo_core *glamo)
+ return 1;
+ }
+
++static ssize_t regs_write(struct device *dev, struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ unsigned long reg = simple_strtoul(buf, NULL, 10);
++ struct glamo_core *glamo = dev_get_drvdata(dev);
++
++ while (*buf && (*buf != ' '))
++ buf++;
++ if (*buf != ' ')
++ return -EINVAL;
++ while (*buf && (*buf == ' '))
++ buf++;
++ if (!*buf)
++ return -EINVAL;
++
++ printk(KERN_INFO"reg 0x%02lX <-- 0x%04lX\n",
++ reg, simple_strtoul(buf, NULL, 10));
++
++ __reg_write(glamo, reg, simple_strtoul(buf, NULL, 10));
++
++ return count;
++}
++
++static ssize_t regs_read(struct device *dev, struct device_attribute *attr,
++ char *buf)
++{
++ struct glamo_core *glamo = dev_get_drvdata(dev);
++ int n, n1 = 0, r;
++ char * end = buf;
++ struct reg_range {
++ int start;
++ int count;
++ char * name;
++ };
++ struct reg_range reg_range[] = {
++ { 0x0000, 0x200, "General" },
++ { 0x0200, 0x100, "Host Bus" },
++ { 0x0300, 0x100, "Memory" },
++/* { 0x0400, 0x100, "Sensor" },
++ { 0x0500, 0x300, "ISP" },
++ { 0x0800, 0x400, "JPEG" },
++ { 0x0c00, 0x500, "MPEG" },
++ { 0x1100, 0x400, "LCD" },
++ { 0x1500, 0x080, "MPU 0" },
++ { 0x1580, 0x080, "MPU 1" },
++ { 0x1600, 0x080, "Command Queue" },
++ { 0x1680, 0x080, "RISC CPU" },
++ { 0x1700, 0x400, "2D Unit" },
++ { 0x1b00, 0x900, "3D Unit" },
++*/
++ };
++
++ spin_lock(&glamo->lock);
++
++ for (r = 0; r < ARRAY_SIZE(reg_range); r++) {
++ n1 = 0;
++ end += sprintf(end, "\n%s\n\n", reg_range[r].name);
++ for (n = reg_range[r].start;
++ n < reg_range[r].start + reg_range[r].count; n += 2) {
++ if (((n1++) & 7) == 0)
++ end += sprintf(end, "\n%04X: ",
++ n + reg_range[r].start);
++ end += sprintf(end, "%04x ", __reg_read(glamo, n));
++ }
++ end += sprintf(end, "\n");
++ }
++ spin_unlock(&glamo->lock);
++
++ return end - buf;
++}
++
++static DEVICE_ATTR(regs, 0644, regs_read, regs_write);
++static struct attribute *glamo_sysfs_entries[] = {
++ &dev_attr_regs.attr,
++ NULL
++};
++static struct attribute_group glamo_attr_group = {
++ .name = NULL,
++ .attrs = glamo_sysfs_entries,
++};
++
++
+
+ static int __init glamo_probe(struct platform_device *pdev)
+ {
+- int rc, irq;
++ int rc = 0, irq;
+ struct glamo_core *glamo;
+
+ if (glamo_handle) {
+@@ -1080,6 +1162,12 @@ static int __init glamo_probe(struct platform_device *pdev)
+ goto out_free;
+ }
+
++ rc = sysfs_create_group(&pdev->dev.kobj, &glamo_attr_group);
++ if (rc < 0) {
++ dev_err(&pdev->dev, "cannot create sysfs group\n");
++ goto out_free;
++ }
++
+ platform_set_drvdata(pdev, glamo);
+
+ dev_dbg(&glamo->pdev->dev, "running init script\n");
+@@ -1103,6 +1191,7 @@ static int __init glamo_probe(struct platform_device *pdev)
+ glamo->irq_works = 1;
+ } else
+ glamo->irq_works = 0;
++
+ return 0;
+
+ out_free:
+--
+1.5.6.3
+