[POWERPC] Optionally use new device number for pmac_zilog

This adds the option for the pmac_zilog driver to use the major/minor
numbers recently allocated specifically for it (/dev/ttyPZn) instead
of the /dev/ttySn numbers.  The advantage of doing this is that it
allows the pmac_zilog and 8250 drivers to coexist.  The disadvantage
of doing this is that it is a user-visible ABI change and it will
break existing working setups on powermacs, and could be confusing to
users.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
David Woodhouse 2007-04-05 00:19:43 +10:00 committed by Paul Mackerras
parent c4d5e37547
commit e4533b243e
2 changed files with 40 additions and 5 deletions

View File

@ -986,6 +986,31 @@ config SERIAL_PMACZILOG
PowerMac machines.
Say Y or M if you want to be able to these serial ports.
config SERIAL_PMACZILOG_TTYS
bool "Use ttySn device nodes for Zilog z85c30"
depends on SERIAL_PMACZILOG
help
The pmac_zilog driver for the z85C30 chip on many powermacs
historically used the device numbers for /dev/ttySn. The
8250 serial port driver also uses these numbers, which means
the two drivers being unable to coexist; you could not use
both z85C30 and 8250 type ports at the same time.
If this option is not selected, the pmac_zilog driver will
use the device numbers allocated for /dev/ttyPZn. This allows
the pmac_zilog and 8250 drivers to co-exist, but may cause
existing userspace setups to break. Programs that need to
access the built-in serial ports on powermacs will need to
be reconfigured to use /dev/ttyPZn instead of /dev/ttySn.
If you enable this option, any z85c30 ports in the system will
be registered as ttyS0 onwards as in the past, and you will be
unable to use the 8250 module for PCMCIA or other 16C550-style
UARTs.
Say N unless you need the z85c30 ports on your powermac
to appear as /dev/ttySn.
config SERIAL_PMACZILOG_CONSOLE
bool "Console on PowerMac z85c30 serial port"
depends on SERIAL_PMACZILOG=y

View File

@ -88,6 +88,16 @@ MODULE_LICENSE("GPL");
#define PWRDBG(fmt, arg...) printk(KERN_DEBUG fmt , ## arg)
#ifdef CONFIG_SERIAL_PMACZILOG_TTYS
#define PMACZILOG_MAJOR TTY_MAJOR
#define PMACZILOG_MINOR 64
#define PMACZILOG_NAME "ttyS"
#else
#define PMACZILOG_MAJOR 204
#define PMACZILOG_MINOR 192
#define PMACZILOG_NAME "ttyPZ"
#endif
/*
* For the sake of early serial console, we can do a pre-probe
@ -99,9 +109,10 @@ static DEFINE_MUTEX(pmz_irq_mutex);
static struct uart_driver pmz_uart_reg = {
.owner = THIS_MODULE,
.driver_name = "ttyS",
.dev_name = "ttyS",
.major = TTY_MAJOR,
.driver_name = PMACZILOG_NAME,
.dev_name = PMACZILOG_NAME,
.major = PMACZILOG_MAJOR,
.minor = PMACZILOG_MINOR,
};
@ -1778,7 +1789,7 @@ static void pmz_console_write(struct console *con, const char *s, unsigned int c
static int __init pmz_console_setup(struct console *co, char *options);
static struct console pmz_console = {
.name = "ttyS",
.name = PMACZILOG_NAME,
.write = pmz_console_write,
.device = uart_console_device,
.setup = pmz_console_setup,
@ -1802,7 +1813,6 @@ static int __init pmz_register(void)
pmz_uart_reg.nr = pmz_ports_count;
pmz_uart_reg.cons = PMACZILOG_CONSOLE;
pmz_uart_reg.minor = 64;
/*
* Register this driver with the serial core