[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>
This commit is contained in:
parent
1a66fdf083
commit
0e41ef3c51
|
@ -110,21 +110,6 @@ u32 scx200_gpio_configure(unsigned index, u32 mask, u32 bits)
|
|||
return config;
|
||||
}
|
||||
|
||||
void scx200_gpio_dump(unsigned index)
|
||||
{
|
||||
u32 config = scx200_gpio_configure(index, ~0, 0);
|
||||
|
||||
printk(KERN_INFO NAME ": GPIO-%02u: 0x%08lx %s %s %s %s %s %s %s\n",
|
||||
index, (unsigned long) config,
|
||||
(config & 1) ? "OE" : "TS", /* output enabled / tristate */
|
||||
(config & 2) ? "PP" : "OD", /* push pull / open drain */
|
||||
(config & 4) ? "PUE" : "PUD", /* pull up enabled/disabled */
|
||||
(config & 8) ? "LOCKED" : "", /* locked / unlocked */
|
||||
(config & 16) ? "LEVEL" : "EDGE", /* level/edge input */
|
||||
(config & 32) ? "HI" : "LO", /* trigger on rising/falling edge */
|
||||
(config & 64) ? "DEBOUNCE" : ""); /* debounce */
|
||||
}
|
||||
|
||||
static int __init scx200_init(void)
|
||||
{
|
||||
printk(KERN_INFO NAME ": NatSemi SCx200 Driver\n");
|
||||
|
@ -144,5 +129,4 @@ module_exit(scx200_cleanup);
|
|||
EXPORT_SYMBOL(scx200_gpio_base);
|
||||
EXPORT_SYMBOL(scx200_gpio_shadow);
|
||||
EXPORT_SYMBOL(scx200_gpio_configure);
|
||||
EXPORT_SYMBOL(scx200_gpio_dump);
|
||||
EXPORT_SYMBOL(scx200_cb_base);
|
||||
|
|
|
@ -19,6 +19,19 @@
|
|||
|
||||
#define NAME "nsc_gpio"
|
||||
|
||||
void nsc_gpio_dump(unsigned index, u32 config)
|
||||
{
|
||||
printk(KERN_INFO NAME ": GPIO-%02u: 0x%08lx %s %s %s %s %s %s %s\n",
|
||||
index, (unsigned long)config,
|
||||
(config & 1) ? "OE" : "TS", /* output-enabled/tristate */
|
||||
(config & 2) ? "PP" : "OD", /* push pull / open drain */
|
||||
(config & 4) ? "PUE" : "PUD", /* pull up enabled/disabled */
|
||||
(config & 8) ? "LOCKED" : "", /* locked / unlocked */
|
||||
(config & 16) ? "LEVEL" : "EDGE",/* level/edge input */
|
||||
(config & 32) ? "HI" : "LO", /* trigger on rise/fall edge */
|
||||
(config & 64) ? "DEBOUNCE" : ""); /* debounce */
|
||||
}
|
||||
|
||||
ssize_t nsc_gpio_write(struct file *file, const char __user *data,
|
||||
size_t len, loff_t *ppos)
|
||||
{
|
||||
|
@ -99,9 +112,10 @@ ssize_t nsc_gpio_read(struct file *file, char __user * buf,
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* common routines for both scx200_gpio and pc87360_gpio */
|
||||
/* common file-ops routines for both scx200_gpio and pc87360_gpio */
|
||||
EXPORT_SYMBOL(nsc_gpio_write);
|
||||
EXPORT_SYMBOL(nsc_gpio_read);
|
||||
EXPORT_SYMBOL(nsc_gpio_dump);
|
||||
|
||||
static int __init nsc_gpio_init(void)
|
||||
{
|
||||
|
|
|
@ -35,7 +35,7 @@ static int major = 0; /* default to dynamic major */
|
|||
module_param(major, int, 0);
|
||||
MODULE_PARM_DESC(major, "Major device number");
|
||||
|
||||
extern void scx200_gpio_dump(unsigned index);
|
||||
extern void nsc_gpio_dump(unsigned index);
|
||||
|
||||
extern ssize_t nsc_gpio_write(struct file *file, const char __user *data,
|
||||
size_t len, loff_t *ppos);
|
||||
|
@ -46,7 +46,7 @@ extern ssize_t nsc_gpio_read(struct file *file, char __user *buf,
|
|||
struct nsc_gpio_ops scx200_access = {
|
||||
.owner = THIS_MODULE,
|
||||
.gpio_config = scx200_gpio_configure,
|
||||
.gpio_dump = scx200_gpio_dump,
|
||||
.gpio_dump = nsc_gpio_dump,
|
||||
.gpio_get = scx200_gpio_get,
|
||||
.gpio_set = scx200_gpio_set,
|
||||
.gpio_set_high = scx200_gpio_set_high,
|
||||
|
|
Loading…
Reference in New Issue