mirror of
				https://github.com/Ysurac/openmptcprouter.git
				synced 2025-03-09 15:40:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			123 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 41e229c3c11c78088d7bbc0f680d00fa79116df6 Mon Sep 17 00:00:00 2001
 | |
| From: Dave Stevenson <dave.stevenson@raspberrypi.com>
 | |
| Date: Wed, 15 Dec 2021 17:44:49 +0000
 | |
| Subject: [PATCH 030/726] drm/vc4: Remove splitting the bridge chain from the
 | |
|  driver.
 | |
| 
 | |
| Splitting the bridge chain fails for atomic bridges as the
 | |
| framework can't add the relevant state in
 | |
| drm_atomic_add_encoder_bridges.
 | |
| The chain was split because we needed to power up before
 | |
| calling pre_enable, but that is now done in mode_set, and will
 | |
| move into the framework.
 | |
| 
 | |
| Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
 | |
| ---
 | |
|  drivers/gpu/drm/vc4/vc4_dsi.c | 47 -----------------------------------
 | |
|  1 file changed, 47 deletions(-)
 | |
| 
 | |
| diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
 | |
| index c1bdd903f1ad..9109bee6c7d2 100644
 | |
| --- a/drivers/gpu/drm/vc4/vc4_dsi.c
 | |
| +++ b/drivers/gpu/drm/vc4/vc4_dsi.c
 | |
| @@ -557,7 +557,6 @@ struct vc4_dsi {
 | |
|  	struct platform_device *pdev;
 | |
|  
 | |
|  	struct drm_bridge *out_bridge;
 | |
| -	struct list_head bridge_chain;
 | |
|  
 | |
|  	void __iomem *regs;
 | |
|  
 | |
| @@ -794,23 +793,9 @@ static void vc4_dsi_encoder_disable(struct drm_encoder *encoder)
 | |
|  {
 | |
|  	struct vc4_dsi *dsi = to_vc4_dsi(encoder);
 | |
|  	struct device *dev = &dsi->pdev->dev;
 | |
| -	struct drm_bridge *iter;
 | |
| -
 | |
| -	list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
 | |
| -		if (iter->funcs->disable)
 | |
| -			iter->funcs->disable(iter);
 | |
| -
 | |
| -		if (iter == dsi->out_bridge)
 | |
| -			break;
 | |
| -	}
 | |
|  
 | |
|  	vc4_dsi_ulps(dsi, true);
 | |
|  
 | |
| -	list_for_each_entry_from(iter, &dsi->bridge_chain, chain_node) {
 | |
| -		if (iter->funcs->post_disable)
 | |
| -			iter->funcs->post_disable(iter);
 | |
| -	}
 | |
| -
 | |
|  	clk_disable_unprepare(dsi->pll_phy_clock);
 | |
|  	clk_disable_unprepare(dsi->escape_clock);
 | |
|  	clk_disable_unprepare(dsi->pixel_clock);
 | |
| @@ -1112,12 +1097,6 @@ static void vc4_dsi_encoder_enable(struct drm_encoder *encoder)
 | |
|  	struct vc4_dsi_encoder *vc4_encoder = to_vc4_dsi_encoder(encoder);
 | |
|  	struct vc4_dsi *dsi = vc4_encoder->dsi;
 | |
|  	bool debug_dump_regs = false;
 | |
| -	struct drm_bridge *iter;
 | |
| -
 | |
| -	list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
 | |
| -		if (iter->funcs->pre_enable)
 | |
| -			iter->funcs->pre_enable(iter);
 | |
| -	}
 | |
|  
 | |
|  	if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) {
 | |
|  		DSI_PORT_WRITE(DISP0_CTRL,
 | |
| @@ -1134,11 +1113,6 @@ static void vc4_dsi_encoder_enable(struct drm_encoder *encoder)
 | |
|  			       DSI_DISP0_ENABLE);
 | |
|  	}
 | |
|  
 | |
| -	list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
 | |
| -		if (iter->funcs->enable)
 | |
| -			iter->funcs->enable(iter);
 | |
| -	}
 | |
| -
 | |
|  	if (debug_dump_regs) {
 | |
|  		struct drm_printer p = drm_info_printer(&dsi->pdev->dev);
 | |
|  		dev_info(&dsi->pdev->dev, "DSI regs after:\n");
 | |
| @@ -1626,7 +1600,6 @@ static int vc4_dsi_bind(struct device *dev, struct device *master, void *data)
 | |
|  
 | |
|  	dsi->variant = of_device_get_match_data(dev);
 | |
|  
 | |
| -	INIT_LIST_HEAD(&dsi->bridge_chain);
 | |
|  	dsi->encoder.type = dsi->variant->port ?
 | |
|  		VC4_ENCODER_TYPE_DSI1 : VC4_ENCODER_TYPE_DSI0;
 | |
|  
 | |
| @@ -1763,32 +1736,12 @@ static int vc4_dsi_bind(struct device *dev, struct device *master, void *data)
 | |
|  	ret = drm_bridge_attach(encoder, dsi->out_bridge, NULL, 0);
 | |
|  	if (ret)
 | |
|  		return ret;
 | |
| -	/* Disable the atomic helper calls into the bridge.  We
 | |
| -	 * manually call the bridge pre_enable / enable / etc. calls
 | |
| -	 * from our driver, since we need to sequence them within the
 | |
| -	 * encoder's enable/disable paths.
 | |
| -	 */
 | |
| -	list_splice_init(&encoder->bridge_chain, &dsi->bridge_chain);
 | |
|  
 | |
|  	return 0;
 | |
|  }
 | |
|  
 | |
| -static void vc4_dsi_unbind(struct device *dev, struct device *master,
 | |
| -			   void *data)
 | |
| -{
 | |
| -	struct vc4_dsi *dsi = dev_get_drvdata(dev);
 | |
| -	struct drm_encoder *encoder = &dsi->encoder.base;
 | |
| -
 | |
| -	/*
 | |
| -	 * Restore the bridge_chain so the bridge detach procedure can happen
 | |
| -	 * normally.
 | |
| -	 */
 | |
| -	list_splice_init(&dsi->bridge_chain, &encoder->bridge_chain);
 | |
| -}
 | |
| -
 | |
|  static const struct component_ops vc4_dsi_ops = {
 | |
|  	.bind   = vc4_dsi_bind,
 | |
| -	.unbind = vc4_dsi_unbind,
 | |
|  };
 | |
|  
 | |
|  static int vc4_dsi_dev_probe(struct platform_device *pdev)
 | |
| -- 
 | |
| 2.33.1
 | |
| 
 |