|
@@ -672,19 +672,21 @@ static int uart_set_info(struct uart_state *state,
|
|
|
*/
|
|
|
mutex_lock(&state->mutex);
|
|
|
|
|
|
- change_irq = new_serial.irq != port->irq;
|
|
|
+ change_irq = !(port->flags & UPF_FIXED_PORT)
|
|
|
+ && new_serial.irq != port->irq;
|
|
|
|
|
|
/*
|
|
|
* Since changing the 'type' of the port changes its resource
|
|
|
* allocations, we should treat type changes the same as
|
|
|
* IO port changes.
|
|
|
*/
|
|
|
- change_port = new_port != port->iobase ||
|
|
|
- (unsigned long)new_serial.iomem_base != port->mapbase ||
|
|
|
- new_serial.hub6 != port->hub6 ||
|
|
|
- new_serial.io_type != port->iotype ||
|
|
|
- new_serial.iomem_reg_shift != port->regshift ||
|
|
|
- new_serial.type != port->type;
|
|
|
+ change_port = !(port->flags & UPF_FIXED_PORT)
|
|
|
+ && (new_port != port->iobase ||
|
|
|
+ (unsigned long)new_serial.iomem_base != port->mapbase ||
|
|
|
+ new_serial.hub6 != port->hub6 ||
|
|
|
+ new_serial.io_type != port->iotype ||
|
|
|
+ new_serial.iomem_reg_shift != port->regshift ||
|
|
|
+ new_serial.type != port->type);
|
|
|
|
|
|
old_flags = port->flags;
|
|
|
new_flags = new_serial.flags;
|
|
@@ -796,8 +798,10 @@ static int uart_set_info(struct uart_state *state,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- port->irq = new_serial.irq;
|
|
|
- port->uartclk = new_serial.baud_base * 16;
|
|
|
+ if (change_irq)
|
|
|
+ port->irq = new_serial.irq;
|
|
|
+ if (!(port->flags & UPF_FIXED_PORT))
|
|
|
+ port->uartclk = new_serial.baud_base * 16;
|
|
|
port->flags = (port->flags & ~UPF_CHANGE_MASK) |
|
|
|
(new_flags & UPF_CHANGE_MASK);
|
|
|
port->custom_divisor = new_serial.custom_divisor;
|