1 /*
2  *
3  * Copyright (c) 2011 Samsung Electronics Co., Ltd.
4  * Authors:
5  *	Inki Dae <inki.dae@samsung.com>
6  *	Seung-Woo Kim <sw0312.kim@samsung.com>
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a
9  * copy of this software and associated documentation files (the "Software"),
10  * to deal in the Software without restriction, including without limitation
11  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12  * and/or sell copies of the Software, and to permit persons to whom the
13  * Software is furnished to do so, subject to the following conditions:
14  *
15  * The above copyright notice and this permission notice (including the next
16  * paragraph) shall be included in all copies or substantial portions of the
17  * Software.
18  *
19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25  * OTHER DEALINGS IN THE SOFTWARE.
26  */
27 
28 #ifndef _EXYNOS_HDMI_H_
29 #define _EXYNOS_HDMI_H_
30 
31 struct hdmi_conf {
32 	int width;
33 	int height;
34 	int vrefresh;
35 	bool interlace;
36 	const u8 *hdmiphy_data;
37 	const struct hdmi_preset_conf *conf;
38 };
39 
40 struct hdmi_resources {
41 	struct clk *hdmi;
42 	struct clk *sclk_hdmi;
43 	struct clk *sclk_pixel;
44 	struct clk *sclk_hdmiphy;
45 	struct clk *hdmiphy;
46 	struct regulator_bulk_data *regul_bulk;
47 	int regul_count;
48 };
49 
50 struct hdmi_context {
51 	struct device			*dev;
52 	struct drm_device		*drm_dev;
53 	struct fb_videomode		*default_timing;
54 	unsigned int			default_win;
55 	unsigned int			default_bpp;
56 	bool				hpd_handle;
57 	bool				enabled;
58 
59 	struct resource			*regs_res;
60 	/** base address of HDMI registers */
61 	void __iomem *regs;
62 	/** HDMI hotplug interrupt */
63 	unsigned int irq;
64 	/** workqueue for delayed work */
65 	struct workqueue_struct *wq;
66 	/** hotplug handling work */
67 	struct work_struct hotplug_work;
68 
69 	struct i2c_client *ddc_port;
70 	struct i2c_client *hdmiphy_port;
71 
72 	/** current hdmiphy conf index */
73 	int cur_conf;
74 	/** other resources */
75 	struct hdmi_resources res;
76 
77 	void *parent_ctx;
78 };
79 
80 
81 void hdmi_attach_ddc_client(struct i2c_client *ddc);
82 void hdmi_attach_hdmiphy_client(struct i2c_client *hdmiphy);
83 
84 extern struct i2c_driver hdmiphy_driver;
85 extern struct i2c_driver ddc_driver;
86 
87 #endif
88