forked from Minki/linux
4793f2ebff
Now that the SPDX tag is in all tty files, that identifies the license in a specific and legally-defined manner. So the extra GPL text wording can be removed as it is no longer needed at all. This is done on a quest to remove the 700+ different ways that files in the kernel describe the GPL license text. And there's unneeded stuff like the address (sometimes incorrect) for the FSF which is never needed. No copyright headers or other non-license-description text was removed. Cc: Jiri Slaby <jslaby@suse.com> Cc: Eric Anholt <eric@anholt.net> Cc: Stefan Wahren <stefan.wahren@i2se.com> Cc: Florian Fainelli <f.fainelli@gmail.com> Cc: Ray Jui <rjui@broadcom.com> Cc: Scott Branden <sbranden@broadcom.com> Cc: bcm-kernel-feedback-list@broadcom.com Cc: "James E.J. Bottomley" <jejb@parisc-linux.org> Cc: Helge Deller <deller@gmx.de> Cc: Joachim Eastwood <manabian@gmail.com> Cc: Matthias Brugger <matthias.bgg@gmail.com> Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: Tobias Klauser <tklauser@distanz.ch> Cc: Russell King <linux@armlinux.org.uk> Cc: Vineet Gupta <vgupta@synopsys.com> Cc: Richard Genoud <richard.genoud@gmail.com> Cc: Alexander Shiyan <shc_work@mail.ru> Cc: Baruch Siach <baruch@tkos.co.il> Cc: Pat Gefre <pfg@sgi.com> Cc: "Guilherme G. Piccoli" <gpiccoli@linux.vnet.ibm.com> Cc: Jason Wessel <jason.wessel@windriver.com> Cc: Vladimir Zapolskiy <vz@mleia.com> Cc: Sylvain Lemieux <slemieux.tyco@gmail.com> Cc: Carlo Caione <carlo@caione.org> Cc: Kevin Hilman <khilman@baylibre.com> Cc: Liviu Dudau <liviu.dudau@arm.com> Cc: Sudeep Holla <sudeep.holla@arm.com> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Cc: Andy Gross <andy.gross@linaro.org> Cc: David Brown <david.brown@linaro.org> Cc: "Andreas Färber" <afaerber@suse.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Kevin Cernekee <cernekee@gmail.com> Cc: Laxman Dewangan <ldewangan@nvidia.com> Cc: Thierry Reding <thierry.reding@gmail.com> Cc: Jonathan Hunter <jonathanh@nvidia.com> Cc: Barry Song <baohua@kernel.org> Cc: Patrice Chotard <patrice.chotard@st.com> Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com> Cc: Alexandre Torgue <alexandre.torgue@st.com> Cc: Chris Metcalf <cmetcalf@mellanox.com> Cc: Peter Korsgaard <jacmet@sunsite.dk> Cc: Timur Tabi <timur@tabi.org> Cc: Tony Prisk <linux@prisktech.co.nz> Cc: Michal Simek <michal.simek@xilinx.com> Cc: "Sören Brinkmann" <soren.brinkmann@xilinx.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
139 lines
3.0 KiB
C
139 lines
3.0 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* linux/drivers/serial/acorn.c
|
|
*
|
|
* Copyright (C) 1996-2003 Russell King.
|
|
*/
|
|
#include <linux/module.h>
|
|
#include <linux/types.h>
|
|
#include <linux/tty.h>
|
|
#include <linux/serial_core.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/ioport.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/device.h>
|
|
#include <linux/init.h>
|
|
|
|
#include <asm/io.h>
|
|
#include <asm/ecard.h>
|
|
#include <asm/string.h>
|
|
|
|
#include "8250.h"
|
|
|
|
#define MAX_PORTS 3
|
|
|
|
struct serial_card_type {
|
|
unsigned int num_ports;
|
|
unsigned int uartclk;
|
|
unsigned int type;
|
|
unsigned int offset[MAX_PORTS];
|
|
};
|
|
|
|
struct serial_card_info {
|
|
unsigned int num_ports;
|
|
int ports[MAX_PORTS];
|
|
void __iomem *vaddr;
|
|
};
|
|
|
|
static int
|
|
serial_card_probe(struct expansion_card *ec, const struct ecard_id *id)
|
|
{
|
|
struct serial_card_info *info;
|
|
struct serial_card_type *type = id->data;
|
|
struct uart_8250_port uart;
|
|
unsigned long bus_addr;
|
|
unsigned int i;
|
|
|
|
info = kzalloc(sizeof(struct serial_card_info), GFP_KERNEL);
|
|
if (!info)
|
|
return -ENOMEM;
|
|
|
|
info->num_ports = type->num_ports;
|
|
|
|
bus_addr = ecard_resource_start(ec, type->type);
|
|
info->vaddr = ecardm_iomap(ec, type->type, 0, 0);
|
|
if (!info->vaddr) {
|
|
kfree(info);
|
|
return -ENOMEM;
|
|
}
|
|
|
|
ecard_set_drvdata(ec, info);
|
|
|
|
memset(&uart, 0, sizeof(struct uart_8250_port));
|
|
uart.port.irq = ec->irq;
|
|
uart.port.flags = UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
|
|
uart.port.uartclk = type->uartclk;
|
|
uart.port.iotype = UPIO_MEM;
|
|
uart.port.regshift = 2;
|
|
uart.port.dev = &ec->dev;
|
|
|
|
for (i = 0; i < info->num_ports; i++) {
|
|
uart.port.membase = info->vaddr + type->offset[i];
|
|
uart.port.mapbase = bus_addr + type->offset[i];
|
|
|
|
info->ports[i] = serial8250_register_8250_port(&uart);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void serial_card_remove(struct expansion_card *ec)
|
|
{
|
|
struct serial_card_info *info = ecard_get_drvdata(ec);
|
|
int i;
|
|
|
|
ecard_set_drvdata(ec, NULL);
|
|
|
|
for (i = 0; i < info->num_ports; i++)
|
|
if (info->ports[i] > 0)
|
|
serial8250_unregister_port(info->ports[i]);
|
|
|
|
kfree(info);
|
|
}
|
|
|
|
static struct serial_card_type atomwide_type = {
|
|
.num_ports = 3,
|
|
.uartclk = 7372800,
|
|
.type = ECARD_RES_IOCSLOW,
|
|
.offset = { 0x2800, 0x2400, 0x2000 },
|
|
};
|
|
|
|
static struct serial_card_type serport_type = {
|
|
.num_ports = 2,
|
|
.uartclk = 3686400,
|
|
.type = ECARD_RES_IOCSLOW,
|
|
.offset = { 0x2000, 0x2020 },
|
|
};
|
|
|
|
static const struct ecard_id serial_cids[] = {
|
|
{ MANU_ATOMWIDE, PROD_ATOMWIDE_3PSERIAL, &atomwide_type },
|
|
{ MANU_SERPORT, PROD_SERPORT_DSPORT, &serport_type },
|
|
{ 0xffff, 0xffff }
|
|
};
|
|
|
|
static struct ecard_driver serial_card_driver = {
|
|
.probe = serial_card_probe,
|
|
.remove = serial_card_remove,
|
|
.id_table = serial_cids,
|
|
.drv = {
|
|
.name = "8250_acorn",
|
|
},
|
|
};
|
|
|
|
static int __init serial_card_init(void)
|
|
{
|
|
return ecard_register_driver(&serial_card_driver);
|
|
}
|
|
|
|
static void __exit serial_card_exit(void)
|
|
{
|
|
ecard_remove_driver(&serial_card_driver);
|
|
}
|
|
|
|
MODULE_AUTHOR("Russell King");
|
|
MODULE_DESCRIPTION("Acorn 8250-compatible serial port expansion card driver");
|
|
MODULE_LICENSE("GPL");
|
|
|
|
module_init(serial_card_init);
|
|
module_exit(serial_card_exit);
|