smdk2800_io_init.c revision 1.1
11.1Sbsh/* $NetBSD: smdk2800_io_init.c,v 1.1 2003/07/30 18:54:22 bsh Exp $ */ 21.1Sbsh 31.1Sbsh/* 41.1Sbsh * Copyright (c) 2002, 2003 Fujitsu Component Limited 51.1Sbsh * Copyright (c) 2002, 2003 Genetec Corporation 61.1Sbsh * All rights reserved. 71.1Sbsh * 81.1Sbsh * Redistribution and use in source and binary forms, with or without 91.1Sbsh * modification, are permitted provided that the following conditions 101.1Sbsh * are met: 111.1Sbsh * 1. Redistributions of source code must retain the above copyright 121.1Sbsh * notice, this list of conditions and the following disclaimer. 131.1Sbsh * 2. Redistributions in binary form must reproduce the above copyright 141.1Sbsh * notice, this list of conditions and the following disclaimer in the 151.1Sbsh * documentation and/or other materials provided with the distribution. 161.1Sbsh * 3. Neither the name of The Fujitsu Component Limited nor the name of 171.1Sbsh * Genetec corporation may not be used to endorse or promote products 181.1Sbsh * derived from this software without specific prior written permission. 191.1Sbsh * 201.1Sbsh * THIS SOFTWARE IS PROVIDED BY FUJITSU COMPONENT LIMITED AND GENETEC 211.1Sbsh * CORPORATION ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 221.1Sbsh * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 231.1Sbsh * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 241.1Sbsh * DISCLAIMED. IN NO EVENT SHALL FUJITSU COMPONENT LIMITED OR GENETEC 251.1Sbsh * CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 261.1Sbsh * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 271.1Sbsh * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 281.1Sbsh * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 291.1Sbsh * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 301.1Sbsh * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 311.1Sbsh * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 321.1Sbsh * SUCH DAMAGE. 331.1Sbsh */ 341.1Sbsh 351.1Sbsh#include <arm/s3c2xx0/s3c2800reg.h> 361.1Sbsh 371.1Sbsh#define EXTINTR_INIT ((EXTINTR_HIGH|EXTINTR_FALLING)<<28) | \ 381.1Sbsh ((EXTINTR_HIGH|EXTINTR_FALLING)<<24) | \ 391.1Sbsh ((EXTINTR_HIGH|EXTINTR_FALLING)<<20) | \ 401.1Sbsh ((EXTINTR_HIGH|EXTINTR_FALLING)<<16) | \ 411.1Sbsh ((EXTINTR_HIGH|EXTINTR_FALLING)<<12) | \ 421.1Sbsh ((EXTINTR_HIGH|EXTINTR_FALLING)<<8) | \ 431.1Sbsh ((EXTINTR_HIGH|EXTINTR_FALLING)<<4) | \ 441.1Sbsh ((EXTINTR_HIGH|EXTINTR_FALLING)) 451.1Sbsh#define FCLK 200000000 461.1Sbsh#define F_1MHZ 1000000 471.1Sbsh 481.1Sbsh#define IOW(a, d) (*(volatile unsigned int *)(a) = (d)) 491.1Sbsh#define IOR(a) (*(volatile unsigned int *)(a)) 501.1Sbsh#define SETLED(d) IOW(S3C2800_GPIO_BASE+GPIO_PDATC,(d)) 511.1Sbsh 521.1Sbshvoid smdk2800_io_init(void); 531.1Sbsh 541.1Sbshvoid 551.1Sbshsmdk2800_io_init(void) 561.1Sbsh{ 571.1Sbsh unsigned int hclk; 581.1Sbsh unsigned int pclk; 591.1Sbsh unsigned int tmdat; 601.1Sbsh 611.1Sbsh#define O PCON_OUTPUT 621.1Sbsh#define I PCON_INPUT 631.1Sbsh#define A PCON_ALTFUN 641.1Sbsh#define _ 0 651.1Sbsh#define _C(b7,b6,b5,b4,b3,b2,b1,b0) \ 661.1Sbsh ((b7<<14)|(b6<<12)|(b5<<10)|(b4<<8)|(b3<<6)|(b2<<4)|(b1<<2)|(b0<<0)) 671.1Sbsh 681.1Sbsh /* GPIO port */ 691.1Sbsh IOW(S3C2800_GPIO_BASE+GPIO_PCONA, _C(O,O,A,A,A,A,A,A)); 701.1Sbsh IOW(S3C2800_GPIO_BASE+GPIO_PUPA, 0xff); 711.1Sbsh IOW(S3C2800_GPIO_BASE+GPIO_PCONB, _C(I,O,A,A,A,A,A,A)); 721.1Sbsh IOW(S3C2800_GPIO_BASE+GPIO_PCONC, _C(_,_,_,_,O,A,A,A)); 731.1Sbsh IOW(S3C2800_GPIO_BASE+GPIO_PUPC, 0xff); 741.1Sbsh IOW(S3C2800_GPIO_BASE+GPIO_PCOND, _C(A,A,A,A,A,A,A,A)); 751.1Sbsh IOW(S3C2800_GPIO_BASE+GPIO_PUPD, 0xff); 761.1Sbsh IOW(S3C2800_GPIO_BASE+GPIO_PCONE, _C(O,O,O,O,A,A,A,A)); 771.1Sbsh IOW(S3C2800_GPIO_BASE+GPIO_PUPE, 0xff); 781.1Sbsh IOW(S3C2800_GPIO_BASE+GPIO_PCONF, _C(A,A,A,A,A,A,A,A)); 791.1Sbsh IOW(S3C2800_GPIO_BASE+GPIO_PUPF, 0xff); 801.1Sbsh IOW(S3C2800_GPIO_BASE+GPIO_EXTINTR, EXTINTR_INIT); 811.1Sbsh 821.1Sbsh#undef O 831.1Sbsh#undef I 841.1Sbsh#undef A 851.1Sbsh#undef _ 861.1Sbsh#undef _C 871.1Sbsh 881.1Sbsh /* Get clock value */ 891.1Sbsh if(IOR(S3C2800_CLKMAN_BASE+CLKMAN_CLKCON) & CLKCON_HCLK) 901.1Sbsh hclk = FCLK / 2; 911.1Sbsh else 921.1Sbsh hclk = FCLK; 931.1Sbsh 941.1Sbsh if(IOR(S3C2800_CLKMAN_BASE+CLKMAN_CLKCON) & CLKCON_PCLK) 951.1Sbsh pclk = hclk / 2; 961.1Sbsh else 971.1Sbsh pclk = hclk; 981.1Sbsh 991.1Sbsh /* Timer */ 1001.1Sbsh if((pclk/F_1MHZ) < 1) 1011.1Sbsh tmdat = 1<<16; 1021.1Sbsh else 1031.1Sbsh tmdat = (pclk/F_1MHZ)<<16; 1041.1Sbsh 1051.1Sbsh#define TMDAT_INIT 0xf424 1061.1Sbsh 1071.1Sbsh IOW(S3C2800_TIMER0_BASE+TIMER_TMDAT, (tmdat | TMDAT_INIT)); 1081.1Sbsh IOW(S3C2800_TIMER1_BASE+TIMER_TMDAT, (tmdat | TMDAT_INIT)); 1091.1Sbsh IOW(S3C2800_TIMER2_BASE+TIMER_TMDAT, (tmdat | TMDAT_INIT)); 1101.1Sbsh 1111.1Sbsh IOW(S3C2800_TIMER0_BASE+TIMER_TMCON, TMCON_MUX_DIV32 | TMCON_INTENA | TMCON_ENABLE); 1121.1Sbsh IOW(S3C2800_TIMER1_BASE+TIMER_TMCON, TMCON_MUX_DIV16 | TMCON_INTENA | TMCON_ENABLE); 1131.1Sbsh IOW(S3C2800_TIMER2_BASE+TIMER_TMCON, TMCON_MUX_DIV8 | TMCON_INTENA | TMCON_ENABLE); 1141.1Sbsh 1151.1Sbsh /* Interrupt controller */ 1161.1Sbsh IOW(S3C2800_INTCTL_BASE+INTCTL_INTMOD, 0); 1171.1Sbsh IOW(S3C2800_INTCTL_BASE+INTCTL_INTMSK, 0); 1181.1Sbsh 1191.1Sbsh /* Initial complete */ 1201.1Sbsh SETLED(0x0); /* All LEDs on (o o o) */ 1211.1Sbsh} 122