ps2if
serio->port_data = ps2if;
ps2if->io = serio;
dev_info(&pdev->dev, "base %p, irq %d\n", ps2if->base, irq);
serio_register_port(ps2if->io);
platform_set_drvdata(pdev, ps2if);
struct ps2if *ps2if = platform_get_drvdata(pdev);
serio_unregister_port(ps2if->io);
struct ps2if *ps2if = dev_id;
while ((status = readl(ps2if->base)) & 0xffff0000) {
serio_interrupt(ps2if->io, status & 0xff, 0);
struct ps2if *ps2if = io->port_data;
writel(val, ps2if->base);
struct ps2if *ps2if = io->port_data;
while (readl(ps2if->base) & 0xffff0000)
writel(1, ps2if->base + 4); /* enable rx irq */
struct ps2if *ps2if = io->port_data;
writel(0, ps2if->base + 4); /* disable rx irq */
struct ps2if *ps2if;
ps2if = devm_kzalloc(&pdev->dev, sizeof(*ps2if), GFP_KERNEL);
if (!ps2if)
ps2if->base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
if (IS_ERR(ps2if->base))
return PTR_ERR(ps2if->base);
pdev->name, ps2if);
struct pcips2_data *ps2if = io->port_data;
outb(PS2_CTRL_ENABLE, ps2if->base);
pcips2_flush_input(ps2if);
ret = request_irq(ps2if->dev->irq, pcips2_interrupt, IRQF_SHARED,
"pcips2", ps2if);
outb(val, ps2if->base);
struct pcips2_data *ps2if = io->port_data;
outb(0, ps2if->base);
free_irq(ps2if->dev->irq, ps2if);
struct pcips2_data *ps2if;
ps2if = kzalloc_obj(*ps2if);
if (!ps2if || !serio) {
serio->port_data = ps2if;
ps2if->io = serio;
ps2if->dev = dev;
ps2if->base = pci_resource_start(dev, 0);
pci_set_drvdata(dev, ps2if);
serio_register_port(ps2if->io);
kfree(ps2if);
struct pcips2_data *ps2if = pci_get_drvdata(dev);
serio_unregister_port(ps2if->io);
kfree(ps2if);
struct pcips2_data *ps2if = io->port_data;
stat = inb(ps2if->base + PS2_STATUS);
outb(val, ps2if->base + PS2_DATA);
struct pcips2_data *ps2if = devid;
status = inb(ps2if->base + PS2_STATUS);
scancode = inb(ps2if->base + PS2_DATA);
serio_interrupt(ps2if->io, scancode, flag);
static void pcips2_flush_input(struct pcips2_data *ps2if)
status = inb(ps2if->base + PS2_STATUS);
scancode = inb(ps2if->base + PS2_DATA);
writel_relaxed(ps2if->buf[ps2if->tail], ps2if->base + PS2DATA);
ps2if->tail = (ps2if->tail + 1) & (sizeof(ps2if->buf) - 1);
struct ps2if *ps2if = io->port_data;
guard(spinlock_irqsave)(&ps2if->lock);
if (readl_relaxed(ps2if->base + PS2STAT) & PS2STAT_TXE) {
writel_relaxed(val, ps2if->base + PS2DATA);
if (ps2if->head == ps2if->tail)
enable_irq(ps2if->tx_irq);
head = (ps2if->head + 1) & (sizeof(ps2if->buf) - 1);
if (head != ps2if->tail) {
ps2if->buf[ps2if->head] = val;
ps2if->head = head;
struct ps2if *ps2if = io->port_data;
ret = sa1111_enable_device(ps2if->dev);
ret = request_irq(ps2if->rx_irq, ps2_rxint, 0,
SA1111_DRIVER_NAME(ps2if->dev), ps2if);
ps2if->rx_irq, ret);
sa1111_disable_device(ps2if->dev);
ret = request_irq(ps2if->tx_irq, ps2_txint, 0,
SA1111_DRIVER_NAME(ps2if->dev), ps2if);
ps2if->tx_irq, ret);
free_irq(ps2if->rx_irq, ps2if);
sa1111_disable_device(ps2if->dev);
ps2if->open = 1;
enable_irq_wake(ps2if->rx_irq);
writel_relaxed(PS2CR_ENA, ps2if->base + PS2CR);
struct ps2if *ps2if = io->port_data;
writel_relaxed(0, ps2if->base + PS2CR);
disable_irq_wake(ps2if->rx_irq);
ps2if->open = 0;
free_irq(ps2if->tx_irq, ps2if);
free_irq(ps2if->rx_irq, ps2if);
sa1111_disable_device(ps2if->dev);
static void ps2_clear_input(struct ps2if *ps2if)
if ((readl_relaxed(ps2if->base + PS2DATA) & 0xff) == 0xff)
static unsigned int ps2_test_one(struct ps2if *ps2if,
writel_relaxed(PS2CR_ENA | mask, ps2if->base + PS2CR);
val = readl_relaxed(ps2if->base + PS2STAT);
static int ps2_test(struct ps2if *ps2if)
stat = ps2_test_one(ps2if, PS2CR_FKC);
stat = ps2_test_one(ps2if, 0);
stat = ps2_test_one(ps2if, PS2CR_FKD);
writel_relaxed(0, ps2if->base + PS2CR);
struct ps2if *ps2if;
ps2if = kzalloc_obj(*ps2if);
if (!ps2if || !serio) {
serio->port_data = ps2if;
ps2if->io = serio;
ps2if->dev = dev;
sa1111_set_drvdata(dev, ps2if);
spin_lock_init(&ps2if->lock);
ps2if->rx_irq = sa1111_get_irq(dev, 0);
if (ps2if->rx_irq <= 0) {
ret = ps2if->rx_irq ? : -ENXIO;
ps2if->tx_irq = sa1111_get_irq(dev, 1);
if (ps2if->tx_irq <= 0) {
ret = ps2if->tx_irq ? : -ENXIO;
ps2if->base = dev->mapbase;
sa1111_enable_device(ps2if->dev);
writel_relaxed(0, ps2if->base + PS2CLKDIV);
writel_relaxed(127, ps2if->base + PS2PRECNT);
ps2_clear_input(ps2if);
ret = ps2_test(ps2if);
ps2_clear_input(ps2if);
sa1111_disable_device(ps2if->dev);
serio_register_port(ps2if->io);
sa1111_disable_device(ps2if->dev);
kfree(ps2if);
struct ps2if *ps2if = sa1111_get_drvdata(dev);
serio_unregister_port(ps2if->io);
kfree(ps2if);
struct ps2if *ps2if = dev_id;
status = readl_relaxed(ps2if->base + PS2STAT);
writel_relaxed(PS2STAT_STP, ps2if->base + PS2STAT);
scancode = readl_relaxed(ps2if->base + PS2DATA) & 0xff;
serio_interrupt(ps2if->io, scancode, flag);
status = readl_relaxed(ps2if->base + PS2STAT);
struct ps2if *ps2if = dev_id;
guard(spinlock)(&ps2if->lock);
status = readl_relaxed(ps2if->base + PS2STAT);
if (ps2if->head == ps2if->tail) {