Lines Matching refs:tdev
53 struct mbox_test_device *tdev = filp->private_data;
55 if (!tdev->tx_channel) {
56 dev_err(tdev->dev, "Channel cannot do Tx\n");
61 dev_err(tdev->dev,
68 if (!tdev->signal) {
69 tdev->signal = kzalloc(MBOX_MAX_SIG_LEN, GFP_KERNEL);
70 if (!tdev->signal)
74 if (copy_from_user(tdev->signal, userbuf, count)) {
75 kfree(tdev->signal);
76 tdev->signal = NULL;
91 struct mbox_test_device *tdev = filp->private_data;
93 return fasync_helper(fd, filp, on, &tdev->async_queue);
100 struct mbox_test_device *tdev = filp->private_data;
105 if (!tdev->tx_channel) {
106 dev_err(tdev->dev, "Channel cannot do Tx\n");
111 dev_err(tdev->dev,
121 mutex_lock(&tdev->mutex);
123 tdev->message = message;
124 ret = copy_from_user(tdev->message, userbuf, count);
134 if (tdev->tx_mmio && tdev->signal) {
136 tdev->signal, MBOX_MAX_SIG_LEN);
138 data = tdev->signal;
140 data = tdev->message;
143 tdev->message, MBOX_MAX_MSG_LEN);
145 ret = mbox_send_message(tdev->tx_channel, data);
147 dev_err(tdev->dev, "Failed to send message via mailbox\n");
150 kfree(tdev->signal);
151 kfree(tdev->message);
152 tdev->signal = NULL;
154 mutex_unlock(&tdev->mutex);
159 static bool mbox_test_message_data_ready(struct mbox_test_device *tdev)
164 spin_lock_irqsave(&tdev->lock, flags);
166 spin_unlock_irqrestore(&tdev->lock, flags);
174 struct mbox_test_device *tdev = filp->private_data;
186 if (!tdev->rx_channel) {
193 add_wait_queue(&tdev->waitq, &wait);
198 if (mbox_test_message_data_ready(tdev))
214 spin_lock_irqsave(&tdev->lock, flags);
216 ptr = tdev->rx_buffer;
229 memset(tdev->rx_buffer, 0, MBOX_MAX_MSG_LEN);
232 spin_unlock_irqrestore(&tdev->lock, flags);
237 remove_wait_queue(&tdev->waitq, &wait);
246 struct mbox_test_device *tdev = filp->private_data;
248 poll_wait(filp, &tdev->waitq, wait);
250 if (mbox_test_message_data_ready(tdev))
265 struct mbox_test_device *tdev)
270 tdev->root_debugfs_dir = debugfs_create_dir(dev_name(&pdev->dev), NULL);
271 if (!tdev->root_debugfs_dir) {
276 debugfs_create_file("message", 0600, tdev->root_debugfs_dir,
277 tdev, &mbox_test_message_ops);
279 debugfs_create_file("signal", 0200, tdev->root_debugfs_dir,
280 tdev, &mbox_test_signal_ops);
287 struct mbox_test_device *tdev = dev_get_drvdata(client->dev);
290 spin_lock_irqsave(&tdev->lock, flags);
291 if (tdev->rx_mmio) {
292 memcpy_fromio(tdev->rx_buffer, tdev->rx_mmio, MBOX_MAX_MSG_LEN);
294 tdev->rx_buffer, MBOX_MAX_MSG_LEN);
298 memcpy(tdev->rx_buffer, message, MBOX_MAX_MSG_LEN);
301 spin_unlock_irqrestore(&tdev->lock, flags);
303 wake_up_interruptible(&tdev->waitq);
305 kill_fasync(&tdev->async_queue, SIGIO, POLL_IN);
310 struct mbox_test_device *tdev = dev_get_drvdata(client->dev);
312 if (tdev->tx_mmio) {
313 if (tdev->signal)
314 memcpy_toio(tdev->tx_mmio, tdev->message, MBOX_MAX_MSG_LEN);
316 memcpy_toio(tdev->tx_mmio, message, MBOX_MAX_MSG_LEN);
360 struct mbox_test_device *tdev;
365 tdev = devm_kzalloc(&pdev->dev, sizeof(*tdev), GFP_KERNEL);
366 if (!tdev)
370 tdev->tx_mmio = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
371 if (PTR_ERR(tdev->tx_mmio) == -EBUSY) {
374 tdev->tx_mmio = devm_ioremap(&pdev->dev, res->start, size);
375 } else if (IS_ERR(tdev->tx_mmio)) {
376 tdev->tx_mmio = NULL;
380 tdev->rx_mmio = devm_platform_get_and_ioremap_resource(pdev, 1, &res);
381 if (PTR_ERR(tdev->rx_mmio) == -EBUSY) {
383 tdev->rx_mmio = devm_ioremap(&pdev->dev, res->start, size);
384 } else if (IS_ERR(tdev->rx_mmio)) {
385 tdev->rx_mmio = tdev->tx_mmio;
388 tdev->tx_channel = mbox_test_request_channel(pdev, "tx");
389 tdev->rx_channel = mbox_test_request_channel(pdev, "rx");
391 if (IS_ERR_OR_NULL(tdev->tx_channel) && IS_ERR_OR_NULL(tdev->rx_channel))
395 if (!tdev->rx_channel && (tdev->rx_mmio != tdev->tx_mmio))
396 tdev->rx_channel = tdev->tx_channel;
398 tdev->dev = &pdev->dev;
399 platform_set_drvdata(pdev, tdev);
401 spin_lock_init(&tdev->lock);
402 mutex_init(&tdev->mutex);
404 if (tdev->rx_channel) {
405 tdev->rx_buffer = devm_kzalloc(&pdev->dev,
407 if (!tdev->rx_buffer)
411 ret = mbox_test_add_debugfs(pdev, tdev);
415 init_waitqueue_head(&tdev->waitq);
423 struct mbox_test_device *tdev = platform_get_drvdata(pdev);
425 debugfs_remove_recursive(tdev->root_debugfs_dir);
427 if (tdev->tx_channel)
428 mbox_free_channel(tdev->tx_channel);
429 if (tdev->rx_channel)
430 mbox_free_channel(tdev->rx_channel);