xref: /openbmc/linux/arch/m68k/68000/dragen2.c (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
1a734bbf6SArnd Bergmann // SPDX-License-Identifier: GPL-2.0
2a734bbf6SArnd Bergmann /*
3a734bbf6SArnd Bergmann  *  Copyright (C) 1993 Hamish Macdonald
4a734bbf6SArnd Bergmann  *  Copyright (C) 1999 D. Jeff Dionne
5a734bbf6SArnd Bergmann  *  Copyright (C) 2001 Georges Menie, Ken Desmet
6a734bbf6SArnd Bergmann  *
7a734bbf6SArnd Bergmann  * This file is subject to the terms and conditions of the GNU General Public
8a734bbf6SArnd Bergmann  * License.  See the file COPYING in the main directory of this archive
9a734bbf6SArnd Bergmann  * for more details.
10a734bbf6SArnd Bergmann  */
11a734bbf6SArnd Bergmann #include <linux/init.h>
12a734bbf6SArnd Bergmann #include <asm/machdep.h>
13a734bbf6SArnd Bergmann #include <asm/MC68VZ328.h>
14b7311922SGreg Ungerer #include "m68328.h"
153f605ee1SGreg Ungerer #include "screen.h"
16a734bbf6SArnd Bergmann 
17a734bbf6SArnd Bergmann /***************************************************************************/
18*5aa52ccfSGeert Uytterhoeven /*                        Init Dragon Engine II hardware                   */
19a734bbf6SArnd Bergmann /***************************************************************************/
20a734bbf6SArnd Bergmann 
dragen2_reset(void)21a734bbf6SArnd Bergmann static void dragen2_reset(void)
22a734bbf6SArnd Bergmann {
23a734bbf6SArnd Bergmann 	local_irq_disable();
24a734bbf6SArnd Bergmann 
25a734bbf6SArnd Bergmann #ifdef CONFIG_INIT_LCD
26a734bbf6SArnd Bergmann 	PBDATA |= 0x20;				/* disable CCFL light */
27a734bbf6SArnd Bergmann 	PKDATA |= 0x4;				/* disable LCD controller */
28a734bbf6SArnd Bergmann 	LCKCON = 0;
29a734bbf6SArnd Bergmann #endif
30a734bbf6SArnd Bergmann 
31a734bbf6SArnd Bergmann 	__asm__ __volatile__(
32a734bbf6SArnd Bergmann 		"reset\n\t"
33a734bbf6SArnd Bergmann 		"moveal #0x04000000, %a0\n\t"
34a734bbf6SArnd Bergmann 		"moveal 0(%a0), %sp\n\t"
35a734bbf6SArnd Bergmann 		"moveal 4(%a0), %a0\n\t"
36a734bbf6SArnd Bergmann 		"jmp (%a0)"
37a734bbf6SArnd Bergmann 	);
38a734bbf6SArnd Bergmann }
39a734bbf6SArnd Bergmann 
init_dragen2(char * command,int size)40a734bbf6SArnd Bergmann void __init init_dragen2(char *command, int size)
41a734bbf6SArnd Bergmann {
42a734bbf6SArnd Bergmann 	mach_reset = dragen2_reset;
43a734bbf6SArnd Bergmann 
44a734bbf6SArnd Bergmann #ifdef CONFIG_DIRECT_IO_ACCESS
45a734bbf6SArnd Bergmann 	SCR = 0x10;					/* allow user access to internal registers */
46a734bbf6SArnd Bergmann #endif
47a734bbf6SArnd Bergmann 
48a734bbf6SArnd Bergmann 	/* CSGB Init */
49a734bbf6SArnd Bergmann 	CSGBB = 0x4000;
50a734bbf6SArnd Bergmann 	CSB = 0x1a1;
51a734bbf6SArnd Bergmann 
52a734bbf6SArnd Bergmann 	/* CS8900 init */
53a734bbf6SArnd Bergmann 	/* PK3: hardware sleep function pin, active low */
54a734bbf6SArnd Bergmann 	PKSEL |= PK(3);				/* select pin as I/O */
55a734bbf6SArnd Bergmann 	PKDIR |= PK(3);				/* select pin as output */
56a734bbf6SArnd Bergmann 	PKDATA |= PK(3);			/* set pin high */
57a734bbf6SArnd Bergmann 
58a734bbf6SArnd Bergmann 	/* PF5: hardware reset function pin, active high */
59a734bbf6SArnd Bergmann 	PFSEL |= PF(5);				/* select pin as I/O */
60a734bbf6SArnd Bergmann 	PFDIR |= PF(5);				/* select pin as output */
61a734bbf6SArnd Bergmann 	PFDATA &= ~PF(5);			/* set pin low */
62a734bbf6SArnd Bergmann 
63a734bbf6SArnd Bergmann 	/* cs8900 hardware reset */
64a734bbf6SArnd Bergmann 	PFDATA |= PF(5);
65a734bbf6SArnd Bergmann 	{ int i; for (i = 0; i < 32000; ++i); }
66a734bbf6SArnd Bergmann 	PFDATA &= ~PF(5);
67a734bbf6SArnd Bergmann 
68a734bbf6SArnd Bergmann 	/* INT1 enable (cs8900 IRQ) */
69a734bbf6SArnd Bergmann 	PDPOL &= ~PD(1);			/* active high signal */
70a734bbf6SArnd Bergmann 	PDIQEG &= ~PD(1);
71a734bbf6SArnd Bergmann 	PDIRQEN |= PD(1);			/* IRQ enabled */
72a734bbf6SArnd Bergmann 
73a734bbf6SArnd Bergmann #ifdef CONFIG_INIT_LCD
74a734bbf6SArnd Bergmann 	/* initialize LCD controller */
75a734bbf6SArnd Bergmann 	LSSA = (long) screen_bits;
76a734bbf6SArnd Bergmann 	LVPW = 0x14;
77a734bbf6SArnd Bergmann 	LXMAX = 0x140;
78a734bbf6SArnd Bergmann 	LYMAX = 0xef;
79a734bbf6SArnd Bergmann 	LRRA = 0;
80a734bbf6SArnd Bergmann 	LPXCD = 3;
81a734bbf6SArnd Bergmann 	LPICF = 0x08;
82a734bbf6SArnd Bergmann 	LPOLCF = 0;
83a734bbf6SArnd Bergmann 	LCKCON = 0x80;
84a734bbf6SArnd Bergmann 	PCPDEN = 0xff;
85a734bbf6SArnd Bergmann 	PCSEL = 0;
86a734bbf6SArnd Bergmann 
87a734bbf6SArnd Bergmann 	/* Enable LCD controller */
88a734bbf6SArnd Bergmann 	PKDIR |= 0x4;
89a734bbf6SArnd Bergmann 	PKSEL |= 0x4;
90a734bbf6SArnd Bergmann 	PKDATA &= ~0x4;
91a734bbf6SArnd Bergmann 
92a734bbf6SArnd Bergmann 	/* Enable CCFL backlighting circuit */
93a734bbf6SArnd Bergmann 	PBDIR |= 0x20;
94a734bbf6SArnd Bergmann 	PBSEL |= 0x20;
95a734bbf6SArnd Bergmann 	PBDATA &= ~0x20;
96a734bbf6SArnd Bergmann 
97a734bbf6SArnd Bergmann 	/* contrast control register */
98a734bbf6SArnd Bergmann 	PFDIR |= 0x1;
99a734bbf6SArnd Bergmann 	PFSEL &= ~0x1;
100a734bbf6SArnd Bergmann 	PWMR = 0x037F;
101a734bbf6SArnd Bergmann #endif
102a734bbf6SArnd Bergmann }
103