Beispiel #1
0
static int  mailbox_nios_probe(struct platform_device *pdev)
{
	pr_info("Start: Mailbox to NIOS Init\n");
	/* Send message to NIOS II */
	client_sender.dev = &pdev->dev;
	
	/* Receive message from NIOS II */
	client_receiver.dev = &pdev->dev;
	client_receiver.rx_callback = receiver;
	
	chan_sender = mbox_request_channel_byname(&client_sender, "mbox-tx");
	if (chan_sender == ERR_PTR(-ENODEV) || !chan_sender) {
		pr_info("%s Unable to register TX nios channel", __func__);
		return -ENODEV;
	}

	chan_receiver = mbox_request_channel_byname(&client_receiver, "mbox-rx");
	if (chan_sender == ERR_PTR(-ENODEV) || !chan_sender) {
		pr_info("%s Unable to register RX nios channel", __func__);
		return -ENODEV;
	}
	
	pr_info("End: Mailbox to NIOS Init\n");

	return 0;
}
Beispiel #2
0
static struct mbox_chan *
mbox_test_request_channel(struct platform_device *pdev, const char *name)
{
    struct mbox_client *client;
    struct mbox_chan *channel;

    client = devm_kzalloc(&pdev->dev, sizeof(*client), GFP_KERNEL);
    if (!client)
        return ERR_PTR(-ENOMEM);

    client->dev		= &pdev->dev;
    client->rx_callback	= mbox_test_receive_message;
    client->tx_prepare	= mbox_test_prepare_message;
    client->tx_done		= mbox_test_message_sent;
    client->tx_block	= true;
    client->knows_txdone	= false;
    client->tx_tout		= 500;

    channel = mbox_request_channel_byname(client, name);
    if (IS_ERR(channel)) {
        dev_warn(&pdev->dev, "Failed to request %s channel\n", name);
        return NULL;
    }

    return channel;
}
Beispiel #3
0
static int tegra_tcu_probe(struct platform_device *pdev)
{
	struct uart_port *port;
	struct tegra_tcu *tcu;
	int err;

	tcu = devm_kzalloc(&pdev->dev, sizeof(*tcu), GFP_KERNEL);
	if (!tcu)
		return -ENOMEM;

	tcu->tx_client.dev = &pdev->dev;
	tcu->rx_client.dev = &pdev->dev;
	tcu->rx_client.rx_callback = tegra_tcu_receive;

	tcu->tx = mbox_request_channel_byname(&tcu->tx_client, "tx");
	if (IS_ERR(tcu->tx)) {
		err = PTR_ERR(tcu->tx);
		dev_err(&pdev->dev, "failed to get tx mailbox: %d\n", err);
		return err;
	}

	tcu->rx = mbox_request_channel_byname(&tcu->rx_client, "rx");
	if (IS_ERR(tcu->rx)) {
		err = PTR_ERR(tcu->rx);
		dev_err(&pdev->dev, "failed to get rx mailbox: %d\n", err);
		goto free_tx;
	}

#if IS_ENABLED(CONFIG_SERIAL_TEGRA_TCU_CONSOLE)
	/* setup the console */
	strcpy(tcu->console.name, "ttyTCU");
	tcu->console.device = uart_console_device;
	tcu->console.flags = CON_PRINTBUFFER | CON_ANYTIME;
	tcu->console.index = -1;
	tcu->console.write = tegra_tcu_console_write;
	tcu->console.setup = tegra_tcu_console_setup;
	tcu->console.data = &tcu->driver;
#endif

	/* setup the driver */
	tcu->driver.owner = THIS_MODULE;
	tcu->driver.driver_name = "tegra-tcu";
	tcu->driver.dev_name = "ttyTCU";
#if IS_ENABLED(CONFIG_SERIAL_TEGRA_TCU_CONSOLE)
	tcu->driver.cons = &tcu->console;
#endif
	tcu->driver.nr = 1;

	err = uart_register_driver(&tcu->driver);
	if (err) {
		dev_err(&pdev->dev, "failed to register UART driver: %d\n",
			err);
		goto free_rx;
	}

	/* setup the port */
	port = &tcu->port;
	spin_lock_init(&port->lock);
	port->dev = &pdev->dev;
	port->type = PORT_TEGRA_TCU;
	port->ops = &tegra_tcu_uart_ops;
	port->fifosize = 1;
	port->iotype = UPIO_MEM;
	port->flags = UPF_BOOT_AUTOCONF;
	port->private_data = tcu;

	err = uart_add_one_port(&tcu->driver, port);
	if (err) {
		dev_err(&pdev->dev, "failed to add UART port: %d\n", err);
		goto unregister_uart;
	}

	platform_set_drvdata(pdev, tcu);
#if IS_ENABLED(CONFIG_SERIAL_TEGRA_TCU_CONSOLE)
	register_console(&tcu->console);
#endif

	return 0;

unregister_uart:
	uart_unregister_driver(&tcu->driver);
free_rx:
	mbox_free_channel(tcu->rx);
free_tx:
	mbox_free_channel(tcu->tx);

	return err;
}