]> Pileus Git - ~andy/linux/blob - drivers/gpu/drm/exynos/exynos_hdmi.h
Merge git://git.jan-o-sch.net/btrfs-unstable into for-linus
[~andy/linux] / drivers / gpu / drm / exynos / exynos_hdmi.h
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