MIPS: Whitespace cleanup.
[linux-drm-fsl-dcu.git] / arch / mips / loongson1 / common / platform.c
1 /*
2  * Copyright (c) 2011 Zhang, Keguang <keguang.zhang@gmail.com>
3  *
4  * This program is free software; you can redistribute  it and/or modify it
5  * under  the terms of  the GNU General  Public License as published by the
6  * Free Software Foundation;  either version 2 of the  License, or (at your
7  * option) any later version.
8  */
9
10 #include <linux/clk.h>
11 #include <linux/dma-mapping.h>
12 #include <linux/err.h>
13 #include <linux/phy.h>
14 #include <linux/serial_8250.h>
15 #include <linux/stmmac.h>
16 #include <linux/usb/ehci_pdriver.h>
17 #include <asm-generic/sizes.h>
18
19 #include <loongson1.h>
20
21 #define LS1X_UART(_id)                                          \
22         {                                                       \
23                 .mapbase        = LS1X_UART ## _id ## _BASE,    \
24                 .irq            = LS1X_UART ## _id ## _IRQ,     \
25                 .iotype         = UPIO_MEM,                     \
26                 .flags          = UPF_IOREMAP | UPF_FIXED_TYPE, \
27                 .type           = PORT_16550A,                  \
28         }
29
30 static struct plat_serial8250_port ls1x_serial8250_port[] = {
31         LS1X_UART(0),
32         LS1X_UART(1),
33         LS1X_UART(2),
34         LS1X_UART(3),
35         {},
36 };
37
38 struct platform_device ls1x_uart_device = {
39         .name           = "serial8250",
40         .id             = PLAT8250_DEV_PLATFORM,
41         .dev            = {
42                 .platform_data = ls1x_serial8250_port,
43         },
44 };
45
46 void __init ls1x_serial_setup(struct platform_device *pdev)
47 {
48         struct clk *clk;
49         struct plat_serial8250_port *p;
50
51         clk = clk_get(NULL, pdev->name);
52         if (IS_ERR(clk))
53                 panic("unable to get %s clock, err=%ld",
54                         pdev->name, PTR_ERR(clk));
55
56         for (p = pdev->dev.platform_data; p->flags != 0; ++p)
57                 p->uartclk = clk_get_rate(clk);
58 }
59
60 /* Synopsys Ethernet GMAC */
61 static struct resource ls1x_eth0_resources[] = {
62         [0] = {
63                 .start  = LS1X_GMAC0_BASE,
64                 .end    = LS1X_GMAC0_BASE + SZ_64K - 1,
65                 .flags  = IORESOURCE_MEM,
66         },
67         [1] = {
68                 .name   = "macirq",
69                 .start  = LS1X_GMAC0_IRQ,
70                 .flags  = IORESOURCE_IRQ,
71         },
72 };
73
74 static struct stmmac_mdio_bus_data ls1x_mdio_bus_data = {
75         .phy_mask       = 0,
76 };
77
78 static struct plat_stmmacenet_data ls1x_eth_data = {
79         .bus_id         = 0,
80         .phy_addr       = -1,
81         .mdio_bus_data  = &ls1x_mdio_bus_data,
82         .has_gmac       = 1,
83         .tx_coe         = 1,
84 };
85
86 struct platform_device ls1x_eth0_device = {
87         .name           = "stmmaceth",
88         .id             = 0,
89         .num_resources  = ARRAY_SIZE(ls1x_eth0_resources),
90         .resource       = ls1x_eth0_resources,
91         .dev            = {
92                 .platform_data = &ls1x_eth_data,
93         },
94 };
95
96 /* USB EHCI */
97 static u64 ls1x_ehci_dmamask = DMA_BIT_MASK(32);
98
99 static struct resource ls1x_ehci_resources[] = {
100         [0] = {
101                 .start  = LS1X_EHCI_BASE,
102                 .end    = LS1X_EHCI_BASE + SZ_32K - 1,
103                 .flags  = IORESOURCE_MEM,
104         },
105         [1] = {
106                 .start  = LS1X_EHCI_IRQ,
107                 .flags  = IORESOURCE_IRQ,
108         },
109 };
110
111 static struct usb_ehci_pdata ls1x_ehci_pdata = {
112 };
113
114 struct platform_device ls1x_ehci_device = {
115         .name           = "ehci-platform",
116         .id             = -1,
117         .num_resources  = ARRAY_SIZE(ls1x_ehci_resources),
118         .resource       = ls1x_ehci_resources,
119         .dev            = {
120                 .dma_mask = &ls1x_ehci_dmamask,
121                 .platform_data = &ls1x_ehci_pdata,
122         },
123 };
124
125 /* Real Time Clock */
126 struct platform_device ls1x_rtc_device = {
127         .name           = "ls1x-rtc",
128         .id             = -1,
129 };