1026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov/*
2026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * Copyright © 2010 Intel Corporation
3026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov *
4026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * Permission is hereby granted, free of charge, to any person obtaining a
5026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * copy of this software and associated documentation files (the "Software"),
6026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * to deal in the Software without restriction, including without limitation
7026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * and/or sell copies of the Software, and to permit persons to whom the
9026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * Software is furnished to do so, subject to the following conditions:
10026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov *
11026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * The above copyright notice and this permission notice (including the next
12026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * paragraph) shall be included in all copies or substantial portions of the
13026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * Software.
14026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov *
15026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * DEALINGS IN THE SOFTWARE.
22026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov *
23026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * Authors:
24026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * jim liu <jim.liu@intel.com>
25026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov * Jackie Li<yaodong.li@intel.com>
26026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov */
27026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov
28026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov#ifndef __MDFLD_DSI_DPI_H__
29026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov#define __MDFLD_DSI_DPI_H__
30026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov
31026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov#include "mdfld_dsi_output.h"
32026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov#include "mdfld_output.h"
33026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov
34026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemovstruct mdfld_dsi_dpi_timing {
35026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	u16 hsync_count;
36026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	u16 hbp_count;
37026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	u16 hfp_count;
38026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	u16 hactive_count;
39026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	u16 vsync_count;
40026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	u16 vbp_count;
41026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	u16 vfp_count;
42026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov};
43026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov
44026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemovstruct mdfld_dsi_dpi_output {
45026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	struct mdfld_dsi_encoder base;
46026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	struct drm_device *dev;
47026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov
48026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	int panel_on;
49026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	int first_boot;
50026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov
51026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	const struct panel_funcs *p_funcs;
52026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov};
53026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov
54026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov#define MDFLD_DSI_DPI_OUTPUT(dsi_encoder)\
55026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov	container_of(dsi_encoder, struct mdfld_dsi_dpi_output, base)
56026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov
57026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov/* Export functions */
58026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemovextern int mdfld_dsi_dpi_timing_calculation(struct drm_display_mode *mode,
59026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov				struct mdfld_dsi_dpi_timing *dpi_timing,
60026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov				int num_lane, int bpp);
61026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemovextern struct mdfld_dsi_encoder *mdfld_dsi_dpi_init(struct drm_device *dev,
62026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov				struct mdfld_dsi_connector *dsi_connector,
63026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov				const struct panel_funcs *p_funcs);
64026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov
65026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov/* MDFLD DPI helper functions */
66026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemovextern void mdfld_dsi_dpi_dpms(struct drm_encoder *encoder, int mode);
67026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemovextern bool mdfld_dsi_dpi_mode_fixup(struct drm_encoder *encoder,
68026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov				struct drm_display_mode *mode,
69026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov				struct drm_display_mode *adjusted_mode);
70026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemovextern void mdfld_dsi_dpi_prepare(struct drm_encoder *encoder);
71026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemovextern void mdfld_dsi_dpi_commit(struct drm_encoder *encoder);
72026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemovextern void mdfld_dsi_dpi_mode_set(struct drm_encoder *encoder,
73026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov				struct drm_display_mode *mode,
74026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov				struct drm_display_mode *adjusted_mode);
75026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemovextern void mdfld_dsi_dpi_turn_on(struct mdfld_dsi_dpi_output *output,
76026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov				int pipe);
77026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemovextern void mdfld_dsi_dpi_controller_init(struct mdfld_dsi_config *dsi_config,
78026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov				int pipe);
79026abc333205c1fff80138b8c2cac3d0347685f4Kirill A. Shutemov#endif /*__MDFLD_DSI_DPI_H__*/
80