Lines Matching refs:ps2port

133 static void gscps2_flush(struct gscps2port *ps2port)
135 while (gscps2_readb_status(ps2port->addr) & GSC_STAT_RBNE)
136 gscps2_readb_input(ps2port->addr);
137 ps2port->act = ps2port->append = 0;
146 static inline int gscps2_writeb_output(struct gscps2port *ps2port, u8 data)
148 char __iomem *addr = ps2port->addr;
158 scoped_guard(spinlock_irqsave, &ps2port->lock)
176 static void gscps2_enable(struct gscps2port *ps2port, int enable)
181 scoped_guard(spinlock_irqsave, &ps2port->lock) {
182 gscps2_flush(ps2port);
183 data = gscps2_readb_control(ps2port->addr);
188 gscps2_writeb_control(data, ps2port->addr);
191 wait_TBE(ps2port->addr);
192 gscps2_flush(ps2port);
199 static void gscps2_reset(struct gscps2port *ps2port)
202 guard(spinlock_irqsave)(&ps2port->lock);
203 gscps2_flush(ps2port);
204 writeb(0xff, ps2port->addr + GSC_RESET);
205 gscps2_flush(ps2port);
210 static void gscps2_read_data(struct gscps2port *ps2port)
215 status = gscps2_readb_status(ps2port->addr);
219 ps2port->buffer[ps2port->append].str = status;
220 ps2port->buffer[ps2port->append].data =
221 gscps2_readb_input(ps2port->addr);
225 static bool gscps2_report_data(struct gscps2port *ps2port)
230 while (ps2port->act != ps2port->append) {
236 if (gscps2_readb_status(ps2port->addr) & GSC_STAT_CMPINTR)
239 status = ps2port->buffer[ps2port->act].str;
240 data = ps2port->buffer[ps2port->act].data;
242 ps2port->act = (ps2port->act + 1) & BUFFER_SIZE;
246 serio_interrupt(ps2port->port, data, rxflags);
268 struct gscps2port *ps2port;
270 list_for_each_entry(ps2port, &ps2port_list, node) {
271 guard(spinlock_irqsave)(&ps2port->lock);
273 gscps2_read_data(ps2port);
277 list_for_each_entry(ps2port, &ps2port_list, node) {
278 if (gscps2_report_data(ps2port)) {
294 struct gscps2port *ps2port = port->port_data;
296 if (!gscps2_writeb_output(ps2port, data)) {
310 struct gscps2port *ps2port = port->port_data;
312 gscps2_reset(ps2port);
315 gscps2_enable(ps2port, ENABLE);
328 struct gscps2port *ps2port = port->port_data;
329 gscps2_enable(ps2port, DISABLE);
341 struct gscps2port *ps2port;
353 ps2port = kzalloc(sizeof(*ps2port), GFP_KERNEL);
355 if (!ps2port || !serio) {
360 dev_set_drvdata(&dev->dev, ps2port);
362 ps2port->port = serio;
363 ps2port->padev = dev;
364 ps2port->addr = ioremap(hpa, GSC_STATUS + 4);
365 if (!ps2port->addr) {
369 spin_lock_init(&ps2port->lock);
371 gscps2_reset(ps2port);
372 ps2port->id = readb(ps2port->addr + GSC_ID) & 0x0f;
375 (ps2port->id == GSC_ID_KEYBOARD) ? "keyboard" : "mouse");
381 serio->port_data = ps2port;
385 if (request_irq(dev->irq, gscps2_interrupt, IRQF_SHARED, ps2port->port->name, ps2port))
388 if (ps2port->id != GSC_ID_KEYBOARD && ps2port->id != GSC_ID_MOUSE) {
390 hpa, ps2port->id);
396 if (!request_mem_region(hpa, GSC_STATUS + 4, ps2port->port.name))
401 ps2port->port->name,
403 ps2port->padev->irq,
404 ps2port->port->phys);
406 serio_register_port(ps2port->port);
408 list_add_tail(&ps2port->node, &ps2port_list);
413 free_irq(dev->irq, ps2port);
416 iounmap(ps2port->addr);
420 kfree(ps2port);
434 struct gscps2port *ps2port = dev_get_drvdata(&dev->dev);
436 serio_unregister_port(ps2port->port);
437 free_irq(dev->irq, ps2port);
438 gscps2_flush(ps2port);
439 list_del(&ps2port->node);
440 iounmap(ps2port->addr);
445 kfree(ps2port);