Lines Matching refs:dp
61 static int cdn_dp_grf_write(struct cdn_dp_device *dp, in cdn_dp_grf_write() argument
66 ret = clk_prepare_enable(dp->grf_clk); in cdn_dp_grf_write()
68 DRM_DEV_ERROR(dp->dev, "Failed to prepare_enable grf clock\n"); in cdn_dp_grf_write()
72 ret = regmap_write(dp->grf, reg, val); in cdn_dp_grf_write()
74 DRM_DEV_ERROR(dp->dev, "Could not write to GRF: %d\n", ret); in cdn_dp_grf_write()
78 clk_disable_unprepare(dp->grf_clk); in cdn_dp_grf_write()
83 static int cdn_dp_clk_enable(struct cdn_dp_device *dp) in cdn_dp_clk_enable() argument
88 ret = clk_prepare_enable(dp->pclk); in cdn_dp_clk_enable()
90 DRM_DEV_ERROR(dp->dev, "cannot enable dp pclk %d\n", ret); in cdn_dp_clk_enable()
94 ret = clk_prepare_enable(dp->core_clk); in cdn_dp_clk_enable()
96 DRM_DEV_ERROR(dp->dev, "cannot enable core_clk %d\n", ret); in cdn_dp_clk_enable()
100 ret = pm_runtime_get_sync(dp->dev); in cdn_dp_clk_enable()
102 DRM_DEV_ERROR(dp->dev, "cannot get pm runtime %d\n", ret); in cdn_dp_clk_enable()
106 reset_control_assert(dp->core_rst); in cdn_dp_clk_enable()
107 reset_control_assert(dp->dptx_rst); in cdn_dp_clk_enable()
108 reset_control_assert(dp->apb_rst); in cdn_dp_clk_enable()
109 reset_control_deassert(dp->core_rst); in cdn_dp_clk_enable()
110 reset_control_deassert(dp->dptx_rst); in cdn_dp_clk_enable()
111 reset_control_deassert(dp->apb_rst); in cdn_dp_clk_enable()
113 rate = clk_get_rate(dp->core_clk); in cdn_dp_clk_enable()
115 DRM_DEV_ERROR(dp->dev, "get clk rate failed\n"); in cdn_dp_clk_enable()
120 cdn_dp_set_fw_clk(dp, rate); in cdn_dp_clk_enable()
121 cdn_dp_clock_reset(dp); in cdn_dp_clk_enable()
126 pm_runtime_put(dp->dev); in cdn_dp_clk_enable()
128 clk_disable_unprepare(dp->core_clk); in cdn_dp_clk_enable()
130 clk_disable_unprepare(dp->pclk); in cdn_dp_clk_enable()
135 static void cdn_dp_clk_disable(struct cdn_dp_device *dp) in cdn_dp_clk_disable() argument
137 pm_runtime_put_sync(dp->dev); in cdn_dp_clk_disable()
138 clk_disable_unprepare(dp->pclk); in cdn_dp_clk_disable()
139 clk_disable_unprepare(dp->core_clk); in cdn_dp_clk_disable()
164 static int cdn_dp_get_sink_count(struct cdn_dp_device *dp, u8 *sink_count) in cdn_dp_get_sink_count() argument
170 ret = cdn_dp_dpcd_read(dp, DP_SINK_COUNT, &value, 1); in cdn_dp_get_sink_count()
178 static struct cdn_dp_port *cdn_dp_connected_port(struct cdn_dp_device *dp) in cdn_dp_connected_port() argument
183 for (i = 0; i < dp->ports; i++) { in cdn_dp_connected_port()
184 port = dp->port[i]; in cdn_dp_connected_port()
192 static bool cdn_dp_check_sink_connection(struct cdn_dp_device *dp) in cdn_dp_check_sink_connection() argument
198 if (dp->active_port < 0 || dp->active_port >= dp->ports) { in cdn_dp_check_sink_connection()
199 DRM_DEV_ERROR(dp->dev, "active_port is wrong!\n"); in cdn_dp_check_sink_connection()
203 port = dp->port[dp->active_port]; in cdn_dp_check_sink_connection()
215 if (!cdn_dp_get_sink_count(dp, &sink_count)) in cdn_dp_check_sink_connection()
221 DRM_DEV_ERROR(dp->dev, "Get sink capability timed out\n"); in cdn_dp_check_sink_connection()
228 struct cdn_dp_device *dp = connector_to_dp(connector); in cdn_dp_connector_detect() local
231 mutex_lock(&dp->lock); in cdn_dp_connector_detect()
232 if (dp->connected) in cdn_dp_connector_detect()
234 mutex_unlock(&dp->lock); in cdn_dp_connector_detect()
256 struct cdn_dp_device *dp = connector_to_dp(connector); in cdn_dp_connector_get_modes() local
260 mutex_lock(&dp->lock); in cdn_dp_connector_get_modes()
261 edid = dp->edid; in cdn_dp_connector_get_modes()
263 DRM_DEV_DEBUG_KMS(dp->dev, "got edid: width[%d] x height[%d]\n", in cdn_dp_connector_get_modes()
266 dp->sink_has_audio = drm_detect_monitor_audio(edid); in cdn_dp_connector_get_modes()
272 mutex_unlock(&dp->lock); in cdn_dp_connector_get_modes()
280 struct cdn_dp_device *dp = connector_to_dp(connector); in cdn_dp_connector_mode_valid() local
281 struct drm_display_info *display_info = &dp->connector.display_info; in cdn_dp_connector_mode_valid()
286 if (!dp->connected) in cdn_dp_connector_mode_valid()
303 source_max = dp->lanes; in cdn_dp_connector_mode_valid()
304 sink_max = drm_dp_max_lane_count(dp->dpcd); in cdn_dp_connector_mode_valid()
308 sink_max = drm_dp_max_link_rate(dp->dpcd); in cdn_dp_connector_mode_valid()
317 DRM_DEV_DEBUG_KMS(dp->dev, in cdn_dp_connector_mode_valid()
331 static int cdn_dp_firmware_init(struct cdn_dp_device *dp) in cdn_dp_firmware_init() argument
335 const struct firmware *fw = dp->fw; in cdn_dp_firmware_init()
340 DRM_DEV_ERROR(dp->dev, "firmware is invalid\n"); in cdn_dp_firmware_init()
347 ret = cdn_dp_load_firmware(dp, iram_data, hdr->iram_size, in cdn_dp_firmware_init()
352 ret = cdn_dp_set_firmware_active(dp, true); in cdn_dp_firmware_init()
354 DRM_DEV_ERROR(dp->dev, "active ucpu failed: %d\n", ret); in cdn_dp_firmware_init()
358 return cdn_dp_event_config(dp); in cdn_dp_firmware_init()
361 static int cdn_dp_get_sink_capability(struct cdn_dp_device *dp) in cdn_dp_get_sink_capability() argument
365 if (!cdn_dp_check_sink_connection(dp)) in cdn_dp_get_sink_capability()
368 ret = cdn_dp_dpcd_read(dp, DP_DPCD_REV, dp->dpcd, in cdn_dp_get_sink_capability()
371 DRM_DEV_ERROR(dp->dev, "Failed to get caps %d\n", ret); in cdn_dp_get_sink_capability()
375 kfree(dp->edid); in cdn_dp_get_sink_capability()
376 dp->edid = drm_do_get_edid(&dp->connector, in cdn_dp_get_sink_capability()
377 cdn_dp_get_edid_block, dp); in cdn_dp_get_sink_capability()
381 static int cdn_dp_enable_phy(struct cdn_dp_device *dp, struct cdn_dp_port *port) in cdn_dp_enable_phy() argument
389 DRM_DEV_ERROR(dp->dev, "phy power on failed: %d\n", in cdn_dp_enable_phy()
396 ret = cdn_dp_grf_write(dp, GRF_SOC_CON26, in cdn_dp_enable_phy()
399 DRM_DEV_ERROR(dp->dev, "Failed to write HPD_SEL %d\n", ret); in cdn_dp_enable_phy()
403 ret = cdn_dp_get_hpd_status(dp); in cdn_dp_enable_phy()
406 DRM_DEV_ERROR(dp->dev, "hpd does not exist\n"); in cdn_dp_enable_phy()
413 DRM_DEV_ERROR(dp->dev, "get property failed\n"); in cdn_dp_enable_phy()
418 ret = cdn_dp_set_host_cap(dp, port->lanes, property.intval); in cdn_dp_enable_phy()
420 DRM_DEV_ERROR(dp->dev, "set host capabilities failed: %d\n", in cdn_dp_enable_phy()
425 dp->active_port = port->id; in cdn_dp_enable_phy()
430 DRM_DEV_ERROR(dp->dev, "phy power off failed: %d", ret); in cdn_dp_enable_phy()
435 cdn_dp_grf_write(dp, GRF_SOC_CON26, in cdn_dp_enable_phy()
440 static int cdn_dp_disable_phy(struct cdn_dp_device *dp, in cdn_dp_disable_phy() argument
448 DRM_DEV_ERROR(dp->dev, "phy power off failed: %d", ret); in cdn_dp_disable_phy()
455 dp->active_port = -1; in cdn_dp_disable_phy()
459 static int cdn_dp_disable(struct cdn_dp_device *dp) in cdn_dp_disable() argument
463 if (!dp->active) in cdn_dp_disable()
466 for (i = 0; i < dp->ports; i++) in cdn_dp_disable()
467 cdn_dp_disable_phy(dp, dp->port[i]); in cdn_dp_disable()
469 ret = cdn_dp_grf_write(dp, GRF_SOC_CON26, in cdn_dp_disable()
472 DRM_DEV_ERROR(dp->dev, "Failed to clear hpd sel %d\n", in cdn_dp_disable()
477 cdn_dp_set_firmware_active(dp, false); in cdn_dp_disable()
478 cdn_dp_clk_disable(dp); in cdn_dp_disable()
479 dp->active = false; in cdn_dp_disable()
480 dp->link.rate = 0; in cdn_dp_disable()
481 dp->link.num_lanes = 0; in cdn_dp_disable()
482 if (!dp->connected) { in cdn_dp_disable()
483 kfree(dp->edid); in cdn_dp_disable()
484 dp->edid = NULL; in cdn_dp_disable()
490 static int cdn_dp_enable(struct cdn_dp_device *dp) in cdn_dp_enable() argument
495 port = cdn_dp_connected_port(dp); in cdn_dp_enable()
497 DRM_DEV_ERROR(dp->dev, in cdn_dp_enable()
502 if (dp->active) in cdn_dp_enable()
505 ret = cdn_dp_clk_enable(dp); in cdn_dp_enable()
509 ret = cdn_dp_firmware_init(dp); in cdn_dp_enable()
511 DRM_DEV_ERROR(dp->dev, "firmware init failed: %d", ret); in cdn_dp_enable()
516 for (i = port->id; i < dp->ports; i++) { in cdn_dp_enable()
517 port = dp->port[i]; in cdn_dp_enable()
520 ret = cdn_dp_enable_phy(dp, port); in cdn_dp_enable()
524 ret = cdn_dp_get_sink_capability(dp); in cdn_dp_enable()
526 cdn_dp_disable_phy(dp, port); in cdn_dp_enable()
528 dp->active = true; in cdn_dp_enable()
529 dp->lanes = port->lanes; in cdn_dp_enable()
536 cdn_dp_clk_disable(dp); in cdn_dp_enable()
544 struct cdn_dp_device *dp = encoder_to_dp(encoder); in cdn_dp_encoder_mode_set() local
545 struct drm_display_info *display_info = &dp->connector.display_info; in cdn_dp_encoder_mode_set()
546 struct video_info *video = &dp->video_info; in cdn_dp_encoder_mode_set()
564 memcpy(&dp->mode, adjusted, sizeof(*mode)); in cdn_dp_encoder_mode_set()
567 static bool cdn_dp_check_link_status(struct cdn_dp_device *dp) in cdn_dp_check_link_status() argument
570 struct cdn_dp_port *port = cdn_dp_connected_port(dp); in cdn_dp_check_link_status()
571 u8 sink_lanes = drm_dp_max_lane_count(dp->dpcd); in cdn_dp_check_link_status()
573 if (!port || !dp->link.rate || !dp->link.num_lanes) in cdn_dp_check_link_status()
576 if (cdn_dp_dpcd_read(dp, DP_LANE0_1_STATUS, link_status, in cdn_dp_check_link_status()
588 struct cdn_dp_device *dp = encoder_to_dp(encoder); in cdn_dp_encoder_enable() local
591 ret = drm_of_encoder_active_endpoint_id(dp->dev->of_node, encoder); in cdn_dp_encoder_enable()
593 DRM_DEV_ERROR(dp->dev, "Could not get vop id, %d", ret); in cdn_dp_encoder_enable()
597 DRM_DEV_DEBUG_KMS(dp->dev, "vop %s output to cdn-dp\n", in cdn_dp_encoder_enable()
604 ret = cdn_dp_grf_write(dp, GRF_SOC_CON9, val); in cdn_dp_encoder_enable()
608 mutex_lock(&dp->lock); in cdn_dp_encoder_enable()
610 ret = cdn_dp_enable(dp); in cdn_dp_encoder_enable()
612 DRM_DEV_ERROR(dp->dev, "Failed to enable encoder %d\n", in cdn_dp_encoder_enable()
616 if (!cdn_dp_check_link_status(dp)) { in cdn_dp_encoder_enable()
617 ret = cdn_dp_train_link(dp); in cdn_dp_encoder_enable()
619 DRM_DEV_ERROR(dp->dev, "Failed link train %d\n", ret); in cdn_dp_encoder_enable()
624 ret = cdn_dp_set_video_status(dp, CONTROL_VIDEO_IDLE); in cdn_dp_encoder_enable()
626 DRM_DEV_ERROR(dp->dev, "Failed to idle video %d\n", ret); in cdn_dp_encoder_enable()
630 ret = cdn_dp_config_video(dp); in cdn_dp_encoder_enable()
632 DRM_DEV_ERROR(dp->dev, "Failed to config video %d\n", ret); in cdn_dp_encoder_enable()
636 ret = cdn_dp_set_video_status(dp, CONTROL_VIDEO_VALID); in cdn_dp_encoder_enable()
638 DRM_DEV_ERROR(dp->dev, "Failed to valid video %d\n", ret); in cdn_dp_encoder_enable()
642 mutex_unlock(&dp->lock); in cdn_dp_encoder_enable()
647 struct cdn_dp_device *dp = encoder_to_dp(encoder); in cdn_dp_encoder_disable() local
650 mutex_lock(&dp->lock); in cdn_dp_encoder_disable()
651 if (dp->active) { in cdn_dp_encoder_disable()
652 ret = cdn_dp_disable(dp); in cdn_dp_encoder_disable()
654 DRM_DEV_ERROR(dp->dev, "Failed to disable encoder %d\n", in cdn_dp_encoder_disable()
658 mutex_unlock(&dp->lock); in cdn_dp_encoder_disable()
669 if (!dp->connected && cdn_dp_connected_port(dp)) in cdn_dp_encoder_disable()
670 schedule_work(&dp->event_work); in cdn_dp_encoder_disable()
696 static int cdn_dp_parse_dt(struct cdn_dp_device *dp) in cdn_dp_parse_dt() argument
698 struct device *dev = dp->dev; in cdn_dp_parse_dt()
703 dp->grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf"); in cdn_dp_parse_dt()
704 if (IS_ERR(dp->grf)) { in cdn_dp_parse_dt()
706 return PTR_ERR(dp->grf); in cdn_dp_parse_dt()
710 dp->regs = devm_ioremap_resource(dev, res); in cdn_dp_parse_dt()
711 if (IS_ERR(dp->regs)) { in cdn_dp_parse_dt()
713 return PTR_ERR(dp->regs); in cdn_dp_parse_dt()
716 dp->core_clk = devm_clk_get(dev, "core-clk"); in cdn_dp_parse_dt()
717 if (IS_ERR(dp->core_clk)) { in cdn_dp_parse_dt()
719 return PTR_ERR(dp->core_clk); in cdn_dp_parse_dt()
722 dp->pclk = devm_clk_get(dev, "pclk"); in cdn_dp_parse_dt()
723 if (IS_ERR(dp->pclk)) { in cdn_dp_parse_dt()
725 return PTR_ERR(dp->pclk); in cdn_dp_parse_dt()
728 dp->spdif_clk = devm_clk_get(dev, "spdif"); in cdn_dp_parse_dt()
729 if (IS_ERR(dp->spdif_clk)) { in cdn_dp_parse_dt()
731 return PTR_ERR(dp->spdif_clk); in cdn_dp_parse_dt()
734 dp->grf_clk = devm_clk_get(dev, "grf"); in cdn_dp_parse_dt()
735 if (IS_ERR(dp->grf_clk)) { in cdn_dp_parse_dt()
737 return PTR_ERR(dp->grf_clk); in cdn_dp_parse_dt()
740 dp->spdif_rst = devm_reset_control_get(dev, "spdif"); in cdn_dp_parse_dt()
741 if (IS_ERR(dp->spdif_rst)) { in cdn_dp_parse_dt()
743 return PTR_ERR(dp->spdif_rst); in cdn_dp_parse_dt()
746 dp->dptx_rst = devm_reset_control_get(dev, "dptx"); in cdn_dp_parse_dt()
747 if (IS_ERR(dp->dptx_rst)) { in cdn_dp_parse_dt()
749 return PTR_ERR(dp->dptx_rst); in cdn_dp_parse_dt()
752 dp->core_rst = devm_reset_control_get(dev, "core"); in cdn_dp_parse_dt()
753 if (IS_ERR(dp->core_rst)) { in cdn_dp_parse_dt()
755 return PTR_ERR(dp->core_rst); in cdn_dp_parse_dt()
758 dp->apb_rst = devm_reset_control_get(dev, "apb"); in cdn_dp_parse_dt()
759 if (IS_ERR(dp->apb_rst)) { in cdn_dp_parse_dt()
761 return PTR_ERR(dp->apb_rst); in cdn_dp_parse_dt()
771 struct cdn_dp_device *dp = dev_get_drvdata(dev); in cdn_dp_audio_hw_params() local
779 mutex_lock(&dp->lock); in cdn_dp_audio_hw_params()
780 if (!dp->active) { in cdn_dp_audio_hw_params()
798 ret = cdn_dp_audio_config(dp, &audio); in cdn_dp_audio_hw_params()
800 dp->audio_info = audio; in cdn_dp_audio_hw_params()
803 mutex_unlock(&dp->lock); in cdn_dp_audio_hw_params()
809 struct cdn_dp_device *dp = dev_get_drvdata(dev); in cdn_dp_audio_shutdown() local
812 mutex_lock(&dp->lock); in cdn_dp_audio_shutdown()
813 if (!dp->active) in cdn_dp_audio_shutdown()
816 ret = cdn_dp_audio_stop(dp, &dp->audio_info); in cdn_dp_audio_shutdown()
818 dp->audio_info.format = AFMT_UNUSED; in cdn_dp_audio_shutdown()
820 mutex_unlock(&dp->lock); in cdn_dp_audio_shutdown()
826 struct cdn_dp_device *dp = dev_get_drvdata(dev); in cdn_dp_audio_digital_mute() local
829 mutex_lock(&dp->lock); in cdn_dp_audio_digital_mute()
830 if (!dp->active) { in cdn_dp_audio_digital_mute()
835 ret = cdn_dp_audio_mute(dp, enable); in cdn_dp_audio_digital_mute()
838 mutex_unlock(&dp->lock); in cdn_dp_audio_digital_mute()
845 struct cdn_dp_device *dp = dev_get_drvdata(dev); in cdn_dp_audio_get_eld() local
847 memcpy(buf, dp->connector.eld, min(sizeof(dp->connector.eld), len)); in cdn_dp_audio_get_eld()
859 static int cdn_dp_audio_codec_init(struct cdn_dp_device *dp, in cdn_dp_audio_codec_init() argument
869 dp->audio_pdev = platform_device_register_data( in cdn_dp_audio_codec_init()
873 return PTR_ERR_OR_ZERO(dp->audio_pdev); in cdn_dp_audio_codec_init()
876 static int cdn_dp_request_firmware(struct cdn_dp_device *dp) in cdn_dp_request_firmware() argument
882 WARN_ON(!mutex_is_locked(&dp->lock)); in cdn_dp_request_firmware()
884 if (dp->fw_loaded) in cdn_dp_request_firmware()
888 mutex_unlock(&dp->lock); in cdn_dp_request_firmware()
891 ret = request_firmware(&dp->fw, CDN_DP_FIRMWARE, dp->dev); in cdn_dp_request_firmware()
897 DRM_DEV_ERROR(dp->dev, in cdn_dp_request_firmware()
902 dp->fw_loaded = true; in cdn_dp_request_firmware()
907 DRM_DEV_ERROR(dp->dev, "Timed out trying to load firmware\n"); in cdn_dp_request_firmware()
910 mutex_lock(&dp->lock); in cdn_dp_request_firmware()
916 struct cdn_dp_device *dp = container_of(work, struct cdn_dp_device, in cdn_dp_pd_event_work() local
918 struct drm_connector *connector = &dp->connector; in cdn_dp_pd_event_work()
923 mutex_lock(&dp->lock); in cdn_dp_pd_event_work()
925 if (dp->suspended) in cdn_dp_pd_event_work()
928 ret = cdn_dp_request_firmware(dp); in cdn_dp_pd_event_work()
932 dp->connected = true; in cdn_dp_pd_event_work()
935 if (!cdn_dp_connected_port(dp)) { in cdn_dp_pd_event_work()
936 DRM_DEV_INFO(dp->dev, "Not connected. Disabling cdn\n"); in cdn_dp_pd_event_work()
937 dp->connected = false; in cdn_dp_pd_event_work()
940 } else if (!dp->active) { in cdn_dp_pd_event_work()
941 DRM_DEV_INFO(dp->dev, "Connected, not enabled. Enabling cdn\n"); in cdn_dp_pd_event_work()
942 ret = cdn_dp_enable(dp); in cdn_dp_pd_event_work()
944 DRM_DEV_ERROR(dp->dev, "Enable dp failed %d\n", ret); in cdn_dp_pd_event_work()
945 dp->connected = false; in cdn_dp_pd_event_work()
949 } else if (!cdn_dp_check_sink_connection(dp)) { in cdn_dp_pd_event_work()
950 DRM_DEV_INFO(dp->dev, "Connected without sink. Assert hpd\n"); in cdn_dp_pd_event_work()
951 dp->connected = false; in cdn_dp_pd_event_work()
954 } else if (!cdn_dp_check_link_status(dp)) { in cdn_dp_pd_event_work()
955 unsigned int rate = dp->link.rate; in cdn_dp_pd_event_work()
956 unsigned int lanes = dp->link.num_lanes; in cdn_dp_pd_event_work()
957 struct drm_display_mode *mode = &dp->mode; in cdn_dp_pd_event_work()
959 DRM_DEV_INFO(dp->dev, "Connected with sink. Re-train link\n"); in cdn_dp_pd_event_work()
960 ret = cdn_dp_train_link(dp); in cdn_dp_pd_event_work()
962 dp->connected = false; in cdn_dp_pd_event_work()
963 DRM_DEV_ERROR(dp->dev, "Train link failed %d\n", ret); in cdn_dp_pd_event_work()
969 (rate != dp->link.rate || lanes != dp->link.num_lanes)) { in cdn_dp_pd_event_work()
970 ret = cdn_dp_config_video(dp); in cdn_dp_pd_event_work()
972 dp->connected = false; in cdn_dp_pd_event_work()
973 DRM_DEV_ERROR(dp->dev, in cdn_dp_pd_event_work()
981 mutex_unlock(&dp->lock); in cdn_dp_pd_event_work()
986 drm_kms_helper_hotplug_event(dp->drm_dev); in cdn_dp_pd_event_work()
994 struct cdn_dp_device *dp = port->dp; in cdn_dp_pd_event() local
1001 schedule_work(&dp->event_work); in cdn_dp_pd_event()
1008 struct cdn_dp_device *dp = dev_get_drvdata(dev); in cdn_dp_bind() local
1015 ret = cdn_dp_parse_dt(dp); in cdn_dp_bind()
1019 dp->drm_dev = drm_dev; in cdn_dp_bind()
1020 dp->connected = false; in cdn_dp_bind()
1021 dp->active = false; in cdn_dp_bind()
1022 dp->active_port = -1; in cdn_dp_bind()
1023 dp->fw_loaded = false; in cdn_dp_bind()
1025 INIT_WORK(&dp->event_work, cdn_dp_pd_event_work); in cdn_dp_bind()
1027 encoder = &dp->encoder; in cdn_dp_bind()
1042 connector = &dp->connector; in cdn_dp_bind()
1062 for (i = 0; i < dp->ports; i++) { in cdn_dp_bind()
1063 port = dp->port[i]; in cdn_dp_bind()
1066 ret = devm_extcon_register_notifier(dp->dev, port->extcon, in cdn_dp_bind()
1078 schedule_work(&dp->event_work); in cdn_dp_bind()
1091 struct cdn_dp_device *dp = dev_get_drvdata(dev); in cdn_dp_unbind() local
1092 struct drm_encoder *encoder = &dp->encoder; in cdn_dp_unbind()
1093 struct drm_connector *connector = &dp->connector; in cdn_dp_unbind()
1095 cancel_work_sync(&dp->event_work); in cdn_dp_unbind()
1101 if (dp->fw_loaded) in cdn_dp_unbind()
1102 release_firmware(dp->fw); in cdn_dp_unbind()
1103 kfree(dp->edid); in cdn_dp_unbind()
1104 dp->edid = NULL; in cdn_dp_unbind()
1114 struct cdn_dp_device *dp = dev_get_drvdata(dev); in cdn_dp_suspend() local
1117 mutex_lock(&dp->lock); in cdn_dp_suspend()
1118 if (dp->active) in cdn_dp_suspend()
1119 ret = cdn_dp_disable(dp); in cdn_dp_suspend()
1120 dp->suspended = true; in cdn_dp_suspend()
1121 mutex_unlock(&dp->lock); in cdn_dp_suspend()
1128 struct cdn_dp_device *dp = dev_get_drvdata(dev); in cdn_dp_resume() local
1130 mutex_lock(&dp->lock); in cdn_dp_resume()
1131 dp->suspended = false; in cdn_dp_resume()
1132 if (dp->fw_loaded) in cdn_dp_resume()
1133 schedule_work(&dp->event_work); in cdn_dp_resume()
1134 mutex_unlock(&dp->lock); in cdn_dp_resume()
1145 struct cdn_dp_device *dp; in cdn_dp_probe() local
1150 dp = devm_kzalloc(dev, sizeof(*dp), GFP_KERNEL); in cdn_dp_probe()
1151 if (!dp) in cdn_dp_probe()
1153 dp->dev = dev; in cdn_dp_probe()
1175 port->dp = dp; in cdn_dp_probe()
1177 dp->port[dp->ports++] = port; in cdn_dp_probe()
1180 if (!dp->ports) { in cdn_dp_probe()
1185 mutex_init(&dp->lock); in cdn_dp_probe()
1186 dev_set_drvdata(dev, dp); in cdn_dp_probe()
1188 cdn_dp_audio_codec_init(dp, dev); in cdn_dp_probe()
1195 struct cdn_dp_device *dp = platform_get_drvdata(pdev); in cdn_dp_remove() local
1197 platform_device_unregister(dp->audio_pdev); in cdn_dp_remove()
1198 cdn_dp_suspend(dp->dev); in cdn_dp_remove()
1206 struct cdn_dp_device *dp = platform_get_drvdata(pdev); in cdn_dp_shutdown() local
1208 cdn_dp_suspend(dp->dev); in cdn_dp_shutdown()