]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00141217-2 include file upgrade to 2.6.38
authorFrank Li <Frank.Li@freescale.com>
Mon, 28 Mar 2011 15:02:27 +0000 (23:02 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Fri, 24 May 2013 06:32:30 +0000 (08:32 +0200)
Add ipu tve header file

Signed-off-by: Frank Li <Frank.Li@freescale.com>
include/linux/fsl_devices.h
include/linux/ipu.h [new file with mode: 0644]
include/linux/iram_alloc.h [new file with mode: 0644]
include/linux/ldb.h [new file with mode: 0644]
include/linux/mxc_srtc.h [new file with mode: 0644]
include/linux/mxc_v4l2.h [new file with mode: 0644]
include/linux/mxcfb.h [new file with mode: 0644]
include/linux/usb/fsl_xcvr.h [new file with mode: 0644]

index fffdf00f87b91bd94f09071db3b999f7e5e5d210..592bad1da973b0cc6f7fd83f99885686960b1da9 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Maintainer: Kumar Gala <galak@kernel.crashing.org>
  *
- * Copyright 2004 Freescale Semiconductor, Inc
+ * Copyright 2004-2011 Freescale Semiconductor, Inc.
  *
  * 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
@@ -50,6 +50,15 @@ enum fsl_usb2_operating_modes {
        FSL_USB2_DR_OTG,
 };
 
+/* this used for usb port type */
+enum fsl_usb2_modes {
+       FSL_USB_DR_HOST,
+       FSL_USB_DR_DEVICE,
+       FSL_USB_MPH_HOST1,
+       FSL_USB_MPH_HOST2,
+       FSL_USB_UNKNOWN, /* unkonwn status */
+};
+
 enum fsl_usb2_phy_modes {
        FSL_USB2_PHY_NONE,
        FSL_USB2_PHY_ULPI,
@@ -58,8 +67,16 @@ enum fsl_usb2_phy_modes {
        FSL_USB2_PHY_SERIAL,
 };
 
+enum usb_wakeup_event {
+       WAKEUP_EVENT_INVALID,
+       WAKEUP_EVENT_VBUS,
+       WAKEUP_EVENT_ID,
+       WAKEUP_EVENT_DPDM, /* for remote wakeup */
+};
+
 struct clk;
 struct platform_device;
+struct fsl_usb2_wakeup_platform_data;
 
 struct fsl_usb2_platform_data {
        /* board specific information */
@@ -84,6 +101,36 @@ struct fsl_usb2_platform_data {
        unsigned        suspended:1;
        unsigned        already_suspended:1;
 
+       /* Freescale private */
+       char            *name;
+       u32             phy_regs;       /* usb phy register base */
+       u32             xcvr_type;      /* PORTSC_PTS_* */
+       char            *transceiver;   /* transceiver name */
+       unsigned        power_budget;   /* for hcd->power_budget */
+       u32             id_gpio;
+
+       struct fsl_xcvr_ops *xcvr_ops;
+       struct fsl_xcvr_power *xcvr_pwr;
+       int (*gpio_usb_active) (void);
+       void (*gpio_usb_inactive) (void);
+       void (*usb_clock_for_pm) (bool);
+       void (*platform_suspend)(struct fsl_usb2_platform_data *);
+       void (*platform_resume)(struct fsl_usb2_platform_data *);
+       void (*wake_up_enable)(struct fsl_usb2_platform_data *, bool);
+       void (*phy_lowpower_suspend)(struct fsl_usb2_platform_data *, bool);
+       void (*platform_driver_vbus)(bool on); /* for vbus shutdown/open */
+       enum usb_wakeup_event (*is_wakeup_event)(struct fsl_usb2_platform_data *);
+       void (*wakeup_handler)(struct fsl_usb2_platform_data *);
+
+       struct fsl_usb2_wakeup_platform_data *wakeup_pdata;
+       struct platform_device *pdev;
+       unsigned        change_ahb_burst:1;
+       unsigned        ahb_burst_mode:3;
+       unsigned        lowpower:1;
+       unsigned        irq_delay:1;
+       unsigned        wakeup_event:1;
+       u32             pmflags;        /* PM from otg or system */
+
        /* register save area for suspend/resume */
        u32             pm_command;
        u32             pm_status;
@@ -97,6 +144,22 @@ struct fsl_usb2_platform_data {
        u32             pm_usbgenctrl;
 };
 
+struct fsl_usb2_wakeup_platform_data {
+       char *name;
+       void (*usb_clock_for_pm) (bool);
+       void (*usb_wakeup_exhandle) (void);
+       struct fsl_usb2_platform_data *usb_pdata[3];
+       /* This waitqueue is used to wait "usb_wakeup thread" to finish
+        * during system resume routine. "usb_wakeup theard" should be finished
+        * prior to usb resume routine.
+        */
+       wait_queue_head_t wq;
+       /* This flag is used to indicate the "usb_wakeup thread" is finished during
+        * usb wakeup routine.
+        */
+       bool usb_wakeup_is_pending;
+};
+
 /* Flags in fsl_usb2_mph_platform_data */
 #define FSL_USB2_PORT0_ENABLED 0x00000001
 #define FSL_USB2_PORT1_ENABLED 0x00000002
@@ -120,11 +183,101 @@ struct fsl_spi_platform_data {
        u32     sysclk;
 };
 
+struct fsl_mxc_tve_platform_data {
+       char *dac_reg;
+       char *dig_reg;
+};
+
+struct fsl_mxc_ldb_platform_data {
+       char *lvds_bg_reg;
+       u32 ext_ref;
+};
+
+struct fsl_mxc_lcd_platform_data {
+       char *io_reg;
+       char *core_reg;
+       char *analog_reg;
+       void (*reset) (void);
+};
+
+struct fsl_mxc_ddc_platform_data {
+       u32 di;
+       void (*init) (void);
+       int (*update) (void);
+       char *analog_regulator;
+};
+
+struct fsl_mxc_camera_platform_data {
+       char *core_regulator;
+       char *io_regulator;
+       char *analog_regulator;
+       char *gpo_regulator;
+       u32 mclk;
+       u32 csi;
+       void (*pwdn)(int pwdn);
+};
+
 struct mpc8xx_pcmcia_ops {
        void(*hw_ctrl)(int slot, int enable);
        int(*voltage_set)(int slot, int vcc, int vpp);
 };
 
+struct mxc_pm_platform_data {
+       void (*suspend_enter) (void);
+       void (*suspend_exit) (void);
+};
+
+struct mxc_iim_platform_data {
+       const s8        *name;
+       u32     virt_base;
+       u32     reg_base;
+       u32     reg_end;
+       u32     reg_size;
+       u32     bank_start;
+       u32     bank_end;
+       u32     irq;
+       u32     action;
+       struct mutex mutex;
+       struct completion completion;
+       spinlock_t lock;
+       struct clk *clk;
+       struct device *dev;
+       void   (*enable_fuse)(void);
+       void   (*disable_fuse)(void);
+};
+
+struct mxc_otp_platform_data {
+       char    **fuse_name;
+       char    *regulator_name;
+       unsigned int    fuse_num;
+};
+
+/*
+ * This struct is to define the number of SSIs on a platform,
+ * DAM source port config, DAM external port config,
+ * regulator names, and other stuff audio needs.
+ */
+struct mxc_audio_platform_data {
+       int ssi_num;
+       int src_port;
+       int ext_port;
+
+       int intr_id_hp;
+       int ext_ram;
+       struct clk *ssi_clk[2];
+
+       int hp_irq;
+       int (*hp_status) (void);
+
+       int sysclk;
+
+       int (*init) (void);     /* board specific init */
+       int (*amp_enable) (int enable);
+       int (*clock_enable) (int enable);
+       int (*finit) (void);    /* board specific finit */
+       void *priv;             /* used by board specific functions */
+};
+
 /* Returns non-zero if the current suspend operation would
  * lead to a deep sleep (i.e. power removed from the core,
  * instead of just the clock).
diff --git a/include/linux/ipu.h b/include/linux/ipu.h
new file mode 100644 (file)
index 0000000..2e2b3ce
--- /dev/null
@@ -0,0 +1,1292 @@
+/*
+ * Copyright 2005-2011 Freescale Semiconductor, Inc.
+ */
+
+/*
+ * The code contained herein is licensed under the GNU Lesser General
+ * Public License.  You may obtain a copy of the GNU Lesser General
+ * Public License Version 2.1 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/lgpl-license.html
+ * http://www.gnu.org/copyleft/lgpl.html
+ */
+
+/*!
+ * @defgroup IPU MXC Image Processing Unit (IPU) Driver
+ */
+/*!
+ * @file arch-mxc/ipu.h
+ *
+ * @brief This file contains the IPU driver API declarations.
+ *
+ * @ingroup IPU
+ */
+
+#ifndef __ASM_ARCH_IPU_H__
+#define __ASM_ARCH_IPU_H__
+
+#include <linux/types.h>
+#include <linux/videodev2.h>
+#ifdef __KERNEL__
+#include <linux/interrupt.h>
+#else
+#ifndef __cplusplus
+typedef unsigned char bool;
+#endif
+#define irqreturn_t int
+#define dma_addr_t int
+#define u32 unsigned int
+#define __u32 u32
+#endif
+
+/*!
+ * Enumeration of IPU rotation modes
+ */
+typedef enum {
+       /* Note the enum values correspond to BAM value */
+       IPU_ROTATE_NONE = 0,
+       IPU_ROTATE_VERT_FLIP = 1,
+       IPU_ROTATE_HORIZ_FLIP = 2,
+       IPU_ROTATE_180 = 3,
+       IPU_ROTATE_90_RIGHT = 4,
+       IPU_ROTATE_90_RIGHT_VFLIP = 5,
+       IPU_ROTATE_90_RIGHT_HFLIP = 6,
+       IPU_ROTATE_90_LEFT = 7,
+} ipu_rotate_mode_t;
+
+/*!
+ * Enumeration of Post Filter modes
+ */
+typedef enum {
+       PF_DISABLE_ALL = 0,
+       PF_MPEG4_DEBLOCK = 1,
+       PF_MPEG4_DERING = 2,
+       PF_MPEG4_DEBLOCK_DERING = 3,
+       PF_H264_DEBLOCK = 4,
+} pf_operation_t;
+
+/*!
+ * Enumeration of Synchronous (Memory-less) panel types
+ */
+typedef enum {
+       IPU_PANEL_SHARP_TFT,
+       IPU_PANEL_TFT,
+} ipu_panel_t;
+
+/*!
+ * Enumeration of VDI MOTION select
+ */
+typedef enum {
+       MED_MOTION = 0,
+       LOW_MOTION = 1,
+       HIGH_MOTION = 2,
+} ipu_motion_sel;
+
+/*  IPU Pixel format definitions */
+/*  Four-character-code (FOURCC) */
+#define fourcc(a, b, c, d)\
+        (((__u32)(a)<<0)|((__u32)(b)<<8)|((__u32)(c)<<16)|((__u32)(d)<<24))
+
+/*!
+ * @name IPU Pixel Formats
+ *
+ * Pixel formats are defined with ASCII FOURCC code. The pixel format codes are
+ * the same used by V4L2 API.
+ */
+
+/*! @{ */
+/*! @name Generic or Raw Data Formats */
+/*! @{ */
+#define IPU_PIX_FMT_GENERIC fourcc('I', 'P', 'U', '0') /*!< IPU Generic Data */
+#define IPU_PIX_FMT_GENERIC_32 fourcc('I', 'P', 'U', '1')      /*!< IPU Generic Data */
+#define IPU_PIX_FMT_LVDS666 fourcc('L', 'V', 'D', '6') /*!< IPU Generic Data */
+#define IPU_PIX_FMT_LVDS888 fourcc('L', 'V', 'D', '8') /*!< IPU Generic Data */
+/*! @} */
+/*! @name RGB Formats */
+/*! @{ */
+#define IPU_PIX_FMT_RGB332  fourcc('R', 'G', 'B', '1') /*!<  8  RGB-3-3-2    */
+#define IPU_PIX_FMT_RGB555  fourcc('R', 'G', 'B', 'O') /*!< 16  RGB-5-5-5    */
+#define IPU_PIX_FMT_RGB565  fourcc('R', 'G', 'B', 'P') /*!< 1 6  RGB-5-6-5   */
+#define IPU_PIX_FMT_RGB666  fourcc('R', 'G', 'B', '6') /*!< 18  RGB-6-6-6    */
+#define IPU_PIX_FMT_BGR666  fourcc('B', 'G', 'R', '6') /*!< 18  BGR-6-6-6    */
+#define IPU_PIX_FMT_BGR24   fourcc('B', 'G', 'R', '3') /*!< 24  BGR-8-8-8    */
+#define IPU_PIX_FMT_RGB24   fourcc('R', 'G', 'B', '3') /*!< 24  RGB-8-8-8    */
+#define IPU_PIX_FMT_GBR24   fourcc('G', 'B', 'R', '3') /*!< 24  GBR-8-8-8    */
+#define IPU_PIX_FMT_BGR32   fourcc('B', 'G', 'R', '4') /*!< 32  BGR-8-8-8-8  */
+#define IPU_PIX_FMT_BGRA32  fourcc('B', 'G', 'R', 'A') /*!< 32  BGR-8-8-8-8  */
+#define IPU_PIX_FMT_RGB32   fourcc('R', 'G', 'B', '4') /*!< 32  RGB-8-8-8-8  */
+#define IPU_PIX_FMT_RGBA32  fourcc('R', 'G', 'B', 'A') /*!< 32  RGB-8-8-8-8  */
+#define IPU_PIX_FMT_ABGR32  fourcc('A', 'B', 'G', 'R') /*!< 32  ABGR-8-8-8-8 */
+/*! @} */
+/*! @name YUV Interleaved Formats */
+/*! @{ */
+#define IPU_PIX_FMT_YUYV    fourcc('Y', 'U', 'Y', 'V') /*!< 16 YUV 4:2:2 */
+#define IPU_PIX_FMT_UYVY    fourcc('U', 'Y', 'V', 'Y') /*!< 16 YUV 4:2:2 */
+#define IPU_PIX_FMT_YVYU    fourcc('Y', 'V', 'Y', 'U')  /*!< 16 YVYU 4:2:2 */
+#define IPU_PIX_FMT_VYUY    fourcc('V', 'Y', 'U', 'Y')  /*!< 16 VYYU 4:2:2 */
+#define IPU_PIX_FMT_Y41P    fourcc('Y', '4', '1', 'P') /*!< 12 YUV 4:1:1 */
+#define IPU_PIX_FMT_YUV444  fourcc('Y', '4', '4', '4') /*!< 24 YUV 4:4:4 */
+/* two planes -- one Y, one Cb + Cr interleaved  */
+#define IPU_PIX_FMT_NV12    fourcc('N', 'V', '1', '2') /* 12  Y/CbCr 4:2:0  */
+/*! @} */
+/*! @name YUV Planar Formats */
+/*! @{ */
+#define IPU_PIX_FMT_GREY    fourcc('G', 'R', 'E', 'Y') /*!< 8  Greyscale */
+#define IPU_PIX_FMT_YVU410P fourcc('Y', 'V', 'U', '9') /*!< 9  YVU 4:1:0 */
+#define IPU_PIX_FMT_YUV410P fourcc('Y', 'U', 'V', '9') /*!< 9  YUV 4:1:0 */
+#define IPU_PIX_FMT_YVU420P fourcc('Y', 'V', '1', '2') /*!< 12 YVU 4:2:0 */
+#define IPU_PIX_FMT_YUV420P fourcc('I', '4', '2', '0') /*!< 12 YUV 4:2:0 */
+#define IPU_PIX_FMT_YUV420P2 fourcc('Y', 'U', '1', '2')        /*!< 12 YUV 4:2:0 */
+#define IPU_PIX_FMT_YVU422P fourcc('Y', 'V', '1', '6') /*!< 16 YVU 4:2:2 */
+#define IPU_PIX_FMT_YUV422P fourcc('4', '2', '2', 'P') /*!< 16 YUV 4:2:2 */
+/*! @} */
+
+/* IPU Driver channels definitions.    */
+/* Note these are different from IDMA channels */
+#ifdef CONFIG_MXC_IPU_V1
+#define _MAKE_CHAN(num, in, out, sec)    ((num << 24) | (sec << 16) | (out << 8) | in)
+#define IPU_CHAN_ID(ch)         (ch >> 24)
+#define IPU_CHAN_SEC_DMA(ch)    ((uint32_t) (ch >> 16) & 0xFF)
+#define IPU_CHAN_OUT_DMA(ch)    ((uint32_t) (ch >> 8) & 0xFF)
+#define IPU_CHAN_IN_DMA(ch)     ((uint32_t) (ch & 0xFF))
+
+#else
+#define IPU_MAX_CH     32
+#define _MAKE_CHAN(num, v_in, g_in, a_in, out) \
+       ((num << 24) | (v_in << 18) | (g_in << 12) | (a_in << 6) | out)
+#define _MAKE_ALT_CHAN(ch)             (ch | (IPU_MAX_CH << 24))
+#define IPU_CHAN_ID(ch)                        (ch >> 24)
+#define IPU_CHAN_ALT(ch)               (ch & 0x02000000)
+#define IPU_CHAN_ALPHA_IN_DMA(ch)      ((uint32_t) (ch >> 6) & 0x3F)
+#define IPU_CHAN_GRAPH_IN_DMA(ch)      ((uint32_t) (ch >> 12) & 0x3F)
+#define IPU_CHAN_VIDEO_IN_DMA(ch)      ((uint32_t) (ch >> 18) & 0x3F)
+#define IPU_CHAN_OUT_DMA(ch)           ((uint32_t) (ch & 0x3F))
+#define NO_DMA 0x3F
+#define ALT    1
+#endif
+/*!
+ * Enumeration of IPU logical channels. An IPU logical channel is defined as a
+ * combination of an input (memory to IPU), output (IPU to memory), and/or
+ * secondary input IDMA channels and in some cases an Image Converter task.
+ * Some channels consist of only an input or output.
+ */
+typedef enum {
+       CHAN_NONE = -1,
+#ifdef CONFIG_MXC_IPU_V1
+       CSI_MEM = _MAKE_CHAN(1, 0xFF, 7, 0xFF), /*!< CSI raw sensor data to memory */
+
+       CSI_PRP_ENC_MEM = _MAKE_CHAN(2, 0xFF, 0, 0xFF), /*!< CSI to IC Encoder PreProcessing to Memory */
+       MEM_PRP_ENC_MEM = _MAKE_CHAN(3, 6, 0, 0xFF),    /*!< Memory to IC Encoder PreProcessing to Memory */
+       MEM_ROT_ENC_MEM = _MAKE_CHAN(4, 10, 8, 0xFF),   /*!< Memory to IC Encoder Rotation to Memory */
+
+       CSI_PRP_VF_MEM = _MAKE_CHAN(5, 0xFF, 1, 0xFF),  /*!< CSI to IC Viewfinder PreProcessing to Memory */
+       CSI_PRP_VF_ADC = _MAKE_CHAN(6, 0xFF, 1, 0xFF),  /*!< CSI to IC Viewfinder PreProcessing to ADC */
+       MEM_PRP_VF_MEM = _MAKE_CHAN(7, 6, 1, 3),        /*!< Memory to IC Viewfinder PreProcessing to Memory */
+       MEM_PRP_VF_ADC = _MAKE_CHAN(8, 6, 1, 3),        /*!< Memory to IC Viewfinder PreProcessing to ADC */
+       MEM_ROT_VF_MEM = _MAKE_CHAN(9, 11, 9, 0xFF),    /*!< Memory to IC Viewfinder Rotation to Memory */
+
+       MEM_PP_MEM = _MAKE_CHAN(10, 5, 2, 4),   /*!< Memory to IC PostProcessing to Memory */
+       MEM_ROT_PP_MEM = _MAKE_CHAN(11, 13, 12, 0xFF),  /*!< Memory to IC PostProcessing Rotation to Memory */
+       MEM_PP_ADC = _MAKE_CHAN(12, 5, 2, 4),   /*!< Memory to IC PostProcessing to ADC */
+
+       MEM_SDC_BG = _MAKE_CHAN(14, 14, 0xFF, 0xFF),    /*!< Memory to SDC Background plane */
+       MEM_SDC_FG = _MAKE_CHAN(15, 15, 0xFF, 0xFF),    /*!< Memory to SDC Foreground plane */
+       MEM_SDC_MASK = _MAKE_CHAN(16, 16, 0xFF, 0xFF),  /*!< Memory to SDC Mask */
+
+       MEM_BG_SYNC = MEM_SDC_BG,
+       MEM_FG_SYNC = MEM_SDC_FG,
+
+       ADC_SYS1 = _MAKE_CHAN(17, 18, 22, 20),  /*!< Memory to ADC System Channel 1 */
+       ADC_SYS2 = _MAKE_CHAN(18, 19, 23, 21),  /*!< Memory to ADC System Channel 2 */
+
+       MEM_PF_Y_MEM = _MAKE_CHAN(19, 26, 29, 24),      /*!< Y and PF Memory to Post-filter to Y Memory */
+       MEM_PF_U_MEM = _MAKE_CHAN(20, 27, 30, 25),      /*!< U and PF Memory to Post-filter to U Memory */
+       MEM_PF_V_MEM = _MAKE_CHAN(21, 28, 31, 0xFF),    /*!< V Memory to Post-filter to V Memory */
+
+       MEM_DC_SYNC = CHAN_NONE,
+       DIRECT_ASYNC0 = CHAN_NONE,
+       DIRECT_ASYNC1 = CHAN_NONE,
+       MEM_VDI_PRP_VF_MEM_P = CHAN_NONE,
+       MEM_VDI_PRP_VF_MEM = CHAN_NONE,
+       MEM_VDI_PRP_VF_MEM_N = CHAN_NONE,
+#else
+       MEM_ROT_ENC_MEM = _MAKE_CHAN(1, 45, NO_DMA, NO_DMA, 48),
+       MEM_ROT_VF_MEM = _MAKE_CHAN(2, 46, NO_DMA, NO_DMA, 49),
+       MEM_ROT_PP_MEM = _MAKE_CHAN(3, 47, NO_DMA, NO_DMA, 50),
+
+       MEM_PRP_ENC_MEM = _MAKE_CHAN(4, 12, 14, 17, 20),
+       MEM_PRP_VF_MEM = _MAKE_CHAN(5, 12, 14, 17, 21),
+       MEM_PP_MEM = _MAKE_CHAN(6, 11, 15, 18, 22),
+
+       MEM_DC_SYNC = _MAKE_CHAN(7, 28, NO_DMA, NO_DMA, NO_DMA),
+       MEM_DC_ASYNC = _MAKE_CHAN(8, 41, NO_DMA, NO_DMA, NO_DMA),
+       MEM_BG_SYNC = _MAKE_CHAN(9, 23, NO_DMA, 51, NO_DMA),
+       MEM_FG_SYNC = _MAKE_CHAN(10, 27, NO_DMA, 31, NO_DMA),
+
+       MEM_BG_ASYNC0 = _MAKE_CHAN(11, 24, NO_DMA, 52, NO_DMA),
+       MEM_FG_ASYNC0 = _MAKE_CHAN(12, 29, NO_DMA, 33, NO_DMA),
+       MEM_BG_ASYNC1 = _MAKE_ALT_CHAN(MEM_BG_ASYNC0),
+       MEM_FG_ASYNC1 = _MAKE_ALT_CHAN(MEM_FG_ASYNC0),
+
+       DIRECT_ASYNC0 = _MAKE_CHAN(13, NO_DMA, NO_DMA, NO_DMA, NO_DMA),
+       DIRECT_ASYNC1 = _MAKE_CHAN(14, NO_DMA, NO_DMA, NO_DMA, NO_DMA),
+
+       CSI_MEM0 = _MAKE_CHAN(15, NO_DMA, NO_DMA, NO_DMA, 0),
+       CSI_MEM1 = _MAKE_CHAN(16, NO_DMA, NO_DMA, NO_DMA, 1),
+       CSI_MEM2 = _MAKE_CHAN(17, NO_DMA, NO_DMA, NO_DMA, 2),
+       CSI_MEM3 = _MAKE_CHAN(18, NO_DMA, NO_DMA, NO_DMA, 3),
+
+       CSI_MEM = CSI_MEM0,
+
+       CSI_PRP_ENC_MEM = _MAKE_CHAN(19, NO_DMA, NO_DMA, NO_DMA, 20),
+       CSI_PRP_VF_MEM = _MAKE_CHAN(20, NO_DMA, NO_DMA, NO_DMA, 21),
+
+       MEM_VDI_PRP_VF_MEM_P = _MAKE_CHAN(21, 8, 14, 17, 21),
+       MEM_VDI_PRP_VF_MEM = _MAKE_CHAN(22, 9, 14, 17, 21),
+       MEM_VDI_PRP_VF_MEM_N = _MAKE_CHAN(23, 10, 14, 17, 21),
+
+       MEM_PP_ADC = CHAN_NONE,
+       ADC_SYS2 = CHAN_NONE,
+#endif
+
+} ipu_channel_t;
+
+/*!
+ * Enumeration of types of buffers for a logical channel.
+ */
+typedef enum {
+       IPU_OUTPUT_BUFFER = 0,  /*!< Buffer for output from IPU */
+       IPU_ALPHA_IN_BUFFER = 1,        /*!< Buffer for input to IPU */
+       IPU_GRAPH_IN_BUFFER = 2,        /*!< Buffer for input to IPU */
+       IPU_VIDEO_IN_BUFFER = 3,        /*!< Buffer for input to IPU */
+       IPU_INPUT_BUFFER = IPU_VIDEO_IN_BUFFER,
+       IPU_SEC_INPUT_BUFFER = IPU_GRAPH_IN_BUFFER,
+} ipu_buffer_t;
+
+#define IPU_PANEL_SERIAL               1
+#define IPU_PANEL_PARALLEL             2
+
+/*!
+ * Enumeration of DI ports for ADC.
+ */
+typedef enum {
+       DISP0,
+       DISP1,
+       DISP2,
+       DISP3
+} display_port_t;
+
+/*!
+ * Enumeration of ADC channel operation mode.
+ */
+typedef enum {
+       Disable,
+       WriteTemplateNonSeq,
+       ReadTemplateNonSeq,
+       WriteTemplateUnCon,
+       ReadTemplateUnCon,
+       WriteDataWithRS,
+       WriteDataWoRS,
+       WriteCmd
+} mcu_mode_t;
+
+/*!
+ * Enumeration of ADC channel addressing mode.
+ */
+typedef enum {
+       FullWoBE,
+       FullWithBE,
+       XY
+} display_addressing_t;
+
+/*!
+ * Union of initialization parameters for a logical channel.
+ */
+typedef union {
+       struct {
+               uint32_t csi;
+               uint32_t mipi_id;
+               bool mipi_en;
+               bool interlaced;
+       } csi_mem;
+       struct {
+               uint32_t in_width;
+               uint32_t in_height;
+               uint32_t in_pixel_fmt;
+               uint32_t out_width;
+               uint32_t out_height;
+               uint32_t out_pixel_fmt;
+               uint32_t csi;
+       } csi_prp_enc_mem;
+       struct {
+               uint32_t in_width;
+               uint32_t in_height;
+               uint32_t in_pixel_fmt;
+               uint32_t out_width;
+               uint32_t out_height;
+               uint32_t out_pixel_fmt;
+               uint32_t outh_resize_ratio;
+               uint32_t outv_resize_ratio;
+       } mem_prp_enc_mem;
+       struct {
+               uint32_t in_width;
+               uint32_t in_height;
+               uint32_t in_pixel_fmt;
+               uint32_t out_width;
+               uint32_t out_height;
+               uint32_t out_pixel_fmt;
+       } mem_rot_enc_mem;
+       struct {
+               uint32_t in_width;
+               uint32_t in_height;
+               uint32_t in_pixel_fmt;
+               uint32_t out_width;
+               uint32_t out_height;
+               uint32_t out_pixel_fmt;
+               bool graphics_combine_en;
+               bool global_alpha_en;
+               bool key_color_en;
+               uint32_t csi;
+       } csi_prp_vf_mem;
+       struct {
+               uint32_t in_width;
+               uint32_t in_height;
+               uint32_t in_pixel_fmt;
+               uint32_t out_width;
+               uint32_t out_height;
+               uint32_t out_pixel_fmt;
+               bool graphics_combine_en;
+               bool global_alpha_en;
+               bool key_color_en;
+               display_port_t disp;
+               uint32_t out_left;
+               uint32_t out_top;
+       } csi_prp_vf_adc;
+       struct {
+               uint32_t in_width;
+               uint32_t in_height;
+               uint32_t in_pixel_fmt;
+               uint32_t out_width;
+               uint32_t out_height;
+               uint32_t out_pixel_fmt;
+               uint32_t outh_resize_ratio;
+               uint32_t outv_resize_ratio;
+               bool graphics_combine_en;
+               bool global_alpha_en;
+               bool key_color_en;
+               uint32_t in_g_pixel_fmt;
+               uint8_t alpha;
+               uint32_t key_color;
+               bool alpha_chan_en;
+               ipu_motion_sel motion_sel;
+               enum v4l2_field field_fmt;
+       } mem_prp_vf_mem;
+       struct {
+               uint32_t temp;
+       } mem_prp_vf_adc;
+       struct {
+               uint32_t temp;
+       } mem_rot_vf_mem;
+       struct {
+               uint32_t in_width;
+               uint32_t in_height;
+               uint32_t in_pixel_fmt;
+               uint32_t out_width;
+               uint32_t out_height;
+               uint32_t out_pixel_fmt;
+               uint32_t outh_resize_ratio;
+               uint32_t outv_resize_ratio;
+               bool graphics_combine_en;
+               bool global_alpha_en;
+               bool key_color_en;
+               uint32_t in_g_pixel_fmt;
+               uint8_t alpha;
+               uint32_t key_color;
+               bool alpha_chan_en;
+       } mem_pp_mem;
+       struct {
+               uint32_t temp;
+       } mem_rot_mem;
+       struct {
+               uint32_t in_width;
+               uint32_t in_height;
+               uint32_t in_pixel_fmt;
+               uint32_t out_width;
+               uint32_t out_height;
+               uint32_t out_pixel_fmt;
+               bool graphics_combine_en;
+               bool global_alpha_en;
+               bool key_color_en;
+               display_port_t disp;
+               uint32_t out_left;
+               uint32_t out_top;
+       } mem_pp_adc;
+       struct {
+               pf_operation_t operation;
+       } mem_pf_mem;
+       struct {
+               uint32_t di;
+               bool interlaced;
+               uint32_t in_pixel_fmt;
+               uint32_t out_pixel_fmt;
+       } mem_dc_sync;
+       struct {
+               uint32_t temp;
+       } mem_sdc_fg;
+       struct {
+               uint32_t di;
+               bool interlaced;
+               uint32_t in_pixel_fmt;
+               uint32_t out_pixel_fmt;
+               bool alpha_chan_en;
+       } mem_dp_bg_sync;
+       struct {
+               uint32_t temp;
+       } mem_sdc_bg;
+       struct {
+               uint32_t di;
+               bool interlaced;
+               uint32_t in_pixel_fmt;
+               uint32_t out_pixel_fmt;
+               bool alpha_chan_en;
+       } mem_dp_fg_sync;
+       struct {
+               uint32_t di;
+       } direct_async;
+       struct {
+               display_port_t disp;
+               mcu_mode_t ch_mode;
+               uint32_t out_left;
+               uint32_t out_top;
+       } adc_sys1;
+       struct {
+               display_port_t disp;
+               mcu_mode_t ch_mode;
+               uint32_t out_left;
+               uint32_t out_top;
+       } adc_sys2;
+} ipu_channel_params_t;
+
+/*!
+ * Enumeration of IPU interrupt sources.
+ */
+enum ipu_irq_line {
+#ifdef CONFIG_MXC_IPU_V1
+       IPU_IRQ_DC_FC_1 = -1,
+
+       IPU_IRQ_PRP_ENC_OUT_EOF = 0,
+       IPU_IRQ_PRP_VF_OUT_EOF = 1,
+       IPU_IRQ_PP_OUT_EOF = 2,
+       IPU_IRQ_PRP_GRAPH_IN_EOF = 3,
+       IPU_IRQ_PP_GRAPH_IN_EOF = 4,
+       IPU_IRQ_PP_IN_EOF = 5,
+       IPU_IRQ_PRP_IN_EOF = 6,
+       IPU_IRQ_SENSOR_OUT_EOF = 7,
+       IPU_IRQ_CSI0_OUT_EOF = IPU_IRQ_SENSOR_OUT_EOF,
+       IPU_IRQ_PRP_ENC_ROT_OUT_EOF = 8,
+       IPU_IRQ_PRP_VF_ROT_OUT_EOF = 9,
+       IPU_IRQ_PRP_ENC_ROT_IN_EOF = 10,
+       IPU_IRQ_PRP_VF_ROT_IN_EOF = 11,
+       IPU_IRQ_PP_ROT_OUT_EOF = 12,
+       IPU_IRQ_PP_ROT_IN_EOF = 13,
+       IPU_IRQ_BG_SYNC_EOF = 14,
+       IPU_IRQ_SDC_BG_EOF = IPU_IRQ_BG_SYNC_EOF,
+       IPU_IRQ_FG_SYNC_EOF = 15,
+       IPU_IRQ_SDC_FG_EOF = IPU_IRQ_FG_SYNC_EOF,
+       IPU_IRQ_SDC_MASK_EOF = 16,
+       IPU_IRQ_SDC_BG_PART_EOF = 17,
+       IPU_IRQ_ADC_SYS1_WR_EOF = 18,
+       IPU_IRQ_ADC_SYS2_WR_EOF = 19,
+       IPU_IRQ_ADC_SYS1_CMD_EOF = 20,
+       IPU_IRQ_ADC_SYS2_CMD_EOF = 21,
+       IPU_IRQ_ADC_SYS1_RD_EOF = 22,
+       IPU_IRQ_ADC_SYS2_RD_EOF = 23,
+       IPU_IRQ_PF_QP_IN_EOF = 24,
+       IPU_IRQ_PF_BSP_IN_EOF = 25,
+       IPU_IRQ_PF_Y_IN_EOF = 26,
+       IPU_IRQ_PF_U_IN_EOF = 27,
+       IPU_IRQ_PF_V_IN_EOF = 28,
+       IPU_IRQ_PF_Y_OUT_EOF = 29,
+       IPU_IRQ_PF_U_OUT_EOF = 30,
+       IPU_IRQ_PF_V_OUT_EOF = 31,
+
+       IPU_IRQ_PRP_ENC_OUT_NF = 32,
+       IPU_IRQ_PRP_VF_OUT_NF = 33,
+       IPU_IRQ_PP_OUT_NF = 34,
+       IPU_IRQ_PRP_GRAPH_IN_NF = 35,
+       IPU_IRQ_PP_GRAPH_IN_NF = 36,
+       IPU_IRQ_PP_IN_NF = 37,
+       IPU_IRQ_PRP_IN_NF = 38,
+       IPU_IRQ_SENSOR_OUT_NF = 39,
+       IPU_IRQ_PRP_ENC_ROT_OUT_NF = 40,
+       IPU_IRQ_PRP_VF_ROT_OUT_NF = 41,
+       IPU_IRQ_PRP_ENC_ROT_IN_NF = 42,
+       IPU_IRQ_PRP_VF_ROT_IN_NF = 43,
+       IPU_IRQ_PP_ROT_OUT_NF = 44,
+       IPU_IRQ_PP_ROT_IN_NF = 45,
+       IPU_IRQ_SDC_FG_NF = 46,
+       IPU_IRQ_SDC_BG_NF = 47,
+       IPU_IRQ_SDC_MASK_NF = 48,
+       IPU_IRQ_SDC_BG_PART_NF = 49,
+       IPU_IRQ_ADC_SYS1_WR_NF = 50,
+       IPU_IRQ_ADC_SYS2_WR_NF = 51,
+       IPU_IRQ_ADC_SYS1_CMD_NF = 52,
+       IPU_IRQ_ADC_SYS2_CMD_NF = 53,
+       IPU_IRQ_ADC_SYS1_RD_NF = 54,
+       IPU_IRQ_ADC_SYS2_RD_NF = 55,
+       IPU_IRQ_PF_QP_IN_NF = 56,
+       IPU_IRQ_PF_BSP_IN_NF = 57,
+       IPU_IRQ_PF_Y_IN_NF = 58,
+       IPU_IRQ_PF_U_IN_NF = 59,
+       IPU_IRQ_PF_V_IN_NF = 60,
+       IPU_IRQ_PF_Y_OUT_NF = 61,
+       IPU_IRQ_PF_U_OUT_NF = 62,
+       IPU_IRQ_PF_V_OUT_NF = 63,
+
+       IPU_IRQ_BREAKRQ = 64,
+       IPU_IRQ_SDC_BG_OUT_EOF = 65,
+       IPU_IRQ_BG_SF_END = IPU_IRQ_SDC_BG_OUT_EOF,
+       IPU_IRQ_SDC_FG_OUT_EOF = 66,
+       IPU_IRQ_SDC_MASK_OUT_EOF = 67,
+       IPU_IRQ_ADC_SERIAL_DATA_OUT = 68,
+       IPU_IRQ_SENSOR_NF = 69,
+       IPU_IRQ_SENSOR_EOF = 70,
+       IPU_IRQ_SDC_DISP3_VSYNC = 80,
+       IPU_IRQ_ADC_DISP0_VSYNC = 81,
+       IPU_IRQ_ADC_DISP12_VSYNC = 82,
+       IPU_IRQ_ADC_PRP_EOF = 83,
+       IPU_IRQ_ADC_PP_EOF = 84,
+       IPU_IRQ_ADC_SYS1_EOF = 85,
+       IPU_IRQ_ADC_SYS2_EOF = 86,
+
+       IPU_IRQ_PRP_ENC_OUT_NFB4EOF_ERR = 96,
+       IPU_IRQ_PRP_VF_OUT_NFB4EOF_ERR = 97,
+       IPU_IRQ_PP_OUT_NFB4EOF_ERR = 98,
+       IPU_IRQ_PRP_GRAPH_IN_NFB4EOF_ERR = 99,
+       IPU_IRQ_PP_GRAPH_IN_NFB4EOF_ERR = 100,
+       IPU_IRQ_PP_IN_NFB4EOF_ERR = 101,
+       IPU_IRQ_PRP_IN_NFB4EOF_ERR = 102,
+       IPU_IRQ_SENSOR_OUT_NFB4EOF_ERR = 103,
+       IPU_IRQ_PRP_ENC_ROT_OUT_NFB4EOF_ERR = 104,
+       IPU_IRQ_PRP_VF_ROT_OUT_NFB4EOF_ERR = 105,
+       IPU_IRQ_PRP_ENC_ROT_IN_NFB4EOF_ERR = 106,
+       IPU_IRQ_PRP_VF_ROT_IN_NFB4EOF_ERR = 107,
+       IPU_IRQ_PP_ROT_OUT_NFB4EOF_ERR = 108,
+       IPU_IRQ_PP_ROT_IN_NFB4EOF_ERR = 109,
+       IPU_IRQ_SDC_FG_NFB4EOF_ERR = 110,
+       IPU_IRQ_SDC_BG_NFB4EOF_ERR = 111,
+       IPU_IRQ_SDC_MASK_NFB4EOF_ERR = 112,
+       IPU_IRQ_SDC_BG_PART_NFB4EOF_ERR = 113,
+       IPU_IRQ_ADC_SYS1_WR_NFB4EOF_ERR = 114,
+       IPU_IRQ_ADC_SYS2_WR_NFB4EOF_ERR = 115,
+       IPU_IRQ_ADC_SYS1_CMD_NFB4EOF_ERR = 116,
+       IPU_IRQ_ADC_SYS2_CMD_NFB4EOF_ERR = 117,
+       IPU_IRQ_ADC_SYS1_RD_NFB4EOF_ERR = 118,
+       IPU_IRQ_ADC_SYS2_RD_NFB4EOF_ERR = 119,
+       IPU_IRQ_PF_QP_IN_NFB4EOF_ERR = 120,
+       IPU_IRQ_PF_BSP_IN_NFB4EOF_ERR = 121,
+       IPU_IRQ_PF_Y_IN_NFB4EOF_ERR = 122,
+       IPU_IRQ_PF_U_IN_NFB4EOF_ERR = 123,
+       IPU_IRQ_PF_V_IN_NFB4EOF_ERR = 124,
+       IPU_IRQ_PF_Y_OUT_NFB4EOF_ERR = 125,
+       IPU_IRQ_PF_U_OUT_NFB4EOF_ERR = 126,
+       IPU_IRQ_PF_V_OUT_NFB4EOF_ERR = 127,
+
+       IPU_IRQ_BAYER_BUFOVF_ERR = 128,
+       IPU_IRQ_ENC_BUFOVF_ERR = 129,
+       IPU_IRQ_VF_BUFOVF_ERR = 130,
+       IPU_IRQ_ADC_PP_TEAR_ERR = 131,
+       IPU_IRQ_ADC_SYS1_TEAR_ERR = 132,
+       IPU_IRQ_ADC_SYS2_TEAR_ERR = 133,
+       IPU_IRQ_SDC_BGD_ERR = 134,
+       IPU_IRQ_SDC_FGD_ERR = 135,
+       IPU_IRQ_SDC_MASKD_ERR = 136,
+       IPU_IRQ_BAYER_FRM_LOST_ERR = 137,
+       IPU_IRQ_ENC_FRM_LOST_ERR = 138,
+       IPU_IRQ_VF_FRM_LOST_ERR = 139,
+       IPU_IRQ_ADC_LOCK_ERR = 140,
+       IPU_IRQ_DI_LLA_LOCK_ERR = 141,
+       IPU_IRQ_AHB_M1_ERR = 142,
+       IPU_IRQ_AHB_M12_ERR = 143,
+#else
+       IPU_IRQ_CSI0_OUT_EOF = 0,
+       IPU_IRQ_CSI1_OUT_EOF = 1,
+       IPU_IRQ_CSI2_OUT_EOF = 2,
+       IPU_IRQ_CSI3_OUT_EOF = 3,
+       IPU_IRQ_VDI_P_IN_EOF = 8,
+       IPU_IRQ_VDI_C_IN_EOF = 9,
+       IPU_IRQ_VDI_N_IN_EOF = 10,
+       IPU_IRQ_PP_IN_EOF = 11,
+       IPU_IRQ_PRP_IN_EOF = 12,
+       IPU_IRQ_PRP_GRAPH_IN_EOF = 14,
+       IPU_IRQ_PP_GRAPH_IN_EOF = 15,
+       IPU_IRQ_PRP_ALPHA_IN_EOF = 17,
+       IPU_IRQ_PP_ALPHA_IN_EOF = 18,
+       IPU_IRQ_PRP_ENC_OUT_EOF = 20,
+       IPU_IRQ_PRP_VF_OUT_EOF = 21,
+       IPU_IRQ_PP_OUT_EOF = 22,
+       IPU_IRQ_BG_SYNC_EOF = 23,
+       IPU_IRQ_BG_ASYNC_EOF = 24,
+       IPU_IRQ_FG_SYNC_EOF = 27,
+       IPU_IRQ_DC_SYNC_EOF = 28,
+       IPU_IRQ_FG_ASYNC_EOF = 29,
+       IPU_IRQ_FG_ALPHA_SYNC_EOF = 31,
+
+       IPU_IRQ_FG_ALPHA_ASYNC_EOF = 33,
+       IPU_IRQ_DC_READ_EOF = 40,
+       IPU_IRQ_DC_ASYNC_EOF = 41,
+       IPU_IRQ_DC_CMD1_EOF = 42,
+       IPU_IRQ_DC_CMD2_EOF = 43,
+       IPU_IRQ_DC_MASK_EOF = 44,
+       IPU_IRQ_PRP_ENC_ROT_IN_EOF = 45,
+       IPU_IRQ_PRP_VF_ROT_IN_EOF = 46,
+       IPU_IRQ_PP_ROT_IN_EOF = 47,
+       IPU_IRQ_PRP_ENC_ROT_OUT_EOF = 48,
+       IPU_IRQ_PRP_VF_ROT_OUT_EOF = 49,
+       IPU_IRQ_PP_ROT_OUT_EOF = 50,
+       IPU_IRQ_BG_ALPHA_SYNC_EOF = 51,
+       IPU_IRQ_BG_ALPHA_ASYNC_EOF = 52,
+
+       IPU_IRQ_DP_SF_START = 448 + 2,
+       IPU_IRQ_DP_SF_END = 448 + 3,
+       IPU_IRQ_BG_SF_END = IPU_IRQ_DP_SF_END,
+       IPU_IRQ_DC_FC_0 = 448 + 8,
+       IPU_IRQ_DC_FC_1 = 448 + 9,
+       IPU_IRQ_DC_FC_2 = 448 + 10,
+       IPU_IRQ_DC_FC_3 = 448 + 11,
+       IPU_IRQ_DC_FC_4 = 448 + 12,
+       IPU_IRQ_DC_FC_6 = 448 + 13,
+       IPU_IRQ_VSYNC_PRE_0 = 448 + 14,
+       IPU_IRQ_VSYNC_PRE_1 = 448 + 15,
+#endif
+
+       IPU_IRQ_COUNT
+};
+
+/*!
+ * Bitfield of Display Interface signal polarities.
+ */
+typedef struct {
+       unsigned datamask_en:1;
+       unsigned int_clk:1;
+       unsigned interlaced:1;
+       unsigned odd_field_first:1;
+       unsigned clksel_en:1;
+       unsigned clkidle_en:1;
+       unsigned data_pol:1;    /* true = inverted */
+       unsigned clk_pol:1;     /* true = rising edge */
+       unsigned enable_pol:1;
+       unsigned Hsync_pol:1;   /* true = active high */
+       unsigned Vsync_pol:1;
+} ipu_di_signal_cfg_t;
+
+/*!
+ * Bitfield of CSI signal polarities and modes.
+ */
+
+typedef struct {
+       unsigned data_width:4;
+       unsigned clk_mode:3;
+       unsigned ext_vsync:1;
+       unsigned Vsync_pol:1;
+       unsigned Hsync_pol:1;
+       unsigned pixclk_pol:1;
+       unsigned data_pol:1;
+       unsigned sens_clksrc:1;
+       unsigned pack_tight:1;
+       unsigned force_eof:1;
+       unsigned data_en_pol:1;
+       unsigned data_fmt;
+       unsigned csi;
+       unsigned mclk;
+} ipu_csi_signal_cfg_t;
+
+/*!
+ * Enumeration of CSI data bus widths.
+ */
+enum {
+       IPU_CSI_DATA_WIDTH_4,
+       IPU_CSI_DATA_WIDTH_8,
+       IPU_CSI_DATA_WIDTH_10,
+       IPU_CSI_DATA_WIDTH_16,
+};
+
+/*!
+ * Enumeration of CSI clock modes.
+ */
+enum {
+       IPU_CSI_CLK_MODE_GATED_CLK,
+       IPU_CSI_CLK_MODE_NONGATED_CLK,
+       IPU_CSI_CLK_MODE_CCIR656_PROGRESSIVE,
+       IPU_CSI_CLK_MODE_CCIR656_INTERLACED,
+       IPU_CSI_CLK_MODE_CCIR1120_PROGRESSIVE_DDR,
+       IPU_CSI_CLK_MODE_CCIR1120_PROGRESSIVE_SDR,
+       IPU_CSI_CLK_MODE_CCIR1120_INTERLACED_DDR,
+       IPU_CSI_CLK_MODE_CCIR1120_INTERLACED_SDR,
+};
+
+enum {
+       IPU_CSI_MIPI_DI0,
+       IPU_CSI_MIPI_DI1,
+       IPU_CSI_MIPI_DI2,
+       IPU_CSI_MIPI_DI3,
+};
+
+typedef enum {
+       RGB,
+       YCbCr,
+       YUV
+} ipu_color_space_t;
+
+/*!
+ * Enumeration of ADC vertical sync mode.
+ */
+typedef enum {
+       VsyncNone,
+       VsyncInternal,
+       VsyncCSI,
+       VsyncExternal
+} vsync_t;
+
+typedef enum {
+       DAT,
+       CMD
+} cmddata_t;
+
+/*!
+ * Enumeration of ADC display update mode.
+ */
+typedef enum {
+       IPU_ADC_REFRESH_NONE,
+       IPU_ADC_AUTO_REFRESH,
+       IPU_ADC_AUTO_REFRESH_SNOOP,
+       IPU_ADC_SNOOPING,
+} ipu_adc_update_mode_t;
+
+/*!
+ * Enumeration of ADC display interface types (serial or parallel).
+ */
+enum {
+       IPU_ADC_IFC_MODE_SYS80_TYPE1,
+       IPU_ADC_IFC_MODE_SYS80_TYPE2,
+       IPU_ADC_IFC_MODE_SYS68K_TYPE1,
+       IPU_ADC_IFC_MODE_SYS68K_TYPE2,
+       IPU_ADC_IFC_MODE_3WIRE_SERIAL,
+       IPU_ADC_IFC_MODE_4WIRE_SERIAL,
+       IPU_ADC_IFC_MODE_5WIRE_SERIAL_CLK,
+       IPU_ADC_IFC_MODE_5WIRE_SERIAL_CS,
+};
+
+enum {
+       IPU_ADC_IFC_WIDTH_8,
+       IPU_ADC_IFC_WIDTH_16,
+};
+
+/*!
+ * Enumeration of ADC display interface burst mode.
+ */
+enum {
+       IPU_ADC_BURST_WCS,
+       IPU_ADC_BURST_WBLCK,
+       IPU_ADC_BURST_NONE,
+       IPU_ADC_BURST_SERIAL,
+};
+
+/*!
+ * Enumeration of ADC display interface RW signal timing modes.
+ */
+enum {
+       IPU_ADC_SER_NO_RW,
+       IPU_ADC_SER_RW_BEFORE_RS,
+       IPU_ADC_SER_RW_AFTER_RS,
+};
+
+/*!
+ * Bitfield of ADC signal polarities and modes.
+ */
+typedef struct {
+       unsigned data_pol:1;
+       unsigned clk_pol:1;
+       unsigned cs_pol:1;
+       unsigned rs_pol:1;
+       unsigned addr_pol:1;
+       unsigned read_pol:1;
+       unsigned write_pol:1;
+       unsigned Vsync_pol:1;
+       unsigned burst_pol:1;
+       unsigned burst_mode:2;
+       unsigned ifc_mode:3;
+       unsigned ifc_width:5;
+       unsigned ser_preamble_len:4;
+       unsigned ser_preamble:8;
+       unsigned ser_rw_mode:2;
+} ipu_adc_sig_cfg_t;
+
+/*!
+ * Enumeration of ADC template commands.
+ */
+enum {
+       RD_DATA,
+       RD_ACK,
+       RD_WAIT,
+       WR_XADDR,
+       WR_YADDR,
+       WR_ADDR,
+       WR_CMND,
+       WR_DATA,
+};
+
+/*!
+ * Enumeration of ADC template command flow control.
+ */
+enum {
+       SINGLE_STEP,
+       PAUSE,
+       STOP,
+};
+
+
+/*Define template constants*/
+#define     ATM_ADDR_RANGE      0x20   /*offset address of DISP */
+#define     TEMPLATE_BUF_SIZE   0x20   /*size of template */
+
+/*!
+ * Define to create ADC template command entry.
+ */
+#define ipu_adc_template_gen(oc, rs, fc, dat) (((rs) << 29) | ((fc) << 27) | \
+                       ((oc) << 24) | (dat))
+
+typedef struct {
+       u32 reg;
+       u32 value;
+} ipu_lpmc_reg_t;
+
+#define IPU_LPMC_REG_READ       0x80000000L
+
+#define CSI_MCLK_VF  1
+#define CSI_MCLK_ENC 2
+#define CSI_MCLK_RAW 4
+#define CSI_MCLK_I2C 8
+
+/* Common IPU API */
+int32_t ipu_init_channel(ipu_channel_t channel, ipu_channel_params_t *params);
+void ipu_uninit_channel(ipu_channel_t channel);
+
+static inline bool ipu_can_rotate_in_place(ipu_rotate_mode_t rot)
+{
+#ifdef CONFIG_MXC_IPU_V3D
+       return (rot < IPU_ROTATE_HORIZ_FLIP);
+#else
+       return (rot < IPU_ROTATE_90_RIGHT);
+#endif
+}
+
+int32_t ipu_init_channel_buffer(ipu_channel_t channel, ipu_buffer_t type,
+                               uint32_t pixel_fmt,
+                               uint16_t width, uint16_t height,
+                               uint32_t stride,
+                               ipu_rotate_mode_t rot_mode,
+                               dma_addr_t phyaddr_0, dma_addr_t phyaddr_1,
+                               uint32_t u_offset, uint32_t v_offset);
+
+int32_t ipu_update_channel_buffer(ipu_channel_t channel, ipu_buffer_t type,
+                                 uint32_t bufNum, dma_addr_t phyaddr);
+
+int32_t ipu_update_channel_offset(ipu_channel_t channel, ipu_buffer_t type,
+                               uint32_t pixel_fmt,
+                               uint16_t width, uint16_t height,
+                               uint32_t stride,
+                               uint32_t u, uint32_t v,
+                               uint32_t vertical_offset, uint32_t horizontal_offset);
+
+int32_t ipu_select_buffer(ipu_channel_t channel,
+                         ipu_buffer_t type, uint32_t bufNum);
+int32_t ipu_select_multi_vdi_buffer(uint32_t bufNum);
+
+int32_t ipu_link_channels(ipu_channel_t src_ch, ipu_channel_t dest_ch);
+int32_t ipu_unlink_channels(ipu_channel_t src_ch, ipu_channel_t dest_ch);
+
+int32_t ipu_is_channel_busy(ipu_channel_t channel);
+int32_t ipu_check_buffer_ready(ipu_channel_t channel, ipu_buffer_t type,
+               uint32_t bufNum);
+void ipu_clear_buffer_ready(ipu_channel_t channel, ipu_buffer_t type,
+               uint32_t bufNum);
+uint32_t ipu_get_cur_buffer_idx(ipu_channel_t channel, ipu_buffer_t type);
+int32_t ipu_enable_channel(ipu_channel_t channel);
+int32_t ipu_disable_channel(ipu_channel_t channel, bool wait_for_stop);
+int32_t ipu_swap_channel(ipu_channel_t from_ch, ipu_channel_t to_ch);
+
+int32_t ipu_enable_csi(uint32_t csi);
+int32_t ipu_disable_csi(uint32_t csi);
+
+int ipu_lowpwr_display_enable(void);
+int ipu_lowpwr_display_disable(void);
+
+void ipu_enable_irq(uint32_t irq);
+void ipu_disable_irq(uint32_t irq);
+void ipu_clear_irq(uint32_t irq);
+int ipu_request_irq(uint32_t irq,
+                   irqreturn_t(*handler) (int, void *),
+                   uint32_t irq_flags, const char *devname, void *dev_id);
+void ipu_free_irq(uint32_t irq, void *dev_id);
+bool ipu_get_irq_status(uint32_t irq);
+void ipu_set_csc_coefficients(ipu_channel_t channel, int32_t param[][3]);
+
+/* SDC API */
+int32_t ipu_sdc_init_panel(ipu_panel_t panel,
+                          uint32_t pixel_clk,
+                          uint16_t width, uint16_t height,
+                          uint32_t pixel_fmt,
+                          uint16_t hStartWidth, uint16_t hSyncWidth,
+                          uint16_t hEndWidth, uint16_t vStartWidth,
+                          uint16_t vSyncWidth, uint16_t vEndWidth,
+                          ipu_di_signal_cfg_t sig);
+
+int32_t ipu_sdc_set_global_alpha(bool enable, uint8_t alpha);
+int32_t ipu_sdc_set_color_key(ipu_channel_t channel, bool enable,
+                             uint32_t colorKey);
+int32_t ipu_sdc_set_brightness(uint8_t value);
+
+int32_t ipu_init_sync_panel(int disp,
+                           uint32_t pixel_clk,
+                           uint16_t width, uint16_t height,
+                           uint32_t pixel_fmt,
+                           uint16_t h_start_width, uint16_t h_sync_width,
+                           uint16_t h_end_width, uint16_t v_start_width,
+                           uint16_t v_sync_width, uint16_t v_end_width,
+                           uint32_t v_to_h_sync, ipu_di_signal_cfg_t sig);
+
+int32_t ipu_disp_set_window_pos(ipu_channel_t channel, int16_t x_pos,
+                               int16_t y_pos);
+int32_t ipu_disp_get_window_pos(ipu_channel_t channel, int16_t *x_pos,
+                               int16_t *y_pos);
+int32_t ipu_disp_set_global_alpha(ipu_channel_t channel, bool enable,
+                                 uint8_t alpha);
+int32_t ipu_disp_set_color_key(ipu_channel_t channel, bool enable,
+                              uint32_t colorKey);
+int32_t ipu_disp_set_gamma_correction(ipu_channel_t channel, bool enable,
+                               int constk[], int slopek[]);
+
+int ipu_init_async_panel(int disp, int type, uint32_t cycle_time,
+                        uint32_t pixel_fmt, ipu_adc_sig_cfg_t sig);
+void ipu_disp_direct_write(ipu_channel_t channel, u32 value, u32 offset);
+void ipu_reset_disp_panel(void);
+
+/* ADC API */
+int32_t ipu_adc_write_template(display_port_t disp, uint32_t *pCmd,
+                              bool write);
+
+int32_t ipu_adc_set_update_mode(ipu_channel_t channel,
+                               ipu_adc_update_mode_t mode,
+                               uint32_t refresh_rate, unsigned long addr,
+                               uint32_t *size);
+
+int32_t ipu_adc_get_snooping_status(uint32_t *statl, uint32_t *stath);
+
+int32_t ipu_adc_write_cmd(display_port_t disp, cmddata_t type,
+                         uint32_t cmd, const uint32_t *params,
+                         uint16_t numParams);
+
+int32_t ipu_adc_init_panel(display_port_t disp,
+                          uint16_t width, uint16_t height,
+                          uint32_t pixel_fmt,
+                          uint32_t stride,
+                          ipu_adc_sig_cfg_t sig,
+                          display_addressing_t addr,
+                          uint32_t vsync_width, vsync_t mode);
+
+int32_t ipu_adc_init_ifc_timing(display_port_t disp, bool read,
+                               uint32_t cycle_time,
+                               uint32_t up_time,
+                               uint32_t down_time,
+                               uint32_t read_latch_time, uint32_t pixel_clk);
+
+/* CMOS Sensor Interface API */
+int32_t ipu_csi_init_interface(uint16_t width, uint16_t height,
+                              uint32_t pixel_fmt, ipu_csi_signal_cfg_t sig);
+
+int32_t ipu_csi_get_sensor_protocol(uint32_t csi);
+
+int32_t ipu_csi_enable_mclk(int src, bool flag, bool wait);
+
+static inline int32_t ipu_csi_enable_mclk_if(int src, uint32_t csi,
+               bool flag, bool wait)
+{
+#ifdef CONFIG_MXC_IPU_V1
+       return ipu_csi_enable_mclk(src, flag, wait);
+#else
+       return ipu_csi_enable_mclk(csi, flag, wait);
+#endif
+}
+
+int ipu_csi_read_mclk_flag(void);
+
+void ipu_csi_flash_strobe(bool flag);
+
+void ipu_csi_get_window_size(uint32_t *width, uint32_t *height, uint32_t csi);
+
+void ipu_csi_set_window_size(uint32_t width, uint32_t height, uint32_t csi);
+
+void ipu_csi_set_window_pos(uint32_t left, uint32_t top, uint32_t csi);
+
+/* Post Filter functions */
+int32_t ipu_pf_set_pause_row(uint32_t pause_row);
+
+uint32_t bytes_per_pixel(uint32_t fmt);
+
+/* New added for IPU-lib functionality*/
+int ipu_open(void);
+int ipu_register_generic_isr(int irq, void *dev);
+void ipu_close(void);
+
+/* two stripe calculations */
+struct stripe_param{
+       unsigned int input_width; /* width of the input stripe */
+       unsigned int output_width; /* width of the output stripe */
+       unsigned int input_column; /* the first column on the input stripe */
+       unsigned int output_column; /* the first column on the output stripe */
+       unsigned int idr;
+       /* inverse downisizing ratio parameter; expressed as a power of 2 */
+       unsigned int irr;
+       /* inverse resizing ratio parameter; expressed as a multiple of 2^-13 */
+};
+
+typedef struct _ipu_stripe_parm {
+       unsigned int input_width;
+       unsigned int output_width;
+       unsigned int maximal_stripe_width;
+       unsigned long long cirr;
+       unsigned int equal_stripes;
+       u32 input_pixelformat;
+       u32 output_pixelformat;
+       struct stripe_param left;
+       struct stripe_param right;
+} ipu_stripe_parm;
+
+typedef struct _ipu_channel_parm {
+       ipu_channel_t channel;
+       ipu_channel_params_t params;
+       bool flag;
+} ipu_channel_parm;
+
+typedef struct _ipu_channel_buf_parm {
+       ipu_channel_t channel;
+       ipu_buffer_t type;
+       uint32_t pixel_fmt;
+       uint16_t width;
+       uint16_t height;
+       uint16_t stride;
+       ipu_rotate_mode_t rot_mode;
+       dma_addr_t phyaddr_0;
+       dma_addr_t phyaddr_1;
+       uint32_t u_offset;
+       uint32_t v_offset;
+       uint32_t bufNum;
+} ipu_channel_buf_parm;
+
+typedef struct _ipu_buf_offset_parm {
+       ipu_channel_t channel;
+       ipu_buffer_t type;
+       uint32_t pixel_fmt;
+       uint16_t width;
+       uint16_t height;
+       uint16_t stride;
+       uint32_t u_offset;
+       uint32_t v_offset;
+       uint32_t vertical_offset;
+       uint32_t horizontal_offset;
+} ipu_buf_offset_parm;
+
+typedef struct _ipu_channel_link {
+       ipu_channel_t src_ch;
+       ipu_channel_t dest_ch;
+} ipu_channel_link;
+
+typedef struct _ipu_channel_info {
+       ipu_channel_t channel;
+       bool stop;
+} ipu_channel_info;
+
+typedef struct ipu_irq_info {
+       uint32_t irq;
+        irqreturn_t(*handler) (int, void *);
+       uint32_t irq_flags;
+       char *devname;
+       void *dev_id;
+} ipu_irq_info;
+
+typedef struct _ipu_sdc_panel_info {
+       ipu_panel_t panel;
+       uint32_t pixel_clk;
+       uint16_t width;
+       uint16_t height;
+       uint32_t pixel_fmt;
+       uint16_t hStartWidth;
+       uint16_t hSyncWidth;
+       uint16_t hEndWidth;
+       uint16_t vStartWidth;
+       uint16_t vSyncWidth;
+       uint16_t vEndWidth;
+       ipu_di_signal_cfg_t signal;
+} ipu_sdc_panel_info;
+
+typedef struct _ipu_sdc_window_pos {
+       ipu_channel_t channel;
+       int16_t x_pos;
+       int16_t y_pos;
+} ipu_sdc_window_pos;
+
+typedef struct _ipu_sdc_global_alpha {
+       bool enable;
+       uint8_t alpha;
+} ipu_sdc_global_alpha;
+
+typedef struct _ipu_sdc_color_key {
+       ipu_channel_t channel;
+       bool enable;
+       uint32_t colorKey;
+} ipu_sdc_color_key;
+
+typedef struct _ipu_adc_template {
+       display_port_t disp;
+       uint32_t *pCmd;
+       bool write;
+} ipu_adc_template;
+
+typedef struct _ipu_adc_update {
+       ipu_channel_t channel;
+       ipu_adc_update_mode_t mode;
+       uint32_t refresh_rate;
+       unsigned long addr;
+       uint32_t *size;
+} ipu_adc_update;
+
+typedef struct _ipu_adc_snoop {
+       uint32_t *statl;
+       uint32_t *stath;
+} ipu_adc_snoop;
+
+typedef struct _ipu_adc_cmd {
+       display_port_t disp;
+       cmddata_t type;
+       uint32_t cmd;
+       uint32_t *params;
+       uint16_t numParams;
+} ipu_adc_cmd;
+
+typedef struct _ipu_adc_panel {
+       display_port_t disp;
+       uint16_t width;
+       uint16_t height;
+       uint32_t pixel_fmt;
+       uint32_t stride;
+       ipu_adc_sig_cfg_t signal;
+       display_addressing_t addr;
+       uint32_t vsync_width;
+       vsync_t mode;
+} ipu_adc_panel;
+
+typedef struct _ipu_adc_ifc_timing {
+       display_port_t disp;
+       bool read;
+       uint32_t cycle_time;
+       uint32_t up_time;
+       uint32_t down_time;
+       uint32_t read_latch_time;
+       uint32_t pixel_clk;
+} ipu_adc_ifc_timing;
+
+typedef struct _ipu_csi_interface {
+       uint16_t width;
+       uint16_t height;
+       uint16_t pixel_fmt;
+       ipu_csi_signal_cfg_t signal;
+} ipu_csi_interface;
+
+typedef struct _ipu_csi_mclk {
+       int src;
+       bool flag;
+       bool wait;
+} ipu_csi_mclk;
+
+typedef struct _ipu_csi_window {
+       uint32_t left;
+       uint32_t top;
+} ipu_csi_window;
+
+typedef struct _ipu_csi_window_size {
+       uint32_t width;
+       uint32_t height;
+} ipu_csi_window_size;
+
+typedef struct _ipu_event_info {
+       int irq;
+       void *dev;
+} ipu_event_info;
+
+typedef struct _ipu_mem_info {
+       dma_addr_t paddr;
+       void *vaddr;
+       int size;
+} ipu_mem_info;
+
+typedef struct _ipu_csc_update {
+       ipu_channel_t channel;
+       int **param;
+} ipu_csc_update;
+
+/* IOCTL commands */
+
+#define IPU_INIT_CHANNEL              _IOW('I', 0x1, ipu_channel_parm)
+#define IPU_UNINIT_CHANNEL            _IOW('I', 0x2, ipu_channel_t)
+#define IPU_INIT_CHANNEL_BUFFER       _IOW('I', 0x3, ipu_channel_buf_parm)
+#define IPU_UPDATE_CHANNEL_BUFFER     _IOW('I', 0x4, ipu_channel_buf_parm)
+#define IPU_SELECT_CHANNEL_BUFFER     _IOW('I', 0x5, ipu_channel_buf_parm)
+#define IPU_LINK_CHANNELS             _IOW('I', 0x6, ipu_channel_link)
+#define IPU_UNLINK_CHANNELS           _IOW('I', 0x7, ipu_channel_link)
+#define IPU_ENABLE_CHANNEL            _IOW('I', 0x8, ipu_channel_t)
+#define IPU_DISABLE_CHANNEL           _IOW('I', 0x9, ipu_channel_info)
+#define IPU_ENABLE_IRQ                _IOW('I', 0xA, int)
+#define IPU_DISABLE_IRQ               _IOW('I', 0xB, int)
+#define IPU_CLEAR_IRQ                 _IOW('I', 0xC, int)
+#define IPU_FREE_IRQ                  _IOW('I', 0xD, ipu_irq_info)
+#define IPU_REQUEST_IRQ_STATUS        _IOW('I', 0xE, int)
+#define IPU_SDC_INIT_PANEL            _IOW('I', 0xF, ipu_sdc_panel_info)
+#define IPU_SDC_SET_WIN_POS           _IOW('I', 0x10, ipu_sdc_window_pos)
+#define IPU_SDC_SET_GLOBAL_ALPHA      _IOW('I', 0x11, ipu_sdc_global_alpha)
+#define IPU_SDC_SET_COLOR_KEY         _IOW('I', 0x12, ipu_sdc_color_key)
+#define IPU_SDC_SET_BRIGHTNESS        _IOW('I', 0x13, int)
+#define IPU_ADC_WRITE_TEMPLATE        _IOW('I', 0x14, ipu_adc_template)
+#define IPU_ADC_UPDATE                _IOW('I', 0x15, ipu_adc_update)
+#define IPU_ADC_SNOOP                 _IOW('I', 0x16, ipu_adc_snoop)
+#define IPU_ADC_CMD                   _IOW('I', 0x17, ipu_adc_cmd)
+#define IPU_ADC_INIT_PANEL            _IOW('I', 0x18, ipu_adc_panel)
+#define IPU_ADC_IFC_TIMING            _IOW('I', 0x19, ipu_adc_ifc_timing)
+#define IPU_CSI_INIT_INTERFACE        _IOW('I', 0x1A, ipu_csi_interface)
+#define IPU_CSI_ENABLE_MCLK           _IOW('I', 0x1B, ipu_csi_mclk)
+#define IPU_CSI_READ_MCLK_FLAG        _IOR('I', 0x1C, ipu_csi_mclk)
+#define IPU_CSI_FLASH_STROBE          _IOW('I', 0x1D, ipu_csi_mclk)
+#define IPU_CSI_GET_WIN_SIZE          _IOR('I', 0x1E, ipu_csi_window_size)
+#define IPU_CSI_SET_WIN_SIZE          _IOW('I', 0x1F, ipu_csi_window_size)
+#define IPU_CSI_SET_WINDOW            _IOW('I', 0x20, ipu_csi_window)
+#define IPU_PF_SET_PAUSE_ROW          _IOW('I', 0x21, uint32_t)
+#define IPU_REGISTER_GENERIC_ISR      _IOW('I', 0x22, ipu_event_info)
+#define IPU_GET_EVENT                 _IOWR('I', 0x23, ipu_event_info)
+#define IPU_ALOC_MEM                 _IOWR('I', 0x24, ipu_mem_info)
+#define IPU_FREE_MEM                 _IOW('I', 0x25, ipu_mem_info)
+#define IPU_IS_CHAN_BUSY             _IOW('I', 0x26, ipu_channel_t)
+#define IPU_CALC_STRIPES_SIZE        _IOWR('I', 0x27, ipu_stripe_parm)
+#define IPU_UPDATE_BUF_OFFSET         _IOW('I', 0x28, ipu_buf_offset_parm)
+#define IPU_CSC_UPDATE                _IOW('I', 0x29, ipu_csc_update)
+#define IPU_SELECT_MULTI_VDI_BUFFER   _IOW('I', 0x2A, uint32_t)
+
+int ipu_calc_stripes_sizes(const unsigned int input_frame_width,
+                               unsigned int output_frame_width,
+                               const unsigned int maximal_stripe_width,
+                               const unsigned long long cirr,
+                               const unsigned int equal_stripes,
+                               u32 input_pixelformat,
+                               u32 output_pixelformat,
+                               struct stripe_param *left,
+                               struct stripe_param *right);
+#endif
diff --git a/include/linux/iram_alloc.h b/include/linux/iram_alloc.h
new file mode 100644 (file)
index 0000000..d5d4c41
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2010-2011 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * 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 program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifdef CONFIG_IRAM_ALLOC
+int __init iram_init(unsigned long base, unsigned long size);
+void *iram_alloc(unsigned int size, unsigned long *dma_addr);
+void iram_free(unsigned long dma_addr, unsigned int size);
+#else
+static inline int __init iram_init(unsigned long base, unsigned long size)
+{
+       return -ENOMEM;
+}
+static inline void *iram_alloc(unsigned int size, unsigned long *dma_addr)
+{
+       return NULL;
+}
+static inline void iram_free(unsigned long base, unsigned long size) {}
+#endif
+
diff --git a/include/linux/ldb.h b/include/linux/ldb.h
new file mode 100644 (file)
index 0000000..1745e2b
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2010-2011 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
+
+/*
+ * 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 program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/*!
+ * @file include/linux/ldb.h
+ *
+ * @brief This file contains the LDB driver API declarations.
+ *
+ * @ingroup LDB
+ */
+
+#ifndef __MXC_LDB_H__
+#define __MXC_LDB_H__
+
+#include <linux/types.h>
+
+typedef enum {
+       LDB_INT_REF = 0,
+       LDB_EXT_REF = 1,
+} ldb_bgref_t;
+
+typedef enum {
+       LDB_VS_ACT_H = 0,
+       LDB_VS_ACT_L = 1,
+} ldb_vsync_t;
+
+typedef enum {
+       LDB_BIT_MAP_SPWG = 0,
+       LDB_BIT_MAP_JEIDA = 1,
+} ldb_bitmap_t;
+
+typedef enum {
+       LDB_CHAN_MODE_SIN = 0,
+       LDB_CHAN_MODE_SEP = 1,
+       LDB_CHAN_MODE_DUL = 2,
+       LDB_CHAN_MODE_SPL = 3,
+} ldb_channel_mode_t;
+
+typedef struct _ldb_bgref_parm {
+       ldb_bgref_t             bgref_mode;
+} ldb_bgref_parm;
+
+typedef struct _ldb_vsync_parm {
+       int                     di;
+       ldb_vsync_t             vsync_mode;
+} ldb_vsync_parm;
+
+typedef struct _ldb_bitmap_parm {
+       int                     channel;
+       ldb_bitmap_t            bitmap_mode;
+} ldb_bitmap_parm;
+
+typedef struct _ldb_data_width_parm {
+       int                     channel;
+       int                     data_width;
+} ldb_data_width_parm;
+
+typedef struct _ldb_chan_mode_parm {
+       int                             di;
+       ldb_channel_mode_t              channel_mode;
+} ldb_chan_mode_parm;
+
+/* IOCTL commands */
+#define LDB_BGREF_RMODE                        _IOW('L', 0x1, ldb_bgref_parm)
+#define LDB_VSYNC_POL                  _IOW('L', 0x2, ldb_vsync_parm)
+#define LDB_BIT_MAP                    _IOW('L', 0x3, ldb_bitmap_parm)
+#define LDB_DATA_WIDTH                 _IOW('L', 0x4, ldb_data_width_parm)
+#define LDB_CHAN_MODE                  _IOW('L', 0x5, ldb_chan_mode_parm)
+#define LDB_ENABLE                     _IOW('L', 0x6, int)
+#define LDB_DISABLE                    _IOW('L', 0x7, int)
+#endif
diff --git a/include/linux/mxc_srtc.h b/include/linux/mxc_srtc.h
new file mode 100644 (file)
index 0000000..1d3c7b6
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2010-2011 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
+
+/*
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/*!
+ * @file mxc_srtc.h
+ *
+ * @brief SRTC IOCTL definitions
+ *
+ * @ingroup RTC
+ */
+
+
+#define RTC_READ_TIME_47BIT    _IOR('p', 0x20, unsigned long long)
+/* blocks until LPSCMR is set, returns difference */
+#define RTC_WAIT_TIME_SET      _IOR('p', 0x21, int64_t)
diff --git a/include/linux/mxc_v4l2.h b/include/linux/mxc_v4l2.h
new file mode 100644 (file)
index 0000000..e83e592
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004-2011 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
+
+/*
+ * The code contained herein is licensed under the GNU Lesser General
+ * Public License.  You may obtain a copy of the GNU Lesser General
+ * Public License Version 2.1 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/lgpl-license.html
+ * http://www.gnu.org/copyleft/lgpl.html
+ */
+
+/*!
+ * @file arch-mxc/mxc_v4l2.h
+ *
+ * @brief mxc V4L2 private structures
+ *
+ * @ingroup MXC_V4L2_CAPTURE
+ */
+
+#ifndef __ASM_ARCH_MXC_V4L2_H__
+#define __ASM_ARCH_MXC_V4L2_H__
+
+/*
+ * For IPUv1 and IPUv3, V4L2_CID_MXC_ROT means encoder ioctl ID.
+ * And V4L2_CID_MXC_VF_ROT is viewfinder ioctl ID only for IPUv1 and IPUv3.
+ */
+#define V4L2_CID_MXC_ROT               (V4L2_CID_PRIVATE_BASE + 0)
+#define V4L2_CID_MXC_FLASH             (V4L2_CID_PRIVATE_BASE + 1)
+#define V4L2_CID_MXC_VF_ROT            (V4L2_CID_PRIVATE_BASE + 2)
+#define V4L2_CID_MXC_MOTION     (V4L2_CID_PRIVATE_BASE + 3)
+
+#define V4L2_MXC_ROTATE_NONE                   0
+#define V4L2_MXC_ROTATE_VERT_FLIP              1
+#define V4L2_MXC_ROTATE_HORIZ_FLIP             2
+#define V4L2_MXC_ROTATE_180                    3
+#define V4L2_MXC_ROTATE_90_RIGHT               4
+#define V4L2_MXC_ROTATE_90_RIGHT_VFLIP         5
+#define V4L2_MXC_ROTATE_90_RIGHT_HFLIP         6
+#define V4L2_MXC_ROTATE_90_LEFT                        7
+
+struct v4l2_mxc_offset {
+       uint32_t u_offset;
+       uint32_t v_offset;
+};
+
+#endif
diff --git a/include/linux/mxcfb.h b/include/linux/mxcfb.h
new file mode 100644 (file)
index 0000000..58158ee
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * Copyright 2004-2011 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
+
+/*
+ * The code contained herein is licensed under the GNU Lesser General
+ * Public License.  You may obtain a copy of the GNU Lesser General
+ * Public License Version 2.1 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/lgpl-license.html
+ * http://www.gnu.org/copyleft/lgpl.html
+ */
+
+/*
+ * @file arch-mxc/   mxcfb.h
+ *
+ * @brief Global header file for the MXC Frame buffer
+ *
+ * @ingroup Framebuffer
+ */
+#ifndef __ASM_ARCH_MXCFB_H__
+#define __ASM_ARCH_MXCFB_H__
+
+#include <linux/fb.h>
+
+#define FB_SYNC_OE_LOW_ACT     0x80000000
+#define FB_SYNC_CLK_LAT_FALL   0x40000000
+#define FB_SYNC_DATA_INVERT    0x20000000
+#define FB_SYNC_CLK_IDLE_EN    0x10000000
+#define FB_SYNC_SHARP_MODE     0x08000000
+#define FB_SYNC_SWAP_RGB       0x04000000
+
+struct mxcfb_gbl_alpha {
+       int enable;
+       int alpha;
+};
+
+struct mxcfb_loc_alpha {
+       int enable;
+       int alpha_in_pixel;
+       unsigned long alpha_phy_addr0;
+       unsigned long alpha_phy_addr1;
+};
+
+struct mxcfb_color_key {
+       int enable;
+       __u32 color_key;
+};
+
+struct mxcfb_pos {
+       __u16 x;
+       __u16 y;
+};
+
+struct mxcfb_gamma {
+       int enable;
+       int constk[16];
+       int slopek[16];
+};
+
+struct mxcfb_rect {
+       __u32 top;
+       __u32 left;
+       __u32 width;
+       __u32 height;
+};
+
+#define GRAYSCALE_8BIT                         0x1
+#define GRAYSCALE_8BIT_INVERTED                        0x2
+
+#define AUTO_UPDATE_MODE_REGION_MODE           0
+#define AUTO_UPDATE_MODE_AUTOMATIC_MODE                1
+
+#define UPDATE_SCHEME_SNAPSHOT                 0
+#define UPDATE_SCHEME_QUEUE                    1
+#define UPDATE_SCHEME_QUEUE_AND_MERGE          2
+
+#define UPDATE_MODE_PARTIAL                    0x0
+#define UPDATE_MODE_FULL                       0x1
+
+#define WAVEFORM_MODE_AUTO                     257
+
+#define TEMP_USE_AMBIENT                       0x1000
+
+#define EPDC_FLAG_ENABLE_INVERSION             0x01
+#define EPDC_FLAG_FORCE_MONOCHROME             0x02
+#define EPDC_FLAG_USE_ALT_BUFFER               0x100
+
+#define FB_POWERDOWN_DISABLE                   -1
+
+struct mxcfb_alt_buffer_data {
+       void *virt_addr;
+       __u32 phys_addr;
+       __u32 width;    /* width of entire buffer */
+       __u32 height;   /* height of entire buffer */
+       struct mxcfb_rect alt_update_region;    /* region within buffer to update */
+};
+
+struct mxcfb_update_data {
+       struct mxcfb_rect update_region;
+       __u32 waveform_mode;
+       __u32 update_mode;
+       __u32 update_marker;
+       int temp;
+       uint flags;
+       struct mxcfb_alt_buffer_data alt_buffer_data;
+};
+
+/*
+ * Structure used to define waveform modes for driver
+ * Needed for driver to perform auto-waveform selection
+ */
+struct mxcfb_waveform_modes {
+       int mode_init;
+       int mode_du;
+       int mode_gc4;
+       int mode_gc8;
+       int mode_gc16;
+       int mode_gc32;
+};
+
+#define MXCFB_WAIT_FOR_VSYNC   _IOW('F', 0x20, u_int32_t)
+#define MXCFB_SET_GBL_ALPHA     _IOW('F', 0x21, struct mxcfb_gbl_alpha)
+#define MXCFB_SET_CLR_KEY       _IOW('F', 0x22, struct mxcfb_color_key)
+#define MXCFB_SET_OVERLAY_POS   _IOWR('F', 0x24, struct mxcfb_pos)
+#define MXCFB_GET_FB_IPU_CHAN  _IOR('F', 0x25, u_int32_t)
+#define MXCFB_SET_LOC_ALPHA     _IOWR('F', 0x26, struct mxcfb_loc_alpha)
+#define MXCFB_SET_LOC_ALP_BUF    _IOW('F', 0x27, unsigned long)
+#define MXCFB_SET_GAMMA               _IOW('F', 0x28, struct mxcfb_gamma)
+#define MXCFB_GET_FB_IPU_DI    _IOR('F', 0x29, u_int32_t)
+#define MXCFB_GET_DIFMT               _IOR('F', 0x2A, u_int32_t)
+#define MXCFB_GET_FB_BLANK     _IOR('F', 0x2B, u_int32_t)
+#define MXCFB_SET_DIFMT                _IOW('F', 0x2C, u_int32_t)
+
+/* IOCTLs for E-ink panel updates */
+#define MXCFB_SET_WAVEFORM_MODES       _IOW('F', 0x2B, struct mxcfb_waveform_modes)
+#define MXCFB_SET_TEMPERATURE          _IOW('F', 0x2C, int32_t)
+#define MXCFB_SET_AUTO_UPDATE_MODE     _IOW('F', 0x2D, __u32)
+#define MXCFB_SEND_UPDATE              _IOW('F', 0x2E, struct mxcfb_update_data)
+#define MXCFB_WAIT_FOR_UPDATE_COMPLETE _IOW('F', 0x2F, __u32)
+#define MXCFB_SET_PWRDOWN_DELAY                _IOW('F', 0x30, int32_t)
+#define MXCFB_GET_PWRDOWN_DELAY                _IOR('F', 0x31, int32_t)
+#define MXCFB_SET_UPDATE_SCHEME                _IOW('F', 0x32, __u32)
+
+#ifdef __KERNEL__
+
+extern struct fb_videomode mxcfb_modedb[];
+extern int mxcfb_modedb_sz;
+
+enum {
+       MXC_DISP_SPEC_DEV = 0,
+       MXC_DISP_DDC_DEV = 1,
+};
+
+enum {
+       MXCFB_REFRESH_OFF,
+       MXCFB_REFRESH_AUTO,
+       MXCFB_REFRESH_PARTIAL,
+};
+
+int mxcfb_set_refresh_mode(struct fb_info *fbi, int mode,
+                          struct mxcfb_rect *update_region);
+void mxcfb_register_mode(int disp_port,
+               const struct fb_videomode *modedb,
+               int num_modes, int dev_mode);
+
+void mxcfb_register_presetup(int disp_port,
+               int (*pre_setup)(struct fb_info *info));
+
+int mxc_elcdif_frame_addr_setup(dma_addr_t phys);
+#endif                         /* __KERNEL__ */
+#endif
diff --git a/include/linux/usb/fsl_xcvr.h b/include/linux/usb/fsl_xcvr.h
new file mode 100644 (file)
index 0000000..4c57e03
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2010-2011 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
+
+/*
+ * The code contained herein is licensed under the GNU Lesser General
+ * Public License.  You may obtain a copy of the GNU Lesser General
+ * Public License Version 2.1 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/lgpl-license.html
+ * http://www.gnu.org/copyleft/lgpl.html
+ */
+#ifndef __LINUX_USB_FSL_XCVR_H
+#define __LINUX_USB_FSL_XCVR_H
+#include <linux/platform_device.h>
+#include <linux/regulator/consumer.h>
+
+struct fsl_usb2_platform_data;
+
+enum usb_test_mode{
+       USB_TEST_J = 1,
+       USB_TEST_K = 2,
+};
+
+/**
+ * @name: transceiver name
+ * @xcvr_type: one of PORTSC_PTS_{UTMI,SERIAL,ULPI}
+ * @init: transceiver- and board-specific initialization function
+ * @uninit: transceiver- and board-specific uninitialization function
+ * @set_host:
+ * @set_device:
+ * @pullup: enable or disable D+ pullup
+ *
+ */
+struct fsl_xcvr_ops {
+       char *name;
+       u32 xcvr_type;
+
+       void (*init)(struct fsl_xcvr_ops *ops);
+       void (*uninit)(struct fsl_xcvr_ops *ops);
+       void (*suspend)(struct fsl_xcvr_ops *ops);
+       void (*set_host)(void);
+       void (*set_device)(void);
+       void (*set_vbus_power)(struct fsl_xcvr_ops *ops,
+                              struct fsl_usb2_platform_data *pdata, int on);
+       void (*set_vbus_draw)(struct fsl_xcvr_ops *ops,
+                       struct fsl_usb2_platform_data *pdata, unsigned mA);
+       void (*set_remote_wakeup)(u32 *view);
+       void (*pullup)(int on);
+       void(*set_test_mode)(u32 *view, enum usb_test_mode mode);
+};
+
+struct fsl_xcvr_power {
+       struct platform_device *usb_pdev;
+       struct regulator *regu1;
+       struct regulator *regu2;
+};
+#endif