Loading arch/arm64/boot/dts/qcom/sm8150-sde-display.dtsi +16 −0 Original line number Diff line number Diff line Loading @@ -605,6 +605,14 @@ &dsi_nt35695b_truly_fhd_cmd { qcom,ulps-enabled; qcom,esd-check-enabled; qcom,mdss-dsi-panel-status-check-mode = "reg_read"; qcom,mdss-dsi-panel-status-command = [06 01 00 01 00 00 01 0a]; qcom,mdss-dsi-panel-status-command-state = "dsi_hs_mode"; qcom,mdss-dsi-panel-status-value = <0x9c>; qcom,mdss-dsi-panel-on-check-value = <0x9c>; qcom,mdss-dsi-panel-status-read-length = <1>; qcom,mdss-dsi-display-timings { timing@0 { qcom,mdss-dsi-panel-phy-timings = [00 1e 08 07 24 22 Loading @@ -628,6 +636,14 @@ }; &dsi_sharp_1080_cmd { qcom,esd-check-enabled; qcom,mdss-dsi-panel-status-check-mode = "reg_read"; qcom,mdss-dsi-panel-status-command = [06 01 00 01 00 00 01 0a]; qcom,mdss-dsi-panel-status-command-state = "dsi_hs_mode"; qcom,mdss-dsi-panel-status-value = <0x9c>; qcom,mdss-dsi-panel-on-check-value = <0x9c>; qcom,mdss-dsi-panel-status-read-length = <1>; qcom,mdss-dsi-display-timings { timing@0{ qcom,mdss-dsi-panel-phy-timings = [00 1A 06 06 22 20 07 Loading arch/arm64/boot/dts/qcom/sm8150-sde.dtsi +3 −2 Original line number Diff line number Diff line Loading @@ -33,8 +33,9 @@ clock-names = "gcc_iface", "gcc_bus", "gcc_nrt_bus", "iface_clk", "core_clk", "vsync_clk", "lut_clk", "rot_clk"; clock-rate = <0 0 0 0 300000000 19200000 300000000>; clock-max-rate = <0 0 0 0 460000000 19200000 460000000>; clock-rate = <0 0 0 0 300000000 19200000 300000000 19200000>; clock-max-rate = <0 0 0 0 460000000 19200000 460000000 460000000>; sde-vdd-supply = <&mdss_core_gdsc>; mmcx-supply = <&VDD_MMCX_LEVEL>; Loading arch/arm64/boot/dts/qcom/sm8150-v2.dtsi +2 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ &mdss_mdp { qcom,fullsize-va-map; qcom,sde-min-core-ib-kbps = <0>; qcom,sde-min-llcc-ib-kbps = <0>; }; &mdss_rotator { Loading drivers/clk/qcom/dispcc-sm8150.c +1 −1 Original line number Diff line number Diff line Loading @@ -1593,7 +1593,7 @@ static int disp_cc_sm8150_probe(struct platform_device *pdev) clk_trion_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config); /* Enable clock gating for DSI and MDP clocks */ regmap_update_bits(regmap, DISP_CC_MISC_CMD, 0x670, 0x670); regmap_update_bits(regmap, DISP_CC_MISC_CMD, 0x10, 0x10); ret = qcom_cc_really_probe(pdev, &disp_cc_sm8150_desc, regmap); if (ret) { Loading drivers/gpu/drm/msm/dp/dp_audio.c +61 −37 Original line number Diff line number Diff line Loading @@ -39,8 +39,11 @@ struct dp_audio_private { struct completion hpd_comp; struct workqueue_struct *notify_workqueue; struct delayed_work notify_delayed_work; struct mutex ops_lock; struct dp_audio dp_audio; atomic_t acked; }; static u32 dp_audio_get_header(struct dp_catalog_audio *catalog, Loading Loading @@ -416,14 +419,14 @@ static int dp_audio_info_setup(struct platform_device *pdev, return rc; } mutex_lock(&audio->dp_audio.ops_lock); mutex_lock(&audio->ops_lock); audio->channels = params->num_of_channels; if (audio->panel->stream_id >= DP_STREAM_MAX) { pr_err("invalid stream id: %d\n", audio->panel->stream_id); rc = -EINVAL; mutex_unlock(&audio->dp_audio.ops_lock); mutex_unlock(&audio->ops_lock); return rc; } Loading @@ -432,7 +435,7 @@ static int dp_audio_info_setup(struct platform_device *pdev, dp_audio_safe_to_exit_level(audio); dp_audio_enable(audio, true); mutex_unlock(&audio->dp_audio.ops_lock); mutex_unlock(&audio->ops_lock); return rc; } Loading Loading @@ -506,10 +509,11 @@ static void dp_audio_teardown_done(struct platform_device *pdev) if (IS_ERR(audio)) return; mutex_lock(&audio->dp_audio.ops_lock); mutex_lock(&audio->ops_lock); dp_audio_enable(audio, false); mutex_unlock(&audio->dp_audio.ops_lock); mutex_unlock(&audio->ops_lock); atomic_set(&audio->acked, 1); complete_all(&audio->hpd_comp); pr_debug("audio engine disabled\n"); Loading Loading @@ -542,8 +546,10 @@ static int dp_audio_ack_done(struct platform_device *pdev, u32 ack) pr_debug("acknowledging audio (%d)\n", ack_hpd); if (!audio->engine_on) if (!audio->engine_on) { atomic_set(&audio->acked, 1); complete_all(&audio->hpd_comp); } end: return rc; } Loading @@ -566,16 +572,13 @@ static int dp_audio_codec_ready(struct platform_device *pdev) return rc; } static int dp_audio_register_ext_disp(struct dp_audio *dp_audio) static int dp_audio_register_ext_disp(struct dp_audio_private *audio) { int rc = 0; struct device_node *pd = NULL; const char *phandle = "qcom,ext-disp"; struct msm_ext_disp_init_data *ext; struct msm_ext_disp_audio_codec_ops *ops; struct dp_audio_private *audio; audio = container_of(dp_audio, struct dp_audio_private, dp_audio); ext = &audio->ext_audio_data; ops = &ext->codec_ops; Loading Loading @@ -624,15 +627,12 @@ static int dp_audio_register_ext_disp(struct dp_audio *dp_audio) return rc; } static int dp_audio_deregister_ext_disp(struct dp_audio *dp_audio) static int dp_audio_deregister_ext_disp(struct dp_audio_private *audio) { int rc = 0; struct device_node *pd = NULL; const char *phandle = "qcom,ext-disp"; struct msm_ext_disp_init_data *ext; struct dp_audio_private *audio; audio = container_of(dp_audio, struct dp_audio_private, dp_audio); ext = &audio->ext_audio_data; Loading Loading @@ -669,9 +669,14 @@ static int dp_audio_notify(struct dp_audio_private *audio, u32 state) int rc = 0; struct msm_ext_disp_init_data *ext = &audio->ext_audio_data; if (!ext->intf_ops.audio_notify) atomic_set(&audio->acked, 0); if (!ext->intf_ops.audio_notify) { pr_err("audio notify not defined\n"); goto end; } reinit_completion(&audio->hpd_comp); rc = ext->intf_ops.audio_notify(audio->ext_pdev, &ext->codec, state); if (rc) { Loading @@ -679,8 +684,10 @@ static int dp_audio_notify(struct dp_audio_private *audio, u32 state) goto end; } reinit_completion(&audio->hpd_comp); rc = wait_for_completion_timeout(&audio->hpd_comp, HZ * 5); if (atomic_read(&audio->acked)) goto end; rc = wait_for_completion_timeout(&audio->hpd_comp, HZ * 4); if (!rc) { pr_err("timeout. state=%d err=%d\n", state, rc); rc = -ETIMEDOUT; Loading @@ -692,6 +699,30 @@ static int dp_audio_notify(struct dp_audio_private *audio, u32 state) return rc; } static int dp_audio_config(struct dp_audio_private *audio, u32 state) { int rc = 0; struct msm_ext_disp_init_data *ext = &audio->ext_audio_data; if (!ext || !ext->intf_ops.audio_config) { pr_err("audio_config not defined\n"); goto end; } /* * DP Audio sets default STREAM_0 only, other streams are * set by audio driver based on the hardware/software support. */ if (audio->panel->stream_id == DP_STREAM_0) { rc = ext->intf_ops.audio_config(audio->ext_pdev, &ext->codec, state); if (rc) pr_err("failed to config audio, err=%d\n", rc); } end: return rc; } static int dp_audio_on(struct dp_audio *dp_audio) { int rc = 0; Loading @@ -713,15 +744,9 @@ static int dp_audio_on(struct dp_audio *dp_audio) audio->session_on = true; if (ext->intf_ops.audio_config) { rc = ext->intf_ops.audio_config(audio->ext_pdev, &ext->codec, EXT_DISPLAY_CABLE_CONNECT); if (rc) { pr_err("failed to config audio, err=%d\n", rc); rc = dp_audio_config(audio, EXT_DISPLAY_CABLE_CONNECT); if (rc) goto end; } } rc = dp_audio_notify(audio, EXT_DISPLAY_CABLE_CONNECT); if (rc) Loading Loading @@ -757,13 +782,7 @@ static int dp_audio_off(struct dp_audio *dp_audio) pr_debug("success\n"); end: if (ext->intf_ops.audio_config) { rc = ext->intf_ops.audio_config(audio->ext_pdev, &ext->codec, EXT_DISPLAY_CABLE_DISCONNECT); if (rc) pr_err("failed to config audio, err=%d\n", rc); } dp_audio_config(audio, EXT_DISPLAY_CABLE_DISCONNECT); audio->session_on = false; audio->engine_on = false; Loading Loading @@ -830,17 +849,19 @@ struct dp_audio *dp_audio_get(struct platform_device *pdev, audio->panel = panel; audio->catalog = catalog; atomic_set(&audio->acked, 0); dp_audio = &audio->dp_audio; mutex_init(&dp_audio->ops_lock); mutex_init(&audio->ops_lock); dp_audio->on = dp_audio_on; dp_audio->off = dp_audio_off; dp_audio->register_ext_disp = dp_audio_register_ext_disp; dp_audio->deregister_ext_disp = dp_audio_deregister_ext_disp; catalog->init(catalog); dp_audio_register_ext_disp(audio); return dp_audio; error_notify_workqueue: Loading @@ -857,7 +878,10 @@ void dp_audio_put(struct dp_audio *dp_audio) return; audio = container_of(dp_audio, struct dp_audio_private, dp_audio); mutex_destroy(&dp_audio->ops_lock); dp_audio_deregister_ext_disp(audio); mutex_destroy(&audio->ops_lock); dp_audio_destroy_notify_workqueue(audio); Loading Loading
arch/arm64/boot/dts/qcom/sm8150-sde-display.dtsi +16 −0 Original line number Diff line number Diff line Loading @@ -605,6 +605,14 @@ &dsi_nt35695b_truly_fhd_cmd { qcom,ulps-enabled; qcom,esd-check-enabled; qcom,mdss-dsi-panel-status-check-mode = "reg_read"; qcom,mdss-dsi-panel-status-command = [06 01 00 01 00 00 01 0a]; qcom,mdss-dsi-panel-status-command-state = "dsi_hs_mode"; qcom,mdss-dsi-panel-status-value = <0x9c>; qcom,mdss-dsi-panel-on-check-value = <0x9c>; qcom,mdss-dsi-panel-status-read-length = <1>; qcom,mdss-dsi-display-timings { timing@0 { qcom,mdss-dsi-panel-phy-timings = [00 1e 08 07 24 22 Loading @@ -628,6 +636,14 @@ }; &dsi_sharp_1080_cmd { qcom,esd-check-enabled; qcom,mdss-dsi-panel-status-check-mode = "reg_read"; qcom,mdss-dsi-panel-status-command = [06 01 00 01 00 00 01 0a]; qcom,mdss-dsi-panel-status-command-state = "dsi_hs_mode"; qcom,mdss-dsi-panel-status-value = <0x9c>; qcom,mdss-dsi-panel-on-check-value = <0x9c>; qcom,mdss-dsi-panel-status-read-length = <1>; qcom,mdss-dsi-display-timings { timing@0{ qcom,mdss-dsi-panel-phy-timings = [00 1A 06 06 22 20 07 Loading
arch/arm64/boot/dts/qcom/sm8150-sde.dtsi +3 −2 Original line number Diff line number Diff line Loading @@ -33,8 +33,9 @@ clock-names = "gcc_iface", "gcc_bus", "gcc_nrt_bus", "iface_clk", "core_clk", "vsync_clk", "lut_clk", "rot_clk"; clock-rate = <0 0 0 0 300000000 19200000 300000000>; clock-max-rate = <0 0 0 0 460000000 19200000 460000000>; clock-rate = <0 0 0 0 300000000 19200000 300000000 19200000>; clock-max-rate = <0 0 0 0 460000000 19200000 460000000 460000000>; sde-vdd-supply = <&mdss_core_gdsc>; mmcx-supply = <&VDD_MMCX_LEVEL>; Loading
arch/arm64/boot/dts/qcom/sm8150-v2.dtsi +2 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ &mdss_mdp { qcom,fullsize-va-map; qcom,sde-min-core-ib-kbps = <0>; qcom,sde-min-llcc-ib-kbps = <0>; }; &mdss_rotator { Loading
drivers/clk/qcom/dispcc-sm8150.c +1 −1 Original line number Diff line number Diff line Loading @@ -1593,7 +1593,7 @@ static int disp_cc_sm8150_probe(struct platform_device *pdev) clk_trion_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config); /* Enable clock gating for DSI and MDP clocks */ regmap_update_bits(regmap, DISP_CC_MISC_CMD, 0x670, 0x670); regmap_update_bits(regmap, DISP_CC_MISC_CMD, 0x10, 0x10); ret = qcom_cc_really_probe(pdev, &disp_cc_sm8150_desc, regmap); if (ret) { Loading
drivers/gpu/drm/msm/dp/dp_audio.c +61 −37 Original line number Diff line number Diff line Loading @@ -39,8 +39,11 @@ struct dp_audio_private { struct completion hpd_comp; struct workqueue_struct *notify_workqueue; struct delayed_work notify_delayed_work; struct mutex ops_lock; struct dp_audio dp_audio; atomic_t acked; }; static u32 dp_audio_get_header(struct dp_catalog_audio *catalog, Loading Loading @@ -416,14 +419,14 @@ static int dp_audio_info_setup(struct platform_device *pdev, return rc; } mutex_lock(&audio->dp_audio.ops_lock); mutex_lock(&audio->ops_lock); audio->channels = params->num_of_channels; if (audio->panel->stream_id >= DP_STREAM_MAX) { pr_err("invalid stream id: %d\n", audio->panel->stream_id); rc = -EINVAL; mutex_unlock(&audio->dp_audio.ops_lock); mutex_unlock(&audio->ops_lock); return rc; } Loading @@ -432,7 +435,7 @@ static int dp_audio_info_setup(struct platform_device *pdev, dp_audio_safe_to_exit_level(audio); dp_audio_enable(audio, true); mutex_unlock(&audio->dp_audio.ops_lock); mutex_unlock(&audio->ops_lock); return rc; } Loading Loading @@ -506,10 +509,11 @@ static void dp_audio_teardown_done(struct platform_device *pdev) if (IS_ERR(audio)) return; mutex_lock(&audio->dp_audio.ops_lock); mutex_lock(&audio->ops_lock); dp_audio_enable(audio, false); mutex_unlock(&audio->dp_audio.ops_lock); mutex_unlock(&audio->ops_lock); atomic_set(&audio->acked, 1); complete_all(&audio->hpd_comp); pr_debug("audio engine disabled\n"); Loading Loading @@ -542,8 +546,10 @@ static int dp_audio_ack_done(struct platform_device *pdev, u32 ack) pr_debug("acknowledging audio (%d)\n", ack_hpd); if (!audio->engine_on) if (!audio->engine_on) { atomic_set(&audio->acked, 1); complete_all(&audio->hpd_comp); } end: return rc; } Loading @@ -566,16 +572,13 @@ static int dp_audio_codec_ready(struct platform_device *pdev) return rc; } static int dp_audio_register_ext_disp(struct dp_audio *dp_audio) static int dp_audio_register_ext_disp(struct dp_audio_private *audio) { int rc = 0; struct device_node *pd = NULL; const char *phandle = "qcom,ext-disp"; struct msm_ext_disp_init_data *ext; struct msm_ext_disp_audio_codec_ops *ops; struct dp_audio_private *audio; audio = container_of(dp_audio, struct dp_audio_private, dp_audio); ext = &audio->ext_audio_data; ops = &ext->codec_ops; Loading Loading @@ -624,15 +627,12 @@ static int dp_audio_register_ext_disp(struct dp_audio *dp_audio) return rc; } static int dp_audio_deregister_ext_disp(struct dp_audio *dp_audio) static int dp_audio_deregister_ext_disp(struct dp_audio_private *audio) { int rc = 0; struct device_node *pd = NULL; const char *phandle = "qcom,ext-disp"; struct msm_ext_disp_init_data *ext; struct dp_audio_private *audio; audio = container_of(dp_audio, struct dp_audio_private, dp_audio); ext = &audio->ext_audio_data; Loading Loading @@ -669,9 +669,14 @@ static int dp_audio_notify(struct dp_audio_private *audio, u32 state) int rc = 0; struct msm_ext_disp_init_data *ext = &audio->ext_audio_data; if (!ext->intf_ops.audio_notify) atomic_set(&audio->acked, 0); if (!ext->intf_ops.audio_notify) { pr_err("audio notify not defined\n"); goto end; } reinit_completion(&audio->hpd_comp); rc = ext->intf_ops.audio_notify(audio->ext_pdev, &ext->codec, state); if (rc) { Loading @@ -679,8 +684,10 @@ static int dp_audio_notify(struct dp_audio_private *audio, u32 state) goto end; } reinit_completion(&audio->hpd_comp); rc = wait_for_completion_timeout(&audio->hpd_comp, HZ * 5); if (atomic_read(&audio->acked)) goto end; rc = wait_for_completion_timeout(&audio->hpd_comp, HZ * 4); if (!rc) { pr_err("timeout. state=%d err=%d\n", state, rc); rc = -ETIMEDOUT; Loading @@ -692,6 +699,30 @@ static int dp_audio_notify(struct dp_audio_private *audio, u32 state) return rc; } static int dp_audio_config(struct dp_audio_private *audio, u32 state) { int rc = 0; struct msm_ext_disp_init_data *ext = &audio->ext_audio_data; if (!ext || !ext->intf_ops.audio_config) { pr_err("audio_config not defined\n"); goto end; } /* * DP Audio sets default STREAM_0 only, other streams are * set by audio driver based on the hardware/software support. */ if (audio->panel->stream_id == DP_STREAM_0) { rc = ext->intf_ops.audio_config(audio->ext_pdev, &ext->codec, state); if (rc) pr_err("failed to config audio, err=%d\n", rc); } end: return rc; } static int dp_audio_on(struct dp_audio *dp_audio) { int rc = 0; Loading @@ -713,15 +744,9 @@ static int dp_audio_on(struct dp_audio *dp_audio) audio->session_on = true; if (ext->intf_ops.audio_config) { rc = ext->intf_ops.audio_config(audio->ext_pdev, &ext->codec, EXT_DISPLAY_CABLE_CONNECT); if (rc) { pr_err("failed to config audio, err=%d\n", rc); rc = dp_audio_config(audio, EXT_DISPLAY_CABLE_CONNECT); if (rc) goto end; } } rc = dp_audio_notify(audio, EXT_DISPLAY_CABLE_CONNECT); if (rc) Loading Loading @@ -757,13 +782,7 @@ static int dp_audio_off(struct dp_audio *dp_audio) pr_debug("success\n"); end: if (ext->intf_ops.audio_config) { rc = ext->intf_ops.audio_config(audio->ext_pdev, &ext->codec, EXT_DISPLAY_CABLE_DISCONNECT); if (rc) pr_err("failed to config audio, err=%d\n", rc); } dp_audio_config(audio, EXT_DISPLAY_CABLE_DISCONNECT); audio->session_on = false; audio->engine_on = false; Loading Loading @@ -830,17 +849,19 @@ struct dp_audio *dp_audio_get(struct platform_device *pdev, audio->panel = panel; audio->catalog = catalog; atomic_set(&audio->acked, 0); dp_audio = &audio->dp_audio; mutex_init(&dp_audio->ops_lock); mutex_init(&audio->ops_lock); dp_audio->on = dp_audio_on; dp_audio->off = dp_audio_off; dp_audio->register_ext_disp = dp_audio_register_ext_disp; dp_audio->deregister_ext_disp = dp_audio_deregister_ext_disp; catalog->init(catalog); dp_audio_register_ext_disp(audio); return dp_audio; error_notify_workqueue: Loading @@ -857,7 +878,10 @@ void dp_audio_put(struct dp_audio *dp_audio) return; audio = container_of(dp_audio, struct dp_audio_private, dp_audio); mutex_destroy(&dp_audio->ops_lock); dp_audio_deregister_ext_disp(audio); mutex_destroy(&audio->ops_lock); dp_audio_destroy_notify_workqueue(audio); Loading