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 Bergmannstatic 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 Bergmannvoid __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