Lines Matching +full:uart +full:- +full:16550 +full:- +full:compatible

1 // SPDX-License-Identifier: GPL-2.0
16 * IP Cores Z025 and Z057 can have up to 4 UART
22 * +------+-------+-------+-------+-------+-------+-------+-------+
24 * +------+-------+-------+-------+-------+-------+-------+-------+
54 * The Z125 16550-compatible UART has no fixed base clock assigned
64 dev_info(&mdev->dev, "%s on board %s\n", in men_lookup_uartclk()
65 dev_name(&mdev->dev), in men_lookup_uartclk()
66 mdev->bus->name); in men_lookup_uartclk()
67 if (strncmp(mdev->bus->name, "F075", 4) == 0) in men_lookup_uartclk()
69 else if (strncmp(mdev->bus->name, "F216", 4) == 0) in men_lookup_uartclk()
71 else if (strncmp(mdev->bus->name, "F210", 4) == 0) in men_lookup_uartclk()
73 else if (strstr(mdev->bus->name, "215")) in men_lookup_uartclk()
76 dev_info(&mdev->dev, in men_lookup_uartclk()
90 if (!request_mem_region(mem_res->start + MEN_Z025_REGISTER_OFFSET, in read_uarts_available_from_register()
92 return -EBUSY; in read_uarts_available_from_register()
95 mem = ioremap(mem_res->start + MEN_Z025_REGISTER_OFFSET, in read_uarts_available_from_register()
98 release_mem_region(mem_res->start + MEN_Z025_REGISTER_OFFSET, in read_uarts_available_from_register()
100 return -ENOMEM; in read_uarts_available_from_register()
107 release_mem_region(mem_res->start + MEN_Z025_REGISTER_OFFSET, in read_uarts_available_from_register()
133 serial_data->offset[count] = MEN_UART1_OFFSET; in read_serial_data()
137 serial_data->offset[count] = MEN_UART2_OFFSET; in read_serial_data()
141 serial_data->offset[count] = MEN_UART3_OFFSET; in read_serial_data()
145 serial_data->offset[count] = MEN_UART4_OFFSET; in read_serial_data()
149 return -EINVAL; in read_serial_data()
154 dev_err(&mdev->dev, "unexpected number of ports: %u\n", in read_serial_data()
156 return -ENODEV; in read_serial_data()
159 serial_data->num_ports = count; in read_serial_data()
168 switch (mdev->id) { in init_serial_data()
170 serial_data->num_ports = 1; in init_serial_data()
171 serial_data->offset[0] = 0; in init_serial_data()
177 dev_err(&mdev->dev, "no supported device!\n"); in init_serial_data()
178 return -ENODEV; in init_serial_data()
185 struct uart_8250_port uart; in serial_8250_men_mcb_probe() local
193 return -ENXIO; in serial_8250_men_mcb_probe()
195 data = devm_kzalloc(&mdev->dev, in serial_8250_men_mcb_probe()
199 return -ENOMEM; in serial_8250_men_mcb_probe()
205 dev_dbg(&mdev->dev, "found a 16z%03u with %u ports\n", in serial_8250_men_mcb_probe()
206 mdev->id, data->num_ports); in serial_8250_men_mcb_probe()
210 for (i = 0; i < data->num_ports; i++) { in serial_8250_men_mcb_probe()
211 memset(&uart, 0, sizeof(struct uart_8250_port)); in serial_8250_men_mcb_probe()
212 spin_lock_init(&uart.port.lock); in serial_8250_men_mcb_probe()
214 uart.port.flags = UPF_SKIP_TEST | in serial_8250_men_mcb_probe()
218 uart.port.iotype = UPIO_MEM; in serial_8250_men_mcb_probe()
219 uart.port.uartclk = men_lookup_uartclk(mdev); in serial_8250_men_mcb_probe()
220 uart.port.irq = mcb_get_irq(mdev); in serial_8250_men_mcb_probe()
221 uart.port.mapbase = (unsigned long) mem->start in serial_8250_men_mcb_probe()
222 + data->offset[i]; in serial_8250_men_mcb_probe()
225 res = serial8250_register_8250_port(&uart); in serial_8250_men_mcb_probe()
227 dev_err(&mdev->dev, "unable to register UART port\n"); in serial_8250_men_mcb_probe()
231 data->line[i] = res; in serial_8250_men_mcb_probe()
232 dev_info(&mdev->dev, "found MCB UART: ttyS%d\n", data->line[i]); in serial_8250_men_mcb_probe()
246 for (i = 0; i < data->num_ports; i++) in serial_8250_men_mcb_remove()
247 serial8250_unregister_port(data->line[i]); in serial_8250_men_mcb_remove()
269 MODULE_DESCRIPTION("MEN 8250 UART driver");