Lines Matching defs: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)
149 char __iomem *addr = ps2port->addr;
159 spin_lock_irqsave(&ps2port->lock, flags);
161 spin_unlock_irqrestore(&ps2port->lock, flags);
178 static void gscps2_enable(struct gscps2port *ps2port, int enable)
184 spin_lock_irqsave(&ps2port->lock, flags);
185 gscps2_flush(ps2port);
186 data = gscps2_readb_control(ps2port->addr);
191 gscps2_writeb_control(data, ps2port->addr);
192 spin_unlock_irqrestore(&ps2port->lock, flags);
193 wait_TBE(ps2port->addr);
194 gscps2_flush(ps2port);
201 static void gscps2_reset(struct gscps2port *ps2port)
206 spin_lock_irqsave(&ps2port->lock, flags);
207 gscps2_flush(ps2port);
208 writeb(0xff, ps2port->addr + GSC_RESET);
209 gscps2_flush(ps2port);
210 spin_unlock_irqrestore(&ps2port->lock, flags);
229 struct gscps2port *ps2port;
231 list_for_each_entry(ps2port, &ps2port_list, node) {
234 spin_lock_irqsave(&ps2port->lock, flags);
236 while ( (ps2port->buffer[ps2port->append].str =
237 gscps2_readb_status(ps2port->addr)) & GSC_STAT_RBNE ) {
238 ps2port->buffer[ps2port->append].data =
239 gscps2_readb_input(ps2port->addr);
240 ps2port->append = ((ps2port->append+1) & BUFFER_SIZE);
243 spin_unlock_irqrestore(&ps2port->lock, flags);
249 list_for_each_entry(ps2port, &ps2port_list, node) {
251 while (ps2port->act != ps2port->append) {
258 if (gscps2_readb_status(ps2port->addr) & GSC_STAT_CMPINTR)
261 status = ps2port->buffer[ps2port->act].str;
262 data = ps2port->buffer[ps2port->act].data;
264 ps2port->act = ((ps2port->act+1) & BUFFER_SIZE);
268 serio_interrupt(ps2port->port, data, rxflags);
284 struct gscps2port *ps2port = port->port_data;
286 if (!gscps2_writeb_output(ps2port, data)) {
300 struct gscps2port *ps2port = port->port_data;
302 gscps2_reset(ps2port);
305 gscps2_enable(ps2port, ENABLE);
318 struct gscps2port *ps2port = port->port_data;
319 gscps2_enable(ps2port, DISABLE);
329 struct gscps2port *ps2port;
341 ps2port = kzalloc(sizeof(struct gscps2port), GFP_KERNEL);
343 if (!ps2port || !serio) {
348 dev_set_drvdata(&dev->dev, ps2port);
350 ps2port->port = serio;
351 ps2port->padev = dev;
352 ps2port->addr = ioremap(hpa, GSC_STATUS + 4);
353 if (!ps2port->addr) {
357 spin_lock_init(&ps2port->lock);
359 gscps2_reset(ps2port);
360 ps2port->id = readb(ps2port->addr + GSC_ID) & 0x0f;
363 (ps2port->id == GSC_ID_KEYBOARD) ? "keyboard" : "mouse");
369 serio->port_data = ps2port;
373 if (request_irq(dev->irq, gscps2_interrupt, IRQF_SHARED, ps2port->port->name, ps2port))
376 if (ps2port->id != GSC_ID_KEYBOARD && ps2port->id != GSC_ID_MOUSE) {
378 hpa, ps2port->id);
384 if (!request_mem_region(hpa, GSC_STATUS + 4, ps2port->port.name))
389 ps2port->port->name,
391 ps2port->padev->irq,
392 ps2port->port->phys);
394 serio_register_port(ps2port->port);
396 list_add_tail(&ps2port->node, &ps2port_list);
401 free_irq(dev->irq, ps2port);
404 iounmap(ps2port->addr);
408 kfree(ps2port);
420 struct gscps2port *ps2port = dev_get_drvdata(&dev->dev);
422 serio_unregister_port(ps2port->port);
423 free_irq(dev->irq, ps2port);
424 gscps2_flush(ps2port);
425 list_del(&ps2port->node);
426 iounmap(ps2port->addr);
431 kfree(ps2port);