Lines Matching refs:tdev
52 struct mbox_test_device *tdev = filp->private_data;
54 if (!tdev->tx_channel) {
55 dev_err(tdev->dev, "Channel cannot do Tx\n");
60 dev_err(tdev->dev,
67 if (!tdev->signal) {
68 tdev->signal = kzalloc(MBOX_MAX_SIG_LEN, GFP_KERNEL);
69 if (!tdev->signal)
73 if (copy_from_user(tdev->signal, userbuf, count)) {
74 kfree(tdev->signal);
75 tdev->signal = NULL;
90 struct mbox_test_device *tdev = filp->private_data;
92 return fasync_helper(fd, filp, on, &tdev->async_queue);
99 struct mbox_test_device *tdev = filp->private_data;
104 if (!tdev->tx_channel) {
105 dev_err(tdev->dev, "Channel cannot do Tx\n");
110 dev_err(tdev->dev,
120 mutex_lock(&tdev->mutex);
122 tdev->message = message;
123 ret = copy_from_user(tdev->message, userbuf, count);
133 if (tdev->tx_mmio && tdev->signal) {
135 tdev->signal, MBOX_MAX_SIG_LEN);
137 data = tdev->signal;
139 data = tdev->message;
142 tdev->message, MBOX_MAX_MSG_LEN);
144 ret = mbox_send_message(tdev->tx_channel, data);
146 dev_err(tdev->dev, "Failed to send message via mailbox\n");
149 kfree(tdev->signal);
150 kfree(tdev->message);
151 tdev->signal = NULL;
153 mutex_unlock(&tdev->mutex);
158 static bool mbox_test_message_data_ready(struct mbox_test_device *tdev)
163 spin_lock_irqsave(&tdev->lock, flags);
165 spin_unlock_irqrestore(&tdev->lock, flags);
173 struct mbox_test_device *tdev = filp->private_data;
185 if (!tdev->rx_channel) {
192 add_wait_queue(&tdev->waitq, &wait);
197 if (mbox_test_message_data_ready(tdev))
213 spin_lock_irqsave(&tdev->lock, flags);
215 ptr = tdev->rx_buffer;
228 memset(tdev->rx_buffer, 0, MBOX_MAX_MSG_LEN);
231 spin_unlock_irqrestore(&tdev->lock, flags);
236 remove_wait_queue(&tdev->waitq, &wait);
245 struct mbox_test_device *tdev = filp->private_data;
247 poll_wait(filp, &tdev->waitq, wait);
249 if (mbox_test_message_data_ready(tdev))
264 struct mbox_test_device *tdev)
269 tdev->root_debugfs_dir = debugfs_create_dir(dev_name(&pdev->dev), NULL);
270 if (!tdev->root_debugfs_dir) {
275 debugfs_create_file("message", 0600, tdev->root_debugfs_dir,
276 tdev, &mbox_test_message_ops);
278 debugfs_create_file("signal", 0200, tdev->root_debugfs_dir,
279 tdev, &mbox_test_signal_ops);
286 struct mbox_test_device *tdev = dev_get_drvdata(client->dev);
289 spin_lock_irqsave(&tdev->lock, flags);
290 if (tdev->rx_mmio) {
291 memcpy_fromio(tdev->rx_buffer, tdev->rx_mmio, MBOX_MAX_MSG_LEN);
293 tdev->rx_buffer, MBOX_MAX_MSG_LEN);
297 memcpy(tdev->rx_buffer, message, MBOX_MAX_MSG_LEN);
300 spin_unlock_irqrestore(&tdev->lock, flags);
302 wake_up_interruptible(&tdev->waitq);
304 kill_fasync(&tdev->async_queue, SIGIO, POLL_IN);
309 struct mbox_test_device *tdev = dev_get_drvdata(client->dev);
311 if (tdev->tx_mmio) {
312 if (tdev->signal)
313 memcpy_toio(tdev->tx_mmio, tdev->message, MBOX_MAX_MSG_LEN);
315 memcpy_toio(tdev->tx_mmio, message, MBOX_MAX_MSG_LEN);
359 struct mbox_test_device *tdev;
364 tdev = devm_kzalloc(&pdev->dev, sizeof(*tdev), GFP_KERNEL);
365 if (!tdev)
370 tdev->tx_mmio = devm_ioremap_resource(&pdev->dev, 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;
381 tdev->rx_mmio = devm_ioremap_resource(&pdev->dev, res);
382 if (PTR_ERR(tdev->rx_mmio) == -EBUSY) {
384 tdev->rx_mmio = devm_ioremap(&pdev->dev, res->start, size);
385 } else if (IS_ERR(tdev->rx_mmio)) {
386 tdev->rx_mmio = tdev->tx_mmio;
389 tdev->tx_channel = mbox_test_request_channel(pdev, "tx");
390 tdev->rx_channel = mbox_test_request_channel(pdev, "rx");
392 if (!tdev->tx_channel && !tdev->rx_channel)
396 if (!tdev->rx_channel && (tdev->rx_mmio != tdev->tx_mmio))
397 tdev->rx_channel = tdev->tx_channel;
399 tdev->dev = &pdev->dev;
400 platform_set_drvdata(pdev, tdev);
402 spin_lock_init(&tdev->lock);
403 mutex_init(&tdev->mutex);
405 if (tdev->rx_channel) {
406 tdev->rx_buffer = devm_kzalloc(&pdev->dev,
408 if (!tdev->rx_buffer)
412 ret = mbox_test_add_debugfs(pdev, tdev);
416 init_waitqueue_head(&tdev->waitq);
424 struct mbox_test_device *tdev = platform_get_drvdata(pdev);
426 debugfs_remove_recursive(tdev->root_debugfs_dir);
428 if (tdev->tx_channel)
429 mbox_free_channel(tdev->tx_channel);
430 if (tdev->rx_channel)
431 mbox_free_channel(tdev->rx_channel);