Lines Matching refs:ps2if
43 struct ps2if {
63 struct ps2if *ps2if = dev_id;
66 status = readl_relaxed(ps2if->base + PS2STAT);
69 writel_relaxed(PS2STAT_STP, ps2if->base + PS2STAT);
74 scancode = readl_relaxed(ps2if->base + PS2DATA) & 0xff;
79 serio_interrupt(ps2if->io, scancode, flag);
81 status = readl_relaxed(ps2if->base + PS2STAT);
92 struct ps2if *ps2if = dev_id;
95 spin_lock(&ps2if->lock);
96 status = readl_relaxed(ps2if->base + PS2STAT);
97 if (ps2if->head == ps2if->tail) {
101 writel_relaxed(ps2if->buf[ps2if->tail], ps2if->base + PS2DATA);
102 ps2if->tail = (ps2if->tail + 1) & (sizeof(ps2if->buf) - 1);
104 spin_unlock(&ps2if->lock);
115 struct ps2if *ps2if = io->port_data;
119 spin_lock_irqsave(&ps2if->lock, flags);
124 if (readl_relaxed(ps2if->base + PS2STAT) & PS2STAT_TXE) {
125 writel_relaxed(val, ps2if->base + PS2DATA);
127 if (ps2if->head == ps2if->tail)
128 enable_irq(ps2if->tx_irq);
129 head = (ps2if->head + 1) & (sizeof(ps2if->buf) - 1);
130 if (head != ps2if->tail) {
131 ps2if->buf[ps2if->head] = val;
132 ps2if->head = head;
136 spin_unlock_irqrestore(&ps2if->lock, flags);
142 struct ps2if *ps2if = io->port_data;
145 ret = sa1111_enable_device(ps2if->dev);
149 ret = request_irq(ps2if->rx_irq, ps2_rxint, 0,
150 SA1111_DRIVER_NAME(ps2if->dev), ps2if);
153 ps2if->rx_irq, ret);
154 sa1111_disable_device(ps2if->dev);
158 ret = request_irq(ps2if->tx_irq, ps2_txint, 0,
159 SA1111_DRIVER_NAME(ps2if->dev), ps2if);
162 ps2if->tx_irq, ret);
163 free_irq(ps2if->rx_irq, ps2if);
164 sa1111_disable_device(ps2if->dev);
168 ps2if->open = 1;
170 enable_irq_wake(ps2if->rx_irq);
172 writel_relaxed(PS2CR_ENA, ps2if->base + PS2CR);
178 struct ps2if *ps2if = io->port_data;
180 writel_relaxed(0, ps2if->base + PS2CR);
182 disable_irq_wake(ps2if->rx_irq);
184 ps2if->open = 0;
186 free_irq(ps2if->tx_irq, ps2if);
187 free_irq(ps2if->rx_irq, ps2if);
189 sa1111_disable_device(ps2if->dev);
195 static void ps2_clear_input(struct ps2if *ps2if)
200 if ((readl_relaxed(ps2if->base + PS2DATA) & 0xff) == 0xff)
205 static unsigned int ps2_test_one(struct ps2if *ps2if,
210 writel_relaxed(PS2CR_ENA | mask, ps2if->base + PS2CR);
214 val = readl_relaxed(ps2if->base + PS2STAT);
222 static int ps2_test(struct ps2if *ps2if)
227 stat = ps2_test_one(ps2if, PS2CR_FKC);
233 stat = ps2_test_one(ps2if, 0);
239 stat = ps2_test_one(ps2if, PS2CR_FKD);
245 writel_relaxed(0, ps2if->base + PS2CR);
255 struct ps2if *ps2if;
259 ps2if = kzalloc(sizeof(struct ps2if), GFP_KERNEL);
261 if (!ps2if || !serio) {
272 serio->port_data = ps2if;
274 ps2if->io = serio;
275 ps2if->dev = dev;
276 sa1111_set_drvdata(dev, ps2if);
278 spin_lock_init(&ps2if->lock);
280 ps2if->rx_irq = sa1111_get_irq(dev, 0);
281 if (ps2if->rx_irq <= 0) {
282 ret = ps2if->rx_irq ? : -ENXIO;
286 ps2if->tx_irq = sa1111_get_irq(dev, 1);
287 if (ps2if->tx_irq <= 0) {
288 ret = ps2if->tx_irq ? : -ENXIO;
305 ps2if->base = dev->mapbase;
307 sa1111_enable_device(ps2if->dev);
310 writel_relaxed(0, ps2if->base + PS2CLKDIV);
311 writel_relaxed(127, ps2if->base + PS2PRECNT);
316 ps2_clear_input(ps2if);
321 ret = ps2_test(ps2if);
328 ps2_clear_input(ps2if);
330 sa1111_disable_device(ps2if->dev);
331 serio_register_port(ps2if->io);
335 sa1111_disable_device(ps2if->dev);
339 kfree(ps2if);
349 struct ps2if *ps2if = sa1111_get_drvdata(dev);
351 serio_unregister_port(ps2if->io);
355 kfree(ps2if);