linux/arch/mips/cobalt/serial.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 *  Registration of Cobalt UART platform device.
   4 *
   5 *  Copyright (C) 2007  Yoichi Yuasa <yuasa@linux-mips.org>
   6 */
   7#include <linux/errno.h>
   8#include <linux/init.h>
   9#include <linux/ioport.h>
  10#include <linux/platform_device.h>
  11#include <linux/serial_8250.h>
  12
  13#include <cobalt.h>
  14#include <irq.h>
  15
  16static struct resource cobalt_uart_resource[] __initdata = {
  17        {
  18                .start  = 0x1c800000,
  19                .end    = 0x1c800007,
  20                .flags  = IORESOURCE_MEM,
  21        },
  22        {
  23                .start  = SERIAL_IRQ,
  24                .end    = SERIAL_IRQ,
  25                .flags  = IORESOURCE_IRQ,
  26        },
  27};
  28
  29static struct plat_serial8250_port cobalt_serial8250_port[] = {
  30        {
  31                .irq            = SERIAL_IRQ,
  32                .uartclk        = 18432000,
  33                .iotype         = UPIO_MEM,
  34                .flags          = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
  35                .mapbase        = 0x1c800000,
  36        },
  37        {},
  38};
  39
  40static __init int cobalt_uart_add(void)
  41{
  42        struct platform_device *pdev;
  43        int retval;
  44
  45        /*
  46         * Cobalt Qube1 has no UART.
  47         */
  48        if (cobalt_board_id == COBALT_BRD_ID_QUBE1)
  49                return 0;
  50
  51        pdev = platform_device_alloc("serial8250", -1);
  52        if (!pdev)
  53                return -ENOMEM;
  54
  55        pdev->id = PLAT8250_DEV_PLATFORM;
  56        pdev->dev.platform_data = cobalt_serial8250_port;
  57
  58        retval = platform_device_add_resources(pdev, cobalt_uart_resource, ARRAY_SIZE(cobalt_uart_resource));
  59        if (retval)
  60                goto err_free_device;
  61
  62        retval = platform_device_add(pdev);
  63        if (retval)
  64                goto err_free_device;
  65
  66        return 0;
  67
  68err_free_device:
  69        platform_device_put(pdev);
  70
  71        return retval;
  72}
  73device_initcall(cobalt_uart_add);
  74