/*
 * Copyright (c) 2008, Google Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the 
 *    distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifndef __PLATFORM_MSM7K_MDDI_HW_H
#define __PLATFORM_MSM7K_MDDI_HW_H

#ifdef TARGET_MSM7630_SURF
#define MSM_MDDI_BASE 0xAD600000
#else
#define MSM_MDDI_BASE 0xAA600000
#endif

#if MDP4
#define MSM_MDP_BASE1 0xA3F00000
#define LCDC_BASE     0xC0000
#else
#define MSM_MDP_BASE1 0xAA200000
#define LCDC_BASE     0xE0000
#endif

#ifdef MDDI_MULTI_WRITE
#define MAX_CLIENT_REG 128
#else
#define MAX_CLIENT_REG 1
#endif

enum {				/* display configuration for MDP4 */
	PRIMARY_INTF_SEL,
	SECONDARY_INTF_SEL,
	EXTERNAL_INTF_SEL
};

#define outp32(port, val) (*((volatile unsigned *) (port)) = ((unsigned) (val)))

/* see 80-VA736-2 C pp 776-787 */

#define MDDI_REG(off) (MSM_MDDI_BASE + (off))

#define MDDI_CMD               MDDI_REG(0x0000)
#define MDDI_VERSION           MDDI_REG(0x0004)
#define MDDI_PRI_PTR           MDDI_REG(0x0008)
#define MDDI_SEC_PTR           MDDI_REG(0x000C)
#define MDDI_BPS               MDDI_REG(0x0010)
#define MDDI_SPM               MDDI_REG(0x0014)
#define MDDI_INT               MDDI_REG(0x0018)

#define MDDI_INT_PRI_PTR_READ          (1 << 0)
#define MDDI_INT_SEC_PTR_READ          (1 << 1)
#define MDDI_INT_REV_DATA_AVAIL        (1 << 2)
#define MDDI_INT_DISP_REQ              (1 << 3)
#define MDDI_INT_PRI_UNDERFLOW         (1 << 4)
#define MDDI_INT_SEC_UNDERFLOW         (1 << 5)
#define MDDI_INT_REV_OVERFLOW          (1 << 6)
#define MDDI_INT_CRC_ERROR             (1 << 7)
#define MDDI_INT_MDDI_IN               (1 << 8)
#define MDDI_INT_PRI_OVERWRITE         (1 << 9)
#define MDDI_INT_SEC_OVERWRITE         (1 << 10)
#define MDDI_INT_REV_OVERWRITE         (1 << 11)
#define MDDI_INT_DMA_FAILURE           (1 << 12)
#define MDDI_INT_LINK_ACTIVE           (1 << 13)
#define MDDI_INT_IN_HIBERNATION        (1 << 14)
#define MDDI_INT_PRI_LINK_LIST_DONE    (1 << 15)
#define MDDI_INT_SEC_LINK_LIST_DONE    (1 << 16)
#define MDDI_INT_NO_REQ_PKTS_PENDING   (1 << 17)
#define MDDI_INT_RTD_FAILURE           (1 << 18)
#define MDDI_INT_REV_PKT_RECEIVED      (1 << 19)
#define MDDI_INT_REV_PKTS_AVAIL        (1 << 20)

#define MDDI_INTEN             MDDI_REG(0x001C)
#define MDDI_REV_PTR           MDDI_REG(0x0020)
#define MDDI_REV_SIZE          MDDI_REG(0x0024)
#define MDDI_STAT              MDDI_REG(0x0028)

#define MDDI_STAT_LINK_ACTIVE                (1 << 0)
#define MDDI_STAT_NEW_REV_PTR                (1 << 1)
#define MDDI_STAT_NEW_PRI_PTR                (1 << 2)
#define MDDI_STAT_NEW_SEC_PTR                (1 << 3)
#define MDDI_STAT_IN_HIBERNATION             (1 << 4)
#define MDDI_STAT_PRI_LINK_LIST_DONE         (1 << 5)
#define MDDI_STAT_SEC_LINK_LIST_DONE         (1 << 6)
#define MDDI_STAT_SEND_TIMING_PKT            (1 << 7)
#define MDDI_STAT_SEND_REV_ENCAP_WITH_FLAGS  (1 << 8)
#define MDDI_STAT_SEND_POWER_DOWN            (1 << 9)
#define MDDI_STAT_DO_HANDSHAKE               (1 << 10)
#define MDDI_STAT_RTD_MEAS_FAIL              (1 << 11)
#define MDDI_STAT_CLIENT_WAKEUP_REQ          (1 << 12)
#define MDDI_STAT_DMA_ABORT                  (1 << 13)
#define MDDI_STAT_REV_OVERFLOW_RESET         (1 << 14)
#define MDDI_STAT_FORCE_NEW_REV_PTR          (1 << 15)
#define MDDI_STAT_CRC_ERRORS                 (1 << 16)

#define MDDI_REV_RATE_DIV      MDDI_REG(0x002C)
#define MDDI_REV_CRC_ERR       MDDI_REG(0x0030)
#define MDDI_TA1_LEN           MDDI_REG(0x0034)
#define MDDI_TA2_LEN           MDDI_REG(0x0038)
#define MDDI_TEST_BUS          MDDI_REG(0x003C)
#define MDDI_TEST              MDDI_REG(0x0040)
#define MDDI_REV_PKT_CNT       MDDI_REG(0x0044)
#define MDDI_DRIVE_HI          MDDI_REG(0x0048)
#define MDDI_DRIVE_LO          MDDI_REG(0x004C)
#define MDDI_DISP_WAKE         MDDI_REG(0x0050)
#define MDDI_REV_ENCAP_SZ      MDDI_REG(0x0054)
#define MDDI_RTD_VAL           MDDI_REG(0x0058)
#define MDDI_MDP_VID_FMT_DES   MDDI_REG(0x005C)
#define MDDI_MDP_VID_PIX_ATTR  MDDI_REG(0x0060)
#define MDDI_MDP_VID_CLIENTID  MDDI_REG(0x0064)
#define MDDI_PAD_CTL           MDDI_REG(0x0068)
#define MDDI_DRIVER_START_CNT  MDDI_REG(0x006C)
#define MDDI_NEXT_PRI_PTR      MDDI_REG(0x0070)
#define MDDI_NEXT_SEC_PTR      MDDI_REG(0x0074)
#define MDDI_MISR_CTL          MDDI_REG(0x0078)
#define MDDI_MISR_DATA         MDDI_REG(0x007C)
#define MDDI_SF_CNT            MDDI_REG(0x0080)
#define MDDI_MF_CNT            MDDI_REG(0x0084)
#define MDDI_CURR_REV_PTR      MDDI_REG(0x0088)
#define MDDI_CORE_VER          MDDI_REG(0x008C)
#define MDDI_PAD_IO_CTL        MDDI_REG(0x00a0)
#define MDDI_PAD_CAL           MDDI_REG(0x00a4)

#define CMD_POWER_DOWN         0x0100
#define CMD_POWER_UP           0x0200
#define CMD_HIBERNATE          0x0300
#define CMD_RESET              0x0400
#define CMD_IGNORE             0x0501
#define CMD_LISTEN             0x0500
#define CMD_REV_ENC_REQ        0x0600
#define CMD_RTD_MEASURE        0x0700
#define CMD_LINK_ACTIVE        0x0900
#define CMD_PERIODIC_REV_ENC   0x0A00
#define CMD_FORCE_NEW_REV_PTR  0x0C00

#define CMD_GET_CLIENT_CAP     0x0601
#define CMD_GET_CLIENT_STATUS  0x0602

#if 1
#define FORMAT_18BPP           0x5666
#define FORMAT_24BPP           0x5888
#define FORMAT_16BPP           0x5565
#else
#define FORMAT_MONOCHROME      (0 << 13)
#define FORMAT_PALETTE         (1 << 13)
#define FORMAT_RGB             (2 << 13)
#define FORMAT_YCBCR422        (3 << 13)
#define FORMAT_BAYER           (4 << 13)
#endif

#define PIXATTR_BOTH_EYES      3
#define PIXATTR_LEFT_EYE       2
#define PIXATTR_RIGHT_EYE      1
#define PIXATTR_ALT_DISPLAY    0

#define PIXATTR_PROGRESSIVE    0
#define PIXATTR_INTERLACED     (1 << 2)
#define PIXATTR_ALTERNATE      (1 << 3)

#define PIXATTR_IGNORE_LRTB    (1 << 5)

#define PIXATTR_TO_REFRESH     (0 << 6)
#define PIXATTR_TO_OFFLINE     (1 << 6)
#define PIXATTR_TO_ALL         (3 << 6)

#define PIXATTR_LAST_ROW       (1 << 15)

#define TYPE_VIDEO_STREAM      16
#define TYPE_CLIENT_CAPS       66
#define TYPE_REGISTER_ACCESS   146
#define TYPE_CLIENT_STATUS     70

typedef struct mddi_video_stream mddi_video_stream;
typedef struct mddi_register_access mddi_register_access;
typedef struct mddi_client_caps mddi_client_caps;

typedef struct mddi_llentry mddi_llentry;

struct __attribute__ ((packed)) mddi_video_stream {
	unsigned short length;	/* length in bytes excluding this field */
	unsigned short type;	/* MDDI_TYPE_VIDEO_STREAM */
	unsigned short client_id;	/* set to zero */

	unsigned short format;
	unsigned short pixattr;

	unsigned short left;
	unsigned short top;
	unsigned short right;
	unsigned short bottom;

	unsigned short start_x;
	unsigned short start_y;

	unsigned short pixels;

	unsigned short crc;
	unsigned short reserved;
};

struct __attribute__ ((packed)) mddi_register_access {
	unsigned short length;
	unsigned short type;
	unsigned short client_id;

	unsigned short rw_info;	/* flag below | count of reg_data */
#define MDDI_WRITE     (0 << 14)
#define MDDI_READ      (2 << 14)
#define MDDI_READ_RESP (3 << 14)

	unsigned reg_addr;
	unsigned short crc;	/* 16 bit crc of the above */

	unsigned reg_data[MAX_CLIENT_REG];	/* "list" of 3byte data values */
};

struct __attribute__ ((packed)) mddi_llentry {
	unsigned short flags;
	unsigned short header_count;
	unsigned short data_count;
	void *data;
	mddi_llentry *next;
	unsigned short reserved;
	union {
		mddi_video_stream v;
		mddi_register_access r;
		unsigned _[12];
	} u;
};

#endif				/* __PLATFORM_MSM7K_MDDI_HW_H */
