Lines Matching refs:drvdata
97 struct sun4i_ps2data *drvdata = dev_id;
104 guard(spinlock)(&drvdata->lock);
107 intr_status = readl(drvdata->reg_base + PS2_REG_LSTS);
108 fifo_status = readl(drvdata->reg_base + PS2_REG_FSTS);
118 writel(rval, drvdata->reg_base + PS2_REG_LSTS);
125 writel(rval, drvdata->reg_base + PS2_REG_FSTS);
130 byte = readl(drvdata->reg_base + PS2_REG_DATA) & 0xff;
131 serio_interrupt(drvdata->serio, byte, rxflags);
134 writel(intr_status, drvdata->reg_base + PS2_REG_LSTS);
135 writel(fifo_status, drvdata->reg_base + PS2_REG_FSTS);
142 struct sun4i_ps2data *drvdata = serio->port_data;
151 writel(rval, drvdata->reg_base + PS2_REG_LCTL);
158 writel(rval, drvdata->reg_base + PS2_REG_FCTL);
160 src_clk = clk_get_rate(drvdata->clk);
165 writel(rval, drvdata->reg_base + PS2_REG_CLKDR);
171 guard(spinlock_irqsave)(&drvdata->lock);
172 writel(rval, drvdata->reg_base + PS2_REG_GCTL);
179 struct sun4i_ps2data *drvdata = serio->port_data;
183 rval = readl(drvdata->reg_base + PS2_REG_GCTL);
184 writel(rval & ~(PS2_GCTL_INTEN), drvdata->reg_base + PS2_REG_GCTL);
186 synchronize_irq(drvdata->irq);
192 struct sun4i_ps2data *drvdata = serio->port_data;
195 if (readl(drvdata->reg_base + PS2_REG_FSTS) & PS2_FSTS_TXRDY) {
196 writel(val, drvdata->reg_base + PS2_REG_DATA);
207 struct sun4i_ps2data *drvdata;
212 drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
214 if (!drvdata || !serio) {
219 spin_lock_init(&drvdata->lock);
229 drvdata->reg_base = ioremap(res->start, resource_size(res));
230 if (!drvdata->reg_base) {
236 drvdata->clk = clk_get(dev, NULL);
237 if (IS_ERR(drvdata->clk)) {
238 error = PTR_ERR(drvdata->clk);
243 error = clk_prepare_enable(drvdata->clk);
253 serio->port_data = drvdata;
259 writel(0, drvdata->reg_base + PS2_REG_GCTL);
262 drvdata->irq = platform_get_irq(pdev, 0);
263 if (drvdata->irq < 0) {
264 error = drvdata->irq;
268 drvdata->serio = serio;
269 drvdata->dev = dev;
271 error = request_irq(drvdata->irq, sun4i_ps2_interrupt, 0,
272 DRIVER_NAME, drvdata);
274 dev_err(drvdata->dev, "failed to allocate interrupt %d: %d\n",
275 drvdata->irq, error);
280 platform_set_drvdata(pdev, drvdata);
285 clk_disable_unprepare(drvdata->clk);
287 clk_put(drvdata->clk);
289 iounmap(drvdata->reg_base);
292 kfree(drvdata);
298 struct sun4i_ps2data *drvdata = platform_get_drvdata(pdev);
300 serio_unregister_port(drvdata->serio);
302 free_irq(drvdata->irq, drvdata);
304 clk_disable_unprepare(drvdata->clk);
305 clk_put(drvdata->clk);
307 iounmap(drvdata->reg_base);
309 kfree(drvdata);