Lines Matching refs:ps2if

46 struct ps2if {  struct
64 struct ps2if *ps2if = dev_id; in ps2_rxint() argument
67 status = sa1111_readl(ps2if->base + PS2STAT); in ps2_rxint()
70 sa1111_writel(PS2STAT_STP, ps2if->base + PS2STAT); in ps2_rxint()
75 scancode = sa1111_readl(ps2if->base + PS2DATA) & 0xff; in ps2_rxint()
80 serio_interrupt(ps2if->io, scancode, flag); in ps2_rxint()
82 status = sa1111_readl(ps2if->base + PS2STAT); in ps2_rxint()
93 struct ps2if *ps2if = dev_id; in ps2_txint() local
96 spin_lock(&ps2if->lock); in ps2_txint()
97 status = sa1111_readl(ps2if->base + PS2STAT); in ps2_txint()
98 if (ps2if->head == ps2if->tail) { in ps2_txint()
102 sa1111_writel(ps2if->buf[ps2if->tail], ps2if->base + PS2DATA); in ps2_txint()
103 ps2if->tail = (ps2if->tail + 1) & (sizeof(ps2if->buf) - 1); in ps2_txint()
105 spin_unlock(&ps2if->lock); in ps2_txint()
116 struct ps2if *ps2if = io->port_data; in ps2_write() local
120 spin_lock_irqsave(&ps2if->lock, flags); in ps2_write()
125 if (sa1111_readl(ps2if->base + PS2STAT) & PS2STAT_TXE) { in ps2_write()
126 sa1111_writel(val, ps2if->base + PS2DATA); in ps2_write()
128 if (ps2if->head == ps2if->tail) in ps2_write()
129 enable_irq(ps2if->dev->irq[1]); in ps2_write()
130 head = (ps2if->head + 1) & (sizeof(ps2if->buf) - 1); in ps2_write()
131 if (head != ps2if->tail) { in ps2_write()
132 ps2if->buf[ps2if->head] = val; in ps2_write()
133 ps2if->head = head; in ps2_write()
137 spin_unlock_irqrestore(&ps2if->lock, flags); in ps2_write()
143 struct ps2if *ps2if = io->port_data; in ps2_open() local
146 ret = sa1111_enable_device(ps2if->dev); in ps2_open()
150 ret = request_irq(ps2if->dev->irq[0], ps2_rxint, 0, in ps2_open()
151 SA1111_DRIVER_NAME(ps2if->dev), ps2if); in ps2_open()
154 ps2if->dev->irq[0], ret); in ps2_open()
155 sa1111_disable_device(ps2if->dev); in ps2_open()
159 ret = request_irq(ps2if->dev->irq[1], ps2_txint, 0, in ps2_open()
160 SA1111_DRIVER_NAME(ps2if->dev), ps2if); in ps2_open()
163 ps2if->dev->irq[1], ret); in ps2_open()
164 free_irq(ps2if->dev->irq[0], ps2if); in ps2_open()
165 sa1111_disable_device(ps2if->dev); in ps2_open()
169 ps2if->open = 1; in ps2_open()
171 enable_irq_wake(ps2if->dev->irq[0]); in ps2_open()
173 sa1111_writel(PS2CR_ENA, ps2if->base + PS2CR); in ps2_open()
179 struct ps2if *ps2if = io->port_data; in ps2_close() local
181 sa1111_writel(0, ps2if->base + PS2CR); in ps2_close()
183 disable_irq_wake(ps2if->dev->irq[0]); in ps2_close()
185 ps2if->open = 0; in ps2_close()
187 free_irq(ps2if->dev->irq[1], ps2if); in ps2_close()
188 free_irq(ps2if->dev->irq[0], ps2if); in ps2_close()
190 sa1111_disable_device(ps2if->dev); in ps2_close()
196 static void ps2_clear_input(struct ps2if *ps2if) in ps2_clear_input() argument
201 if ((sa1111_readl(ps2if->base + PS2DATA) & 0xff) == 0xff) in ps2_clear_input()
206 static unsigned int ps2_test_one(struct ps2if *ps2if, in ps2_test_one() argument
211 sa1111_writel(PS2CR_ENA | mask, ps2if->base + PS2CR); in ps2_test_one()
215 val = sa1111_readl(ps2if->base + PS2STAT); in ps2_test_one()
223 static int ps2_test(struct ps2if *ps2if) in ps2_test() argument
228 stat = ps2_test_one(ps2if, PS2CR_FKC); in ps2_test()
234 stat = ps2_test_one(ps2if, 0); in ps2_test()
240 stat = ps2_test_one(ps2if, PS2CR_FKD); in ps2_test()
246 sa1111_writel(0, ps2if->base + PS2CR); in ps2_test()
256 struct ps2if *ps2if; in ps2_probe() local
260 ps2if = kzalloc(sizeof(struct ps2if), GFP_KERNEL); in ps2_probe()
262 if (!ps2if || !serio) { in ps2_probe()
274 serio->port_data = ps2if; in ps2_probe()
276 ps2if->io = serio; in ps2_probe()
277 ps2if->dev = dev; in ps2_probe()
278 sa1111_set_drvdata(dev, ps2if); in ps2_probe()
280 spin_lock_init(&ps2if->lock); in ps2_probe()
295 ps2if->base = dev->mapbase; in ps2_probe()
297 sa1111_enable_device(ps2if->dev); in ps2_probe()
300 sa1111_writel(0, ps2if->base + PS2CLKDIV); in ps2_probe()
301 sa1111_writel(127, ps2if->base + PS2PRECNT); in ps2_probe()
306 ps2_clear_input(ps2if); in ps2_probe()
311 ret = ps2_test(ps2if); in ps2_probe()
318 ps2_clear_input(ps2if); in ps2_probe()
320 sa1111_disable_device(ps2if->dev); in ps2_probe()
321 serio_register_port(ps2if->io); in ps2_probe()
325 sa1111_disable_device(ps2if->dev); in ps2_probe()
329 kfree(ps2if); in ps2_probe()
339 struct ps2if *ps2if = sa1111_get_drvdata(dev); in ps2_remove() local
341 serio_unregister_port(ps2if->io); in ps2_remove()
345 kfree(ps2if); in ps2_remove()