aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Cromie <jim.cromie@gmail.com>2006-06-27 05:54:20 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-27 20:32:43 -0400
commit0e41ef3c51ea7dbb764616f60a90700647fc8518 (patch)
treefc55403cca82ed01da9d6a7fadbaf4329cf9beb2
parent1a66fdf083bf2b60c4d12feb970bc7373b59e33a (diff)
[PATCH] chardev: GPIO for SCx200 & PC-8736x: migrate gpio_dump to common module
Since the meaning of config-bits is the same for scx200 and pc8736x _gpios, we can share a function to deliver this to user. Since it is called via the vtable, its also completely replaceable. For now, we keep using printk... Signed-off-by: Jim Cromie <jim.cromie@gmail.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--arch/i386/kernel/scx200.c16
-rw-r--r--drivers/char/nsc_gpio.c16
-rw-r--r--drivers/char/scx200_gpio.c4
3 files changed, 17 insertions, 19 deletions
diff --git a/arch/i386/kernel/scx200.c b/arch/i386/kernel/scx200.c
index 27be55349c65..edead73ebef2 100644
--- a/arch/i386/kernel/scx200.c
+++ b/arch/i386/kernel/scx200.c
@@ -110,21 +110,6 @@ u32 scx200_gpio_configure(unsigned index, u32 mask, u32 bits)
110 return config; 110 return config;
111} 111}
112 112
113void scx200_gpio_dump(unsigned index)
114{
115 u32 config = scx200_gpio_configure(index, ~0, 0);
116
117 printk(KERN_INFO NAME ": GPIO-%02u: 0x%08lx %s %s %s %s %s %s %s\n",
118 index, (unsigned long) config,
119 (config & 1) ? "OE" : "TS", /* output enabled / tristate */
120 (config & 2) ? "PP" : "OD", /* push pull / open drain */
121 (config & 4) ? "PUE" : "PUD", /* pull up enabled/disabled */
122 (config & 8) ? "LOCKED" : "", /* locked / unlocked */
123 (config & 16) ? "LEVEL" : "EDGE", /* level/edge input */
124 (config & 32) ? "HI" : "LO", /* trigger on rising/falling edge */
125 (config & 64) ? "DEBOUNCE" : ""); /* debounce */
126}
127
128static int __init scx200_init(void) 113static int __init scx200_init(void)
129{ 114{
130 printk(KERN_INFO NAME ": NatSemi SCx200 Driver\n"); 115 printk(KERN_INFO NAME ": NatSemi SCx200 Driver\n");
@@ -144,5 +129,4 @@ module_exit(scx200_cleanup);
144EXPORT_SYMBOL(scx200_gpio_base); 129EXPORT_SYMBOL(scx200_gpio_base);
145EXPORT_SYMBOL(scx200_gpio_shadow); 130EXPORT_SYMBOL(scx200_gpio_shadow);
146EXPORT_SYMBOL(scx200_gpio_configure); 131EXPORT_SYMBOL(scx200_gpio_configure);
147EXPORT_SYMBOL(scx200_gpio_dump);
148EXPORT_SYMBOL(scx200_cb_base); 132EXPORT_SYMBOL(scx200_cb_base);
diff --git a/drivers/char/nsc_gpio.c b/drivers/char/nsc_gpio.c
index 3842c2727118..72b0a5791ed8 100644
--- a/drivers/char/nsc_gpio.c
+++ b/drivers/char/nsc_gpio.c
@@ -19,6 +19,19 @@
19 19
20#define NAME "nsc_gpio" 20#define NAME "nsc_gpio"
21 21
22void nsc_gpio_dump(unsigned index, u32 config)
23{
24 printk(KERN_INFO NAME ": GPIO-%02u: 0x%08lx %s %s %s %s %s %s %s\n",
25 index, (unsigned long)config,
26 (config & 1) ? "OE" : "TS", /* output-enabled/tristate */
27 (config & 2) ? "PP" : "OD", /* push pull / open drain */
28 (config & 4) ? "PUE" : "PUD", /* pull up enabled/disabled */
29 (config & 8) ? "LOCKED" : "", /* locked / unlocked */
30 (config & 16) ? "LEVEL" : "EDGE",/* level/edge input */
31 (config & 32) ? "HI" : "LO", /* trigger on rise/fall edge */
32 (config & 64) ? "DEBOUNCE" : ""); /* debounce */
33}
34
22ssize_t nsc_gpio_write(struct file *file, const char __user *data, 35ssize_t nsc_gpio_write(struct file *file, const char __user *data,
23 size_t len, loff_t *ppos) 36 size_t len, loff_t *ppos)
24{ 37{
@@ -99,9 +112,10 @@ ssize_t nsc_gpio_read(struct file *file, char __user * buf,
99 return 1; 112 return 1;
100} 113}
101 114
102/* common routines for both scx200_gpio and pc87360_gpio */ 115/* common file-ops routines for both scx200_gpio and pc87360_gpio */
103EXPORT_SYMBOL(nsc_gpio_write); 116EXPORT_SYMBOL(nsc_gpio_write);
104EXPORT_SYMBOL(nsc_gpio_read); 117EXPORT_SYMBOL(nsc_gpio_read);
118EXPORT_SYMBOL(nsc_gpio_dump);
105 119
106static int __init nsc_gpio_init(void) 120static int __init nsc_gpio_init(void)
107{ 121{
diff --git a/drivers/char/scx200_gpio.c b/drivers/char/scx200_gpio.c
index eb9a84777598..442367b3f5dc 100644
--- a/drivers/char/scx200_gpio.c
+++ b/drivers/char/scx200_gpio.c
@@ -35,7 +35,7 @@ static int major = 0; /* default to dynamic major */
35module_param(major, int, 0); 35module_param(major, int, 0);
36MODULE_PARM_DESC(major, "Major device number"); 36MODULE_PARM_DESC(major, "Major device number");
37 37
38extern void scx200_gpio_dump(unsigned index); 38extern void nsc_gpio_dump(unsigned index);
39 39
40extern ssize_t nsc_gpio_write(struct file *file, const char __user *data, 40extern ssize_t nsc_gpio_write(struct file *file, const char __user *data,
41 size_t len, loff_t *ppos); 41 size_t len, loff_t *ppos);
@@ -46,7 +46,7 @@ extern ssize_t nsc_gpio_read(struct file *file, char __user *buf,
46struct nsc_gpio_ops scx200_access = { 46struct nsc_gpio_ops scx200_access = {
47 .owner = THIS_MODULE, 47 .owner = THIS_MODULE,
48 .gpio_config = scx200_gpio_configure, 48 .gpio_config = scx200_gpio_configure,
49 .gpio_dump = scx200_gpio_dump, 49 .gpio_dump = nsc_gpio_dump,
50 .gpio_get = scx200_gpio_get, 50 .gpio_get = scx200_gpio_get,
51 .gpio_set = scx200_gpio_set, 51 .gpio_set = scx200_gpio_set,
52 .gpio_set_high = scx200_gpio_set_high, 52 .gpio_set_high = scx200_gpio_set_high,