aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/serial/of_serial.c3
-rw-r--r--drivers/serial/serial_core.c22
2 files changed, 15 insertions, 10 deletions
diff --git a/drivers/serial/of_serial.c b/drivers/serial/of_serial.c
index 09b0b736a751..336d0f4580d9 100644
--- a/drivers/serial/of_serial.c
+++ b/drivers/serial/of_serial.c
@@ -48,7 +48,8 @@ static int __devinit of_platform_serial_setup(struct of_device *ofdev,
48 port->iotype = UPIO_MEM; 48 port->iotype = UPIO_MEM;
49 port->type = type; 49 port->type = type;
50 port->uartclk = *clk; 50 port->uartclk = *clk;
51 port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP; 51 port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP
52 | UPF_FIXED_PORT;
52 port->dev = &ofdev->dev; 53 port->dev = &ofdev->dev;
53 port->custom_divisor = *clk / (16 * (*spd)); 54 port->custom_divisor = *clk / (16 * (*spd));
54 55
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
index a677133ab2d4..f409be37b62f 100644
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -672,19 +672,21 @@ static int uart_set_info(struct uart_state *state,
672 */ 672 */
673 mutex_lock(&state->mutex); 673 mutex_lock(&state->mutex);
674 674
675 change_irq = new_serial.irq != port->irq; 675 change_irq = !(port->flags & UPF_FIXED_PORT)
676 && new_serial.irq != port->irq;
676 677
677 /* 678 /*
678 * Since changing the 'type' of the port changes its resource 679 * Since changing the 'type' of the port changes its resource
679 * allocations, we should treat type changes the same as 680 * allocations, we should treat type changes the same as
680 * IO port changes. 681 * IO port changes.
681 */ 682 */
682 change_port = new_port != port->iobase || 683 change_port = !(port->flags & UPF_FIXED_PORT)
683 (unsigned long)new_serial.iomem_base != port->mapbase || 684 && (new_port != port->iobase ||
684 new_serial.hub6 != port->hub6 || 685 (unsigned long)new_serial.iomem_base != port->mapbase ||
685 new_serial.io_type != port->iotype || 686 new_serial.hub6 != port->hub6 ||
686 new_serial.iomem_reg_shift != port->regshift || 687 new_serial.io_type != port->iotype ||
687 new_serial.type != port->type; 688 new_serial.iomem_reg_shift != port->regshift ||
689 new_serial.type != port->type);
688 690
689 old_flags = port->flags; 691 old_flags = port->flags;
690 new_flags = new_serial.flags; 692 new_flags = new_serial.flags;
@@ -796,8 +798,10 @@ static int uart_set_info(struct uart_state *state,
796 } 798 }
797 } 799 }
798 800
799 port->irq = new_serial.irq; 801 if (change_irq)
800 port->uartclk = new_serial.baud_base * 16; 802 port->irq = new_serial.irq;
803 if (!(port->flags & UPF_FIXED_PORT))
804 port->uartclk = new_serial.baud_base * 16;
801 port->flags = (port->flags & ~UPF_CHANGE_MASK) | 805 port->flags = (port->flags & ~UPF_CHANGE_MASK) |
802 (new_flags & UPF_CHANGE_MASK); 806 (new_flags & UPF_CHANGE_MASK);
803 port->custom_divisor = new_serial.custom_divisor; 807 port->custom_divisor = new_serial.custom_divisor;