Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
dev-uart.c
Go to the documentation of this file.
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License. See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 2008 Maxime Bizon <[email protected]>
7  */
8 
9 #include <linux/init.h>
10 #include <linux/kernel.h>
11 #include <linux/platform_device.h>
12 #include <bcm63xx_cpu.h>
13 
14 static struct resource uart0_resources[] = {
15  {
16  /* start & end filled at runtime */
17  .flags = IORESOURCE_MEM,
18  },
19  {
20  /* start filled at runtime */
21  .flags = IORESOURCE_IRQ,
22  },
23 };
24 
25 static struct resource uart1_resources[] = {
26  {
27  /* start & end filled at runtime */
28  .flags = IORESOURCE_MEM,
29  },
30  {
31  /* start filled at runtime */
32  .flags = IORESOURCE_IRQ,
33  },
34 };
35 
36 static struct platform_device bcm63xx_uart_devices[] = {
37  {
38  .name = "bcm63xx_uart",
39  .id = 0,
40  .num_resources = ARRAY_SIZE(uart0_resources),
41  .resource = uart0_resources,
42  },
43 
44  {
45  .name = "bcm63xx_uart",
46  .id = 1,
47  .num_resources = ARRAY_SIZE(uart1_resources),
48  .resource = uart1_resources,
49  }
50 };
51 
52 int __init bcm63xx_uart_register(unsigned int id)
53 {
54  if (id >= ARRAY_SIZE(bcm63xx_uart_devices))
55  return -ENODEV;
56 
57  if (id == 1 && (!BCMCPU_IS_6358() && !BCMCPU_IS_6368()))
58  return -ENODEV;
59 
60  if (id == 0) {
61  uart0_resources[0].start = bcm63xx_regset_address(RSET_UART0);
62  uart0_resources[0].end = uart0_resources[0].start +
63  RSET_UART_SIZE - 1;
64  uart0_resources[1].start = bcm63xx_get_irq_number(IRQ_UART0);
65  }
66 
67  if (id == 1) {
68  uart1_resources[0].start = bcm63xx_regset_address(RSET_UART1);
69  uart1_resources[0].end = uart1_resources[0].start +
70  RSET_UART_SIZE - 1;
71  uart1_resources[1].start = bcm63xx_get_irq_number(IRQ_UART1);
72  }
73 
74  return platform_device_register(&bcm63xx_uart_devices[id]);
75 }