Lines Matching refs:drvdata

94 static int xps2_recv(struct xps2data *drvdata, u8 *byte)  in xps2_recv()  argument
100 sr = in_be32(drvdata->base_address + XPS2_STATUS_OFFSET); in xps2_recv()
102 *byte = in_be32(drvdata->base_address + XPS2_RX_DATA_OFFSET); in xps2_recv()
114 struct xps2data *drvdata = dev_id; in xps2_interrupt() local
120 intr_sr = in_be32(drvdata->base_address + XPS2_IPISR_OFFSET); in xps2_interrupt()
121 out_be32(drvdata->base_address + XPS2_IPISR_OFFSET, intr_sr); in xps2_interrupt()
125 dev_warn(drvdata->dev, "receive overrun error\n"); in xps2_interrupt()
128 drvdata->flags |= SERIO_PARITY; in xps2_interrupt()
131 drvdata->flags |= SERIO_TIMEOUT; in xps2_interrupt()
134 status = xps2_recv(drvdata, &c); in xps2_interrupt()
138 dev_err(drvdata->dev, in xps2_interrupt()
141 serio_interrupt(drvdata->serio, c, drvdata->flags); in xps2_interrupt()
142 drvdata->flags = 0; in xps2_interrupt()
165 struct xps2data *drvdata = pserio->port_data; in sxps2_write() local
170 spin_lock_irqsave(&drvdata->lock, flags); in sxps2_write()
173 sr = in_be32(drvdata->base_address + XPS2_STATUS_OFFSET); in sxps2_write()
175 out_be32(drvdata->base_address + XPS2_TX_DATA_OFFSET, c); in sxps2_write()
179 spin_unlock_irqrestore(&drvdata->lock, flags); in sxps2_write()
192 struct xps2data *drvdata = pserio->port_data; in sxps2_open() local
196 error = request_irq(drvdata->irq, &xps2_interrupt, 0, in sxps2_open()
197 DRIVER_NAME, drvdata); in sxps2_open()
199 dev_err(drvdata->dev, in sxps2_open()
200 "Couldn't allocate interrupt %d\n", drvdata->irq); in sxps2_open()
205 out_be32(drvdata->base_address + XPS2_GIER_OFFSET, XPS2_GIER_GIE_MASK); in sxps2_open()
206 out_be32(drvdata->base_address + XPS2_IPIER_OFFSET, XPS2_IPIXR_RX_ALL); in sxps2_open()
207 (void)xps2_recv(drvdata, &c); in sxps2_open()
220 struct xps2data *drvdata = pserio->port_data; in sxps2_close() local
223 out_be32(drvdata->base_address + XPS2_GIER_OFFSET, 0x00); in sxps2_close()
224 out_be32(drvdata->base_address + XPS2_IPIER_OFFSET, 0x00); in sxps2_close()
225 free_irq(drvdata->irq, drvdata); in sxps2_close()
241 struct xps2data *drvdata; in xps2_of_probe() local
264 drvdata = kzalloc(sizeof(struct xps2data), GFP_KERNEL); in xps2_of_probe()
266 if (!drvdata || !serio) { in xps2_of_probe()
271 spin_lock_init(&drvdata->lock); in xps2_of_probe()
272 drvdata->irq = irq; in xps2_of_probe()
273 drvdata->serio = serio; in xps2_of_probe()
274 drvdata->dev = dev; in xps2_of_probe()
286 drvdata->base_address = ioremap(phys_addr, remap_size); in xps2_of_probe()
287 if (drvdata->base_address == NULL) { in xps2_of_probe()
295 out_be32(drvdata->base_address + XPS2_IPIER_OFFSET, 0); in xps2_of_probe()
301 out_be32(drvdata->base_address + XPS2_SRST_OFFSET, XPS2_SRST_RESET); in xps2_of_probe()
304 (unsigned long long)phys_addr, drvdata->base_address, in xps2_of_probe()
305 drvdata->irq); in xps2_of_probe()
311 serio->port_data = drvdata; in xps2_of_probe()
320 platform_set_drvdata(ofdev, drvdata); in xps2_of_probe()
327 kfree(drvdata); in xps2_of_probe()
342 struct xps2data *drvdata = platform_get_drvdata(of_dev); in xps2_of_remove() local
345 serio_unregister_port(drvdata->serio); in xps2_of_remove()
346 iounmap(drvdata->base_address); in xps2_of_remove()
350 dev_err(drvdata->dev, "invalid address\n"); in xps2_of_remove()
354 kfree(drvdata); in xps2_of_remove()