|
@@ -3545,14 +3545,14 @@ intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
|
|
}
|
|
}
|
|
|
|
|
|
static bool intel_edp_init_connector(struct intel_dp *intel_dp,
|
|
static bool intel_edp_init_connector(struct intel_dp *intel_dp,
|
|
- struct intel_connector *intel_connector)
|
|
|
|
|
|
+ struct intel_connector *intel_connector,
|
|
|
|
+ struct edp_power_seq *power_seq)
|
|
{
|
|
{
|
|
struct drm_connector *connector = &intel_connector->base;
|
|
struct drm_connector *connector = &intel_connector->base;
|
|
struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
|
|
struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
|
|
struct drm_device *dev = intel_dig_port->base.base.dev;
|
|
struct drm_device *dev = intel_dig_port->base.base.dev;
|
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
struct drm_display_mode *fixed_mode = NULL;
|
|
struct drm_display_mode *fixed_mode = NULL;
|
|
- struct edp_power_seq power_seq = { 0 };
|
|
|
|
bool has_dpcd;
|
|
bool has_dpcd;
|
|
struct drm_display_mode *scan;
|
|
struct drm_display_mode *scan;
|
|
struct edid *edid;
|
|
struct edid *edid;
|
|
@@ -3560,8 +3560,6 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
|
|
if (!is_edp(intel_dp))
|
|
if (!is_edp(intel_dp))
|
|
return true;
|
|
return true;
|
|
|
|
|
|
- intel_dp_init_panel_power_sequencer(dev, intel_dp, &power_seq);
|
|
|
|
-
|
|
|
|
/* Cache DPCD and EDID for edp. */
|
|
/* Cache DPCD and EDID for edp. */
|
|
ironlake_edp_panel_vdd_on(intel_dp);
|
|
ironlake_edp_panel_vdd_on(intel_dp);
|
|
has_dpcd = intel_dp_get_dpcd(intel_dp);
|
|
has_dpcd = intel_dp_get_dpcd(intel_dp);
|
|
@@ -3579,8 +3577,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
|
|
}
|
|
}
|
|
|
|
|
|
/* We now know it's not a ghost, init power sequence regs. */
|
|
/* We now know it's not a ghost, init power sequence regs. */
|
|
- intel_dp_init_panel_power_sequencer_registers(dev, intel_dp,
|
|
|
|
- &power_seq);
|
|
|
|
|
|
+ intel_dp_init_panel_power_sequencer_registers(dev, intel_dp, power_seq);
|
|
|
|
|
|
edid = drm_get_edid(connector, &intel_dp->adapter);
|
|
edid = drm_get_edid(connector, &intel_dp->adapter);
|
|
if (edid) {
|
|
if (edid) {
|
|
@@ -3629,6 +3626,7 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
|
|
struct drm_device *dev = intel_encoder->base.dev;
|
|
struct drm_device *dev = intel_encoder->base.dev;
|
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
enum port port = intel_dig_port->port;
|
|
enum port port = intel_dig_port->port;
|
|
|
|
+ struct edp_power_seq power_seq = { 0 };
|
|
const char *name = NULL;
|
|
const char *name = NULL;
|
|
int type, error;
|
|
int type, error;
|
|
|
|
|
|
@@ -3712,13 +3710,16 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
|
|
BUG();
|
|
BUG();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (is_edp(intel_dp))
|
|
|
|
+ intel_dp_init_panel_power_sequencer(dev, intel_dp, &power_seq);
|
|
|
|
+
|
|
error = intel_dp_i2c_init(intel_dp, intel_connector, name);
|
|
error = intel_dp_i2c_init(intel_dp, intel_connector, name);
|
|
WARN(error, "intel_dp_i2c_init failed with error %d for port %c\n",
|
|
WARN(error, "intel_dp_i2c_init failed with error %d for port %c\n",
|
|
error, port_name(port));
|
|
error, port_name(port));
|
|
|
|
|
|
intel_dp->psr_setup_done = false;
|
|
intel_dp->psr_setup_done = false;
|
|
|
|
|
|
- if (!intel_edp_init_connector(intel_dp, intel_connector)) {
|
|
|
|
|
|
+ if (!intel_edp_init_connector(intel_dp, intel_connector, &power_seq)) {
|
|
i2c_del_adapter(&intel_dp->adapter);
|
|
i2c_del_adapter(&intel_dp->adapter);
|
|
if (is_edp(intel_dp)) {
|
|
if (is_edp(intel_dp)) {
|
|
cancel_delayed_work_sync(&intel_dp->panel_vdd_work);
|
|
cancel_delayed_work_sync(&intel_dp->panel_vdd_work);
|