Merge branch 'master' of git://www.denx.de/git/u-boot-avr32
[platform/kernel/u-boot.git] / board / linkstation / hwctl.c
1 /*
2  * hwctl.c
3  *
4  * LinkStation HW Control Driver
5  *
6  * Copyright (C) 2001-2004  BUFFALO INC.
7  *
8  * This software may be used and distributed according to the terms of
9  * the GNU General Public License (GPL), incorporated herein by reference.
10  * Drivers based on or derived from this code fall under the GPL and must
11  * retain the authorship, copyright and license notice.  This file is not
12  * a complete program and may only be used when the entire operating
13  * system is licensed under the GPL.
14  *
15  */
16
17 #include <config.h>
18 #include <common.h>
19 #include <command.h>
20 #include <asm/io.h>
21
22 #define mdelay(n)       udelay((n)*1000)
23
24 #define AVR_PORT CFG_NS16550_COM2
25
26 /* 2005.5.10 BUFFALO add */
27 /*--------------------------------------------------------------*/
28 static inline void miconCntl_SendUart(unsigned char dat)
29 {
30         out_8((unsigned char *)AVR_PORT, dat);
31         mdelay(1);
32 }
33
34 /*--------------------------------------------------------------*/
35 void miconCntl_SendCmd(unsigned char dat)
36 {
37         int i;
38
39         for (i=0; i<4; i++){
40                 miconCntl_SendUart(dat);
41         }
42 }
43
44 /*--------------------------------------------------------------*/
45 void miconCntl_FanLow(void)
46 {
47 #ifdef CONFIG_HTGL
48         miconCntl_SendCmd(0x5C);
49 #endif
50 }
51
52 /*--------------------------------------------------------------*/
53 void miconCntl_FanHigh(void)
54 {
55 #ifdef CONFIG_HTGL
56         miconCntl_SendCmd(0x5D);
57 #endif
58 }
59
60 /*--------------------------------------------------------------*/
61 /* 1000Mbps */
62 void miconCntl_Eth1000M(int up)
63 {
64 #ifdef CONFIG_HTGL
65         if (up)
66                 miconCntl_SendCmd(0x93);
67         else
68                 miconCntl_SendCmd(0x92);
69 #else
70         if (up)
71                 miconCntl_SendCmd(0x5D);
72         else
73                 miconCntl_SendCmd(0x5C);
74 #endif
75 }
76
77 /*--------------------------------------------------------------*/
78 /* 100Mbps */
79 void miconCntl_Eth100M(int up)
80 {
81 #ifdef CONFIG_HTGL
82         if (up)
83                 miconCntl_SendCmd(0x91);
84         else
85                 miconCntl_SendCmd(0x90);
86 #else
87         if (up)
88                 miconCntl_SendCmd(0x5C);
89 #endif
90 }
91
92 /*--------------------------------------------------------------*/
93 /* 10Mbps */
94 void miconCntl_Eth10M(int up)
95 {
96 #ifdef CONFIG_HTGL
97         if (up)
98                 miconCntl_SendCmd(0x8F);
99         else
100                 miconCntl_SendCmd(0x8E);
101 #else
102         if (up)
103                 miconCntl_SendCmd(0x5C);
104 #endif
105 }
106
107 /*--------------------------------------------------------------*/
108 /*  */
109 void miconCntl_5f(void)
110 {
111         miconCntl_SendCmd(0x5F);
112         mdelay(100);
113 }
114
115 /*--------------------------------------------------------------*/
116 /* "reboot start" signal */
117 void miconCntl_Reboot(void)
118 {
119         miconCntl_SendCmd(0x43);
120 }
121
122 /*--------------------------------------------------------------*/
123 /* Disable watchdog timer */
124 void miconCntl_DisWDT(void)
125 {
126         miconCntl_SendCmd(0x41); /* A */
127         miconCntl_SendCmd(0x46); /* F */
128         miconCntl_SendCmd(0x4A); /* J */
129         miconCntl_SendCmd(0x3E); /* > */
130         miconCntl_SendCmd(0x56); /* V */
131         miconCntl_SendCmd(0x3E); /* > */
132         miconCntl_SendCmd(0x5A); /* Z */
133         miconCntl_SendCmd(0x56); /* V */
134         miconCntl_SendCmd(0x4B); /* K */
135 }