arm: tegra: Add MAX1749 platform device
[linux-3.10.git] / arch / arm / mach-tegra / board-common.c
1 /*
2  * board-common.c: Implement function which is common across
3  * different boards.
4  *
5  * Copyright (c) 2011-2012, NVIDIA CORPORATION.  All rights reserved.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15  * more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  */
21
22 #include <linux/clk.h>
23 #include <linux/serial_8250.h>
24
25 #include <mach/clk.h>
26
27 #include "board.h"
28 #include "board-common.h"
29 #include "devices.h"
30 #include "clock.h"
31
32 extern unsigned long  debug_uart_port_base;
33 extern struct clk *debug_uart_clk;
34
35 struct platform_device *uart_console_debug_device = NULL;
36
37 struct platform_device vibrator_device = {
38         .name = "tegra-vibrator",
39         .id = -1,
40 };
41
42 int tegra_vibrator_init(void)
43 {
44         return platform_device_register(&vibrator_device);
45 }
46
47 int uart_console_debug_init(int default_debug_port)
48 {
49         int debug_port_id;
50
51         debug_port_id = get_tegra_uart_debug_port_id();
52         if (debug_port_id < 0)
53                 debug_port_id = default_debug_port;
54
55         if (debug_port_id < 0) {
56                 pr_warn("No debug console channel\n");
57                 return -EINVAL;
58         }
59
60         switch (debug_port_id) {
61         case 0:
62                 /* UARTA is the debug port. */
63                 pr_info("Selecting UARTA as the debug console\n");
64                 debug_uart_clk = clk_get_sys("serial8250.0", "uarta");
65                 debug_uart_port_base = ((struct plat_serial8250_port *)(
66                         debug_uarta_device.dev.platform_data))->mapbase;
67                 uart_console_debug_device = &debug_uarta_device;
68                 break;
69
70         case 1:
71                 /* UARTB is the debug port. */
72                 pr_info("Selecting UARTB as the debug console\n");
73                 debug_uart_clk =  clk_get_sys("serial8250.0", "uartb");
74                 debug_uart_port_base = ((struct plat_serial8250_port *)(
75                         debug_uartb_device.dev.platform_data))->mapbase;
76                 uart_console_debug_device = &debug_uartb_device;
77                 break;
78
79         case 2:
80                 /* UARTC is the debug port. */
81                 pr_info("Selecting UARTC as the debug console\n");
82                 debug_uart_clk =  clk_get_sys("serial8250.0", "uartc");
83                 debug_uart_port_base = ((struct plat_serial8250_port *)(
84                         debug_uartc_device.dev.platform_data))->mapbase;
85                 uart_console_debug_device = &debug_uartc_device;
86                 break;
87
88         case 3:
89                 /* UARTD is the debug port. */
90                 pr_info("Selecting UARTD as the debug console\n");
91                 debug_uart_clk =  clk_get_sys("serial8250.0", "uartd");
92                 debug_uart_port_base = ((struct plat_serial8250_port *)(
93                         debug_uartd_device.dev.platform_data))->mapbase;
94                 uart_console_debug_device = &debug_uartd_device;
95                 break;
96
97 #if !defined(CONFIG_ARCH_TEGRA_2x_SOC)
98         case 4:
99                 /* UARTE is the debug port. */
100                 pr_info("Selecting UARTE as the debug console\n");
101                 debug_uart_clk =  clk_get_sys("serial8250.0", "uarte");
102                 debug_uart_port_base = ((struct plat_serial8250_port *)(
103                         debug_uarte_device.dev.platform_data))->mapbase;
104                 uart_console_debug_device = &debug_uarte_device;
105                 break;
106 #endif
107
108         default:
109                 pr_info("The debug console id %d is invalid, Assuming UARTA", debug_port_id);
110                 debug_uart_clk = clk_get_sys("serial8250.0", "uarta");
111                 debug_uart_port_base = ((struct plat_serial8250_port *)(
112                         debug_uarta_device.dev.platform_data))->mapbase;
113                 uart_console_debug_device = &debug_uarta_device;
114                 break;
115         }
116
117         if (!IS_ERR_OR_NULL(debug_uart_clk)) {
118                 struct clk *c;
119                 pr_info("The debug console clock name is %s\n",
120                                                 debug_uart_clk->name);
121                 c = tegra_get_clock_by_name("pll_p");
122                 if (IS_ERR_OR_NULL(c))
123                         pr_err("Not getting the parent clock pll_p\n");
124                 else
125                         clk_set_parent(debug_uart_clk, c);
126
127                 clk_enable(debug_uart_clk);
128                 clk_set_rate(debug_uart_clk, clk_get_rate(c));
129         } else {
130                 pr_err("Not getting the clock for debug consolei %d\n",
131                         debug_port_id);
132         }
133         return debug_port_id;
134 }