Lines Matching refs:drvdata

66 	struct ps2_gpio_data *drvdata = serio->port_data;
68 enable_irq(drvdata->irq);
74 struct ps2_gpio_data *drvdata = serio->port_data;
76 flush_delayed_work(&drvdata->tx_work);
77 disable_irq(drvdata->irq);
82 struct ps2_gpio_data *drvdata = serio->port_data;
84 disable_irq_nosync(drvdata->irq);
85 gpiod_direction_output(drvdata->gpio_clk, 0);
87 drvdata->mode = PS2_MODE_TX;
88 drvdata->tx_byte = val;
90 schedule_delayed_work(&drvdata->tx_work, usecs_to_jiffies(200));
97 struct ps2_gpio_data *drvdata = serio->port_data;
101 mutex_lock(&drvdata->tx_mutex);
103 if (!wait_for_completion_timeout(&drvdata->tx_done,
106 mutex_unlock(&drvdata->tx_mutex);
117 struct ps2_gpio_data *drvdata = container_of(dwork,
121 enable_irq(drvdata->irq);
122 gpiod_direction_output(drvdata->gpio_data, 0);
123 gpiod_direction_input(drvdata->gpio_clk);
126 static irqreturn_t ps2_gpio_irq_rx(struct ps2_gpio_data *drvdata)
133 byte = drvdata->rx_byte;
134 cnt = drvdata->rx_cnt;
140 dev_err(drvdata->dev,
146 data = gpiod_get_value(drvdata->gpio_data);
148 dev_err(drvdata->dev, "RX: failed to get data gpio val: %d\n",
157 dev_err(drvdata->dev, "RX: start bit should be low\n");
177 dev_warn(drvdata->dev, "RX: parity error\n");
178 if (!drvdata->write_enable)
185 if (!drvdata->write_enable) {
198 serio_interrupt(drvdata->serio, byte, rxflags);
199 dev_dbg(drvdata->dev, "RX: sending byte 0x%x\n", byte);
204 dev_err(drvdata->dev, "RX: stop bit should be high\n");
211 dev_err(drvdata->dev, "RX: got out of sync with the device\n");
221 __ps2_gpio_write(drvdata->serio, PS2_CMD_RESEND);
223 drvdata->rx_cnt = cnt;
224 drvdata->rx_byte = byte;
228 static irqreturn_t ps2_gpio_irq_tx(struct ps2_gpio_data *drvdata)
234 cnt = drvdata->tx_cnt;
235 byte = drvdata->tx_byte;
241 dev_err(drvdata->dev,
250 dev_err(drvdata->dev,
262 gpiod_set_value(drvdata->gpio_data, data);
267 gpiod_set_value(drvdata->gpio_data, data);
271 gpiod_direction_input(drvdata->gpio_data);
279 gpiod_direction_input(drvdata->gpio_data);
280 data = gpiod_get_value(drvdata->gpio_data);
282 dev_warn(drvdata->dev, "TX: received NACK, retry\n");
286 drvdata->mode = PS2_MODE_RX;
287 complete(&drvdata->tx_done);
296 gpiod_direction_input(drvdata->gpio_data);
297 dev_err(drvdata->dev, "TX: got out of sync with the device\n");
307 gpiod_direction_input(drvdata->gpio_data);
308 __ps2_gpio_write(drvdata->serio, drvdata->tx_byte);
310 drvdata->tx_cnt = cnt;
316 struct ps2_gpio_data *drvdata = dev_id;
318 return drvdata->mode ? ps2_gpio_irq_tx(drvdata) :
319 ps2_gpio_irq_rx(drvdata);
323 struct ps2_gpio_data *drvdata)
325 drvdata->gpio_data = devm_gpiod_get(dev, "data", GPIOD_IN);
326 if (IS_ERR(drvdata->gpio_data)) {
328 PTR_ERR(drvdata->gpio_data));
329 return PTR_ERR(drvdata->gpio_data);
332 drvdata->gpio_clk = devm_gpiod_get(dev, "clk", GPIOD_IN);
333 if (IS_ERR(drvdata->gpio_clk)) {
335 PTR_ERR(drvdata->gpio_clk));
336 return PTR_ERR(drvdata->gpio_clk);
339 drvdata->write_enable = device_property_read_bool(dev,
347 struct ps2_gpio_data *drvdata;
352 drvdata = devm_kzalloc(dev, sizeof(struct ps2_gpio_data), GFP_KERNEL);
354 if (!drvdata || !serio) {
359 error = ps2_gpio_get_props(dev, drvdata);
363 if (gpiod_cansleep(drvdata->gpio_data) ||
364 gpiod_cansleep(drvdata->gpio_clk)) {
370 drvdata->irq = platform_get_irq(pdev, 0);
371 if (drvdata->irq < 0) {
372 error = drvdata->irq;
376 error = devm_request_irq(dev, drvdata->irq, ps2_gpio_irq,
377 IRQF_NO_THREAD, DRIVER_NAME, drvdata);
380 drvdata->irq, error);
385 disable_irq(drvdata->irq);
393 serio->write = drvdata->write_enable ? ps2_gpio_write : NULL;
394 serio->port_data = drvdata;
399 drvdata->serio = serio;
400 drvdata->dev = dev;
401 drvdata->mode = PS2_MODE_RX;
406 drvdata->tx_cnt = 1;
408 INIT_DELAYED_WORK(&drvdata->tx_work, ps2_gpio_tx_work_fn);
409 init_completion(&drvdata->tx_done);
410 mutex_init(&drvdata->tx_mutex);
413 platform_set_drvdata(pdev, drvdata);
424 struct ps2_gpio_data *drvdata = platform_get_drvdata(pdev);
426 serio_unregister_port(drvdata->serio);