/***************************************************************************
 *             __________               __   ___.
 *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
 *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
 *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
 *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
 *                     \/            \/     \/    \/            \/
 *
 * Copyright (C) 2007 by Karl Kurbjun
 * Copyright (C) 2008 by Maurus Cuelenaere
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ****************************************************************************/

/** All register offset definitions for the TI DM320
 * Taken from: http://svn.neurostechnology.com/filedetails.php?repname=neuros-bsp&path=%2Ftrunk%2Fkernels%2Flinux-2.6.15%2Finclude%2Fasm-arm%2Farch-ntosd-dm320%2Fio_registers.h&rev=0&sc=0
 */

#ifndef __DM320_H__
#define __DM320_H__

#if !defined(__ASSEMBLER__) && !defined(__LD__)
/* These variables are created during linking (app/boot.lds) */
extern unsigned long _lcdbuf;
#ifdef MROBE_500
extern unsigned long _lcdbuf2;
#endif
extern unsigned long _ttbstart;
#endif

/* See https://www.heyrick.co.uk/blog/files/datasheets/tms320dm320part1.pdf */
#define CACHEALIGN_BITS  5
#define CACHEALIGN_SIZE  32

#define TTB_BASE_ADDR    (_ttbstart) /* End of memory */
#define FRAME            ((short *) (&_lcdbuf))  /* Right after TTB */
#ifdef MROBE_500
#define FRAME2            ((short *) (&_lcdbuf2))  /* Right after FRAME */
#endif

#ifndef LCD_NATIVE_WIDTH
#define LCD_NATIVE_WIDTH LCD_WIDTH
#endif

#ifndef LCD_NATIVE_HEIGHT
#define LCD_NATIVE_HEIGHT LCD_HEIGHT
#endif

/* must be 16Kb (0x4000) aligned */
#define TTB_SIZE        (0x4000)

#ifdef MROBE_500
/* Give this 1 meg to allow it to align to the MMU boundary */
#define LCD_FUDGE       (LCD_NATIVE_WIDTH%32)
#define LCD_BUFFER_SIZE ((LCD_NATIVE_WIDTH+LCD_FUDGE)*LCD_NATIVE_HEIGHT*2)
#define LCD_TTB_AREA    (0x100000*((LCD_BUFFER_SIZE>>19)+1))
#else
#define LCD_BUFFER_SIZE (LCD_NATIVE_WIDTH*LCD_NATIVE_HEIGHT*2)
#define LCD_TTB_AREA    (TTB_SIZE + LCD_BUFFER_SIZE)
#endif

#define PHY_IO_BASE      0x00030000
#define DM320_REG(addr)  (*(volatile unsigned short *)(PHY_IO_BASE + (addr)))
#define PHY_IO_BASE2     0x00060000
#define DM320_REG2(addr) (*(volatile unsigned int *)(PHY_IO_BASE2 + (addr)))

#define COP_IO_BASE     0x00090000
#define DM320_COP(addr) (*(volatile unsigned short *)(COP_IO_BASE + (addr)))

/* This needs to be 2048 byte aligned, but USB_QHARRAY_ATTR should take care
 * of that */
#define USB_QHARRAY_ATTR   __attribute__((section(".qharray"),nocommon,aligned(4)))
#define USB_DEVBSS_ATTR    IBSS_ATTR


/* Timer 0-3 */
#define IO_TIMER0_TMMD            DM320_REG(0x0000)
#define IO_TIMER0_TMRSV0          DM320_REG(0x0002)
#define IO_TIMER0_TMPRSCL         DM320_REG(0x0004)
#define IO_TIMER0_TMDIV           DM320_REG(0x0006)
#define IO_TIMER0_TMTRG           DM320_REG(0x0008)
#define IO_TIMER0_TMCNT           DM320_REG(0x000A)

#define IO_TIMER1_TMMD            DM320_REG(0x0080)
#define IO_TIMER1_TMRSV0          DM320_REG(0x0082)
#define IO_TIMER1_TMPRSCL         DM320_REG(0x0084)
#define IO_TIMER1_TMDIV           DM320_REG(0x0086)
#define IO_TIMER1_TMTRG           DM320_REG(0x0088)
#define IO_TIMER1_TMCNT           DM320_REG(0x008A)

#define IO_TIMER2_TMMD            DM320_REG(0x0100)
#define IO_TIMER2_TMVDCLR         DM320_REG(0x0102)
#define IO_TIMER2_TMPRSCL         DM320_REG(0x0104)
#define IO_TIMER2_TMDIV           DM320_REG(0x0106)
#define IO_TIMER2_TMTRG           DM320_REG(0x0108)
#define IO_TIMER2_TMCNT           DM320_REG(0x010A)

#define IO_TIMER3_TMMD            DM320_REG(0x0180)
#define IO_TIMER3_TMVDCLR         DM320_REG(0x0182)
#define IO_TIMER3_TMPRSCL         DM320_REG(0x0184)
#define IO_TIMER3_TMDIV           DM320_REG(0x0186)
#define IO_TIMER3_TMTRG           DM320_REG(0x0188)
#define IO_TIMER3_TMCNT           DM320_REG(0x018A)

/* Serial 0/1 */
#define IO_SERIAL0_TX_DATA        DM320_REG(0x0200)
#define IO_SERIAL0_RX_DATA        DM320_REG(0x0202)
#define IO_SERIAL0_TX_ENABLE      DM320_REG(0x0204)
#define IO_SERIAL0_MODE           DM320_REG(0x0206)
#define IO_SERIAL0_DMA_TRIGGER    DM320_REG(0x0208)
#define IO_SERIAL0_DMA_MODE       DM320_REG(0x020A)
#define IO_SERIAL0_DMA_SDRAM_LOW  DM320_REG(0x020C)
#define IO_SERIAL0_DMA_SDRAM_HI   DM320_REG(0x020E)
#define IO_SERIAL0_DMA_STATUS     DM320_REG(0x0210)

#define IO_SERIAL1_TX_DATA        DM320_REG(0x0280)
#define IO_SERIAL1_RX_DATA        DM320_REG(0x0282)
#define IO_SERIAL1_TX_ENABLE      DM320_REG(0x0284)
#define IO_SERIAL1_MODE           DM320_REG(0x0286)

/* UART 0/1 */
#define IO_UART0_DTRR             DM320_REG(0x0300)
#define IO_UART0_BRSR             DM320_REG(0x0302)
#define IO_UART0_MSR              DM320_REG(0x0304)
#define IO_UART0_RFCR             DM320_REG(0x0306)
#define IO_UART0_TFCR             DM320_REG(0x0308)
#define IO_UART0_LCR              DM320_REG(0x030A)
#define IO_UART0_SR               DM320_REG(0x030C)

#define IO_UART1_DTRR             DM320_REG(0x0380)
#define IO_UART1_BRSR             DM320_REG(0x0382)
#define IO_UART1_MSR              DM320_REG(0x0384)
#define IO_UART1_RFCR             DM320_REG(0x0386)
#define IO_UART1_TFCR             DM320_REG(0x0388)
#define IO_UART1_LCR              DM320_REG(0x038A)
#define IO_UART1_SR               DM320_REG(0x038C)

/* Watchdog Timer */
#define IO_WATCHDOG_MODE          DM320_REG(0x0400)
#define IO_WATCHDOG_RESET         DM320_REG(0x0402)
#define IO_WATCHDOG_PRESCALAR     DM320_REG(0x0404)
#define IO_WATCHDOG_DIVISOR       DM320_REG(0x0406)
#define IO_WATCHDOG_EXT_RESET     DM320_REG(0x0408)

/* MMC/SD Controller */
#define IO_MMC_CONTROL            DM320_REG(0x0480)
#define IO_MMC_MEM_CLK_CONTROL    DM320_REG(0x0482)
#define IO_MMC_STATUS0            DM320_REG(0x0484)
#define IO_MMC_STATUS1            DM320_REG(0x0486)
#define IO_MMC_INT_ENABLE         DM320_REG(0x0488)
#define IO_MMC_RESPONSE_TIMEOUT   DM320_REG(0x048A)
#define IO_MMC_READ_TIMEOUT       DM320_REG(0x048C)
#define IO_MMC_BLOCK_LENGTH       DM320_REG(0x048E)
#define IO_MMC_NR_BLOCKS          DM320_REG(0x0490)
#define IO_MMC_NR_BLOCKS_COUNT    DM320_REG(0x0492)
#define IO_MMC_RX_DATA            DM320_REG(0x0494)
#define IO_MMC_TX_DATA            DM320_REG(0x0496)
#define IO_MMC_COMMAND            DM320_REG(0x0498)
#define IO_MMC_ARG_LOW            DM320_REG(0x049A)
#define IO_MMC_ARG_HI             DM320_REG(0x049C)
#define IO_MMC_RESPONSE0          DM320_REG(0x049E)
#define IO_MMC_RESPONSE1          DM320_REG(0x04A0)
#define IO_MMC_RESPONSE2          DM320_REG(0x04A2)
#define IO_MMC_RESPONSE3          DM320_REG(0x04A4)
#define IO_MMC_RESPONSE4          DM320_REG(0x04A6)
#define IO_MMC_RESPONSE5          DM320_REG(0x04A8)
#define IO_MMC_RESPONSE6          DM320_REG(0x04AA)
#define IO_MMC_RESPONSE7          DM320_REG(0x04AC)
#define IO_MMC_SPI_DATA           DM320_REG(0x04AE)
#define IO_MMC_SPI_ERR            DM320_REG(0x04B0)
#define IO_MMC_COMMAND_INDEX      DM320_REG(0x04B2)
#define IO_MMC_CLK_START_PHASE    DM320_REG(0x04B4)
#define IO_MMC_RESPONSE_TOUT_CNT  DM320_REG(0x04B6)
#define IO_MMC_READ_TOUT_CNT      DM320_REG(0x04B8)
#define IO_MMC_BLOCK_LENGTH_CNT   DM320_REG(0x04BA)

#define IO_MMC_SD_DMA_TRIGGER     DM320_REG(0x04BC)
#define IO_MMC_SD_DMA_MODE        DM320_REG(0x04BE)
#define IO_MMC_SD_DMA_ADDR_LOW    DM320_REG(0x04C0)
#define IO_MMC_SD_DMA_ADDR_HI     DM320_REG(0x04C2)
#define IO_MMC_SD_DMA_STATUS0     DM320_REG(0x04C4)
#define IO_MMC_SD_DMA_STATUS1     DM320_REG(0x04C6)
#define IO_MMC_SD_DMA_TIMEOUT     DM320_REG(0x04C8)

#define IO_SDIO_CONTROL           DM320_REG(0x04CA)
#define IO_SDIO_STATUS0           DM320_REG(0x04CC)
#define IO_SDIO_INT_ENABLE        DM320_REG(0x04CE)
#define IO_SDIO_INT_STATUS        DM320_REG(0x04D0)

/* Interrupt Controller */
#define IO_INTC_FIQ0              DM320_REG(0x0500)
#define IO_INTC_FIQ1              DM320_REG(0x0502)
#define IO_INTC_FIQ2              DM320_REG(0x0504)
#define IO_INTC_IRQ0              DM320_REG(0x0508)
#define IO_INTC_IRQ1              DM320_REG(0x050A)
#define IO_INTC_IRQ2              DM320_REG(0x050C)
#define IO_INTC_FIQENTRY0         DM320_REG(0x0510)
#define IO_INTC_FIQENTRY1         DM320_REG(0x0512)
#define IO_INTC_FIQ_LOCK_ADDR0    DM320_REG(0x0514)
#define IO_INTC_FIQ_LOCK_ADDR1    DM320_REG(0x0516)
#define IO_INTC_IRQENTRY0         DM320_REG(0x0518)
#define IO_INTC_IRQENTRY1         DM320_REG(0x051A)
#define IO_INTC_IRQ_LOCK_ADDR0    DM320_REG(0x051C)
#define IO_INTC_IRQ_LOCK_ADDR1    DM320_REG(0x051E)
#define IO_INTC_FISEL0            DM320_REG(0x0520)
#define IO_INTC_FISEL1            DM320_REG(0x0522)
#define IO_INTC_FISEL2            DM320_REG(0x0524)
#define IO_INTC_EINT0             DM320_REG(0x0528)
#define IO_INTC_EINT1             DM320_REG(0x052A)
#define IO_INTC_EINT2             DM320_REG(0x052C)
#define IO_INTC_RAW               DM320_REG(0x0530)
#define IO_INTC_ENTRY_TBA0        DM320_REG(0x0538)
#define IO_INTC_ENTRY_TBA1        DM320_REG(0x053A)
#define IO_INTC_PRIORITY0         DM320_REG(0x0540)
#define IO_INTC_PRIORITY1         DM320_REG(0x0542)
#define IO_INTC_PRIORITY2         DM320_REG(0x0544)
#define IO_INTC_PRIORITY3         DM320_REG(0x0546)
#define IO_INTC_PRIORITY4         DM320_REG(0x0548)
#define IO_INTC_PRIORITY5         DM320_REG(0x054A)
#define IO_INTC_PRIORITY6         DM320_REG(0x054C)
#define IO_INTC_PRIORITY7         DM320_REG(0x054E)
#define IO_INTC_PRIORITY8         DM320_REG(0x0550)
#define IO_INTC_PRIORITY9         DM320_REG(0x0552)
#define IO_INTC_PRIORITY10        DM320_REG(0x0554)
#define IO_INTC_PRIORITY11        DM320_REG(0x0556)
#define IO_INTC_PRIORITY12        DM320_REG(0x0558)
#define IO_INTC_PRIORITY13        DM320_REG(0x055A)
#define IO_INTC_PRIORITY14        DM320_REG(0x055C)
#define IO_INTC_PRIORITY15        DM320_REG(0x055E)
#define IO_INTC_PRIORITY16        DM320_REG(0x0560)
#define IO_INTC_PRIORITY17        DM320_REG(0x0562)
#define IO_INTC_PRIORITY18        DM320_REG(0x0564)
#define IO_INTC_PRIORITY19        DM320_REG(0x0566)
#define IO_INTC_PRIORITY20        DM320_REG(0x0568)
#define IO_INTC_PRIORITY21        DM320_REG(0x056A)
#define IO_INTC_PRIORITY22        DM320_REG(0x056C)

/* GIO Controller */
#define IO_GIO_DIR0               DM320_REG(0x0580)
#define IO_GIO_DIR1               DM320_REG(0x0582)
#define IO_GIO_DIR2               DM320_REG(0x0584)
#define IO_GIO_INV0               DM320_REG(0x0586)
#define IO_GIO_INV1               DM320_REG(0x0588)
#define IO_GIO_INV2               DM320_REG(0x058A)
#define IO_GIO_BITSET0            DM320_REG(0x058C)
#define IO_GIO_BITSET1            DM320_REG(0x058E)
#define IO_GIO_BITSET2            DM320_REG(0x0590)
#define IO_GIO_BITCLR0            DM320_REG(0x0592)
#define IO_GIO_BITCLR1            DM320_REG(0x0594)
#define IO_GIO_BITCLR2            DM320_REG(0x0596)
#define IO_GIO_IRQPORT            DM320_REG(0x0598)
#define IO_GIO_IRQEDGE            DM320_REG(0x059A)
#define IO_GIO_CHAT0              DM320_REG(0x059C)
#define IO_GIO_CHAT1              DM320_REG(0x059E)
#define IO_GIO_CHAT2              DM320_REG(0x05A0)
#define IO_GIO_NCHAT              DM320_REG(0x05A2)
#define IO_GIO_FSEL0              DM320_REG(0x05A4)
#define IO_GIO_FSEL1              DM320_REG(0x05A6)
#define IO_GIO_FSEL2              DM320_REG(0x05A8)
#define IO_GIO_FSEL3              DM320_REG(0x05AA)
#define IO_GIO_FSEL4              DM320_REG(0x05AC)
#define IO_GIO_CARD_SET           DM320_REG(0x05AE)
#define IO_GIO_CARD_ST            DM320_REG(0x05B0)

/* DSP Controller */
#define IO_DSPC_HPIB_CONTROL      DM320_REG(0x0600)
#define IO_DSPC_HPIB_STATUS       DM320_REG(0x0602)

/* OSD Controller */
#define IO_OSD_MODE               DM320_REG(0x0680)
#define IO_OSD_VIDWINMD           DM320_REG(0x0682)
#define IO_OSD_OSDWINMD0          DM320_REG(0x0684)
#define IO_OSD_OSDWINMD1          DM320_REG(0x0686)
#define IO_OSD_ATRMD              DM320_REG(0x0688)
#define IO_OSD_RECTCUR            DM320_REG(0x0688)
#define IO_OSD_RESERVED           DM320_REG(0x068A)
#define IO_OSD_VIDWIN0OFST        DM320_REG(0x068C)
#define IO_OSD_VIDWIN1OFST        DM320_REG(0x068E)
#define IO_OSD_OSDWIN0OFST        DM320_REG(0x0690)
#define IO_OSD_OSDWIN1OFST        DM320_REG(0x0692)
#define IO_OSD_VIDWINADH          DM320_REG(0x0694)
#define IO_OSD_VIDWIN0ADL         DM320_REG(0x0696)
#define IO_OSD_VIDWIN1ADL         DM320_REG(0x0698)
#define IO_OSD_OSDWINADH          DM320_REG(0x069A)
#define IO_OSD_OSDWIN0ADL         DM320_REG(0x069C)
#define IO_OSD_OSDWIN1ADL         DM320_REG(0x069E)
#define IO_OSD_BASEPX             DM320_REG(0x06A0)
#define IO_OSD_BASEPY             DM320_REG(0x06A2)
#define IO_OSD_VIDWIN0XP          DM320_REG(0x06A4)
#define IO_OSD_VIDWIN0YP          DM320_REG(0x06A6)
#define IO_OSD_VIDWIN0XL          DM320_REG(0x06A8)
#define IO_OSD_VIDWIN0YL          DM320_REG(0x06AA)
#define IO_OSD_VIDWIN1XP          DM320_REG(0x06AC)
#define IO_OSD_VIDWIN1YP          DM320_REG(0x06AE)
#define IO_OSD_VIDWIN1XL          DM320_REG(0x06B0)
#define IO_OSD_VIDWIN1YL          DM320_REG(0x06B2)

#define IO_OSD_OSDWIN0XP          DM320_REG(0x06B4)
#define IO_OSD_OSDWIN0YP          DM320_REG(0x06B6)
#define IO_OSD_OSDWIN0XL          DM320_REG(0x06B8)
#define IO_OSD_OSDWIN0YL          DM320_REG(0x06BA)
#define IO_OSD_OSDWIN1XP          DM320_REG(0x06BC)
#define IO_OSD_OSDWIN1YP          DM320_REG(0x06BE)
#define IO_OSD_OSDWIN1XL          DM320_REG(0x06C0)
#define IO_OSD_OSDWIN1YL          DM320_REG(0x06C2)
#define IO_OSD_CURXP              DM320_REG(0x06C4)
#define IO_OSD_CURYP              DM320_REG(0x06C6)
#define IO_OSD_CURXL              DM320_REG(0x06C8)
#define IO_OSD_CURYL              DM320_REG(0x06CA)

#define IO_OSD_W0BMP01            DM320_REG(0x06D0)
#define IO_OSD_W0BMP23            DM320_REG(0x06D2)
#define IO_OSD_W0BMP45            DM320_REG(0x06D4)
#define IO_OSD_W0BMP67            DM320_REG(0x06D6)
#define IO_OSD_W0BMP89            DM320_REG(0x06D8)
#define IO_OSD_W0BMPAB            DM320_REG(0x06DA)
#define IO_OSD_W0BMPCD            DM320_REG(0x06DC)
#define IO_OSD_W0BMPEF            DM320_REG(0x06DE)

#define IO_OSD_W1BMP01            DM320_REG(0x06E0)
#define IO_OSD_W1BMP23            DM320_REG(0x06E2)
#define IO_OSD_W1BMP45            DM320_REG(0x06E4)
#define IO_OSD_W1BMP67            DM320_REG(0x06E6)
#define IO_OSD_W1BMP89            DM320_REG(0x06E8)
#define IO_OSD_W1BMPAB            DM320_REG(0x06EA)
#define IO_OSD_W1BMPCD            DM320_REG(0x06EC)
#define IO_OSD_W1BMPEF            DM320_REG(0x06EE)

#define IO_OSD_MISCCTL            DM320_REG(0x06F4)
#define IO_OSD_CLUTRAMYCB         DM320_REG(0x06F6)
#define IO_OSD_CLUTRAMCR          DM320_REG(0x06F8)

#define IO_OSD_PPWIN0ADH          DM320_REG(0x06FC)
#define IO_OSD_PPWIN0ADL          DM320_REG(0x06FE)


/* CCD Controller */
#define IO_CCD_SYNCEN             DM320_REG(0x0700)
#define IO_CCD_MODESET            DM320_REG(0x0702)
#define IO_CCD_HDWIDTH            DM320_REG(0x0704)
#define IO_CCD_VDWIDTH            DM320_REG(0x0706)
#define IO_CCD_PPLN               DM320_REG(0x0708)
#define IO_CCD_LPFR               DM320_REG(0x070A)
#define IO_CCD_SPH                DM320_REG(0x070C)
#define IO_CCD_NPH                DM320_REG(0x070E)
#define IO_CCD_SLV0               DM320_REG(0x0710)
#define IO_CCD_SLV1               DM320_REG(0x0712)
#define IO_CCD_NLV                DM320_REG(0x0714)
#define IO_CCD_CULH               DM320_REG(0x0716)
#define IO_CCD_CULV               DM320_REG(0x0718)
#define IO_CCD_HSIZE              DM320_REG(0x071A)
#define IO_CCD_SDOFST             DM320_REG(0x071C)
#define IO_CCD_STADRH             DM320_REG(0x071E)
#define IO_CCD_STADRL             DM320_REG(0x0720)
#define IO_CCD_CLAMP              DM320_REG(0x0722)
#define IO_CCD_DCSUB              DM320_REG(0x0724)
#define IO_CCD_COLPTN             DM320_REG(0x0726)
#define IO_CCD_BLKCMP0            DM320_REG(0x0728)
#define IO_CCD_BLKCMP1            DM320_REG(0x072A)
#define IO_CCD_MEDFILT            DM320_REG(0x072C)
#define IO_CCD_RYEGAIN            DM320_REG(0x072E)
#define IO_CCD_GRCYGAIN           DM320_REG(0x0730)
#define IO_CCD_GBGGAIN            DM320_REG(0x0732)
#define IO_CCD_BMGGAIN            DM320_REG(0x0734)
#define IO_CCD_OFFSET             DM320_REG(0x0736)
#define IO_CCD_OUTCLP             DM320_REG(0x0738)
#define IO_CCD_VDINT0             DM320_REG(0x073A)
#define IO_CCD_VDINT1             DM320_REG(0x073C)
#define IO_CCD_RSV0               DM320_REG(0x073E)
#define IO_CCD_GAMMAWD            DM320_REG(0x0740)
#define IO_CCD_REC656IF           DM320_REG(0x0742)
#define IO_CCD_CCDFG              DM320_REG(0x0744)
#define IO_CCD_FMTCFG             DM320_REG(0x0746)
#define IO_CCD_FMTSPH             DM320_REG(0x0748)
#define IO_CCD_FMTLNH             DM320_REG(0x074A)
#define IO_CCD_FMTSLV             DM320_REG(0x074C)
#define IO_CCD_FMTSNV             DM320_REG(0x074E)
#define IO_CCD_FMTOFST            DM320_REG(0x0750)
#define IO_CCD_FMTRLEN            DM320_REG(0x0752)
#define IO_CCD_FMTHCNT            DM320_REG(0x0754)
#define IO_CCD_FMTPTNA            DM320_REG(0x0756)
#define IO_CCD_FMTPTNB            DM320_REG(0x0758)

/* NTSC/PAL Encoder */
#define IO_VID_ENC_VMOD           DM320_REG(0x0800)
#define IO_VID_ENC_VDCTL          DM320_REG(0x0802)
#define IO_VID_ENC_VDPRO          DM320_REG(0x0804)
#define IO_VID_ENC_SYNCTL         DM320_REG(0x0806)
#define IO_VID_ENC_HSPLS          DM320_REG(0x0808)
#define IO_VID_ENC_VSPLS          DM320_REG(0x080A)
#define IO_VID_ENC_HINT           DM320_REG(0x080C)
#define IO_VID_ENC_HSTART         DM320_REG(0x080E)
#define IO_VID_ENC_HVALID         DM320_REG(0x0810)
#define IO_VID_ENC_VINT           DM320_REG(0x0812)
#define IO_VID_ENC_VSTART         DM320_REG(0x0814)
#define IO_VID_ENC_VVALID         DM320_REG(0x0816)
#define IO_VID_ENC_HSDLY          DM320_REG(0x0818)
#define IO_VID_ENC_VSDLY          DM320_REG(0x081A)
#define IO_VID_ENC_YCCTL          DM320_REG(0x081C)
#define IO_VID_ENC_RGBCTL         DM320_REG(0x081E)
#define IO_VID_ENC_RGBCLP         DM320_REG(0x0820)
#define IO_VID_ENC_LNECTL         DM320_REG(0x0822)
#define IO_VID_ENC_CULLLNE        DM320_REG(0x0824)
#define IO_VID_ENC_LCDOUT         DM320_REG(0x0826)
#define IO_VID_ENC_BRTS           DM320_REG(0x0828)
#define IO_VID_ENC_BRTW           DM320_REG(0x082A)
#define IO_VID_ENC_ACCTL          DM320_REG(0x082C)
#define IO_VID_ENC_PWMP           DM320_REG(0x082E)
#define IO_VID_ENC_PWMW           DM320_REG(0x0830)
#define IO_VID_ENC_DCLKCTL        DM320_REG(0x0832)
#define IO_VID_ENC_DCLKPTN0       DM320_REG(0x0834)
#define IO_VID_ENC_DCLKPTN1       DM320_REG(0x0836)
#define IO_VID_ENC_DCLKPTN2       DM320_REG(0x0838)
#define IO_VID_ENC_DCLKPTN3       DM320_REG(0x083A)
#define IO_VID_ENC_DCLKPTN0A      DM320_REG(0x083C)
#define IO_VID_ENC_DCLKPTN1A      DM320_REG(0x083E)
#define IO_VID_ENC_DCLKPTN2A      DM320_REG(0x0840)
#define IO_VID_ENC_DCLKPTN3A      DM320_REG(0x0842)
#define IO_VID_ENC_DCLKHS         DM320_REG(0x0844)
#define IO_VID_ENC_DCLKHSA        DM320_REG(0x0846)
#define IO_VID_ENC_DCLKHR         DM320_REG(0x0848)
#define IO_VID_ENC_DCLKVS         DM320_REG(0x084A)
#define IO_VID_ENC_DCLKVR         DM320_REG(0x084C)
#define IO_VID_ENC_CAPCTL         DM320_REG(0x084E)
#define IO_VID_ENC_CAPDO          DM320_REG(0x0850)
#define IO_VID_ENC_CAPDE          DM320_REG(0x0852)
#define IO_VID_ENC_ATR0           DM320_REG(0x0854)

/* Clock Controller */
#define IO_CLK_PLLA               DM320_REG(0x0880)
#define IO_CLK_PLLB               DM320_REG(0x0882)
#define IO_CLK_SEL0               DM320_REG(0x0884)
#define IO_CLK_SEL1               DM320_REG(0x0886)
#define IO_CLK_SEL2               DM320_REG(0x0888)
#define IO_CLK_DIV0               DM320_REG(0x088A)
#define IO_CLK_DIV1               DM320_REG(0x088C)
#define IO_CLK_DIV2               DM320_REG(0x088E)
#define IO_CLK_DIV3               DM320_REG(0x0890)
#define IO_CLK_DIV4               DM320_REG(0x0892)
#define IO_CLK_BYP                DM320_REG(0x0894)
#define IO_CLK_INV                DM320_REG(0x0896)
#define IO_CLK_MOD0               DM320_REG(0x0898)
#define IO_CLK_MOD1               DM320_REG(0x089A)
#define IO_CLK_MOD2               DM320_REG(0x089C)
#define IO_CLK_LPCTL0             DM320_REG(0x089E)
#define IO_CLK_LPCTL1             DM320_REG(0x08A0)
#define IO_CLK_OSEL               DM320_REG(0x08A2)
#define IO_CLK_O0DIV              DM320_REG(0x08A4)
#define IO_CLK_O1DIV              DM320_REG(0x08A6)
#define IO_CLK_O2DIV              DM320_REG(0x08A8)
#define IO_CLK_PWM0C              DM320_REG(0x08AA)
#define IO_CLK_PWM0H              DM320_REG(0x08AC)
#define IO_CLK_PWM1C              DM320_REG(0x08AE)
#define IO_CLK_PWM1H              DM320_REG(0x08B0)

/* Bus Controller */
#define IO_BUSC_ECR               DM320_REG(0x0900)
#define IO_BUSC_EBYTER            DM320_REG(0x0902)
#define IO_BUSC_EBITR             DM320_REG(0x0904)
#define IO_BUSC_REVR              DM320_REG(0x0906)

/* Known Silicon Revisions */
#define REVR_ES10                 0x0010
#define REVR_ES11                 0x0011

/* SDRAM Controller */
#define IO_SDRAM_SDBUFD0L         DM320_REG(0x0980)
#define IO_SDRAM_SDBUFD0H         DM320_REG(0x0982)
#define IO_SDRAM_SDBUFD1L         DM320_REG(0x0984)
#define IO_SDRAM_SDBUFD1H         DM320_REG(0x0986)
#define IO_SDRAM_SDBUFD2L         DM320_REG(0x0988)
#define IO_SDRAM_SDBUFD2H         DM320_REG(0x098A)
#define IO_SDRAM_SDBUFD3L         DM320_REG(0x098C)
#define IO_SDRAM_SDBUFD3H         DM320_REG(0x098E)
#define IO_SDRAM_SDBUFD4L         DM320_REG(0x0990)
#define IO_SDRAM_SDBUFD4H         DM320_REG(0x0992)
#define IO_SDRAM_SDBUFD5L         DM320_REG(0x0994)
#define IO_SDRAM_SDBUFD5H         DM320_REG(0x0996)
#define IO_SDRAM_SDBUFD6L         DM320_REG(0x0998)
#define IO_SDRAM_SDBUFD6H         DM320_REG(0x099A)
#define IO_SDRAM_SDBUFD7L         DM320_REG(0x099C)
#define IO_SDRAM_SDBUFD7H         DM320_REG(0x099E)
#define IO_SDRAM_SDBUFAD1         DM320_REG(0x09A0)
#define IO_SDRAM_SDBUFAD2         DM320_REG(0x09A2)
#define IO_SDRAM_SDBUFCTL         DM320_REG(0x09A4)
#define IO_SDRAM_SDMODE           DM320_REG(0x09A6)
#define IO_SDRAM_REFCTL           DM320_REG(0x09A8)
#define IO_SDRAM_SDPRTY1          DM320_REG(0x09AA)
#define IO_SDRAM_SDPRTY2          DM320_REG(0x09AC)
#define IO_SDRAM_SDPRTY3          DM320_REG(0x09AE)
#define IO_SDRAM_SDPRTY4          DM320_REG(0x09B0)
#define IO_SDRAM_SDPRTY5          DM320_REG(0x09B2)
#define IO_SDRAM_SDPRTY6          DM320_REG(0x09B4)
#define IO_SDRAM_SDPRTY7          DM320_REG(0x09B6)
#define IO_SDRAM_SDPRTY8          DM320_REG(0x09B8)
#define IO_SDRAM_SDPRTY9          DM320_REG(0x09BA)
#define IO_SDRAM_SDPRTY10         DM320_REG(0x09BC)
#define IO_SDRAM_SDPRTY11         DM320_REG(0x09BE)
#define IO_SDRAM_SDPRTY12         DM320_REG(0x09C0)
#define IO_SDRAM_RSV              DM320_REG(0x09C2)
#define IO_SDRAM_SDPRTYON         DM320_REG(0x09C4)
#define IO_SDRAM_SDDMASEL         DM320_REG(0x09C6)

/* EMIF Controller */
#define IO_EMIF_CS0CTRL1          DM320_REG(0x0A00)
#define IO_EMIF_CS0CTRL2          DM320_REG(0x0A02)
#define IO_EMIF_CS0CTRL3          DM320_REG(0x0A04)
#define IO_EMIF_CS1CTRL1A         DM320_REG(0x0A06)
#define IO_EMIF_CS1CTRL1B         DM320_REG(0x0A08)
#define IO_EMIF_CS1CTRL2          DM320_REG(0x0A0A)
#define IO_EMIF_CS2CTRL1          DM320_REG(0x0A0C)
#define IO_EMIF_CS2CTRL2          DM320_REG(0x0A0E)
#define IO_EMIF_CS3CTRL1          DM320_REG(0x0A10)
#define IO_EMIF_CS3CTRL2          DM320_REG(0x0A12)
#define IO_EMIF_CS4CTRL1          DM320_REG(0x0A14)
#define IO_EMIF_CS4CTRL2          DM320_REG(0x0A16)
#define IO_EMIF_BUSCTRL           DM320_REG(0x0A18)
#define IO_EMIF_BUSRLS            DM320_REG(0x0A1A)
#define IO_EMIF_CFCTRL1           DM320_REG(0x0A1C)
#define IO_EMIF_CFCTRL2           DM320_REG(0x0A1E)
#define IO_EMIF_SMCTRL            DM320_REG(0x0A20)
#define IO_EMIF_BUSINTEN          DM320_REG(0x0A22)
#define IO_EMIF_BUSSTS            DM320_REG(0x0A24)
#define IO_EMIF_BUSWAITMD         DM320_REG(0x0A26)
#define IO_EMIF_ECC1CP            DM320_REG(0x0A28)
#define IO_EMIF_ECC1LP            DM320_REG(0x0A2A)
#define IO_EMIF_ECC2CP            DM320_REG(0x0A2C)
#define IO_EMIF_ECC2LP            DM320_REG(0x0A2E)
#define IO_EMIF_ECC3CP            DM320_REG(0x0A30)
#define IO_EMIF_ECC3LP            DM320_REG(0x0A32)
#define IO_EMIF_ECC4CP            DM320_REG(0x0A34)
#define IO_EMIF_ECC4LP            DM320_REG(0x0A36)
#define IO_EMIF_ECC5CP            DM320_REG(0x0A38)
#define IO_EMIF_ECC5LP            DM320_REG(0x0A3A)
#define IO_EMIF_ECC6CP            DM320_REG(0x0A3C)
#define IO_EMIF_ECC6LP            DM320_REG(0x0A3E)
#define IO_EMIF_ECC7CP            DM320_REG(0x0A40)
#define IO_EMIF_ECC7LP            DM320_REG(0x0A42)
#define IO_EMIF_ECC8CP            DM320_REG(0x0A44)
#define IO_EMIF_ECC8LP            DM320_REG(0x0A46)
#define IO_EMIF_ECCCLR            DM320_REG(0x0A48)
#define IO_EMIF_PAGESZ            DM320_REG(0x0A4A)
#define IO_EMIF_PRIORCTL          DM320_REG(0x0A4C)
#define IO_EMIF_MGDSPDEST         DM320_REG(0x0A4E)
#define IO_EMIF_MGDSPADDH         DM320_REG(0x0A50)
#define IO_EMIF_MGDSPADDL         DM320_REG(0x0A52)
#define IO_EMIF_AHBADDH           DM320_REG(0x0A54)
#define IO_EMIF_AHBADDL           DM320_REG(0x0A56)
#define IO_EMIF_MTCADDH           DM320_REG(0x0A58)
#define IO_EMIF_MTCADDL           DM320_REG(0x0A5A)
#define IO_EMIF_DMASIZE           DM320_REG(0x0A5C)
#define IO_EMIF_DMAMTCSEL         DM320_REG(0x0A5E)
#define IO_EMIF_DMACTL            DM320_REG(0x0A60)

/* Preivew Engine */
#define IO_PREV_ENG_PVEN          DM320_REG(0x0A80)
#define IO_PREV_ENG_PVSET1        DM320_REG(0x0A82)
#define IO_PREV_ENG_RADRH         DM320_REG(0x0A84)
#define IO_PREV_ENG_RADRL         DM320_REG(0x0A86)
#define IO_PREV_ENG_WADRH         DM320_REG(0x0A88)
#define IO_PREV_ENG_WADRL         DM320_REG(0x0A8A)
#define IO_PREV_ENG_HSTART        DM320_REG(0x0A8C)
#define IO_PREV_ENG_HSIZE         DM320_REG(0x0A8E)
#define IO_PREV_ENG_VSTART        DM320_REG(0x0A90)
#define IO_PREV_ENG_VSIZE         DM320_REG(0x0A92)
#define IO_PREV_ENG_PVSET2        DM320_REG(0x0A94)
#define IO_PREV_ENG_NFILT         DM320_REG(0x0A96)
#define IO_PREV_ENG_DGAIN         DM320_REG(0x0A98)
#define IO_PREV_ENG_WBGAIN0       DM320_REG(0x0A9A)
#define IO_PREV_ENG_WBGAIN1       DM320_REG(0x0A9C)
#define IO_PREV_ENG_SMTH          DM320_REG(0x0A9E)
#define IO_PREV_ENG_HRSZ          DM320_REG(0x0AA0)
#define IO_PREV_ENG_VRSZ          DM320_REG(0x0AA2)
#define IO_PREV_ENG_BLOFST0       DM320_REG(0x0AA4)
#define IO_PREV_ENG_BLOFST1       DM320_REG(0x0AA6)
#define IO_PREV_ENG_MTXGAIN0      DM320_REG(0x0AA8)
#define IO_PREV_ENG_MTXGAIN1      DM320_REG(0x0AAA)
#define IO_PREV_ENG_MTXGAIN2      DM320_REG(0x0AAC)
#define IO_PREV_ENG_MTXGAIN3      DM320_REG(0x0AAE)
#define IO_PREV_ENG_MTXGAIN4      DM320_REG(0x0AB0)
#define IO_PREV_ENG_MTXGAIN5      DM320_REG(0x0AB2)
#define IO_PREV_ENG_MTXGAIN6      DM320_REG(0x0AB4)
#define IO_PREV_ENG_MTXGAIN7      DM320_REG(0x0AB6)
#define IO_PREV_ENG_MTXGAIN8      DM320_REG(0x0AB8)
#define IO_PREV_ENG_MTXOFST0      DM320_REG(0x0ABA)
#define IO_PREV_ENG_MTXOFST1      DM320_REG(0x0ABC)
#define IO_PREV_ENG_MTXOFST2      DM320_REG(0x0ABE)
#define IO_PREV_ENG_GAMTBYP       DM320_REG(0x0AC0)
#define IO_PREV_ENG_CSC0          DM320_REG(0x0AC2)
#define IO_PREV_ENG_CSC1          DM320_REG(0x0AC4)
#define IO_PREV_ENG_CSC2          DM320_REG(0x0AC6)
#define IO_PREV_ENG_CSC3          DM320_REG(0x0AC8)
#define IO_PREV_ENG_CSC4          DM320_REG(0x0ACA)
#define IO_PREV_ENG_YOFST         DM320_REG(0x0ACC)
#define IO_PREV_ENG_COFST         DM320_REG(0x0ACE)
#define IO_PREV_ENG_CNTBRT        DM320_REG(0x0AD0)
#define IO_PREV_ENG_CSUP0         DM320_REG(0x0AD2)
#define IO_PREV_ENG_CSUP1         DM320_REG(0x0AD4)
#define IO_PREV_ENG_SETUPY        DM320_REG(0x0AD4)
#define IO_PREV_ENG_SETUPC        DM320_REG(0x0AD8)
#define IO_PREV_ENG_TABLE_ADDR    DM320_REG(0x0ADA)
#define IO_PREV_ENG_TABLE_DATA    DM320_REG(0x0ADC)
#define IO_PREV_ENG_HG_CTL        DM320_REG(0x0ADE)
#define IO_PREV_ENG_HG_R0_HSTART  DM320_REG(0x0AE0)
#define IO_PREV_ENG_HG_R0_HSIZE   DM320_REG(0x0AE2)
#define IO_PREV_ENG_HG_R0_VSTART  DM320_REG(0x0AE4)
#define IO_PREV_ENG_HR_R0_VSIZE   DM320_REG(0x0AE6)
#define IO_PREV_ENG_HG_R1_HSTART  DM320_REG(0x0AE8)
#define IO_PREV_ENG_HG_R1_HSIZE   DM320_REG(0x0AEA)
#define IO_PREV_ENG_HG_R1_VSTART  DM320_REG(0x0AEC)
#define IO_PREV_ENG_HG_R1_VSIZE   DM320_REG(0x0AEE)
#define IO_PREV_ENG_HG_R2_HSTART  DM320_REG(0x0AF0)
#define IO_PREV_ENG_HG_R2_HSIZE   DM320_REG(0x0AF2)
#define IO_PREV_ENG_HG_R2_VSTART  DM320_REG(0x0AF4)
#define IO_PREV_ENG_HG_R2_VSIZE   DM320_REG(0x0AF6)
#define IO_PREV_ENG_HG_R3_HSTART  DM320_REG(0x0AF8)
#define IO_PREV_ENG_HG_R3_HSIZE   DM320_REG(0x0AFA)
#define IO_PREV_ENG_HG_R3_VSTART  DM320_REG(0x0AFC)
#define IO_PREV_ENG_HG_R3_VSIZE   DM320_REG(0x0AFE)
#define IO_PREV_ENG_HG_ADDR       DM320_REG(0x0B00)
#define IO_PREV_ENG_HG_DATA       DM320_REG(0x0B02)

/* H3A Hardware */
#define IO_H3A_H3ACTRL            DM320_REG(0x0B80)
#define IO_H3A_AFCTRL             DM320_REG(0x0B82)
#define IO_H3A_AFPAX1             DM320_REG(0x0B84)
#define IO_H3A_AFPAX2             DM320_REG(0x0B86)
#define IO_H3A_AFPAX3             DM320_REG(0x0B88)
#define IO_H3A_AFPAX4             DM320_REG(0x0B8A)
#define IO_H3A_AFIRSH             DM320_REG(0x0B8C)
#define IO_H3A_AFPAX5             DM320_REG(0x0B8E)
#define IO_H3A_AFSDRA1            DM320_REG(0x0B90)
#define IO_H3A_AFSDRA2            DM320_REG(0x0B92)
#define IO_H3A_AFSDRFLG           DM320_REG(0x0B94)
#define IO_H3A_AFCOEFF10          DM320_REG(0x0B96)
#define IO_H3A_AFCOEFF11          DM320_REG(0x0B98)
#define IO_H3A_AFCOEFF12          DM320_REG(0x0B9A)
#define IO_H3A_AFCOEFF13          DM320_REG(0x0B9C)
#define IO_H3A_AFCOEFF14          DM320_REG(0x0B9E)
#define IO_H3A_AFCOEFF15          DM320_REG(0x0BA0)
#define IO_H3A_AFCOEFF16          DM320_REG(0x0BA2)
#define IO_H3A_AFCOEFF17          DM320_REG(0x0BA4)
#define IO_H3A_AFCOEFF18          DM320_REG(0x0BA6)
#define IO_H3A_AFCOEFF19          DM320_REG(0x0BA8)
#define IO_H3A_AFCOEFF110         DM320_REG(0x0BAA)
#define IO_H3A_AFCOEFF20          DM320_REG(0x0BAC)
#define IO_H3A_AFCOEFF21          DM320_REG(0x0BAE)
#define IO_H3A_AFCOEFF22          DM320_REG(0x0BB0)
#define IO_H3A_AFCOEFF23          DM320_REG(0x0BB2)
#define IO_H3A_AFCOEFF24          DM320_REG(0x0BB4)
#define IO_H3A_AFCOEFF25          DM320_REG(0x0BB6)
#define IO_H3A_AFCOEFF26          DM320_REG(0x0BB8)
#define IO_H3A_AFCOEFF27          DM320_REG(0x0BBA)
#define IO_H3A_AFCOEFF28          DM320_REG(0x0BBC)
#define IO_H3A_AFCOEFF29          DM320_REG(0x0BBE)
#define IO_H3A_AFCOEFF210         DM320_REG(0x0BC0)
#define IO_H3A_AEWCTRL            DM320_REG(0x0BC2)
#define IO_H3A_AEWWIN1            DM320_REG(0x0BC4)
#define IO_H3A_AEWWIN2            DM320_REG(0x0BC6)
#define IO_H3A_AEWWIN3            DM320_REG(0x0BC8)
#define IO_H3A_AEWWIN4            DM320_REG(0x0BCA)
#define IO_H3A_AEWWIN5            DM320_REG(0x0BCC)
#define IO_H3A_AEWSDRA1           DM320_REG(0x0BCE)
#define IO_H3A_AEWSDRA2           DM320_REG(0x0BD0)
#define IO_H3A_AEWSDRFLG          DM320_REG(0x0BD2)

/* Reserved 0x0C00 - 0x0CCFF */

/* Memory Stick Controller : */
#define IO_MEM_STICK_MODE         DM320_REG(0x0C80)
#define IO_MEM_STICK_CMD          DM320_REG(0x0C82)
#define IO_MEM_STICK_DATA         DM320_REG(0x0C84)
#define IO_MEM_STICK_STATUS       DM320_REG(0x0C86)
#define IO_MEM_STICK_SYS          DM320_REG(0x0C88)
#define IO_MEM_STICK_ENDIAN       DM320_REG(0x0C8A)
#define IO_MEM_STICK_INT_STATUS   DM320_REG(0x0C8C)
#define IO_MEM_STICK_DMA_TRG      DM320_REG(0x0C8E)
#define IO_MEM_STICK_DMA_MODE     DM320_REG(0x0C90)
#define IO_MEM_STICK_SDRAM_ADDL   DM320_REG(0x0C92)
#define IO_MEM_STICK_SDRAM_ADDH   DM320_REG(0x0C94)
#define IO_MEM_STICK_DMA_STATUS   DM320_REG(0x0C96)

/* ATM : WBB Need to find these Register values */
#define IO_ATM_                   DM320_REG(0x0D00)

/* I2C */
#define IO_I2C_TXDATA             DM320_REG(0x0D80)
#define IO_I2C_RXDATA             DM320_REG(0x0D82)
#define IO_I2C_SCS                DM320_REG(0x0D84)

/* VLYNQ */
#define VL_ID                     DM320_REG2(0x0300)
#define VL_CTRL                   DM320_REG2(0x0304)
#define VL_STAT                   DM320_REG2(0x0308)
#define VL_INTPRI                 DM320_REG2(0x030c)
#define VL_INTST                  DM320_REG2(0x0310)
#define VL_INTPND                 DM320_REG2(0x0314)
#define VL_INTPTR                 DM320_REG2(0x0318)
#define VL_TXMAP                  DM320_REG2(0x031c)
#define VL_RXMAPSZ1               DM320_REG2(0x0320)
#define VL_RXMAPOF1               DM320_REG2(0x0324)
#define VL_RXMAPSZ2               DM320_REG2(0x0328)
#define VL_RXMAPOF2               DM320_REG2(0x032c)
#define VL_RXMAPSZ3               DM320_REG2(0x0330)
#define VL_RXMAPOF3               DM320_REG2(0x0334)
#define VL_RXMAPSZ4               DM320_REG2(0x0338)
#define VL_RXMAPOF4               DM320_REG2(0x033c)
#define VL_CHIPVER                DM320_REG2(0x0340)
#define VL_AUTONEG                DM320_REG2(0x0344)
#define VL_MANNEG                 DM320_REG2(0x0348)
#define VL_NEGSTAT                DM320_REG2(0x034c)
#define VL_ENDIAN                 DM320_REG2(0x035c)
#define VL_INTVEC30               DM320_REG2(0x0360)
#define VL_INTVEC74               DM320_REG2(0x0364)
#define VL_ID_R                   DM320_REG2(0x0380)
#define VL_CTRL_R                 DM320_REG2(0x0384)
#define VL_STAT_R                 DM320_REG2(0x0388)
#define VL_INTPRI_R               DM320_REG2(0x038c)
#define VL_INTST_R                DM320_REG2(0x0390)
#define VL_INTPND_R               DM320_REG2(0x0394)
#define VL_INTPTR_R               DM320_REG2(0x0398)
#define VL_TXMAP_R                DM320_REG2(0x039c)
#define VL_RXMAPSZ1_R             DM320_REG2(0x03a0)
#define VL_RXMAPOF1_R             DM320_REG2(0x03a4)
#define VL_RXMAPSZ2_R             DM320_REG2(0x03a8)
#define VL_RXMAPOF2_R             DM320_REG2(0x03ac)
#define VL_RXMAPSZ3_R             DM320_REG2(0x03b0)
#define VL_RXMAPOF3_R             DM320_REG2(0x03b4)
#define VL_RXMAPSZ4_R             DM320_REG2(0x03b8)
#define VL_RXMAPOF4_R             DM320_REG2(0x03bc)
#define VL_CHIPVER_R              DM320_REG2(0x03c0)
#define VL_AUTONEG_R              DM320_REG2(0x03c4)
#define VL_MANNEG_R               DM320_REG2(0x03c8)
#define VL_NEGSTAT_R              DM320_REG2(0x03cc)
#define VL_ENDIAN_R               DM320_REG2(0x03dc)
#define VL_INTVEC30_R             DM320_REG2(0x03e0)
#define VL_INTVEC74_R             DM320_REG2(0x03e4)

/* Coprocessor Interface */
#define COP_SDEM_ADDRH          DM320_COP(0xe000)
#define COP_SDEM_ADDRL          DM320_COP(0xe002)
#define COP_SDEM_LOFST          DM320_COP(0xe004)
#define COP_BUF_ADDR            DM320_COP(0xe006)
#define COP_BUF_LOFST           DM320_COP(0xe008)
#define COP_DMA_XNUM            DM320_COP(0xe00a)
#define COP_DMA_YNUM            DM320_COP(0xe00c)
#define COP_DMA_CTRL            DM320_COP(0xe00e)
#define COP_BUF_MUX0            DM320_COP(0xe010)
#define COP_BUF_MUX1            DM320_COP(0xe012)
#define COP_IMG_MODE            DM320_COP(0xe014)
#define COP_CP_CLKC             DM320_COP(0xe502)


/* Taken from linux/include/asm-arm/arch-itdm320/irqs.h
 *
 *  Copyright (C) 1999 ARM Limited
 *  Copyright (C) 2004 Ingenient Technologies
 */

/*
 *  Interrupt numbers
 */
#define IRQ_TIMER0     0
#define IRQ_TIMER1     1
#define IRQ_TIMER2     2
#define IRQ_TIMER3     3
#define IRQ_CCD_VD0    4
#define IRQ_CCD_VD1    5
#define IRQ_CCD_WEN    6
#define IRQ_VENC       7
#define IRQ_SERIAL0    8
#define IRQ_SERIAL1    9
#define IRQ_EXT_HOST   10
#define IRQ_DSPHINT    11
#define IRQ_UART0      12
#define IRQ_UART1      13
#define IRQ_USB_DMA    14
#define IRQ_USB_CORE   15
#define IRQ_VLYNQ      16
#define IRQ_MTC0       17
#define IRQ_MTC1       18
#define IRQ_SD_MMC     19
#define IRQ_SDIO_MS    20
#define IRQ_GIO0       21
#define IRQ_GIO1       22
#define IRQ_GIO2       23
#define IRQ_GIO3       24
#define IRQ_GIO4       25
#define IRQ_GIO5       26
#define IRQ_GIO6       27
#define IRQ_GIO7       28
#define IRQ_GIO8       29
#define IRQ_GIO9       30
#define IRQ_GIO10      31
#define IRQ_GIO11      32
#define IRQ_GIO12      33
#define IRQ_GIO13      34
#define IRQ_GIO14      35
#define IRQ_GIO15      36
#define IRQ_PREVIEW0   37
#define IRQ_PREVIEW1   38
#define IRQ_WATCHDOG   39
#define IRQ_I2C        40
#define IRQ_CLKC       41

/* Embedded Debugging Interrupts */
#define IRQ_ICE        42
#define IRQ_ARMCOM_RX  43
#define IRQ_ARMCOM_TX  44

#define IRQ_RESERVED   45

#define NR_IRQS        46

/*  Taken from linux/include/asm-arm/arch-integrator/timex.h
 *
 *  Copyright (C) 1999 ARM Limited
 */

#define CONFIG_TIMER0_TMMD_STOP        0x0000
#define CONFIG_TIMER0_TMMD_ONE_SHOT    0x0001
#define CONFIG_TIMER0_TMMD_FREE_RUN    0x0002

#define CONFIG_TIMER1_TMMD_STOP        0x0000
#define CONFIG_TIMER1_TMMD_ONE_SHOT    0x0001
#define CONFIG_TIMER1_TMMD_FREE_RUN    0x0002

#define CONFIG_TIMER2_TMMD_STOP        0x0000
#define CONFIG_TIMER2_TMMD_ONE_SHOT    0x0001
#define CONFIG_TIMER2_TMMD_FREE_RUN    0x0002
#define CONFIG_TIMER2_TMMD_CCD_SHUTTER 0x0100
#define CONFIG_TIMER2_TMMD_CCD_STROBE  0x0200
#define CONFIG_TIMER2_TMMD_POLARITY    0x0400
#define CONFIG_TIMER2_TMMD_TRG_SELECT  0x0800
#define CONFIG_TIMER2_TMMD_TRG_READY   0x1000
#define CONFIG_TIMER2_TMMD_SIGNAL      0x2000

#define CONFIG_TIMER3_TMMD_STOP        0x0000
#define CONFIG_TIMER3_TMMD_ONE_SHOT    0x0001
#define CONFIG_TIMER3_TMMD_FREE_RUN    0x0002
#define CONFIG_TIMER3_TMMD_CCD_SHUTTER 0x0100
#define CONFIG_TIMER3_TMMD_CCD_STROBE  0x0200
#define CONFIG_TIMER3_TMMD_POLARITY    0x0400
#define CONFIG_TIMER3_TMMD_TRG_SELECT  0x0800
#define CONFIG_TIMER3_TMMD_TRG_READY   0x1000
#define CONFIG_TIMER3_TMMD_SIGNAL      0x2000

/*
 *  IO_MODx bits
 */
#define CLK_MOD0_HPIB                  (1 << 11)
#define CLK_MOD0_DSP                   (1 << 10)
#define CLK_MOD0_EXTHOST               (1 << 9)
#define CLK_MOD0_SDRAMC                (1 << 8)
#define CLK_MOD0_EMIF                  (1 << 7)
#define CLK_MOD0_INTC                  (1 << 6)
#define CLK_MOD0_AIM                   (1 << 5)
#define CLK_MOD0_E2ICE                 (1 << 4)
#define CLK_MOD0_ETM                   (1 << 3)
#define CLK_MOD0_AHB                   (1 << 2)
#define CLK_MOD0_BUSC                  (1 << 1)
#define CLK_MOD0_ARM                   (1 << 0)

#define CLK_MOD1_CPBUS                 (1 << 11)
#define CLK_MOD1_SEQ                   (1 << 10)
#define CLK_MOD1_DCT                   (1 << 9)
#define CLK_MOD1_IMGBUF                (1 << 8)
#define CLK_MOD1_IMX                   (1 << 7)
#define CLK_MOD1_VLCD                  (1 << 6)
#define CLK_MOD1_DAC                   (1 << 5)
#define CLK_MOD1_VENC                  (1 << 4)
#define CLK_MOD1_OSD                   (1 << 3)
#define CLK_MOD1_PRV                   (1 << 2)
#define CLK_MOD1_H3A                   (1 << 1)
#define CLK_MOD1_CCDC                  (1 << 0)

#define CLK_MOD2_TEST                  (1 << 15)
#define CLK_MOD2_MS                    (1 << 14)
#define CLK_MOD2_VLYNQ                 (1 << 13)
#define CLK_MOD2_I2C                   (1 << 12)
#define CLK_MOD2_MMC                   (1 << 11)
#define CLK_MOD2_SIF1                  (1 << 10)
#define CLK_MOD2_SIF0                  (1 << 9)
#define CLK_MOD2_UART1                 (1 << 8)
#define CLK_MOD2_UART0                 (1 << 7)
#define CLK_MOD2_USB                   (1 << 6)
#define CLK_MOD2_GIO                   (1 << 5)
#define CLK_MOD2_CCDTMR1               (1 << 4)
#define CLK_MOD2_CCDTMR0               (1 << 3)
#define CLK_MOD2_TMR1                  (1 << 2)
#define CLK_MOD2_TMR0                  (1 << 1)
#define CLK_MOD2_WDT                   (1 << 0)

#define CLK_SEL0_UART0                 (1 << 5)

#define CLK_SEL1_OSD                   (1 << 12)
#define CLK_SEL1_CCD                   (1 << 8)
#define CLK_SEL1_VENCPLL               (1 << 4)
#define CLK_SEL1_VENC(x)               (x << 0)

#define CLK_OSEL_O2SEL(x)              (x << 8)
#define CLK_OSEL_O1SEL(x)              (x << 4)
#define CLK_OSEL_O0SEL(x)              (x << 0)

#define CLK_BYP_AXL                    (1 << 12)
#define CLK_BYP_SDRAM                  (1 << 8)
#define CLK_BYP_DSP                    (1 << 4)
#define CLK_BYP_ARM                    (1 << 0)

#define CLK_INV_MMC                    (1 << 0)
#define CLK_INV_VENC                   (1 << 4)
#define CLK_INV_CCD                    (1 << 8)
#define CLK_INV_SIF0                   (1 << 12)
#define CLK_INV_SIF1                   (1 << 13)

#define MMC_CTRL_DATRST                (1 << 0)
#define MMC_CTRL_CMDRST                (1 << 1)
#define MMC_CTRL_WIDTH                 (1 << 2)
#define MMC_CTRL_DMASZEN               (1 << 4)
#define MMC_CTRL_TEST2                 (1 << 8)
#define MMC_CTRL_PERMDR                (1 << 9)
#define MMC_CTRL_PERMDX                (1 << 10)

#define MMC_CMD_CMD_MASK               (0x3F)
#define MMC_CMD_PPLEN                  (1 << 7)
#define MMC_CMD_BSYEXP                 (1 << 8)
#define MMC_CMD_RSPFMT_SHIFT           9
#define MMC_CMD_RSPFMT_MASK            (3 << MMC_CMD_RSPFMT_SHIFT)
#define MMC_CMD_WRITE                  (1 << 11)
#define MMC_CMD_STREAM                 (1 << 12)
#define MMC_CMD_DATA                   (1 << 13)
#define MMC_CMD_INITCLK                (1 << 14)
#define MMC_CMD_DCLR                   (1 << 15)

#define MMC_ST0_DATDNE                 (1 << 0)
#define MMC_ST0_BSYDNE                 (1 << 1)
#define MMC_ST0_RSPDNE                 (1 << 2)
#define MMC_ST0_DATA_TIMEOUT           (1 << 3)
#define MMC_ST0_CMD_TIMEOUT            (1 << 4)
#define MMC_ST0_WR_CRCERR              (1 << 5)
#define MMC_ST0_RD_CRCERR              (1 << 6)
#define MMC_ST0_RESP_CRCERR            (1 << 7)
#define MMC_ST0_DMADNE                 (1 << 8)
#define MMC_ST0_DXRDY                  (1 << 9)
#define MMC_ST0_DRRDY                  (1 << 10)
#define MMC_ST0_DAT3_EDGE              (1 << 11)

#define MMC_ST1_BUSY                   (1 << 0)
#define MMC_ST1_CLKSTP                 (1 << 1)
#define MMC_ST1_DXEMPTY                (1 << 2)
#define MMC_ST1_DXFULL                 (1 << 3)
#define MMC_ST1_DAT3ST                 (1 << 4)

#define MMC_IE_EDATDNE                 (1 << 0)
#define MMC_IE_EBSYDNE                 (1 << 1)
#define MMC_IE_ERSPDNE                 (1 << 2)
#define MMC_IE_ETOUTRD                 (1 << 3)
#define MMC_IE_ETOUTRS                 (1 << 4)
#define MMC_IE_ECRCWR                  (1 << 5)
#define MMC_IE_ECRCRD                  (1 << 6)
#define MMC_IE_ECRCRS                  (1 << 7)
#define MMC_IE_EDXRDY                  (1 << 9)
#define MMC_IE_EDRRDY                  (1 << 10)
#define MMC_IE_EDATED                  (1 << 11)

#define MMC_DMAMODE_RD_WORDSWAP        (1 << 10)
#define MMC_DMAMODE_WR_WORDSWAP        (1 << 11)
#define MMC_DMAMODE_WRITE              (1 << 12)
#define MMC_DMAMODE_ENABLE             (1 << 13)
#define MMC_DMAMODE_TIMEOUTIRQ_EN      (1 << 14)

#define MMC_DMASTAT1_RUNST             (1 << 12)
#define MMC_DMASTAT1_TOUTDT            (1 << 13)

/*
 *  IO_EINTx bits
 */
#define INTR_EINT0_USB1                (1 << 15)
#define INTR_EINT0_USB0                (1 << 14)
#define INTR_EINT0_UART1               (1 << 13)
#define INTR_EINT0_UART0               (1 << 12)
#define INTR_EINT0_IMGBUF              (1 << 11)
#define INTR_EINT0_EXTHOST             (1 << 10)
#define INTR_EINT0_SP1                 (1 << 9)
#define INTR_EINT0_SP0                 (1 << 8)
#define INTR_EINT0_VENC                (1 << 7)
#define INTR_EINT0_CCDWEN              (1 << 6)
#define INTR_EINT0_CCDVD1              (1 << 5)
#define INTR_EINT0_CCDVD0              (1 << 4)
#define INTR_EINT0_TMR3                (1 << 3)
#define INTR_EINT0_TMR2                (1 << 2)
#define INTR_EINT0_TMR1                (1 << 1)
#define INTR_EINT0_TMR0                (1 << 0)

#define INTR_EINT1_EXT10               (1 << 15)
#define INTR_EINT1_EXT9                (1 << 14)
#define INTR_EINT1_EXT8                (1 << 13)
#define INTR_EINT1_EXT7                (1 << 12)
#define INTR_EINT1_EXT6                (1 << 11)
#define INTR_EINT1_EXT5                (1 << 10)
#define INTR_EINT1_EXT4                (1 << 9)
#define INTR_EINT1_EXT3                (1 << 8)
#define INTR_EINT1_EXT2                (1 << 7)
#define INTR_EINT1_EXT1                (1 << 6)
#define INTR_EINT1_EXT0                (1 << 5)
#define INTR_EINT1_MMCSDMS1            (1 << 4)
#define INTR_EINT1_MMCSDMS0            (1 << 3)
#define INTR_EINT1_MTC1                (1 << 2)
#define INTR_EINT1_MTC0                (1 << 1)
#define INTR_EINT1_VLYNQ               (1 << 0)

#define INTR_EINT2_RSVINT              (1 << 13)
#define INTR_EINT2_ARMCOMTX            (1 << 12)
#define INTR_EINT2_ARMCOMRX            (1 << 11)
#define INTR_EINT2_E2ICE               (1 << 10)
#define INTR_EINT2_INTRC               (1 << 9)
#define INTR_EINT2_I2C                 (1 << 8)
#define INTR_EINT2_WDT                 (1 << 7)
#define INTR_EINT2_PREV1               (1 << 6)
#define INTR_EINT2_PREV0               (1 << 5)
#define INTR_EINT2_EXT15               (1 << 4)
#define INTR_EINT2_EXT14               (1 << 3)
#define INTR_EINT2_EXT13               (1 << 2)
#define INTR_EINT2_EXT12               (1 << 1)
#define INTR_EINT2_EXT11               (1 << 0)

/*
* IO_IRQx bits
*/
#define INTR_IRQ0_TMR0        INTR_EINT0_TMR0
#define INTR_IRQ0_TMR1        INTR_EINT0_TMR1
#define INTR_IRQ0_TMR2        INTR_EINT0_TMR2
#define INTR_IRQ0_TMR3        INTR_EINT0_TMR3
#define INTR_IRQ0_UART1       INTR_EINT0_UART1
#define INTR_IRQ0_CCDVD1      INTR_EINT0_CCDVD1
#define INTR_IRQ0_IMGBUF      INTR_EINT0_IMGBUF

#define INTR_IRQ1_EXT0        INTR_EINT1_EXT0
#define INTR_IRQ1_EXT2        INTR_EINT1_EXT2
#define INTR_IRQ1_EXT7        INTR_EINT1_EXT7
#define INTR_IRQ1_MMCSDMS0    INTR_EINT1_MMCSDMS0
#define INTR_IRQ1_MTC0        INTR_EINT1_MTC0

/*
* HPIBCTL bits
*/
#define HPIBCTL_DBIO          (1 << 10)
#define HPIBCTL_DHOLD         (1 << 9)
#define HPIBCTL_DRST          (1 << 8)
#define HPIBCTL_DINT0         (1 << 7)
#define HPIBCTL_EXCHG         (1 << 5)
#define HPIBCTL_HPNMI         (1 << 3)
#define HPIBCTL_HPIEN         (1 << 0)

/*
* Video Encoder bits
*/
#define VENC_VMOD_VDMD(x)     (x << 12)
#define VENC_VMOD_ITLC        (1 << 10)
#define VENC_VMOD_CBTYP       (1 << 9)
#define VENC_VMOD_CBMD        (1 << 8)
#define VENC_VMOD_NTPLS(x)    (x << 6)
#define VENC_VMOD_SLAVE       (1 << 5)
#define VENC_VMOD_VMD         (1 << 4)
#define VENC_VMOD_BLNK        (1 << 3)
#define VENC_VMOD_DACPD       (1 << 2)
#define VENC_VMOD_VIE         (1 << 1)
#define VENC_VMOD_VENC        (1 << 0)

#define VENC_VDCTL_VCLKP      (1 << 14)
#define VENC_VDCTL_VCLKE      (1 << 13)
#define VENC_VDCTL_VCLKZ      (1 << 12)
#define VENC_VDCTL_DOMD(x)    (x << 4)
#define VENC_VDCTL_YCDC       (1 << 2)
#define VENC_VDCTL_INPTRU     (1 << 1)
#define VENC_VDCTL_YCDIR      (1 << 0)

#define VENC_VDPRO_PFLTY(x)   (x << 12)
#define VENC_VDPRO_PFLTR      (1 << 11)
#define VENC_VDPRO_YCDLY(x)   (x << 8)
#define VENC_VDPRO_RGBMAT     (1 << 7)
#define VENC_VDPRO_ATRGB      (1 << 6)
#define VENC_VDPRO_ATYCC      (1 << 5)
#define VENC_VDPRO_ATCOM      (1 << 4)
#define VENC_VDPRO_STUP       (1 << 3)
#define VENC_VDPRO_CRCUT      (1 << 2)
#define VENC_VDPRO_CUPS       (1 << 1)
#define VENC_VDPRO_YUPS       (1 << 0)

#define VENC_SYNCTL_EXFEN     (1 << 12)
#define VENC_SYNCTL_EXFIV     (1 << 11)
#define VENC_SYNCTL_EXSYNC    (1 << 10)
#define VENC_SYNCTL_EXVIV     (1 << 9)
#define VENC_SYNCTL_EXHIV     (1 << 8)
#define VENC_SYNCTL_CSP       (1 << 7)
#define VENC_SYNCTL_CSE       (1 << 6)
#define VENC_SYNCTL_SYSW      (1 << 5)
#define VENC_SYNCTL_VSYNCS    (1 << 4)
#define VENC_SYNCTL_VPL       (1 << 3)
#define VENC_SYNCTL_HPL       (1 << 2)
#define VENC_SYNCTL_SYE       (1 << 1)
#define VENC_SYNCTL_SYDIR     (1 << 0)

#define VENC_RGBCTL_IRONM     (1 << 11)
#define VENC_RGBCTL_DFLTR     (1 << 10)
#define VENC_RGBCTL_DFLTS(x)  (x << 8)
#define VENC_RGBCTL_RGBEF(x)  (x << 4)
#define VENC_RGBCTL_RGBOF(x)  (x << 0)

#define VENC_RGBCLP_UCLIP(x)  (x << 8)
#define VENC_RGBCLP_OFST(x)   (x << 0)

#define VENC_LCDOUT_FIDS      (1 << 8)
#define VENC_LCDOUT_FIDP      (1 << 7)
#define VENC_LCDOUT_PWMP      (1 << 6)
#define VENC_LCDOUT_PWME      (1 << 5)
#define VENC_LCDOUT_ACE       (1 << 4)
#define VENC_LCDOUT_BRP       (1 << 3)
#define VENC_LCDOUT_BRE       (1 << 2)
#define VENC_LCDOUT_OEP       (1 << 1)
#define VENC_LCDOUT_OEE       (1 << 0)

#define VENC_DCLKCTL_DOFST(x) (x << 12)
#define VENC_DCLKCTL_DCKEC    (1 << 11)
#define VENC_DCLKCTL_DCKME    (1 << 10)
#define VENC_DCLKCTL_DCKOH    (1 << 9)
#define VENC_DCLKCTL_DCKIH    (1 << 8)
#define VENC_DCLKCTL_DCKPW(x) (x << 0)

/* Timer frequency */
/* timer is based on PCLK and minimum division is 2 */
#define TIMER_FREQ (27000000)

#endif
