Lines Matching refs:drvdata
92 static int xps2_recv(struct xps2data *drvdata, u8 *byte) in xps2_recv() argument
98 sr = in_be32(drvdata->base_address + XPS2_STATUS_OFFSET); in xps2_recv()
100 *byte = in_be32(drvdata->base_address + XPS2_RX_DATA_OFFSET); in xps2_recv()
112 struct xps2data *drvdata = dev_id; in xps2_interrupt() local
118 intr_sr = in_be32(drvdata->base_address + XPS2_IPISR_OFFSET); in xps2_interrupt()
119 out_be32(drvdata->base_address + XPS2_IPISR_OFFSET, intr_sr); in xps2_interrupt()
123 dev_warn(drvdata->dev, "receive overrun error\n"); in xps2_interrupt()
126 drvdata->flags |= SERIO_PARITY; in xps2_interrupt()
129 drvdata->flags |= SERIO_TIMEOUT; in xps2_interrupt()
132 status = xps2_recv(drvdata, &c); in xps2_interrupt()
136 dev_err(drvdata->dev, in xps2_interrupt()
139 serio_interrupt(drvdata->serio, c, drvdata->flags); in xps2_interrupt()
140 drvdata->flags = 0; in xps2_interrupt()
163 struct xps2data *drvdata = pserio->port_data; in sxps2_write() local
168 spin_lock_irqsave(&drvdata->lock, flags); in sxps2_write()
171 sr = in_be32(drvdata->base_address + XPS2_STATUS_OFFSET); in sxps2_write()
173 out_be32(drvdata->base_address + XPS2_TX_DATA_OFFSET, c); in sxps2_write()
177 spin_unlock_irqrestore(&drvdata->lock, flags); in sxps2_write()
190 struct xps2data *drvdata = pserio->port_data; in sxps2_open() local
194 error = request_irq(drvdata->irq, &xps2_interrupt, 0, in sxps2_open()
195 DRIVER_NAME, drvdata); in sxps2_open()
197 dev_err(drvdata->dev, in sxps2_open()
198 "Couldn't allocate interrupt %d\n", drvdata->irq); in sxps2_open()
203 out_be32(drvdata->base_address + XPS2_GIER_OFFSET, XPS2_GIER_GIE_MASK); in sxps2_open()
204 out_be32(drvdata->base_address + XPS2_IPIER_OFFSET, XPS2_IPIXR_RX_ALL); in sxps2_open()
205 (void)xps2_recv(drvdata, &c); in sxps2_open()
218 struct xps2data *drvdata = pserio->port_data; in sxps2_close() local
221 out_be32(drvdata->base_address + XPS2_GIER_OFFSET, 0x00); in sxps2_close()
222 out_be32(drvdata->base_address + XPS2_IPIER_OFFSET, 0x00); in sxps2_close()
223 free_irq(drvdata->irq, drvdata); in sxps2_close()
239 struct xps2data *drvdata; in xps2_of_probe() local
263 drvdata = kzalloc(sizeof(struct xps2data), GFP_KERNEL); in xps2_of_probe()
265 if (!drvdata || !serio) { in xps2_of_probe()
270 spin_lock_init(&drvdata->lock); in xps2_of_probe()
271 drvdata->irq = irq; in xps2_of_probe()
272 drvdata->serio = serio; in xps2_of_probe()
273 drvdata->dev = dev; in xps2_of_probe()
285 drvdata->base_address = ioremap(phys_addr, remap_size); in xps2_of_probe()
286 if (drvdata->base_address == NULL) { in xps2_of_probe()
294 out_be32(drvdata->base_address + XPS2_IPIER_OFFSET, 0); in xps2_of_probe()
298 out_be32(drvdata->base_address + XPS2_SRST_OFFSET, XPS2_SRST_RESET); in xps2_of_probe()
301 (unsigned long long)phys_addr, drvdata->base_address, in xps2_of_probe()
302 drvdata->irq); in xps2_of_probe()
308 serio->port_data = drvdata; in xps2_of_probe()
317 platform_set_drvdata(ofdev, drvdata); in xps2_of_probe()
324 kfree(drvdata); in xps2_of_probe()
339 struct xps2data *drvdata = platform_get_drvdata(of_dev); in xps2_of_remove() local
342 serio_unregister_port(drvdata->serio); in xps2_of_remove()
343 iounmap(drvdata->base_address); in xps2_of_remove()
347 dev_err(drvdata->dev, "invalid address\n"); in xps2_of_remove()
351 kfree(drvdata); in xps2_of_remove()