3 * David Müller ELSOFT AG Switzerland. d.mueller@elsoft.ch
5 * See file CREDITS for list of people who contributed to this
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
24 /************************************************
28 * common stuff for SAMSUNG S3C24X0 SoC
29 ************************************************/
34 typedef volatile u8 S3C24X0_REG8;
35 typedef volatile u16 S3C24X0_REG16;
36 typedef volatile u32 S3C24X0_REG32;
38 /* Memory controller (see manual chapter 5) */
39 struct s3c24x0_memctl {
41 S3C24X0_REG32 BANKCON[8];
42 S3C24X0_REG32 REFRESH;
43 S3C24X0_REG32 BANKSIZE;
49 /* USB HOST (see manual chapter 12) */
50 struct s3c24x0_usb_host {
51 S3C24X0_REG32 HcRevision;
52 S3C24X0_REG32 HcControl;
53 S3C24X0_REG32 HcCommonStatus;
54 S3C24X0_REG32 HcInterruptStatus;
55 S3C24X0_REG32 HcInterruptEnable;
56 S3C24X0_REG32 HcInterruptDisable;
58 S3C24X0_REG32 HcPeriodCuttendED;
59 S3C24X0_REG32 HcControlHeadED;
60 S3C24X0_REG32 HcControlCurrentED;
61 S3C24X0_REG32 HcBulkHeadED;
62 S3C24X0_REG32 HcBuldCurrentED;
63 S3C24X0_REG32 HcDoneHead;
64 S3C24X0_REG32 HcRmInterval;
65 S3C24X0_REG32 HcFmRemaining;
66 S3C24X0_REG32 HcFmNumber;
67 S3C24X0_REG32 HcPeriodicStart;
68 S3C24X0_REG32 HcLSThreshold;
69 S3C24X0_REG32 HcRhDescriptorA;
70 S3C24X0_REG32 HcRhDescriptorB;
71 S3C24X0_REG32 HcRhStatus;
72 S3C24X0_REG32 HcRhPortStatus1;
73 S3C24X0_REG32 HcRhPortStatus2;
77 /* INTERRUPT (see manual chapter 14) */
78 struct s3c24x0_interrupt {
82 S3C24X0_REG32 PRIORITY;
84 S3C24X0_REG32 INTOFFSET;
86 S3C24X0_REG32 SUBSRCPND;
87 S3C24X0_REG32 INTSUBMSK;
92 /* DMAS (see manual chapter 8) */
100 S3C24X0_REG32 DIDSTC;
106 S3C24X0_REG32 DMASKTRIG;
107 #ifdef CONFIG_S3C2400
108 S3C24X0_REG32 res[1];
110 #ifdef CONFIG_S3C2410
111 S3C24X0_REG32 res[7];
115 struct s3c24x0_dmas {
116 struct s3c24x0_dma dma[4];
120 /* CLOCK & POWER MANAGEMENT (see S3C2400 manual chapter 6) */
121 /* (see S3C2410 manual chapter 7) */
122 struct s3c24x0_clock_power {
123 S3C24X0_REG32 LOCKTIME;
124 S3C24X0_REG32 MPLLCON;
125 S3C24X0_REG32 UPLLCON;
126 S3C24X0_REG32 CLKCON;
127 S3C24X0_REG32 CLKSLOW;
128 S3C24X0_REG32 CLKDIVN;
132 /* LCD CONTROLLER (see manual chapter 15) */
134 S3C24X0_REG32 LCDCON1;
135 S3C24X0_REG32 LCDCON2;
136 S3C24X0_REG32 LCDCON3;
137 S3C24X0_REG32 LCDCON4;
138 S3C24X0_REG32 LCDCON5;
139 S3C24X0_REG32 LCDSADDR1;
140 S3C24X0_REG32 LCDSADDR2;
141 S3C24X0_REG32 LCDSADDR3;
142 S3C24X0_REG32 REDLUT;
143 S3C24X0_REG32 GREENLUT;
144 S3C24X0_REG32 BLUELUT;
145 S3C24X0_REG32 res[8];
146 S3C24X0_REG32 DITHMODE;
148 #ifdef CONFIG_S3C2410
149 S3C24X0_REG32 LCDINTPND;
150 S3C24X0_REG32 LCDSRCPND;
151 S3C24X0_REG32 LCDINTMSK;
152 S3C24X0_REG32 LPCSEL;
157 /* NAND FLASH (see S3C2410 manual chapter 6) */
158 struct s3c2410_nand {
159 S3C24X0_REG32 NFCONF;
161 S3C24X0_REG32 NFADDR;
162 S3C24X0_REG32 NFDATA;
163 S3C24X0_REG32 NFSTAT;
168 /* UART (see manual chapter 11) */
169 struct s3c24x0_uart {
174 S3C24X0_REG32 UTRSTAT;
175 S3C24X0_REG32 UERSTAT;
176 S3C24X0_REG32 UFSTAT;
177 S3C24X0_REG32 UMSTAT;
179 S3C24X0_REG8 res1[3];
181 S3C24X0_REG8 res2[3];
183 #else /* Little Endian */
185 S3C24X0_REG8 res1[3];
187 S3C24X0_REG8 res2[3];
189 S3C24X0_REG32 UBRDIV;
193 /* PWM TIMER (see manual chapter 10) */
194 struct s3c24x0_timer {
200 struct s3c24x0_timers {
204 struct s3c24x0_timer ch[4];
205 S3C24X0_REG32 TCNTB4;
206 S3C24X0_REG32 TCNTO4;
210 /* USB DEVICE (see manual chapter 13) */
211 struct s3c24x0_usb_dev_fifos {
214 S3C24X0_REG8 EP_FIFO_REG;
215 #else /* little endian */
216 S3C24X0_REG8 EP_FIFO_REG;
221 struct s3c24x0_usb_dev_dmas {
223 S3C24X0_REG8 res1[3];
224 S3C24X0_REG8 EP_DMA_CON;
225 S3C24X0_REG8 res2[3];
226 S3C24X0_REG8 EP_DMA_UNIT;
227 S3C24X0_REG8 res3[3];
228 S3C24X0_REG8 EP_DMA_FIFO;
229 S3C24X0_REG8 res4[3];
230 S3C24X0_REG8 EP_DMA_TTC_L;
231 S3C24X0_REG8 res5[3];
232 S3C24X0_REG8 EP_DMA_TTC_M;
233 S3C24X0_REG8 res6[3];
234 S3C24X0_REG8 EP_DMA_TTC_H;
235 #else /* little endian */
236 S3C24X0_REG8 EP_DMA_CON;
237 S3C24X0_REG8 res1[3];
238 S3C24X0_REG8 EP_DMA_UNIT;
239 S3C24X0_REG8 res2[3];
240 S3C24X0_REG8 EP_DMA_FIFO;
241 S3C24X0_REG8 res3[3];
242 S3C24X0_REG8 EP_DMA_TTC_L;
243 S3C24X0_REG8 res4[3];
244 S3C24X0_REG8 EP_DMA_TTC_M;
245 S3C24X0_REG8 res5[3];
246 S3C24X0_REG8 EP_DMA_TTC_H;
247 S3C24X0_REG8 res6[3];
251 struct s3c24x0_usb_device {
253 S3C24X0_REG8 res1[3];
254 S3C24X0_REG8 FUNC_ADDR_REG;
255 S3C24X0_REG8 res2[3];
256 S3C24X0_REG8 PWR_REG;
257 S3C24X0_REG8 res3[3];
258 S3C24X0_REG8 EP_INT_REG;
259 S3C24X0_REG8 res4[15];
260 S3C24X0_REG8 USB_INT_REG;
261 S3C24X0_REG8 res5[3];
262 S3C24X0_REG8 EP_INT_EN_REG;
263 S3C24X0_REG8 res6[15];
264 S3C24X0_REG8 USB_INT_EN_REG;
265 S3C24X0_REG8 res7[3];
266 S3C24X0_REG8 FRAME_NUM1_REG;
267 S3C24X0_REG8 res8[3];
268 S3C24X0_REG8 FRAME_NUM2_REG;
269 S3C24X0_REG8 res9[3];
270 S3C24X0_REG8 INDEX_REG;
271 S3C24X0_REG8 res10[7];
272 S3C24X0_REG8 MAXP_REG;
273 S3C24X0_REG8 res11[3];
274 S3C24X0_REG8 EP0_CSR_IN_CSR1_REG;
275 S3C24X0_REG8 res12[3];
276 S3C24X0_REG8 IN_CSR2_REG;
277 S3C24X0_REG8 res13[7];
278 S3C24X0_REG8 OUT_CSR1_REG;
279 S3C24X0_REG8 res14[3];
280 S3C24X0_REG8 OUT_CSR2_REG;
281 S3C24X0_REG8 res15[3];
282 S3C24X0_REG8 OUT_FIFO_CNT1_REG;
283 S3C24X0_REG8 res16[3];
284 S3C24X0_REG8 OUT_FIFO_CNT2_REG;
285 #else /* little endian */
286 S3C24X0_REG8 FUNC_ADDR_REG;
287 S3C24X0_REG8 res1[3];
288 S3C24X0_REG8 PWR_REG;
289 S3C24X0_REG8 res2[3];
290 S3C24X0_REG8 EP_INT_REG;
291 S3C24X0_REG8 res3[15];
292 S3C24X0_REG8 USB_INT_REG;
293 S3C24X0_REG8 res4[3];
294 S3C24X0_REG8 EP_INT_EN_REG;
295 S3C24X0_REG8 res5[15];
296 S3C24X0_REG8 USB_INT_EN_REG;
297 S3C24X0_REG8 res6[3];
298 S3C24X0_REG8 FRAME_NUM1_REG;
299 S3C24X0_REG8 res7[3];
300 S3C24X0_REG8 FRAME_NUM2_REG;
301 S3C24X0_REG8 res8[3];
302 S3C24X0_REG8 INDEX_REG;
303 S3C24X0_REG8 res9[7];
304 S3C24X0_REG8 MAXP_REG;
305 S3C24X0_REG8 res10[7];
306 S3C24X0_REG8 EP0_CSR_IN_CSR1_REG;
307 S3C24X0_REG8 res11[3];
308 S3C24X0_REG8 IN_CSR2_REG;
309 S3C24X0_REG8 res12[3];
310 S3C24X0_REG8 OUT_CSR1_REG;
311 S3C24X0_REG8 res13[7];
312 S3C24X0_REG8 OUT_CSR2_REG;
313 S3C24X0_REG8 res14[3];
314 S3C24X0_REG8 OUT_FIFO_CNT1_REG;
315 S3C24X0_REG8 res15[3];
316 S3C24X0_REG8 OUT_FIFO_CNT2_REG;
317 S3C24X0_REG8 res16[3];
318 #endif /* __BIG_ENDIAN */
319 struct s3c24x0_usb_dev_fifos fifo[5];
320 struct s3c24x0_usb_dev_dmas dma[5];
324 /* WATCH DOG TIMER (see manual chapter 18) */
325 struct s3c24x0_watchdog {
332 /* IIC (see manual chapter 20) */
334 S3C24X0_REG32 IICCON;
335 S3C24X0_REG32 IICSTAT;
336 S3C24X0_REG32 IICADD;
341 /* IIS (see manual chapter 21) */
345 S3C24X0_REG16 IISCON;
347 S3C24X0_REG16 IISMOD;
349 S3C24X0_REG16 IISPSR;
351 S3C24X0_REG16 IISFCON;
353 S3C24X0_REG16 IISFIFO;
354 #else /* little endian */
355 S3C24X0_REG16 IISCON;
357 S3C24X0_REG16 IISMOD;
359 S3C24X0_REG16 IISPSR;
361 S3C24X0_REG16 IISFCON;
363 S3C24X0_REG16 IISFIFO;
369 /* I/O PORT (see manual chapter 9) */
370 struct s3c24x0_gpio {
371 #ifdef CONFIG_S3C2400
399 S3C24X0_REG32 OPENCR;
401 S3C24X0_REG32 MISCCR;
402 S3C24X0_REG32 EXTINT;
404 #ifdef CONFIG_S3C2410
405 S3C24X0_REG32 GPACON;
406 S3C24X0_REG32 GPADAT;
407 S3C24X0_REG32 res1[2];
408 S3C24X0_REG32 GPBCON;
409 S3C24X0_REG32 GPBDAT;
412 S3C24X0_REG32 GPCCON;
413 S3C24X0_REG32 GPCDAT;
416 S3C24X0_REG32 GPDCON;
417 S3C24X0_REG32 GPDDAT;
420 S3C24X0_REG32 GPECON;
421 S3C24X0_REG32 GPEDAT;
424 S3C24X0_REG32 GPFCON;
425 S3C24X0_REG32 GPFDAT;
428 S3C24X0_REG32 GPGCON;
429 S3C24X0_REG32 GPGDAT;
432 S3C24X0_REG32 GPHCON;
433 S3C24X0_REG32 GPHDAT;
437 S3C24X0_REG32 MISCCR;
438 S3C24X0_REG32 DCLKCON;
439 S3C24X0_REG32 EXTINT0;
440 S3C24X0_REG32 EXTINT1;
441 S3C24X0_REG32 EXTINT2;
442 S3C24X0_REG32 EINTFLT0;
443 S3C24X0_REG32 EINTFLT1;
444 S3C24X0_REG32 EINTFLT2;
445 S3C24X0_REG32 EINTFLT3;
446 S3C24X0_REG32 EINTMASK;
447 S3C24X0_REG32 EINTPEND;
448 S3C24X0_REG32 GSTATUS0;
449 S3C24X0_REG32 GSTATUS1;
450 S3C24X0_REG32 GSTATUS2;
451 S3C24X0_REG32 GSTATUS3;
452 S3C24X0_REG32 GSTATUS4;
457 /* RTC (see manual chapter 17) */
460 S3C24X0_REG8 res1[67];
462 S3C24X0_REG8 res2[3];
464 S3C24X0_REG8 res3[11];
466 S3C24X0_REG8 res4[3];
468 S3C24X0_REG8 res5[3];
470 S3C24X0_REG8 res6[3];
471 S3C24X0_REG8 ALMHOUR;
472 S3C24X0_REG8 res7[3];
473 S3C24X0_REG8 ALMDATE;
474 S3C24X0_REG8 res8[3];
476 S3C24X0_REG8 res9[3];
477 S3C24X0_REG8 ALMYEAR;
478 S3C24X0_REG8 res10[3];
480 S3C24X0_REG8 res11[3];
482 S3C24X0_REG8 res12[3];
484 S3C24X0_REG8 res13[3];
485 S3C24X0_REG8 BCDHOUR;
486 S3C24X0_REG8 res14[3];
487 S3C24X0_REG8 BCDDATE;
488 S3C24X0_REG8 res15[3];
490 S3C24X0_REG8 res16[3];
492 S3C24X0_REG8 res17[3];
493 S3C24X0_REG8 BCDYEAR;
494 #else /* little endian */
495 S3C24X0_REG8 res0[64];
497 S3C24X0_REG8 res1[3];
499 S3C24X0_REG8 res2[11];
501 S3C24X0_REG8 res3[3];
503 S3C24X0_REG8 res4[3];
505 S3C24X0_REG8 res5[3];
506 S3C24X0_REG8 ALMHOUR;
507 S3C24X0_REG8 res6[3];
508 S3C24X0_REG8 ALMDATE;
509 S3C24X0_REG8 res7[3];
511 S3C24X0_REG8 res8[3];
512 S3C24X0_REG8 ALMYEAR;
513 S3C24X0_REG8 res9[3];
515 S3C24X0_REG8 res10[3];
517 S3C24X0_REG8 res11[3];
519 S3C24X0_REG8 res12[3];
520 S3C24X0_REG8 BCDHOUR;
521 S3C24X0_REG8 res13[3];
522 S3C24X0_REG8 BCDDATE;
523 S3C24X0_REG8 res14[3];
525 S3C24X0_REG8 res15[3];
527 S3C24X0_REG8 res16[3];
528 S3C24X0_REG8 BCDYEAR;
529 S3C24X0_REG8 res17[3];
534 /* ADC (see manual chapter 16) */
536 S3C24X0_REG32 ADCCON;
537 S3C24X0_REG32 ADCDAT;
541 /* ADC (see manual chapter 16) */
543 S3C24X0_REG32 ADCCON;
544 S3C24X0_REG32 ADCTSC;
545 S3C24X0_REG32 ADCDLY;
546 S3C24X0_REG32 ADCDAT0;
547 S3C24X0_REG32 ADCDAT1;
551 /* SPI (see manual chapter 22) */
552 struct s3c24x0_spi_channel {
554 S3C24X0_REG8 res1[3];
556 S3C24X0_REG8 res2[3];
558 S3C24X0_REG8 res3[3];
560 S3C24X0_REG8 res4[3];
562 S3C24X0_REG8 res5[3];
564 S3C24X0_REG8 res6[3];
565 S3C24X0_REG8 res7[16];
569 struct s3c24x0_spi_channel ch[S3C24X0_SPI_CHANNELS];
573 /* MMC INTERFACE (see S3C2400 manual chapter 19) */
576 S3C24X0_REG8 res1[3];
578 S3C24X0_REG8 res2[3];
580 S3C24X0_REG8 res3[3];
582 S3C24X0_REG8 res4[3];
585 S3C24X0_REG16 MMFSTA;
586 S3C24X0_REG8 res6[3];
590 S3C24X0_REG8 res8[3];
592 S3C24X0_REG32 MMRSP[4];
593 S3C24X0_REG8 res9[3];
595 S3C24X0_REG32 MMCMD1;
597 S3C24X0_REG16 MMCR16;
598 S3C24X0_REG8 res11[3];
602 S3C24X0_REG8 res1[3];
604 S3C24X0_REG8 res2[3];
606 S3C24X0_REG8 res3[3];
608 S3C24X0_REG8 res4[3];
609 S3C24X0_REG16 MMFSTA;
612 S3C24X0_REG8 res6[3];
616 S3C24X0_REG8 res8[3];
617 S3C24X0_REG32 MMRSP[4];
619 S3C24X0_REG8 res9[3];
620 S3C24X0_REG32 MMCMD1;
621 S3C24X0_REG16 MMCR16;
624 S3C24X0_REG8 res11[3];
629 /* SD INTERFACE (see S3C2410 manual chapter 19) */
631 S3C24X0_REG32 SDICON;
632 S3C24X0_REG32 SDIPRE;
633 S3C24X0_REG32 SDICARG;
634 S3C24X0_REG32 SDICCON;
635 S3C24X0_REG32 SDICSTA;
636 S3C24X0_REG32 SDIRSP0;
637 S3C24X0_REG32 SDIRSP1;
638 S3C24X0_REG32 SDIRSP2;
639 S3C24X0_REG32 SDIRSP3;
640 S3C24X0_REG32 SDIDTIMER;
641 S3C24X0_REG32 SDIBSIZE;
642 S3C24X0_REG32 SDIDCON;
643 S3C24X0_REG32 SDIDCNT;
644 S3C24X0_REG32 SDIDSTA;
645 S3C24X0_REG32 SDIFSTA;
653 S3C24X0_REG32 SDIIMSK;
656 #endif /*__S3C24X0_H__*/