diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-09-14 08:19:08 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-09-14 08:19:08 -0400 |
commit | 905ec87e93bc9e01b15c60035cd6a50c636cbaef (patch) | |
tree | 46fd7618d6511611ffc19eb0dd4d7bc6b90a41c2 /drivers/serial | |
parent | 1d6ae775d7a948c9575658eb41184fd2e506c0df (diff) | |
parent | 2f4ba45a75d6383b4a1201169a808ffea416ffa0 (diff) |
Merge /spare/repo/linux-2.6/
Diffstat (limited to 'drivers/serial')
-rw-r--r-- | drivers/serial/8250.c | 4 | ||||
-rw-r--r-- | drivers/serial/8250_accent.c | 2 | ||||
-rw-r--r-- | drivers/serial/8250_acpi.c | 20 | ||||
-rw-r--r-- | drivers/serial/8250_boca.c | 2 | ||||
-rw-r--r-- | drivers/serial/8250_fourport.c | 2 | ||||
-rw-r--r-- | drivers/serial/8250_hub6.c | 2 | ||||
-rw-r--r-- | drivers/serial/8250_mca.c | 2 | ||||
-rw-r--r-- | drivers/serial/Kconfig | 2 | ||||
-rw-r--r-- | drivers/serial/mcfserial.c | 13 | ||||
-rw-r--r-- | drivers/serial/serial_txx9.c | 118 |
10 files changed, 124 insertions, 43 deletions
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index 30a0a3d10145..4d75cdfa0a0a 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c | |||
@@ -864,7 +864,7 @@ static void autoconfig(struct uart_8250_port *up, unsigned int probeflags) | |||
864 | /* | 864 | /* |
865 | * We're pretty sure there's a port here. Lets find out what | 865 | * We're pretty sure there's a port here. Lets find out what |
866 | * type of port it is. The IIR top two bits allows us to find | 866 | * type of port it is. The IIR top two bits allows us to find |
867 | * out if its 8250 or 16450, 16550, 16550A or later. This | 867 | * out if it's 8250 or 16450, 16550, 16550A or later. This |
868 | * determines what we test for next. | 868 | * determines what we test for next. |
869 | * | 869 | * |
870 | * We also initialise the EFR (if any) to zero for later. The | 870 | * We also initialise the EFR (if any) to zero for later. The |
@@ -2536,7 +2536,7 @@ static int __init serial8250_init(void) | |||
2536 | goto out; | 2536 | goto out; |
2537 | 2537 | ||
2538 | serial8250_isa_devs = platform_device_register_simple("serial8250", | 2538 | serial8250_isa_devs = platform_device_register_simple("serial8250", |
2539 | -1, NULL, 0); | 2539 | PLAT8250_DEV_LEGACY, NULL, 0); |
2540 | if (IS_ERR(serial8250_isa_devs)) { | 2540 | if (IS_ERR(serial8250_isa_devs)) { |
2541 | ret = PTR_ERR(serial8250_isa_devs); | 2541 | ret = PTR_ERR(serial8250_isa_devs); |
2542 | goto unreg; | 2542 | goto unreg; |
diff --git a/drivers/serial/8250_accent.c b/drivers/serial/8250_accent.c index 1f2c276063ef..9c10262f2469 100644 --- a/drivers/serial/8250_accent.c +++ b/drivers/serial/8250_accent.c | |||
@@ -29,7 +29,7 @@ static struct plat_serial8250_port accent_data[] = { | |||
29 | 29 | ||
30 | static struct platform_device accent_device = { | 30 | static struct platform_device accent_device = { |
31 | .name = "serial8250", | 31 | .name = "serial8250", |
32 | .id = 2, | 32 | .id = PLAT8250_DEV_ACCENT, |
33 | .dev = { | 33 | .dev = { |
34 | .platform_data = accent_data, | 34 | .platform_data = accent_data, |
35 | }, | 35 | }, |
diff --git a/drivers/serial/8250_acpi.c b/drivers/serial/8250_acpi.c index 6b9ead288517..a802bdce6e5d 100644 --- a/drivers/serial/8250_acpi.c +++ b/drivers/serial/8250_acpi.c | |||
@@ -47,18 +47,30 @@ static acpi_status acpi_serial_port(struct uart_port *port, | |||
47 | static acpi_status acpi_serial_ext_irq(struct uart_port *port, | 47 | static acpi_status acpi_serial_ext_irq(struct uart_port *port, |
48 | struct acpi_resource_ext_irq *ext_irq) | 48 | struct acpi_resource_ext_irq *ext_irq) |
49 | { | 49 | { |
50 | if (ext_irq->number_of_interrupts > 0) | 50 | int rc; |
51 | port->irq = acpi_register_gsi(ext_irq->interrupts[0], | 51 | |
52 | if (ext_irq->number_of_interrupts > 0) { | ||
53 | rc = acpi_register_gsi(ext_irq->interrupts[0], | ||
52 | ext_irq->edge_level, ext_irq->active_high_low); | 54 | ext_irq->edge_level, ext_irq->active_high_low); |
55 | if (rc < 0) | ||
56 | return AE_ERROR; | ||
57 | port->irq = rc; | ||
58 | } | ||
53 | return AE_OK; | 59 | return AE_OK; |
54 | } | 60 | } |
55 | 61 | ||
56 | static acpi_status acpi_serial_irq(struct uart_port *port, | 62 | static acpi_status acpi_serial_irq(struct uart_port *port, |
57 | struct acpi_resource_irq *irq) | 63 | struct acpi_resource_irq *irq) |
58 | { | 64 | { |
59 | if (irq->number_of_interrupts > 0) | 65 | int rc; |
60 | port->irq = acpi_register_gsi(irq->interrupts[0], | 66 | |
67 | if (irq->number_of_interrupts > 0) { | ||
68 | rc = acpi_register_gsi(irq->interrupts[0], | ||
61 | irq->edge_level, irq->active_high_low); | 69 | irq->edge_level, irq->active_high_low); |
70 | if (rc < 0) | ||
71 | return AE_ERROR; | ||
72 | port->irq = rc; | ||
73 | } | ||
62 | return AE_OK; | 74 | return AE_OK; |
63 | } | 75 | } |
64 | 76 | ||
diff --git a/drivers/serial/8250_boca.c b/drivers/serial/8250_boca.c index 465c9ea1e7a3..3bfe0f7b26fb 100644 --- a/drivers/serial/8250_boca.c +++ b/drivers/serial/8250_boca.c | |||
@@ -43,7 +43,7 @@ static struct plat_serial8250_port boca_data[] = { | |||
43 | 43 | ||
44 | static struct platform_device boca_device = { | 44 | static struct platform_device boca_device = { |
45 | .name = "serial8250", | 45 | .name = "serial8250", |
46 | .id = 3, | 46 | .id = PLAT8250_DEV_BOCA, |
47 | .dev = { | 47 | .dev = { |
48 | .platform_data = boca_data, | 48 | .platform_data = boca_data, |
49 | }, | 49 | }, |
diff --git a/drivers/serial/8250_fourport.c b/drivers/serial/8250_fourport.c index e9b4d908ef42..6375d68b7913 100644 --- a/drivers/serial/8250_fourport.c +++ b/drivers/serial/8250_fourport.c | |||
@@ -35,7 +35,7 @@ static struct plat_serial8250_port fourport_data[] = { | |||
35 | 35 | ||
36 | static struct platform_device fourport_device = { | 36 | static struct platform_device fourport_device = { |
37 | .name = "serial8250", | 37 | .name = "serial8250", |
38 | .id = 1, | 38 | .id = PLAT8250_DEV_FOURPORT, |
39 | .dev = { | 39 | .dev = { |
40 | .platform_data = fourport_data, | 40 | .platform_data = fourport_data, |
41 | }, | 41 | }, |
diff --git a/drivers/serial/8250_hub6.c b/drivers/serial/8250_hub6.c index 77f396f84b4c..daf569cd3c8f 100644 --- a/drivers/serial/8250_hub6.c +++ b/drivers/serial/8250_hub6.c | |||
@@ -40,7 +40,7 @@ static struct plat_serial8250_port hub6_data[] = { | |||
40 | 40 | ||
41 | static struct platform_device hub6_device = { | 41 | static struct platform_device hub6_device = { |
42 | .name = "serial8250", | 42 | .name = "serial8250", |
43 | .id = 4, | 43 | .id = PLAT8250_DEV_HUB6, |
44 | .dev = { | 44 | .dev = { |
45 | .platform_data = hub6_data, | 45 | .platform_data = hub6_data, |
46 | }, | 46 | }, |
diff --git a/drivers/serial/8250_mca.c b/drivers/serial/8250_mca.c index f0c40d68b8c1..ac205256d5f3 100644 --- a/drivers/serial/8250_mca.c +++ b/drivers/serial/8250_mca.c | |||
@@ -44,7 +44,7 @@ static struct plat_serial8250_port mca_data[] = { | |||
44 | 44 | ||
45 | static struct platform_device mca_device = { | 45 | static struct platform_device mca_device = { |
46 | .name = "serial8250", | 46 | .name = "serial8250", |
47 | .id = 5, | 47 | .id = PLAT8250_DEV_MCA, |
48 | .dev = { | 48 | .dev = { |
49 | .platform_data = mca_data, | 49 | .platform_data = mca_data, |
50 | }, | 50 | }, |
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index e39818a34a07..b745a1b9e835 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig | |||
@@ -80,7 +80,7 @@ config SERIAL_8250_CS | |||
80 | config SERIAL_8250_ACPI | 80 | config SERIAL_8250_ACPI |
81 | bool "8250/16550 device discovery via ACPI namespace" | 81 | bool "8250/16550 device discovery via ACPI namespace" |
82 | default y if IA64 | 82 | default y if IA64 |
83 | depends on ACPI_BUS && SERIAL_8250 | 83 | depends on ACPI && SERIAL_8250 |
84 | ---help--- | 84 | ---help--- |
85 | If you wish to enable serial port discovery via the ACPI | 85 | If you wish to enable serial port discovery via the ACPI |
86 | namespace, say Y here. If unsure, say N. | 86 | namespace, say Y here. If unsure, say N. |
diff --git a/drivers/serial/mcfserial.c b/drivers/serial/mcfserial.c index 43b03c55f453..e2ebdcad553c 100644 --- a/drivers/serial/mcfserial.c +++ b/drivers/serial/mcfserial.c | |||
@@ -63,8 +63,13 @@ struct timer_list mcfrs_timer_struct; | |||
63 | #endif | 63 | #endif |
64 | 64 | ||
65 | #if defined(CONFIG_HW_FEITH) | 65 | #if defined(CONFIG_HW_FEITH) |
66 | #define CONSOLE_BAUD_RATE 38400 | 66 | #define CONSOLE_BAUD_RATE 38400 |
67 | #define DEFAULT_CBAUD B38400 | 67 | #define DEFAULT_CBAUD B38400 |
68 | #endif | ||
69 | |||
70 | #if defined(CONFIG_MOD5272) | ||
71 | #define CONSOLE_BAUD_RATE 115200 | ||
72 | #define DEFAULT_CBAUD B115200 | ||
68 | #endif | 73 | #endif |
69 | 74 | ||
70 | #ifndef CONSOLE_BAUD_RATE | 75 | #ifndef CONSOLE_BAUD_RATE |
@@ -90,7 +95,7 @@ static struct tty_driver *mcfrs_serial_driver; | |||
90 | #undef SERIAL_DEBUG_OPEN | 95 | #undef SERIAL_DEBUG_OPEN |
91 | #undef SERIAL_DEBUG_FLOW | 96 | #undef SERIAL_DEBUG_FLOW |
92 | 97 | ||
93 | #if defined(CONFIG_M527x) || defined(CONFIG_M528x) | 98 | #if defined(CONFIG_M523x) || defined(CONFIG_M527x) || defined(CONFIG_M528x) |
94 | #define IRQBASE (MCFINT_VECBASE+MCFINT_UART0) | 99 | #define IRQBASE (MCFINT_VECBASE+MCFINT_UART0) |
95 | #else | 100 | #else |
96 | #define IRQBASE 73 | 101 | #define IRQBASE 73 |
@@ -1510,7 +1515,7 @@ static void mcfrs_irqinit(struct mcf_serial *info) | |||
1510 | *portp = (*portp & ~0x000000ff) | 0x00000055; | 1515 | *portp = (*portp & ~0x000000ff) | 0x00000055; |
1511 | portp = (volatile unsigned long *) (MCF_MBAR + MCFSIM_PDCNT); | 1516 | portp = (volatile unsigned long *) (MCF_MBAR + MCFSIM_PDCNT); |
1512 | *portp = (*portp & ~0x000003fc) | 0x000002a8; | 1517 | *portp = (*portp & ~0x000003fc) | 0x000002a8; |
1513 | #elif defined(CONFIG_M527x) || defined(CONFIG_M528x) | 1518 | #elif defined(CONFIG_M523x) || defined(CONFIG_M527x) || defined(CONFIG_M528x) |
1514 | volatile unsigned char *icrp, *uartp; | 1519 | volatile unsigned char *icrp, *uartp; |
1515 | volatile unsigned long *imrp; | 1520 | volatile unsigned long *imrp; |
1516 | 1521 | ||
diff --git a/drivers/serial/serial_txx9.c b/drivers/serial/serial_txx9.c index 49afadbe461b..f10c86d60b64 100644 --- a/drivers/serial/serial_txx9.c +++ b/drivers/serial/serial_txx9.c | |||
@@ -31,6 +31,8 @@ | |||
31 | * 1.01 Set fifosize to make tx_empry called properly. | 31 | * 1.01 Set fifosize to make tx_empry called properly. |
32 | * Use standard uart_get_divisor. | 32 | * Use standard uart_get_divisor. |
33 | * 1.02 Cleanup. (import 8250.c changes) | 33 | * 1.02 Cleanup. (import 8250.c changes) |
34 | * 1.03 Fix low-latency mode. (import 8250.c changes) | ||
35 | * 1.04 Remove usage of deprecated functions, cleanup. | ||
34 | */ | 36 | */ |
35 | #include <linux/config.h> | 37 | #include <linux/config.h> |
36 | 38 | ||
@@ -54,7 +56,7 @@ | |||
54 | #include <asm/io.h> | 56 | #include <asm/io.h> |
55 | #include <asm/irq.h> | 57 | #include <asm/irq.h> |
56 | 58 | ||
57 | static char *serial_version = "1.02"; | 59 | static char *serial_version = "1.04"; |
58 | static char *serial_name = "TX39/49 Serial driver"; | 60 | static char *serial_name = "TX39/49 Serial driver"; |
59 | 61 | ||
60 | #define PASS_LIMIT 256 | 62 | #define PASS_LIMIT 256 |
@@ -86,9 +88,9 @@ static char *serial_name = "TX39/49 Serial driver"; | |||
86 | */ | 88 | */ |
87 | #ifdef ENABLE_SERIAL_TXX9_PCI | 89 | #ifdef ENABLE_SERIAL_TXX9_PCI |
88 | #define NR_PCI_BOARDS 4 | 90 | #define NR_PCI_BOARDS 4 |
89 | #define UART_NR (2 + NR_PCI_BOARDS) | 91 | #define UART_NR (4 + NR_PCI_BOARDS) |
90 | #else | 92 | #else |
91 | #define UART_NR 2 | 93 | #define UART_NR 4 |
92 | #endif | 94 | #endif |
93 | 95 | ||
94 | struct uart_txx9_port { | 96 | struct uart_txx9_port { |
@@ -304,8 +306,11 @@ receive_chars(struct uart_txx9_port *up, unsigned int *status, struct pt_regs *r | |||
304 | /* The following is not allowed by the tty layer and | 306 | /* The following is not allowed by the tty layer and |
305 | unsafe. It should be fixed ASAP */ | 307 | unsafe. It should be fixed ASAP */ |
306 | if (unlikely(tty->flip.count >= TTY_FLIPBUF_SIZE)) { | 308 | if (unlikely(tty->flip.count >= TTY_FLIPBUF_SIZE)) { |
307 | if(tty->low_latency) | 309 | if (tty->low_latency) { |
310 | spin_unlock(&up->port.lock); | ||
308 | tty_flip_buffer_push(tty); | 311 | tty_flip_buffer_push(tty); |
312 | spin_lock(&up->port.lock); | ||
313 | } | ||
309 | /* If this failed then we will throw away the | 314 | /* If this failed then we will throw away the |
310 | bytes but must do so to clear interrupts */ | 315 | bytes but must do so to clear interrupts */ |
311 | } | 316 | } |
@@ -356,7 +361,9 @@ receive_chars(struct uart_txx9_port *up, unsigned int *status, struct pt_regs *r | |||
356 | ignore_char: | 361 | ignore_char: |
357 | disr = sio_in(up, TXX9_SIDISR); | 362 | disr = sio_in(up, TXX9_SIDISR); |
358 | } while (!(disr & TXX9_SIDISR_UVALID) && (max_count-- > 0)); | 363 | } while (!(disr & TXX9_SIDISR_UVALID) && (max_count-- > 0)); |
364 | spin_unlock(&up->port.lock); | ||
359 | tty_flip_buffer_push(tty); | 365 | tty_flip_buffer_push(tty); |
366 | spin_lock(&up->port.lock); | ||
360 | *status = disr; | 367 | *status = disr; |
361 | } | 368 | } |
362 | 369 | ||
@@ -667,17 +674,8 @@ serial_txx9_pm(struct uart_port *port, unsigned int state, | |||
667 | unsigned int oldstate) | 674 | unsigned int oldstate) |
668 | { | 675 | { |
669 | struct uart_txx9_port *up = (struct uart_txx9_port *)port; | 676 | struct uart_txx9_port *up = (struct uart_txx9_port *)port; |
670 | if (state) { | 677 | if (up->pm) |
671 | /* sleep */ | 678 | up->pm(port, state, oldstate); |
672 | |||
673 | if (up->pm) | ||
674 | up->pm(port, state, oldstate); | ||
675 | } else { | ||
676 | /* wake */ | ||
677 | |||
678 | if (up->pm) | ||
679 | up->pm(port, state, oldstate); | ||
680 | } | ||
681 | } | 679 | } |
682 | 680 | ||
683 | static int serial_txx9_request_resource(struct uart_txx9_port *up) | 681 | static int serial_txx9_request_resource(struct uart_txx9_port *up) |
@@ -979,14 +977,6 @@ static int __init serial_txx9_console_init(void) | |||
979 | } | 977 | } |
980 | console_initcall(serial_txx9_console_init); | 978 | console_initcall(serial_txx9_console_init); |
981 | 979 | ||
982 | static int __init serial_txx9_late_console_init(void) | ||
983 | { | ||
984 | if (!(serial_txx9_console.flags & CON_ENABLED)) | ||
985 | register_console(&serial_txx9_console); | ||
986 | return 0; | ||
987 | } | ||
988 | late_initcall(serial_txx9_late_console_init); | ||
989 | |||
990 | #define SERIAL_TXX9_CONSOLE &serial_txx9_console | 980 | #define SERIAL_TXX9_CONSOLE &serial_txx9_console |
991 | #else | 981 | #else |
992 | #define SERIAL_TXX9_CONSOLE NULL | 982 | #define SERIAL_TXX9_CONSOLE NULL |
@@ -1039,6 +1029,73 @@ static void serial_txx9_resume_port(int line) | |||
1039 | uart_resume_port(&serial_txx9_reg, &serial_txx9_ports[line].port); | 1029 | uart_resume_port(&serial_txx9_reg, &serial_txx9_ports[line].port); |
1040 | } | 1030 | } |
1041 | 1031 | ||
1032 | static DECLARE_MUTEX(serial_txx9_sem); | ||
1033 | |||
1034 | /** | ||
1035 | * serial_txx9_register_port - register a serial port | ||
1036 | * @port: serial port template | ||
1037 | * | ||
1038 | * Configure the serial port specified by the request. | ||
1039 | * | ||
1040 | * The port is then probed and if necessary the IRQ is autodetected | ||
1041 | * If this fails an error is returned. | ||
1042 | * | ||
1043 | * On success the port is ready to use and the line number is returned. | ||
1044 | */ | ||
1045 | static int __devinit serial_txx9_register_port(struct uart_port *port) | ||
1046 | { | ||
1047 | int i; | ||
1048 | struct uart_txx9_port *uart; | ||
1049 | int ret = -ENOSPC; | ||
1050 | |||
1051 | down(&serial_txx9_sem); | ||
1052 | for (i = 0; i < UART_NR; i++) { | ||
1053 | uart = &serial_txx9_ports[i]; | ||
1054 | if (uart->port.type == PORT_UNKNOWN) | ||
1055 | break; | ||
1056 | } | ||
1057 | if (i < UART_NR) { | ||
1058 | uart_remove_one_port(&serial_txx9_reg, &uart->port); | ||
1059 | uart->port.iobase = port->iobase; | ||
1060 | uart->port.membase = port->membase; | ||
1061 | uart->port.irq = port->irq; | ||
1062 | uart->port.uartclk = port->uartclk; | ||
1063 | uart->port.iotype = port->iotype; | ||
1064 | uart->port.flags = port->flags | UPF_BOOT_AUTOCONF; | ||
1065 | uart->port.mapbase = port->mapbase; | ||
1066 | if (port->dev) | ||
1067 | uart->port.dev = port->dev; | ||
1068 | ret = uart_add_one_port(&serial_txx9_reg, &uart->port); | ||
1069 | if (ret == 0) | ||
1070 | ret = uart->port.line; | ||
1071 | } | ||
1072 | up(&serial_txx9_sem); | ||
1073 | return ret; | ||
1074 | } | ||
1075 | |||
1076 | /** | ||
1077 | * serial_txx9_unregister_port - remove a txx9 serial port at runtime | ||
1078 | * @line: serial line number | ||
1079 | * | ||
1080 | * Remove one serial port. This may not be called from interrupt | ||
1081 | * context. We hand the port back to the our control. | ||
1082 | */ | ||
1083 | static void __devexit serial_txx9_unregister_port(int line) | ||
1084 | { | ||
1085 | struct uart_txx9_port *uart = &serial_txx9_ports[line]; | ||
1086 | |||
1087 | down(&serial_txx9_sem); | ||
1088 | uart_remove_one_port(&serial_txx9_reg, &uart->port); | ||
1089 | uart->port.flags = 0; | ||
1090 | uart->port.type = PORT_UNKNOWN; | ||
1091 | uart->port.iobase = 0; | ||
1092 | uart->port.mapbase = 0; | ||
1093 | uart->port.membase = 0; | ||
1094 | uart->port.dev = NULL; | ||
1095 | uart_add_one_port(&serial_txx9_reg, &uart->port); | ||
1096 | up(&serial_txx9_sem); | ||
1097 | } | ||
1098 | |||
1042 | /* | 1099 | /* |
1043 | * Probe one serial board. Unfortunately, there is no rhyme nor reason | 1100 | * Probe one serial board. Unfortunately, there is no rhyme nor reason |
1044 | * to the arrangement of serial ports on a PCI card. | 1101 | * to the arrangement of serial ports on a PCI card. |
@@ -1056,13 +1113,13 @@ pciserial_txx9_init_one(struct pci_dev *dev, const struct pci_device_id *ent) | |||
1056 | 1113 | ||
1057 | memset(&port, 0, sizeof(port)); | 1114 | memset(&port, 0, sizeof(port)); |
1058 | port.ops = &serial_txx9_pops; | 1115 | port.ops = &serial_txx9_pops; |
1059 | port.flags |= UPF_BOOT_AUTOCONF; /* uart_ops.config_port will be called */ | ||
1060 | port.flags |= UPF_TXX9_HAVE_CTS_LINE; | 1116 | port.flags |= UPF_TXX9_HAVE_CTS_LINE; |
1061 | port.uartclk = 66670000; | 1117 | port.uartclk = 66670000; |
1062 | port.irq = dev->irq; | 1118 | port.irq = dev->irq; |
1063 | port.iotype = UPIO_PORT; | 1119 | port.iotype = UPIO_PORT; |
1064 | port.iobase = pci_resource_start(dev, 1); | 1120 | port.iobase = pci_resource_start(dev, 1); |
1065 | line = uart_register_port(&serial_txx9_reg, &port); | 1121 | port.dev = &dev->dev; |
1122 | line = serial_txx9_register_port(&port); | ||
1066 | if (line < 0) { | 1123 | if (line < 0) { |
1067 | printk(KERN_WARNING "Couldn't register serial port %s: %d\n", pci_name(dev), line); | 1124 | printk(KERN_WARNING "Couldn't register serial port %s: %d\n", pci_name(dev), line); |
1068 | } | 1125 | } |
@@ -1078,7 +1135,7 @@ static void __devexit pciserial_txx9_remove_one(struct pci_dev *dev) | |||
1078 | pci_set_drvdata(dev, NULL); | 1135 | pci_set_drvdata(dev, NULL); |
1079 | 1136 | ||
1080 | if (line) { | 1137 | if (line) { |
1081 | uart_unregister_port(&serial_txx9_reg, line); | 1138 | serial_txx9_unregister_port(line); |
1082 | pci_disable_device(dev); | 1139 | pci_disable_device(dev); |
1083 | } | 1140 | } |
1084 | } | 1141 | } |
@@ -1089,6 +1146,8 @@ static int pciserial_txx9_suspend_one(struct pci_dev *dev, pm_message_t state) | |||
1089 | 1146 | ||
1090 | if (line) | 1147 | if (line) |
1091 | serial_txx9_suspend_port(line); | 1148 | serial_txx9_suspend_port(line); |
1149 | pci_save_state(dev); | ||
1150 | pci_set_power_state(dev, pci_choose_state(dev, state)); | ||
1092 | return 0; | 1151 | return 0; |
1093 | } | 1152 | } |
1094 | 1153 | ||
@@ -1096,8 +1155,13 @@ static int pciserial_txx9_resume_one(struct pci_dev *dev) | |||
1096 | { | 1155 | { |
1097 | int line = (int)(long)pci_get_drvdata(dev); | 1156 | int line = (int)(long)pci_get_drvdata(dev); |
1098 | 1157 | ||
1099 | if (line) | 1158 | pci_set_power_state(dev, PCI_D0); |
1159 | pci_restore_state(dev); | ||
1160 | |||
1161 | if (line) { | ||
1162 | pci_enable_device(dev); | ||
1100 | serial_txx9_resume_port(line); | 1163 | serial_txx9_resume_port(line); |
1164 | } | ||
1101 | return 0; | 1165 | return 0; |
1102 | } | 1166 | } |
1103 | 1167 | ||