Merge branch 'for-np' of git://git.wormnet.eu/alex/ts78xx into orion/master
[pandora-kernel.git] / arch / mips / alchemy / devboards / db1x00 / board_setup.c
1 /*
2  *
3  * BRIEF MODULE DESCRIPTION
4  *      Alchemy Db1x00 board setup.
5  *
6  * Copyright 2000, 2008 MontaVista Software Inc.
7  * Author: MontaVista Software, Inc. <source@mvista.com>
8  *
9  *  This program is free software; you can redistribute  it and/or modify it
10  *  under  the terms of  the GNU General  Public License as published by the
11  *  Free Software Foundation;  either version 2 of the  License, or (at your
12  *  option) any later version.
13  *
14  *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
15  *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
16  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
17  *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
18  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19  *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
20  *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21  *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
22  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  *
25  *  You should have received a copy of the  GNU General Public License along
26  *  with this program; if not, write  to the Free Software Foundation, Inc.,
27  *  675 Mass Ave, Cambridge, MA 02139, USA.
28  */
29
30 #include <linux/init.h>
31
32 #include <asm/mach-au1x00/au1000.h>
33 #include <asm/mach-db1x00/db1x00.h>
34
35 #include <prom.h>
36
37
38 static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
39
40 const char *get_system_type(void)
41 {
42 #ifdef CONFIG_MIPS_BOSPORUS
43         return "Alchemy Bosporus Gateway Reference";
44 #else
45         return "Alchemy Db1x00";
46 #endif
47 }
48
49 void board_reset(void)
50 {
51         /* Hit BCSR.SW_RESET[RESET] */
52         bcsr->swreset = 0x0000;
53 }
54
55 void __init board_setup(void)
56 {
57         u32 pin_func = 0;
58         char *argptr;
59
60         argptr = prom_getcmdline();
61 #ifdef CONFIG_SERIAL_8250_CONSOLE
62         argptr = strstr(argptr, "console=");
63         if (argptr == NULL) {
64                 argptr = prom_getcmdline();
65                 strcat(argptr, " console=ttyS0,115200");
66         }
67 #endif
68
69 #ifdef CONFIG_FB_AU1100
70         argptr = strstr(argptr, "video=");
71         if (argptr == NULL) {
72                 argptr = prom_getcmdline();
73                 /* default panel */
74                 /*strcat(argptr, " video=au1100fb:panel:Sharp_320x240_16");*/
75         }
76 #endif
77
78 #if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000)
79         /* au1000 does not support vra, au1500 and au1100 do */
80         strcat(argptr, " au1000_audio=vra");
81         argptr = prom_getcmdline();
82 #endif
83
84         /* Not valid for Au1550 */
85 #if defined(CONFIG_IRDA) && \
86    (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100))
87         /* Set IRFIRSEL instead of GPIO15 */
88         pin_func = au_readl(SYS_PINFUNC) | SYS_PF_IRF;
89         au_writel(pin_func, SYS_PINFUNC);
90         /* Power off until the driver is in use */
91         bcsr->resets &= ~BCSR_RESETS_IRDA_MODE_MASK;
92         bcsr->resets |=  BCSR_RESETS_IRDA_MODE_OFF;
93         au_sync();
94 #endif
95         bcsr->pcmcia = 0x0000; /* turn off PCMCIA power */
96
97 #ifdef CONFIG_MIPS_MIRAGE
98         /* Enable GPIO[31:0] inputs */
99         au_writel(0, SYS_PININPUTEN);
100
101         /* GPIO[20] is output, tristate the other input primary GPIOs */
102         au_writel(~(1 << 20), SYS_TRIOUTCLR);
103
104         /* Set GPIO[210:208] instead of SSI_0 */
105         pin_func = au_readl(SYS_PINFUNC) | SYS_PF_S0;
106
107         /* Set GPIO[215:211] for LEDs */
108         pin_func |= 5 << 2;
109
110         /* Set GPIO[214:213] for more LEDs */
111         pin_func |= 5 << 12;
112
113         /* Set GPIO[207:200] instead of PCMCIA/LCD */
114         pin_func |= SYS_PF_LCD | SYS_PF_PC;
115         au_writel(pin_func, SYS_PINFUNC);
116
117         /*
118          * Enable speaker amplifier.  This should
119          * be part of the audio driver.
120          */
121         au_writel(au_readl(GPIO2_DIR) | 0x200, GPIO2_DIR);
122         au_writel(0x02000200, GPIO2_OUTPUT);
123 #endif
124
125         au_sync();
126
127 #ifdef CONFIG_MIPS_DB1000
128         printk(KERN_INFO "AMD Alchemy Au1000/Db1000 Board\n");
129 #endif
130 #ifdef CONFIG_MIPS_DB1500
131         printk(KERN_INFO "AMD Alchemy Au1500/Db1500 Board\n");
132 #endif
133 #ifdef CONFIG_MIPS_DB1100
134         printk(KERN_INFO "AMD Alchemy Au1100/Db1100 Board\n");
135 #endif
136 #ifdef CONFIG_MIPS_BOSPORUS
137         printk(KERN_INFO "AMD Alchemy Bosporus Board\n");
138 #endif
139 #ifdef CONFIG_MIPS_MIRAGE
140         printk(KERN_INFO "AMD Alchemy Mirage Board\n");
141 #endif
142 #ifdef CONFIG_MIPS_DB1550
143         printk(KERN_INFO "AMD Alchemy Au1550/Db1550 Board\n");
144 #endif
145 }