Lines Matching refs:hdata
677 static inline u32 hdmi_map_reg(struct hdmi_context *hdata, u32 reg_id) in hdmi_map_reg() argument
680 return hdmi_reg_map[reg_id & 0xffff][hdata->drv_data->type]; in hdmi_map_reg()
684 static inline u32 hdmi_reg_read(struct hdmi_context *hdata, u32 reg_id) in hdmi_reg_read() argument
686 return readl(hdata->regs + hdmi_map_reg(hdata, reg_id)); in hdmi_reg_read()
689 static inline void hdmi_reg_writeb(struct hdmi_context *hdata, in hdmi_reg_writeb() argument
692 writel(value, hdata->regs + hdmi_map_reg(hdata, reg_id)); in hdmi_reg_writeb()
695 static inline void hdmi_reg_writev(struct hdmi_context *hdata, u32 reg_id, in hdmi_reg_writev() argument
698 reg_id = hdmi_map_reg(hdata, reg_id); in hdmi_reg_writev()
701 writel(val & 0xff, hdata->regs + reg_id); in hdmi_reg_writev()
707 static inline void hdmi_reg_write_buf(struct hdmi_context *hdata, u32 reg_id, in hdmi_reg_write_buf() argument
710 for (reg_id = hdmi_map_reg(hdata, reg_id); size; --size, reg_id += 4) in hdmi_reg_write_buf()
711 writel(*buf++, hdata->regs + reg_id); in hdmi_reg_write_buf()
714 static inline void hdmi_reg_writemask(struct hdmi_context *hdata, in hdmi_reg_writemask() argument
719 reg_id = hdmi_map_reg(hdata, reg_id); in hdmi_reg_writemask()
720 old = readl(hdata->regs + reg_id); in hdmi_reg_writemask()
722 writel(value, hdata->regs + reg_id); in hdmi_reg_writemask()
725 static int hdmiphy_reg_write_buf(struct hdmi_context *hdata, in hdmiphy_reg_write_buf() argument
731 if (hdata->hdmiphy_port) { in hdmiphy_reg_write_buf()
734 ret = i2c_master_send(hdata->hdmiphy_port, buf, len); in hdmiphy_reg_write_buf()
741 writel(buf[i], hdata->regs_hdmiphy + in hdmiphy_reg_write_buf()
747 static int hdmi_clk_enable_gates(struct hdmi_context *hdata) in hdmi_clk_enable_gates() argument
751 for (i = 0; i < hdata->drv_data->clk_gates.count; ++i) { in hdmi_clk_enable_gates()
752 ret = clk_prepare_enable(hdata->clk_gates[i]); in hdmi_clk_enable_gates()
756 dev_err(hdata->dev, "Cannot enable clock '%s', %d\n", in hdmi_clk_enable_gates()
757 hdata->drv_data->clk_gates.data[i], ret); in hdmi_clk_enable_gates()
759 clk_disable_unprepare(hdata->clk_gates[i]); in hdmi_clk_enable_gates()
766 static void hdmi_clk_disable_gates(struct hdmi_context *hdata) in hdmi_clk_disable_gates() argument
768 int i = hdata->drv_data->clk_gates.count; in hdmi_clk_disable_gates()
771 clk_disable_unprepare(hdata->clk_gates[i]); in hdmi_clk_disable_gates()
774 static int hdmi_clk_set_parents(struct hdmi_context *hdata, bool to_phy) in hdmi_clk_set_parents() argument
776 struct device *dev = hdata->dev; in hdmi_clk_set_parents()
780 for (i = 0; i < hdata->drv_data->clk_muxes.count; i += 3) { in hdmi_clk_set_parents()
781 struct clk **c = &hdata->clk_muxes[i]; in hdmi_clk_set_parents()
788 hdata->drv_data->clk_muxes.data[i + 2], in hdmi_clk_set_parents()
789 hdata->drv_data->clk_muxes.data[i + to_phy], ret); in hdmi_clk_set_parents()
795 static int hdmi_audio_infoframe_apply(struct hdmi_context *hdata) in hdmi_audio_infoframe_apply() argument
797 struct hdmi_audio_infoframe *infoframe = &hdata->audio.infoframe; in hdmi_audio_infoframe_apply()
805 hdmi_reg_writeb(hdata, HDMI_AUI_CON, HDMI_AUI_CON_EVERY_VSYNC); in hdmi_audio_infoframe_apply()
806 hdmi_reg_write_buf(hdata, HDMI_AUI_HEADER0, buf, len); in hdmi_audio_infoframe_apply()
811 static void hdmi_reg_infoframes(struct hdmi_context *hdata) in hdmi_reg_infoframes() argument
813 struct drm_display_mode *m = &hdata->encoder.crtc->state->mode; in hdmi_reg_infoframes()
818 if (hdata->dvi_mode) { in hdmi_reg_infoframes()
819 hdmi_reg_writeb(hdata, HDMI_AVI_CON, in hdmi_reg_infoframes()
821 hdmi_reg_writeb(hdata, HDMI_VSI_CON, in hdmi_reg_infoframes()
823 hdmi_reg_writeb(hdata, HDMI_AUI_CON, HDMI_AUI_CON_NO_TRAN); in hdmi_reg_infoframes()
828 &hdata->connector, m); in hdmi_reg_infoframes()
832 hdmi_reg_writeb(hdata, HDMI_AVI_CON, HDMI_AVI_CON_EVERY_VSYNC); in hdmi_reg_infoframes()
833 hdmi_reg_write_buf(hdata, HDMI_AVI_HEADER0, buf, ret); in hdmi_reg_infoframes()
839 &hdata->connector, m); in hdmi_reg_infoframes()
844 hdmi_reg_writeb(hdata, HDMI_VSI_CON, HDMI_VSI_CON_EVERY_VSYNC); in hdmi_reg_infoframes()
845 hdmi_reg_write_buf(hdata, HDMI_VSI_HEADER0, buf, 3); in hdmi_reg_infoframes()
846 hdmi_reg_write_buf(hdata, HDMI_VSI_DATA(0), buf + 3, ret - 3); in hdmi_reg_infoframes()
849 hdmi_audio_infoframe_apply(hdata); in hdmi_reg_infoframes()
855 struct hdmi_context *hdata = connector_to_hdmi(connector); in hdmi_detect() local
857 if (gpiod_get_value(hdata->hpd_gpio)) in hdmi_detect()
860 cec_notifier_set_phys_addr(hdata->notifier, CEC_PHYS_ADDR_INVALID); in hdmi_detect()
866 struct hdmi_context *hdata = connector_to_hdmi(connector); in hdmi_connector_destroy() local
868 cec_notifier_conn_unregister(hdata->notifier); in hdmi_connector_destroy()
885 struct hdmi_context *hdata = connector_to_hdmi(connector); in hdmi_get_modes() local
890 if (!hdata->ddc_adpt) in hdmi_get_modes()
893 drm_edid = drm_edid_read_ddc(connector, hdata->ddc_adpt); in hdmi_get_modes()
899 cec_notifier_set_phys_addr(hdata->notifier, info->source_physical_address); in hdmi_get_modes()
904 hdata->dvi_mode = !info->is_hdmi; in hdmi_get_modes()
905 DRM_DEV_DEBUG_KMS(hdata->dev, "%s : width[%d] x height[%d]\n", in hdmi_get_modes()
906 (hdata->dvi_mode ? "dvi monitor" : "hdmi monitor"), in hdmi_get_modes()
919 static int hdmi_find_phy_conf(struct hdmi_context *hdata, u32 pixel_clock) in hdmi_find_phy_conf() argument
921 const struct hdmiphy_configs *confs = &hdata->drv_data->phy_confs; in hdmi_find_phy_conf()
928 DRM_DEV_DEBUG_KMS(hdata->dev, "Could not find phy config for %d\n", in hdmi_find_phy_conf()
936 struct hdmi_context *hdata = connector_to_hdmi(connector); in hdmi_mode_valid() local
939 DRM_DEV_DEBUG_KMS(hdata->dev, in hdmi_mode_valid()
946 ret = hdmi_find_phy_conf(hdata, mode->clock * 1000); in hdmi_mode_valid()
960 struct hdmi_context *hdata = encoder_to_hdmi(encoder); in hdmi_create_connector() local
961 struct drm_connector *connector = &hdata->connector; in hdmi_create_connector()
968 ret = drm_connector_init_with_ddc(hdata->drm_dev, connector, in hdmi_create_connector()
971 hdata->ddc_adpt); in hdmi_create_connector()
973 DRM_DEV_ERROR(hdata->dev, in hdmi_create_connector()
981 if (hdata->bridge) in hdmi_create_connector()
982 ret = drm_bridge_attach(encoder, hdata->bridge, NULL, 0); in hdmi_create_connector()
986 hdata->notifier = cec_notifier_conn_register(hdata->dev, NULL, in hdmi_create_connector()
988 if (!hdata->notifier) { in hdmi_create_connector()
990 DRM_DEV_ERROR(hdata->dev, "Failed to allocate CEC notifier\n"); in hdmi_create_connector()
1051 static void hdmi_reg_acr(struct hdmi_context *hdata, u32 freq) in hdmi_reg_acr() argument
1058 hdmi_reg_writev(hdata, HDMI_ACR_N0, 3, n); in hdmi_reg_acr()
1059 hdmi_reg_writev(hdata, HDMI_ACR_MCTS0, 3, cts); in hdmi_reg_acr()
1060 hdmi_reg_writev(hdata, HDMI_ACR_CTS0, 3, cts); in hdmi_reg_acr()
1061 hdmi_reg_writeb(hdata, HDMI_ACR_CON, 4); in hdmi_reg_acr()
1064 static void hdmi_audio_config(struct hdmi_context *hdata) in hdmi_audio_config() argument
1070 switch (hdata->audio.params.sample_width) { in hdmi_audio_config()
1083 hdmi_reg_acr(hdata, hdata->audio.params.sample_rate); in hdmi_audio_config()
1085 hdmi_reg_writeb(hdata, HDMI_I2S_MUX_CON, HDMI_I2S_IN_DISABLE in hdmi_audio_config()
1089 hdmi_reg_writeb(hdata, HDMI_I2S_MUX_CH, HDMI_I2S_CH0_EN in hdmi_audio_config()
1092 hdmi_reg_writeb(hdata, HDMI_I2S_MUX_CUV, HDMI_I2S_CUV_RL_EN); in hdmi_audio_config()
1093 hdmi_reg_writeb(hdata, HDMI_I2S_CLK_CON, HDMI_I2S_CLK_DIS); in hdmi_audio_config()
1094 hdmi_reg_writeb(hdata, HDMI_I2S_CLK_CON, HDMI_I2S_CLK_EN); in hdmi_audio_config()
1096 val = hdmi_reg_read(hdata, HDMI_I2S_DSD_CON) | 0x01; in hdmi_audio_config()
1097 hdmi_reg_writeb(hdata, HDMI_I2S_DSD_CON, val); in hdmi_audio_config()
1100 hdmi_reg_writeb(hdata, HDMI_I2S_PIN_SEL_0, HDMI_I2S_SEL_SCLK(5) in hdmi_audio_config()
1103 hdmi_reg_writeb(hdata, HDMI_I2S_PIN_SEL_1, HDMI_I2S_SEL_SDATA1(3) in hdmi_audio_config()
1106 hdmi_reg_writeb(hdata, HDMI_I2S_PIN_SEL_2, HDMI_I2S_SEL_SDATA3(1) in hdmi_audio_config()
1109 hdmi_reg_writeb(hdata, HDMI_I2S_PIN_SEL_3, HDMI_I2S_SEL_DSD(0)); in hdmi_audio_config()
1112 hdmi_reg_writeb(hdata, HDMI_I2S_CON_1, HDMI_I2S_SCLK_FALLING_EDGE in hdmi_audio_config()
1114 hdmi_reg_writeb(hdata, HDMI_I2S_CON_2, HDMI_I2S_MSB_FIRST_MODE in hdmi_audio_config()
1121 hdmi_reg_writeb(hdata, HDMI_I2S_CH_ST(i), in hdmi_audio_config()
1122 hdata->audio.params.iec.status[i]); in hdmi_audio_config()
1124 hdmi_reg_writeb(hdata, HDMI_I2S_CH_ST_CON, HDMI_I2S_CH_STATUS_RELOAD); in hdmi_audio_config()
1127 static void hdmi_audio_control(struct hdmi_context *hdata) in hdmi_audio_control() argument
1129 bool enable = !hdata->audio.mute; in hdmi_audio_control()
1131 if (hdata->dvi_mode) in hdmi_audio_control()
1134 hdmi_reg_writeb(hdata, HDMI_AUI_CON, enable ? in hdmi_audio_control()
1136 hdmi_reg_writemask(hdata, HDMI_CON_0, enable ? in hdmi_audio_control()
1140 static void hdmi_start(struct hdmi_context *hdata, bool start) in hdmi_start() argument
1142 struct drm_display_mode *m = &hdata->encoder.crtc->state->mode; in hdmi_start()
1148 hdmi_reg_writemask(hdata, HDMI_CON_0, val, HDMI_EN); in hdmi_start()
1149 hdmi_reg_writemask(hdata, HDMI_TG_CMD, val, HDMI_TG_EN | HDMI_FIELD_EN); in hdmi_start()
1152 static void hdmi_conf_init(struct hdmi_context *hdata) in hdmi_conf_init() argument
1155 hdmi_reg_writemask(hdata, HDMI_INTC_CON, 0, HDMI_INTC_EN_GLOBAL | in hdmi_conf_init()
1159 hdmi_reg_writemask(hdata, HDMI_MODE_SEL, in hdmi_conf_init()
1162 hdmi_reg_writeb(hdata, HDMI_CON_2, 0); in hdmi_conf_init()
1164 hdmi_reg_writemask(hdata, HDMI_CON_0, 0, HDMI_BLUE_SCR_EN); in hdmi_conf_init()
1166 if (hdata->dvi_mode) { in hdmi_conf_init()
1167 hdmi_reg_writemask(hdata, HDMI_MODE_SEL, in hdmi_conf_init()
1169 hdmi_reg_writeb(hdata, HDMI_CON_2, in hdmi_conf_init()
1173 if (hdata->drv_data->type == HDMI_TYPE13) { in hdmi_conf_init()
1175 hdmi_reg_writeb(hdata, HDMI_V13_BLUE_SCREEN_0, 0x12); in hdmi_conf_init()
1176 hdmi_reg_writeb(hdata, HDMI_V13_BLUE_SCREEN_1, 0x34); in hdmi_conf_init()
1177 hdmi_reg_writeb(hdata, HDMI_V13_BLUE_SCREEN_2, 0x56); in hdmi_conf_init()
1180 hdmi_reg_writeb(hdata, HDMI_V13_AVI_CON, 0x02); in hdmi_conf_init()
1182 hdmi_reg_writeb(hdata, HDMI_V13_AVI_BYTE(0), 0 << 5); in hdmi_conf_init()
1183 hdmi_reg_writemask(hdata, HDMI_CON_1, 0x10 << 5, 0x11 << 5); in hdmi_conf_init()
1185 hdmi_reg_writeb(hdata, HDMI_V13_SPD_CON, 0x02); in hdmi_conf_init()
1186 hdmi_reg_writeb(hdata, HDMI_V13_AUI_CON, 0x02); in hdmi_conf_init()
1187 hdmi_reg_writeb(hdata, HDMI_V13_ACR_CON, 0x04); in hdmi_conf_init()
1189 hdmi_reg_infoframes(hdata); in hdmi_conf_init()
1192 hdmi_reg_writemask(hdata, HDMI_CON_1, 2, 3 << 5); in hdmi_conf_init()
1196 static void hdmiphy_wait_for_pll(struct hdmi_context *hdata) in hdmiphy_wait_for_pll() argument
1201 u32 val = hdmi_reg_read(hdata, HDMI_PHY_STATUS); in hdmiphy_wait_for_pll()
1204 DRM_DEV_DEBUG_KMS(hdata->dev, in hdmiphy_wait_for_pll()
1212 DRM_DEV_ERROR(hdata->dev, "PLL could not reach steady state\n"); in hdmiphy_wait_for_pll()
1215 static void hdmi_v13_mode_apply(struct hdmi_context *hdata) in hdmi_v13_mode_apply() argument
1217 struct drm_display_mode *m = &hdata->encoder.crtc->state->mode; in hdmi_v13_mode_apply()
1220 hdmi_reg_writev(hdata, HDMI_H_BLANK_0, 2, m->htotal - m->hdisplay); in hdmi_v13_mode_apply()
1221 hdmi_reg_writev(hdata, HDMI_V13_H_V_LINE_0, 3, in hdmi_v13_mode_apply()
1225 hdmi_reg_writev(hdata, HDMI_VSYNC_POL, 1, val); in hdmi_v13_mode_apply()
1228 hdmi_reg_writev(hdata, HDMI_INT_PRO_MODE, 1, val); in hdmi_v13_mode_apply()
1233 hdmi_reg_writev(hdata, HDMI_V13_H_SYNC_GEN_0, 3, val); in hdmi_v13_mode_apply()
1245 hdmi_reg_writev(hdata, HDMI_V13_V_SYNC_GEN_1_0, 3, val); in hdmi_v13_mode_apply()
1249 hdmi_reg_writev(hdata, HDMI_V13_V_BLANK_0, 3, val); in hdmi_v13_mode_apply()
1254 hdmi_reg_writev(hdata, HDMI_V13_V_BLANK_F_0, 3, val); in hdmi_v13_mode_apply()
1258 hdmi_reg_writev(hdata, HDMI_V13_V_SYNC_GEN_2_0, 3, val); in hdmi_v13_mode_apply()
1263 hdmi_reg_writev(hdata, HDMI_V13_V_SYNC_GEN_3_0, 3, val); in hdmi_v13_mode_apply()
1265 hdmi_reg_writev(hdata, HDMI_TG_VACT_ST_L, 2, in hdmi_v13_mode_apply()
1267 hdmi_reg_writev(hdata, HDMI_TG_VACT_SZ_L, 2, m->vdisplay / 2); in hdmi_v13_mode_apply()
1269 hdmi_reg_writev(hdata, HDMI_TG_VACT_ST2_L, 2, 0x249); in hdmi_v13_mode_apply()
1273 hdmi_reg_writev(hdata, HDMI_V13_V_BLANK_0, 3, val); in hdmi_v13_mode_apply()
1275 hdmi_reg_writev(hdata, HDMI_V13_V_BLANK_F_0, 3, 0); in hdmi_v13_mode_apply()
1279 hdmi_reg_writev(hdata, HDMI_V13_V_SYNC_GEN_1_0, 3, val); in hdmi_v13_mode_apply()
1281 hdmi_reg_writev(hdata, HDMI_V13_V_SYNC_GEN_2_0, 3, 0x1001); in hdmi_v13_mode_apply()
1282 hdmi_reg_writev(hdata, HDMI_V13_V_SYNC_GEN_3_0, 3, 0x1001); in hdmi_v13_mode_apply()
1283 hdmi_reg_writev(hdata, HDMI_TG_VACT_ST_L, 2, in hdmi_v13_mode_apply()
1285 hdmi_reg_writev(hdata, HDMI_TG_VACT_SZ_L, 2, m->vdisplay); in hdmi_v13_mode_apply()
1288 hdmi_reg_writev(hdata, HDMI_TG_H_FSZ_L, 2, m->htotal); in hdmi_v13_mode_apply()
1289 hdmi_reg_writev(hdata, HDMI_TG_HACT_ST_L, 2, m->htotal - m->hdisplay); in hdmi_v13_mode_apply()
1290 hdmi_reg_writev(hdata, HDMI_TG_HACT_SZ_L, 2, m->hdisplay); in hdmi_v13_mode_apply()
1291 hdmi_reg_writev(hdata, HDMI_TG_V_FSZ_L, 2, m->vtotal); in hdmi_v13_mode_apply()
1294 static void hdmi_v14_mode_apply(struct hdmi_context *hdata) in hdmi_v14_mode_apply() argument
1296 struct drm_display_mode *m = &hdata->encoder.crtc->state->mode; in hdmi_v14_mode_apply()
1298 &hdata->encoder.crtc->state->adjusted_mode; in hdmi_v14_mode_apply()
1310 hdmi_reg_writev(hdata, HDMI_H_BLANK_0, 2, m->htotal - m->hdisplay); in hdmi_v14_mode_apply()
1311 hdmi_reg_writev(hdata, HDMI_V_LINE_0, 2, m->vtotal); in hdmi_v14_mode_apply()
1312 hdmi_reg_writev(hdata, HDMI_H_LINE_0, 2, m->htotal); in hdmi_v14_mode_apply()
1313 hdmi_reg_writev(hdata, HDMI_HSYNC_POL, 1, in hdmi_v14_mode_apply()
1315 hdmi_reg_writev(hdata, HDMI_VSYNC_POL, 1, in hdmi_v14_mode_apply()
1317 hdmi_reg_writev(hdata, HDMI_INT_PRO_MODE, 1, in hdmi_v14_mode_apply()
1328 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_BEF_2_0, 2, in hdmi_v14_mode_apply()
1330 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_BEF_1_0, 2, in hdmi_v14_mode_apply()
1332 hdmi_reg_writev(hdata, HDMI_V2_BLANK_0, 2, m->vtotal / 2); in hdmi_v14_mode_apply()
1333 hdmi_reg_writev(hdata, HDMI_V1_BLANK_0, 2, in hdmi_v14_mode_apply()
1335 hdmi_reg_writev(hdata, HDMI_V_BLANK_F0_0, 2, in hdmi_v14_mode_apply()
1337 hdmi_reg_writev(hdata, HDMI_V_BLANK_F1_0, 2, m->vtotal); in hdmi_v14_mode_apply()
1338 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_2_0, 2, in hdmi_v14_mode_apply()
1340 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_1_0, 2, in hdmi_v14_mode_apply()
1342 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_PXL_2_0, 2, in hdmi_v14_mode_apply()
1344 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_PXL_1_0, 2, in hdmi_v14_mode_apply()
1346 hdmi_reg_writev(hdata, HDMI_TG_VACT_ST_L, 2, in hdmi_v14_mode_apply()
1348 hdmi_reg_writev(hdata, HDMI_TG_VACT_SZ_L, 2, m->vdisplay / 2); in hdmi_v14_mode_apply()
1349 hdmi_reg_writev(hdata, HDMI_TG_VACT_ST2_L, 2, in hdmi_v14_mode_apply()
1351 hdmi_reg_writev(hdata, HDMI_TG_VSYNC2_L, 2, in hdmi_v14_mode_apply()
1353 hdmi_reg_writev(hdata, HDMI_TG_VSYNC_BOT_HDMI_L, 2, in hdmi_v14_mode_apply()
1355 hdmi_reg_writev(hdata, HDMI_TG_FIELD_BOT_HDMI_L, 2, in hdmi_v14_mode_apply()
1357 hdmi_reg_writev(hdata, HDMI_TG_VACT_ST3_L, 2, 0x0); in hdmi_v14_mode_apply()
1358 hdmi_reg_writev(hdata, HDMI_TG_VACT_ST4_L, 2, 0x0); in hdmi_v14_mode_apply()
1360 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_BEF_2_0, 2, in hdmi_v14_mode_apply()
1362 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_BEF_1_0, 2, in hdmi_v14_mode_apply()
1364 hdmi_reg_writev(hdata, HDMI_V2_BLANK_0, 2, m->vtotal); in hdmi_v14_mode_apply()
1365 hdmi_reg_writev(hdata, HDMI_V1_BLANK_0, 2, in hdmi_v14_mode_apply()
1367 hdmi_reg_writev(hdata, HDMI_V_BLANK_F0_0, 2, 0xffff); in hdmi_v14_mode_apply()
1368 hdmi_reg_writev(hdata, HDMI_V_BLANK_F1_0, 2, 0xffff); in hdmi_v14_mode_apply()
1369 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_2_0, 2, 0xffff); in hdmi_v14_mode_apply()
1370 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_1_0, 2, 0xffff); in hdmi_v14_mode_apply()
1371 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_PXL_2_0, 2, 0xffff); in hdmi_v14_mode_apply()
1372 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_PXL_1_0, 2, 0xffff); in hdmi_v14_mode_apply()
1373 hdmi_reg_writev(hdata, HDMI_TG_VACT_ST_L, 2, in hdmi_v14_mode_apply()
1375 hdmi_reg_writev(hdata, HDMI_TG_VACT_SZ_L, 2, m->vdisplay); in hdmi_v14_mode_apply()
1378 hdmi_reg_writev(hdata, HDMI_H_SYNC_START_0, 2, in hdmi_v14_mode_apply()
1380 hdmi_reg_writev(hdata, HDMI_H_SYNC_END_0, 2, in hdmi_v14_mode_apply()
1382 hdmi_reg_writev(hdata, HDMI_VACT_SPACE_1_0, 2, 0xffff); in hdmi_v14_mode_apply()
1383 hdmi_reg_writev(hdata, HDMI_VACT_SPACE_2_0, 2, 0xffff); in hdmi_v14_mode_apply()
1384 hdmi_reg_writev(hdata, HDMI_VACT_SPACE_3_0, 2, 0xffff); in hdmi_v14_mode_apply()
1385 hdmi_reg_writev(hdata, HDMI_VACT_SPACE_4_0, 2, 0xffff); in hdmi_v14_mode_apply()
1386 hdmi_reg_writev(hdata, HDMI_VACT_SPACE_5_0, 2, 0xffff); in hdmi_v14_mode_apply()
1387 hdmi_reg_writev(hdata, HDMI_VACT_SPACE_6_0, 2, 0xffff); in hdmi_v14_mode_apply()
1388 hdmi_reg_writev(hdata, HDMI_V_BLANK_F2_0, 2, 0xffff); in hdmi_v14_mode_apply()
1389 hdmi_reg_writev(hdata, HDMI_V_BLANK_F3_0, 2, 0xffff); in hdmi_v14_mode_apply()
1390 hdmi_reg_writev(hdata, HDMI_V_BLANK_F4_0, 2, 0xffff); in hdmi_v14_mode_apply()
1391 hdmi_reg_writev(hdata, HDMI_V_BLANK_F5_0, 2, 0xffff); in hdmi_v14_mode_apply()
1392 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_3_0, 2, 0xffff); in hdmi_v14_mode_apply()
1393 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_4_0, 2, 0xffff); in hdmi_v14_mode_apply()
1394 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_5_0, 2, 0xffff); in hdmi_v14_mode_apply()
1395 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_6_0, 2, 0xffff); in hdmi_v14_mode_apply()
1396 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_PXL_3_0, 2, 0xffff); in hdmi_v14_mode_apply()
1397 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_PXL_4_0, 2, 0xffff); in hdmi_v14_mode_apply()
1398 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_PXL_5_0, 2, 0xffff); in hdmi_v14_mode_apply()
1399 hdmi_reg_writev(hdata, HDMI_V_SYNC_LINE_AFT_PXL_6_0, 2, 0xffff); in hdmi_v14_mode_apply()
1401 hdmi_reg_writev(hdata, HDMI_TG_H_FSZ_L, 2, m->htotal); in hdmi_v14_mode_apply()
1402 hdmi_reg_writev(hdata, HDMI_TG_HACT_ST_L, 2, in hdmi_v14_mode_apply()
1404 hdmi_reg_writev(hdata, HDMI_TG_HACT_SZ_L, 2, m->hdisplay + hquirk); in hdmi_v14_mode_apply()
1405 hdmi_reg_writev(hdata, HDMI_TG_V_FSZ_L, 2, m->vtotal); in hdmi_v14_mode_apply()
1406 if (hdata->drv_data == &exynos5433_hdmi_driver_data) in hdmi_v14_mode_apply()
1407 hdmi_reg_writeb(hdata, HDMI_TG_DECON_EN, 1); in hdmi_v14_mode_apply()
1410 static void hdmi_mode_apply(struct hdmi_context *hdata) in hdmi_mode_apply() argument
1412 if (hdata->drv_data->type == HDMI_TYPE13) in hdmi_mode_apply()
1413 hdmi_v13_mode_apply(hdata); in hdmi_mode_apply()
1415 hdmi_v14_mode_apply(hdata); in hdmi_mode_apply()
1417 hdmi_start(hdata, true); in hdmi_mode_apply()
1420 static void hdmiphy_conf_reset(struct hdmi_context *hdata) in hdmiphy_conf_reset() argument
1422 hdmi_reg_writemask(hdata, HDMI_CORE_RSTOUT, 0, 1); in hdmiphy_conf_reset()
1424 hdmi_reg_writemask(hdata, HDMI_CORE_RSTOUT, ~0, 1); in hdmiphy_conf_reset()
1426 hdmi_reg_writemask(hdata, HDMI_PHY_RSTOUT, ~0, HDMI_PHY_SW_RSTOUT); in hdmiphy_conf_reset()
1428 hdmi_reg_writemask(hdata, HDMI_PHY_RSTOUT, 0, HDMI_PHY_SW_RSTOUT); in hdmiphy_conf_reset()
1432 static void hdmiphy_enable_mode_set(struct hdmi_context *hdata, bool enable) in hdmiphy_enable_mode_set() argument
1436 if (hdata->drv_data == &exynos5433_hdmi_driver_data) in hdmiphy_enable_mode_set()
1437 writel(v, hdata->regs_hdmiphy + HDMIPHY5433_MODE_SET_DONE); in hdmiphy_enable_mode_set()
1440 static void hdmiphy_conf_apply(struct hdmi_context *hdata) in hdmiphy_conf_apply() argument
1442 struct drm_display_mode *m = &hdata->encoder.crtc->state->mode; in hdmiphy_conf_apply()
1446 ret = hdmi_find_phy_conf(hdata, m->clock * 1000); in hdmiphy_conf_apply()
1448 DRM_DEV_ERROR(hdata->dev, "failed to find hdmiphy conf\n"); in hdmiphy_conf_apply()
1451 phy_conf = hdata->drv_data->phy_confs.data[ret].conf; in hdmiphy_conf_apply()
1453 hdmi_clk_set_parents(hdata, false); in hdmiphy_conf_apply()
1455 hdmiphy_conf_reset(hdata); in hdmiphy_conf_apply()
1457 hdmiphy_enable_mode_set(hdata, true); in hdmiphy_conf_apply()
1458 ret = hdmiphy_reg_write_buf(hdata, 0, phy_conf, 32); in hdmiphy_conf_apply()
1460 DRM_DEV_ERROR(hdata->dev, "failed to configure hdmiphy\n"); in hdmiphy_conf_apply()
1463 hdmiphy_enable_mode_set(hdata, false); in hdmiphy_conf_apply()
1464 hdmi_clk_set_parents(hdata, true); in hdmiphy_conf_apply()
1466 hdmiphy_wait_for_pll(hdata); in hdmiphy_conf_apply()
1470 static void hdmi_conf_apply(struct hdmi_context *hdata) in hdmi_conf_apply() argument
1472 hdmi_start(hdata, false); in hdmi_conf_apply()
1473 hdmi_conf_init(hdata); in hdmi_conf_apply()
1474 hdmi_audio_config(hdata); in hdmi_conf_apply()
1475 hdmi_mode_apply(hdata); in hdmi_conf_apply()
1476 hdmi_audio_control(hdata); in hdmi_conf_apply()
1479 static void hdmi_set_refclk(struct hdmi_context *hdata, bool on) in hdmi_set_refclk() argument
1481 if (!hdata->sysreg) in hdmi_set_refclk()
1484 regmap_update_bits(hdata->sysreg, EXYNOS5433_SYSREG_DISP_HDMI_PHY, in hdmi_set_refclk()
1489 static void hdmiphy_enable(struct hdmi_context *hdata) in hdmiphy_enable() argument
1493 if (hdata->powered) in hdmiphy_enable()
1496 ret = pm_runtime_resume_and_get(hdata->dev); in hdmiphy_enable()
1498 dev_err(hdata->dev, "failed to enable HDMIPHY device.\n"); in hdmiphy_enable()
1502 if (regulator_bulk_enable(ARRAY_SIZE(supply), hdata->regul_bulk)) in hdmiphy_enable()
1503 DRM_DEV_DEBUG_KMS(hdata->dev, in hdmiphy_enable()
1506 regmap_update_bits(hdata->pmureg, PMU_HDMI_PHY_CONTROL, in hdmiphy_enable()
1509 hdmi_set_refclk(hdata, true); in hdmiphy_enable()
1511 hdmi_reg_writemask(hdata, HDMI_PHY_CON_0, 0, HDMI_PHY_POWER_OFF_EN); in hdmiphy_enable()
1513 hdmiphy_conf_apply(hdata); in hdmiphy_enable()
1515 hdata->powered = true; in hdmiphy_enable()
1519 static void hdmiphy_disable(struct hdmi_context *hdata) in hdmiphy_disable() argument
1521 if (!hdata->powered) in hdmiphy_disable()
1524 hdmi_reg_writemask(hdata, HDMI_CON_0, 0, HDMI_EN); in hdmiphy_disable()
1526 hdmi_reg_writemask(hdata, HDMI_PHY_CON_0, ~0, HDMI_PHY_POWER_OFF_EN); in hdmiphy_disable()
1528 hdmi_set_refclk(hdata, false); in hdmiphy_disable()
1530 regmap_update_bits(hdata->pmureg, PMU_HDMI_PHY_CONTROL, in hdmiphy_disable()
1533 regulator_bulk_disable(ARRAY_SIZE(supply), hdata->regul_bulk); in hdmiphy_disable()
1535 pm_runtime_put_sync(hdata->dev); in hdmiphy_disable()
1537 hdata->powered = false; in hdmiphy_disable()
1542 struct hdmi_context *hdata = encoder_to_hdmi(encoder); in hdmi_enable() local
1544 mutex_lock(&hdata->mutex); in hdmi_enable()
1546 hdmiphy_enable(hdata); in hdmi_enable()
1547 hdmi_conf_apply(hdata); in hdmi_enable()
1549 mutex_unlock(&hdata->mutex); in hdmi_enable()
1554 struct hdmi_context *hdata = encoder_to_hdmi(encoder); in hdmi_disable() local
1556 mutex_lock(&hdata->mutex); in hdmi_disable()
1558 if (hdata->powered) { in hdmi_disable()
1568 mutex_unlock(&hdata->mutex); in hdmi_disable()
1569 cancel_delayed_work(&hdata->hotplug_work); in hdmi_disable()
1570 if (hdata->notifier) in hdmi_disable()
1571 cec_notifier_phys_addr_invalidate(hdata->notifier); in hdmi_disable()
1575 mutex_unlock(&hdata->mutex); in hdmi_disable()
1586 struct hdmi_context *hdata = dev_get_drvdata(dev); in hdmi_audio_shutdown() local
1588 mutex_lock(&hdata->mutex); in hdmi_audio_shutdown()
1590 hdata->audio.mute = true; in hdmi_audio_shutdown()
1592 if (hdata->powered) in hdmi_audio_shutdown()
1593 hdmi_audio_control(hdata); in hdmi_audio_shutdown()
1595 mutex_unlock(&hdata->mutex); in hdmi_audio_shutdown()
1602 struct hdmi_context *hdata = dev_get_drvdata(dev); in hdmi_audio_hw_params() local
1614 mutex_lock(&hdata->mutex); in hdmi_audio_hw_params()
1616 hdata->audio.params = *params; in hdmi_audio_hw_params()
1618 if (hdata->powered) { in hdmi_audio_hw_params()
1619 hdmi_audio_config(hdata); in hdmi_audio_hw_params()
1620 hdmi_audio_infoframe_apply(hdata); in hdmi_audio_hw_params()
1623 mutex_unlock(&hdata->mutex); in hdmi_audio_hw_params()
1631 struct hdmi_context *hdata = dev_get_drvdata(dev); in hdmi_audio_mute() local
1633 mutex_lock(&hdata->mutex); in hdmi_audio_mute()
1635 hdata->audio.mute = mute; in hdmi_audio_mute()
1637 if (hdata->powered) in hdmi_audio_mute()
1638 hdmi_audio_control(hdata); in hdmi_audio_mute()
1640 mutex_unlock(&hdata->mutex); in hdmi_audio_mute()
1648 struct hdmi_context *hdata = dev_get_drvdata(dev); in hdmi_audio_get_eld() local
1649 struct drm_connector *connector = &hdata->connector; in hdmi_audio_get_eld()
1665 static int hdmi_register_audio_device(struct hdmi_context *hdata) in hdmi_register_audio_device() argument
1674 hdata->audio.pdev = platform_device_register_data( in hdmi_register_audio_device()
1675 hdata->dev, HDMI_CODEC_DRV_NAME, PLATFORM_DEVID_AUTO, in hdmi_register_audio_device()
1678 return PTR_ERR_OR_ZERO(hdata->audio.pdev); in hdmi_register_audio_device()
1683 struct hdmi_context *hdata; in hdmi_hotplug_work_func() local
1685 hdata = container_of(work, struct hdmi_context, hotplug_work.work); in hdmi_hotplug_work_func()
1687 if (hdata->drm_dev) in hdmi_hotplug_work_func()
1688 drm_helper_hpd_irq_event(hdata->drm_dev); in hdmi_hotplug_work_func()
1693 struct hdmi_context *hdata = arg; in hdmi_irq_thread() local
1695 mod_delayed_work(system_wq, &hdata->hotplug_work, in hdmi_irq_thread()
1701 static int hdmi_clks_get(struct hdmi_context *hdata, in hdmi_clks_get() argument
1705 struct device *dev = hdata->dev; in hdmi_clks_get()
1726 static int hdmi_clk_init(struct hdmi_context *hdata) in hdmi_clk_init() argument
1728 const struct hdmi_driver_data *drv_data = hdata->drv_data; in hdmi_clk_init()
1730 struct device *dev = hdata->dev; in hdmi_clk_init()
1741 hdata->clk_gates = clks; in hdmi_clk_init()
1742 hdata->clk_muxes = clks + drv_data->clk_gates.count; in hdmi_clk_init()
1744 ret = hdmi_clks_get(hdata, &drv_data->clk_gates, hdata->clk_gates); in hdmi_clk_init()
1748 return hdmi_clks_get(hdata, &drv_data->clk_muxes, hdata->clk_muxes); in hdmi_clk_init()
1754 struct hdmi_context *hdata = container_of(clk, struct hdmi_context, in hdmiphy_clk_enable() local
1756 mutex_lock(&hdata->mutex); in hdmiphy_clk_enable()
1759 hdmiphy_enable(hdata); in hdmiphy_clk_enable()
1761 hdmiphy_disable(hdata); in hdmiphy_clk_enable()
1763 mutex_unlock(&hdata->mutex); in hdmiphy_clk_enable()
1766 static int hdmi_bridge_init(struct hdmi_context *hdata) in hdmi_bridge_init() argument
1768 struct device *dev = hdata->dev; in hdmi_bridge_init()
1782 hdata->bridge = of_drm_find_bridge(np); in hdmi_bridge_init()
1785 if (!hdata->bridge) in hdmi_bridge_init()
1791 static int hdmi_resources_init(struct hdmi_context *hdata) in hdmi_resources_init() argument
1793 struct device *dev = hdata->dev; in hdmi_resources_init()
1798 hdata->hpd_gpio = devm_gpiod_get(dev, "hpd", GPIOD_IN); in hdmi_resources_init()
1799 if (IS_ERR(hdata->hpd_gpio)) { in hdmi_resources_init()
1801 return PTR_ERR(hdata->hpd_gpio); in hdmi_resources_init()
1804 hdata->irq = gpiod_to_irq(hdata->hpd_gpio); in hdmi_resources_init()
1805 if (hdata->irq < 0) { in hdmi_resources_init()
1807 return hdata->irq; in hdmi_resources_init()
1810 ret = hdmi_clk_init(hdata); in hdmi_resources_init()
1814 ret = hdmi_clk_set_parents(hdata, false); in hdmi_resources_init()
1819 hdata->regul_bulk[i].supply = supply[i]; in hdmi_resources_init()
1821 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(supply), hdata->regul_bulk); in hdmi_resources_init()
1825 hdata->reg_hdmi_en = devm_regulator_get_optional(dev, "hdmi-en"); in hdmi_resources_init()
1827 if (PTR_ERR(hdata->reg_hdmi_en) != -ENODEV) in hdmi_resources_init()
1828 if (IS_ERR(hdata->reg_hdmi_en)) in hdmi_resources_init()
1829 return PTR_ERR(hdata->reg_hdmi_en); in hdmi_resources_init()
1831 return hdmi_bridge_init(hdata); in hdmi_resources_init()
1856 struct hdmi_context *hdata = dev_get_drvdata(dev); in hdmi_bind() local
1857 struct drm_encoder *encoder = &hdata->encoder; in hdmi_bind()
1861 hdata->drm_dev = drm_dev; in hdmi_bind()
1863 hdata->phy_clk.enable = hdmiphy_clk_enable; in hdmi_bind()
1876 crtc->pipe_clk = &hdata->phy_clk; in hdmi_bind()
1898 static int hdmi_get_ddc_adapter(struct hdmi_context *hdata) in hdmi_get_ddc_adapter() argument
1908 np = of_parse_phandle(hdata->dev->of_node, "ddc", 0); in hdmi_get_ddc_adapter()
1911 DRM_DEV_ERROR(hdata->dev, in hdmi_get_ddc_adapter()
1924 hdata->ddc_adpt = adpt; in hdmi_get_ddc_adapter()
1929 static int hdmi_get_phy_io(struct hdmi_context *hdata) in hdmi_get_phy_io() argument
1936 np = of_parse_phandle(hdata->dev->of_node, "phy", 0); in hdmi_get_phy_io()
1938 DRM_DEV_ERROR(hdata->dev, in hdmi_get_phy_io()
1944 if (hdata->drv_data->is_apb_phy) { in hdmi_get_phy_io()
1945 hdata->regs_hdmiphy = of_iomap(np, 0); in hdmi_get_phy_io()
1946 if (!hdata->regs_hdmiphy) { in hdmi_get_phy_io()
1947 DRM_DEV_ERROR(hdata->dev, in hdmi_get_phy_io()
1952 hdata->hdmiphy_port = of_find_i2c_device_by_node(np); in hdmi_get_phy_io()
1953 if (!hdata->hdmiphy_port) { in hdmi_get_phy_io()
1966 struct hdmi_context *hdata; in hdmi_probe() local
1969 hdata = devm_kzalloc(dev, sizeof(struct hdmi_context), GFP_KERNEL); in hdmi_probe()
1970 if (!hdata) in hdmi_probe()
1973 hdata->drv_data = of_device_get_match_data(dev); in hdmi_probe()
1975 platform_set_drvdata(pdev, hdata); in hdmi_probe()
1977 hdata->dev = dev; in hdmi_probe()
1979 mutex_init(&hdata->mutex); in hdmi_probe()
1981 ret = hdmi_resources_init(hdata); in hdmi_probe()
1988 hdata->regs = devm_platform_ioremap_resource(pdev, 0); in hdmi_probe()
1989 if (IS_ERR(hdata->regs)) { in hdmi_probe()
1990 ret = PTR_ERR(hdata->regs); in hdmi_probe()
1994 ret = hdmi_get_ddc_adapter(hdata); in hdmi_probe()
1998 ret = hdmi_get_phy_io(hdata); in hdmi_probe()
2002 INIT_DELAYED_WORK(&hdata->hotplug_work, hdmi_hotplug_work_func); in hdmi_probe()
2004 ret = devm_request_threaded_irq(dev, hdata->irq, NULL, in hdmi_probe()
2007 "hdmi", hdata); in hdmi_probe()
2013 hdata->pmureg = syscon_regmap_lookup_by_phandle(dev->of_node, in hdmi_probe()
2015 if (IS_ERR(hdata->pmureg)) { in hdmi_probe()
2021 if (hdata->drv_data->has_sysreg) { in hdmi_probe()
2022 hdata->sysreg = syscon_regmap_lookup_by_phandle(dev->of_node, in hdmi_probe()
2024 if (IS_ERR(hdata->sysreg)) { in hdmi_probe()
2031 if (!IS_ERR(hdata->reg_hdmi_en)) { in hdmi_probe()
2032 ret = regulator_enable(hdata->reg_hdmi_en); in hdmi_probe()
2042 audio_infoframe = &hdata->audio.infoframe; in hdmi_probe()
2049 ret = hdmi_register_audio_device(hdata); in hdmi_probe()
2060 platform_device_unregister(hdata->audio.pdev); in hdmi_probe()
2064 if (!IS_ERR(hdata->reg_hdmi_en)) in hdmi_probe()
2065 regulator_disable(hdata->reg_hdmi_en); in hdmi_probe()
2067 if (hdata->hdmiphy_port) in hdmi_probe()
2068 put_device(&hdata->hdmiphy_port->dev); in hdmi_probe()
2069 if (hdata->regs_hdmiphy) in hdmi_probe()
2070 iounmap(hdata->regs_hdmiphy); in hdmi_probe()
2072 put_device(&hdata->ddc_adpt->dev); in hdmi_probe()
2079 struct hdmi_context *hdata = platform_get_drvdata(pdev); in hdmi_remove() local
2081 cancel_delayed_work_sync(&hdata->hotplug_work); in hdmi_remove()
2084 platform_device_unregister(hdata->audio.pdev); in hdmi_remove()
2088 if (!IS_ERR(hdata->reg_hdmi_en)) in hdmi_remove()
2089 regulator_disable(hdata->reg_hdmi_en); in hdmi_remove()
2091 if (hdata->hdmiphy_port) in hdmi_remove()
2092 put_device(&hdata->hdmiphy_port->dev); in hdmi_remove()
2094 if (hdata->regs_hdmiphy) in hdmi_remove()
2095 iounmap(hdata->regs_hdmiphy); in hdmi_remove()
2097 put_device(&hdata->ddc_adpt->dev); in hdmi_remove()
2099 mutex_destroy(&hdata->mutex); in hdmi_remove()
2104 struct hdmi_context *hdata = dev_get_drvdata(dev); in exynos_hdmi_suspend() local
2106 hdmi_clk_disable_gates(hdata); in exynos_hdmi_suspend()
2113 struct hdmi_context *hdata = dev_get_drvdata(dev); in exynos_hdmi_resume() local
2116 ret = hdmi_clk_enable_gates(hdata); in exynos_hdmi_resume()