On Wed, 2007-04-04 at 16:31 +1000, Paul Mackerras wrote: > It seems Debian has both 8250 and pmac_zilog built in; not sure which > one wins. Ubuntu has them both as modules and managed to get the > right one (pmac_zilog) loaded on a colleague's powerbook.
So if you insert a PCMCIA card with an 8250-compatible port in it -- like a Bluetooth card or modem -- you won't get it to work, right? > You'd know better than me what FC does. Fedora has 8250 built in, which means pmac_zilog can never get loaded. > In any case there definitely are people using pmac_zilog successfully > on powermacs and we need to come up with a way to avoid breaking their > setups. I'm prepared to accept that the Linux way is to be lame about > serial port naming provided that we avoid breaking existing working > setups. OK, how about a config option to preserve the old behaviour... Signed-off-by: David Woodhouse <[EMAIL PROTECTED]> diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index ad9f321..09b2dd4 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -753,6 +753,25 @@ 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 z85C30 driver historically used the device nodes which + are registed to the 8250 serial port driver, which led to the + two drivers being unable to coexist; you could not use both + z85C30 and 8250 type ports at the same time. + + The z83C30 driver was fixed to prevent this abuse by default, + but this configuration option remains in order to allow backward + compatibility by reverting to the old misbehaviour. + + If you enable this option, any z85c30 ports in the system will + be registered as ttyS0 onwards, and you will be unable to use + the 8250 module for PCMCIA or other standard UARTs. + + Say N. + config SERIAL_PMACZILOG_CONSOLE bool "Console on PowerMac z85c30 serial port" depends on SERIAL_PMACZILOG=y diff --git a/drivers/serial/pmac_zilog.c b/drivers/serial/pmac_zilog.c index 752ef07..28269bb 100644 --- a/drivers/serial/pmac_zilog.c +++ b/drivers/serial/pmac_zilog.c @@ -88,9 +88,19 @@ 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 + * FOR the sake of early serial console, we can do a pre-probe * (optional) of the ports at rather early boot time. */ static struct uart_pmac_port pmz_ports[MAX_ZS_PORTS]; @@ -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, }; @@ -1776,7 +1787,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, @@ -1800,7 +1811,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 -- dwmw2 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/