diff options
Diffstat (limited to 'drivers/gpu/drm/bridge/ite-it6505.c')
| -rw-r--r-- | drivers/gpu/drm/bridge/ite-it6505.c | 57 | 
1 files changed, 10 insertions, 47 deletions
diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c index 8a607558ac89..89649c17ffad 100644 --- a/drivers/gpu/drm/bridge/ite-it6505.c +++ b/drivers/gpu/drm/bridge/ite-it6505.c @@ -771,40 +771,6 @@ static void it6505_calc_video_info(struct it6505 *it6505)  			     DRM_MODE_ARG(&it6505->video_info));  } -static int it6505_drm_dp_link_set_power(struct drm_dp_aux *aux, -					struct it6505_drm_dp_link *link, -					u8 mode) -{ -	u8 value; -	int err; - -	/* DP_SET_POWER register is only available on DPCD v1.1 and later */ -	if (link->revision < DPCD_V_1_1) -		return 0; - -	err = drm_dp_dpcd_readb(aux, DP_SET_POWER, &value); -	if (err < 0) -		return err; - -	value &= ~DP_SET_POWER_MASK; -	value |= mode; - -	err = drm_dp_dpcd_writeb(aux, DP_SET_POWER, value); -	if (err < 0) -		return err; - -	if (mode == DP_SET_POWER_D0) { -		/* -		 * According to the DP 1.1 specification, a "Sink Device must -		 * exit the power saving state within 1 ms" (Section 2.5.3.1, -		 * Table 5-52, "Sink Control Field" (register 0x600). -		 */ -		usleep_range(1000, 2000); -	} - -	return 0; -} -  static void it6505_clear_int(struct it6505 *it6505)  {  	it6505_write(it6505, INT_STATUS_01, 0xFF); @@ -2578,8 +2544,7 @@ static void it6505_irq_hpd(struct it6505 *it6505)  		}  		it6505->auto_train_retry = AUTO_TRAIN_RETRY; -		it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link, -					     DP_SET_POWER_D0); +		drm_dp_link_power_up(&it6505->aux, it6505->link.revision);  		dp_sink_count = it6505_dpcd_read(it6505, DP_SINK_COUNT);  		it6505->sink_count = DP_GET_SINK_COUNT(dp_sink_count); @@ -2910,8 +2875,7 @@ static enum drm_connector_status it6505_detect(struct it6505 *it6505)  	}  	if (it6505->hpd_state) { -		it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link, -					     DP_SET_POWER_D0); +		drm_dp_link_power_up(&it6505->aux, it6505->link.revision);  		dp_sink_count = it6505_dpcd_read(it6505, DP_SINK_COUNT);  		it6505->sink_count = DP_GET_SINK_COUNT(dp_sink_count);  		DRM_DEV_DEBUG_DRIVER(dev, "it6505->sink_count:%d branch:%d", @@ -3124,6 +3088,7 @@ static inline struct it6505 *bridge_to_it6505(struct drm_bridge *bridge)  }  static int it6505_bridge_attach(struct drm_bridge *bridge, +				struct drm_encoder *encoder,  				enum drm_bridge_attach_flags flags)  {  	struct it6505 *it6505 = bridge_to_it6505(bridge); @@ -3233,8 +3198,7 @@ static void it6505_bridge_atomic_enable(struct drm_bridge *bridge,  	it6505_int_mask_enable(it6505);  	it6505_video_reset(it6505); -	it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link, -				     DP_SET_POWER_D0); +	drm_dp_link_power_up(&it6505->aux, it6505->link.revision);  }  static void it6505_bridge_atomic_disable(struct drm_bridge *bridge, @@ -3246,8 +3210,7 @@ static void it6505_bridge_atomic_disable(struct drm_bridge *bridge,  	DRM_DEV_DEBUG_DRIVER(dev, "start");  	if (it6505->powered) { -		it6505_drm_dp_link_set_power(&it6505->aux, &it6505->link, -					     DP_SET_POWER_D3); +		drm_dp_link_power_down(&it6505->aux, it6505->link.revision);  		it6505_video_disable(it6505);  	}  } @@ -3275,7 +3238,7 @@ static void it6505_bridge_atomic_post_disable(struct drm_bridge *bridge,  }  static enum drm_connector_status -it6505_bridge_detect(struct drm_bridge *bridge) +it6505_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector)  {  	struct it6505 *it6505 = bridge_to_it6505(bridge); @@ -3620,9 +3583,10 @@ static int it6505_i2c_probe(struct i2c_client *client)  	struct extcon_dev *extcon;  	int err; -	it6505 = devm_kzalloc(&client->dev, sizeof(*it6505), GFP_KERNEL); -	if (!it6505) -		return -ENOMEM; +	it6505 = devm_drm_bridge_alloc(&client->dev, struct it6505, bridge, +				       &it6505_bridge_funcs); +	if (IS_ERR(it6505)) +		return PTR_ERR(it6505);  	mutex_init(&it6505->extcon_lock);  	mutex_init(&it6505->mode_lock); @@ -3697,7 +3661,6 @@ static int it6505_i2c_probe(struct i2c_client *client)  	it6505->aux.transfer = it6505_aux_transfer;  	drm_dp_aux_init(&it6505->aux); -	it6505->bridge.funcs = &it6505_bridge_funcs;  	it6505->bridge.type = DRM_MODE_CONNECTOR_DisplayPort;  	it6505->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID |  			     DRM_BRIDGE_OP_HPD;  | 
