diff --git a/linux-5.10/yangfan_patch/drivers.patch b/linux-5.10/yangfan_patch/drivers.patch index 6f1bc4291ef9d5f0a659b0aad228634115398a36..54940f6c25160694bf0f2427d43fcf74d8e8c3ae 100644 --- a/linux-5.10/yangfan_patch/drivers.patch +++ b/linux-5.10/yangfan_patch/drivers.patch @@ -7326,7 +7326,7 @@ index 2b3aff104..519e916ed 100644 obj-$(CONFIG_DRM_SII902X) += sii902x.o obj-$(CONFIG_DRM_SII9234) += sii9234.o diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c -index 9755672ca..1965fb1bd +index e8baa0745..cd5def8d7 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -8,11 +8,13 @@ @@ -7817,7 +7817,7 @@ index 9755672ca..1965fb1bd { struct analogix_dp_device *dp = arg; - enum dp_irq_type irq_type; -- + - irq_type = analogix_dp_get_irq_type(dp); - if (irq_type & DP_IRQ_TYPE_HP_CABLE_IN || - irq_type & DP_IRQ_TYPE_HP_CABLE_OUT) { @@ -7825,7 +7825,7 @@ index 9755672ca..1965fb1bd - if (dp->drm_dev) - drm_helper_hpd_irq_event(dp->drm_dev); - } - +- - if (irq_type != DP_IRQ_TYPE_UNKNOWN) { - analogix_dp_clear_hotplug_interrupts(dp); - analogix_dp_unmute_hpd_interrupt(dp); @@ -7897,14 +7897,14 @@ index 9755672ca..1965fb1bd + if (ret < 0) { + dev_err(dp->dev, "failed to read dpcd caps: %d\n", ret); + return ret; -+ } -+ + } + + ret = analogix_dp_link_power_up(dp); + if (ret) { + dev_err(dp->dev, "failed to power up link: %d\n", ret); + return ret; - } - ++ } ++ + if (device_property_read_bool(dp->dev, "panel-self-test")) + return drm_dp_dpcd_writeb(&dp->aux, DP_EDP_CONFIGURATION_SET, + DP_PANEL_SELF_TEST_ENABLE); @@ -8808,14 +8808,14 @@ index 9755672ca..1965fb1bd pm_runtime_disable(dp->dev); return ret; -@@ -1842,34 +2102,23 @@ EXPORT_SYMBOL_GPL(analogix_dp_bind); +@@ -1842,48 +2102,50 @@ EXPORT_SYMBOL_GPL(analogix_dp_bind); void analogix_dp_unbind(struct analogix_dp_device *dp) { - analogix_dp_bridge_disable(dp->bridge); + disable_irq(dp->irq); dp->connector.funcs->destroy(&dp->connector); -- + - if (dp->plat_data->panel) { - if (drm_panel_unprepare(dp->plat_data->panel)) - DRM_ERROR("failed to turnoff the panel\n"); @@ -8838,56 +8838,45 @@ index 9755672ca..1965fb1bd int analogix_dp_suspend(struct analogix_dp_device *dp) { - clk_disable_unprepare(dp->clock); -- -- if (dp->plat_data->panel) { -- if (drm_panel_unprepare(dp->plat_data->panel)) -- DRM_ERROR("failed to turnoff the panel\n"); -- } + pm_runtime_force_suspend(dp->dev); - return 0; } -@@ -1877,25 +2126,26 @@ EXPORT_SYMBOL_GPL(analogix_dp_suspend); + EXPORT_SYMBOL_GPL(analogix_dp_suspend); int analogix_dp_resume(struct analogix_dp_device *dp) { - int ret; -+ pm_runtime_force_resume(dp->dev); -+ analogix_dp_init(dp); - +- - ret = clk_prepare_enable(dp->clock); - if (ret < 0) { - DRM_ERROR("Failed to prepare_enable the clock clk [%d]\n", ret); - return ret; - } -+ return 0; -+} -+EXPORT_SYMBOL_GPL(analogix_dp_resume); - -- if (dp->plat_data->panel) { -- if (drm_panel_prepare(dp->plat_data->panel)) { -- DRM_ERROR("failed to setup the panel\n"); -- return -EBUSY; -- } -- } -+int analogix_dp_runtime_suspend(struct analogix_dp_device *dp) -+{ -+ clk_bulk_disable_unprepare(dp->nr_clks, dp->clks); ++ pm_runtime_force_resume(dp->dev); ++ analogix_dp_init(dp); return 0; } --EXPORT_SYMBOL_GPL(analogix_dp_resume); + EXPORT_SYMBOL_GPL(analogix_dp_resume); -#endif -+EXPORT_SYMBOL_GPL(analogix_dp_runtime_suspend); + ++int analogix_dp_runtime_suspend(struct analogix_dp_device *dp) ++{ ++ clk_bulk_disable_unprepare(dp->nr_clks, dp->clks); ++ ++ return 0; ++} + +int analogix_dp_runtime_resume(struct analogix_dp_device *dp) +{ + return clk_bulk_prepare_enable(dp->nr_clks, dp->clks); +} ++ +EXPORT_SYMBOL_GPL(analogix_dp_runtime_resume); - int analogix_dp_start_crc(struct drm_connector *connector) { + struct analogix_dp_device *dp = to_dp(connector); + diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h index c051502d7..ebc9b51e3 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h