1 /* 2 * Copyright (C) 2011 Freescale Semiconductor, Inc. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 */ 9 10 #ifndef __DW_HDMI__ 11 #define __DW_HDMI__ 12 13 #include <drm/drmP.h> 14 15 enum { 16 DW_HDMI_RES_8, 17 DW_HDMI_RES_10, 18 DW_HDMI_RES_12, 19 DW_HDMI_RES_MAX, 20 }; 21 22 enum dw_hdmi_devtype { 23 IMX6Q_HDMI, 24 IMX6DL_HDMI, 25 RK3288_HDMI, 26 }; 27 28 struct dw_hdmi_mpll_config { 29 unsigned long mpixelclock; 30 struct { 31 u16 cpce; 32 u16 gmp; 33 } res[DW_HDMI_RES_MAX]; 34 }; 35 36 struct dw_hdmi_curr_ctrl { 37 unsigned long mpixelclock; 38 u16 curr[DW_HDMI_RES_MAX]; 39 }; 40 41 struct dw_hdmi_phy_config { 42 unsigned long mpixelclock; 43 u16 sym_ctr; /*clock symbol and transmitter control*/ 44 u16 term; /*transmission termination value*/ 45 u16 vlev_ctr; /* voltage level control */ 46 }; 47 48 struct dw_hdmi_plat_data { 49 enum dw_hdmi_devtype dev_type; 50 const struct dw_hdmi_mpll_config *mpll_cfg; 51 const struct dw_hdmi_curr_ctrl *cur_ctr; 52 const struct dw_hdmi_phy_config *phy_config; 53 enum drm_mode_status (*mode_valid)(struct drm_connector *connector, 54 struct drm_display_mode *mode); 55 }; 56 57 void dw_hdmi_unbind(struct device *dev, struct device *master, void *data); 58 int dw_hdmi_bind(struct device *dev, struct device *master, 59 void *data, struct drm_encoder *encoder, 60 struct resource *iores, int irq, 61 const struct dw_hdmi_plat_data *plat_data); 62 #endif /* __IMX_HDMI_H__ */ 63