Lines Matching refs:psif
95 struct psif { struct
108 struct psif *psif = _ptr; in psif_interrupt() argument
113 status = psif_readl(psif, SR); in psif_interrupt()
116 unsigned char val = (unsigned char) psif_readl(psif, RHR); in psif_interrupt()
121 dev_err(&psif->pdev->dev, "overrun read error\n"); in psif_interrupt()
123 serio_interrupt(psif->io, val, io_flags); in psif_interrupt()
133 struct psif *psif = io->port_data; in psif_write() local
138 spin_lock_irqsave(&psif->lock, flags); in psif_write()
140 while (!(psif_readl(psif, SR) & PSIF_BIT(TXEMPTY)) && timeout--) in psif_write()
144 psif_writel(psif, THR, val); in psif_write()
146 dev_dbg(&psif->pdev->dev, "timeout writing to THR\n"); in psif_write()
150 spin_unlock_irqrestore(&psif->lock, flags); in psif_write()
157 struct psif *psif = io->port_data; in psif_open() local
160 retval = clk_enable(psif->pclk); in psif_open()
164 psif_writel(psif, CR, PSIF_BIT(CR_TXEN) | PSIF_BIT(CR_RXEN)); in psif_open()
165 psif_writel(psif, IER, PSIF_BIT(RXRDY)); in psif_open()
167 psif->open = true; in psif_open()
174 struct psif *psif = io->port_data; in psif_close() local
176 psif->open = false; in psif_close()
178 psif_writel(psif, IDR, ~0UL); in psif_close()
179 psif_writel(psif, CR, PSIF_BIT(CR_TXDIS) | PSIF_BIT(CR_RXDIS)); in psif_close()
181 clk_disable(psif->pclk); in psif_close()
184 static void psif_set_prescaler(struct psif *psif) in psif_set_prescaler() argument
187 unsigned long rate = clk_get_rate(psif->pclk); in psif_set_prescaler()
194 dev_dbg(&psif->pdev->dev, "pclk too fast, " in psif_set_prescaler()
198 clk_enable(psif->pclk); in psif_set_prescaler()
199 psif_writel(psif, PSR, prscv); in psif_set_prescaler()
200 clk_disable(psif->pclk); in psif_set_prescaler()
206 struct psif *psif; in psif_probe() local
212 psif = kzalloc(sizeof(struct psif), GFP_KERNEL); in psif_probe()
213 if (!psif) { in psif_probe()
218 psif->pdev = pdev; in psif_probe()
226 psif->io = io; in psif_probe()
235 psif->regs = ioremap(regs->start, resource_size(regs)); in psif_probe()
236 if (!psif->regs) { in psif_probe()
248 psif->pclk = pclk; in psif_probe()
256 psif_writel(psif, CR, PSIF_BIT(CR_SWRST)); in psif_probe()
265 ret = request_irq(irq, psif_interrupt, IRQF_SHARED, "at32psif", psif); in psif_probe()
270 psif->irq = irq; in psif_probe()
278 io->port_data = psif; in psif_probe()
281 psif_set_prescaler(psif); in psif_probe()
283 spin_lock_init(&psif->lock); in psif_probe()
284 serio_register_port(psif->io); in psif_probe()
285 platform_set_drvdata(pdev, psif); in psif_probe()
288 (int)psif->regs, psif->irq); in psif_probe()
293 clk_put(psif->pclk); in psif_probe()
295 iounmap(psif->regs); in psif_probe()
299 kfree(psif); in psif_probe()
306 struct psif *psif = platform_get_drvdata(pdev); in psif_remove() local
308 psif_writel(psif, IDR, ~0UL); in psif_remove()
309 psif_writel(psif, CR, PSIF_BIT(CR_TXDIS) | PSIF_BIT(CR_RXDIS)); in psif_remove()
311 serio_unregister_port(psif->io); in psif_remove()
312 iounmap(psif->regs); in psif_remove()
313 free_irq(psif->irq, psif); in psif_remove()
314 clk_put(psif->pclk); in psif_remove()
315 kfree(psif); in psif_remove()
324 struct psif *psif = platform_get_drvdata(pdev); in psif_suspend() local
326 if (psif->open) { in psif_suspend()
327 psif_writel(psif, CR, PSIF_BIT(CR_RXDIS) | PSIF_BIT(CR_TXDIS)); in psif_suspend()
328 clk_disable(psif->pclk); in psif_suspend()
337 struct psif *psif = platform_get_drvdata(pdev); in psif_resume() local
339 if (psif->open) { in psif_resume()
340 clk_enable(psif->pclk); in psif_resume()
341 psif_set_prescaler(psif); in psif_resume()
342 psif_writel(psif, CR, PSIF_BIT(CR_RXEN) | PSIF_BIT(CR_TXEN)); in psif_resume()