mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 15:41:52 +02:00
drm/i915/sdvo: convert intel_sdvo.[ch] to struct intel_display
Going forward, struct intel_display is the main display device data pointer. Convert as much as possible of intel_sdvo.[ch] to struct intel_display. Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/2e79909f8a060d7ff1744911f8da9300eb1f225c.1739378095.git.jani.nikula@intel.com
This commit is contained in:
parent
53ba0e1d66
commit
3a9a1f89c2
|
|
@ -67,7 +67,6 @@ static bool intel_hdmi_get_hw_state(struct intel_encoder *encoder,
|
|||
enum pipe *pipe)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(encoder);
|
||||
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
|
||||
struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
|
||||
intel_wakeref_t wakeref;
|
||||
bool ret;
|
||||
|
|
@ -77,7 +76,7 @@ static bool intel_hdmi_get_hw_state(struct intel_encoder *encoder,
|
|||
if (!wakeref)
|
||||
return false;
|
||||
|
||||
ret = intel_sdvo_port_enabled(dev_priv, intel_hdmi->hdmi_reg, pipe);
|
||||
ret = intel_sdvo_port_enabled(display, intel_hdmi->hdmi_reg, pipe);
|
||||
|
||||
intel_display_power_put(display, encoder->power_domain, wakeref);
|
||||
|
||||
|
|
|
|||
|
|
@ -8235,7 +8235,7 @@ void intel_setup_outputs(struct drm_i915_private *dev_priv)
|
|||
|
||||
if (intel_de_read(dev_priv, PCH_HDMIB) & SDVO_DETECTED) {
|
||||
/* PCH SDVOB multiplex with HDMIB */
|
||||
found = intel_sdvo_init(dev_priv, PCH_SDVOB, PORT_B);
|
||||
found = intel_sdvo_init(display, PCH_SDVOB, PORT_B);
|
||||
if (!found)
|
||||
g4x_hdmi_init(display, PCH_HDMIB, PORT_B);
|
||||
if (!found && (intel_de_read(dev_priv, PCH_DP_B) & DP_DETECTED))
|
||||
|
|
@ -8314,7 +8314,7 @@ void intel_setup_outputs(struct drm_i915_private *dev_priv)
|
|||
|
||||
if (intel_de_read(dev_priv, GEN3_SDVOB) & SDVO_DETECTED) {
|
||||
drm_dbg_kms(&dev_priv->drm, "probing SDVOB\n");
|
||||
found = intel_sdvo_init(dev_priv, GEN3_SDVOB, PORT_B);
|
||||
found = intel_sdvo_init(display, GEN3_SDVOB, PORT_B);
|
||||
if (!found && IS_G4X(dev_priv)) {
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
"probing HDMI on SDVOB\n");
|
||||
|
|
@ -8329,7 +8329,7 @@ void intel_setup_outputs(struct drm_i915_private *dev_priv)
|
|||
|
||||
if (intel_de_read(dev_priv, GEN3_SDVOB) & SDVO_DETECTED) {
|
||||
drm_dbg_kms(&dev_priv->drm, "probing SDVOC\n");
|
||||
found = intel_sdvo_init(dev_priv, GEN3_SDVOC, PORT_C);
|
||||
found = intel_sdvo_init(display, GEN3_SDVOC, PORT_C);
|
||||
}
|
||||
|
||||
if (!found && (intel_de_read(dev_priv, GEN3_SDVOC) & SDVO_DETECTED)) {
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ static void assert_pch_hdmi_disabled(struct drm_i915_private *dev_priv,
|
|||
enum pipe port_pipe;
|
||||
bool state;
|
||||
|
||||
state = intel_sdvo_port_enabled(dev_priv, hdmi_reg, &port_pipe);
|
||||
state = intel_sdvo_port_enabled(display, hdmi_reg, &port_pipe);
|
||||
|
||||
INTEL_DISPLAY_STATE_WARN(display, state && port_pipe == pipe,
|
||||
"PCH HDMI %c enabled on transcoder %c, should be disabled\n",
|
||||
|
|
|
|||
|
|
@ -213,29 +213,29 @@ intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo,
|
|||
*/
|
||||
static void intel_sdvo_write_sdvox(struct intel_sdvo *intel_sdvo, u32 val)
|
||||
{
|
||||
struct drm_device *dev = intel_sdvo->base.base.dev;
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
struct drm_i915_private *dev_priv = to_i915(display->drm);
|
||||
u32 bval = val, cval = val;
|
||||
int i;
|
||||
|
||||
if (HAS_PCH_SPLIT(dev_priv)) {
|
||||
intel_de_write(dev_priv, intel_sdvo->sdvo_reg, val);
|
||||
intel_de_posting_read(dev_priv, intel_sdvo->sdvo_reg);
|
||||
intel_de_write(display, intel_sdvo->sdvo_reg, val);
|
||||
intel_de_posting_read(display, intel_sdvo->sdvo_reg);
|
||||
/*
|
||||
* HW workaround, need to write this twice for issue
|
||||
* that may result in first write getting masked.
|
||||
*/
|
||||
if (HAS_PCH_IBX(dev_priv)) {
|
||||
intel_de_write(dev_priv, intel_sdvo->sdvo_reg, val);
|
||||
intel_de_posting_read(dev_priv, intel_sdvo->sdvo_reg);
|
||||
intel_de_write(display, intel_sdvo->sdvo_reg, val);
|
||||
intel_de_posting_read(display, intel_sdvo->sdvo_reg);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (intel_sdvo->base.port == PORT_B)
|
||||
cval = intel_de_read(dev_priv, GEN3_SDVOC);
|
||||
cval = intel_de_read(display, GEN3_SDVOC);
|
||||
else
|
||||
bval = intel_de_read(dev_priv, GEN3_SDVOB);
|
||||
bval = intel_de_read(display, GEN3_SDVOB);
|
||||
|
||||
/*
|
||||
* Write the registers twice for luck. Sometimes,
|
||||
|
|
@ -243,17 +243,17 @@ static void intel_sdvo_write_sdvox(struct intel_sdvo *intel_sdvo, u32 val)
|
|||
* The BIOS does this too. Yay, magic
|
||||
*/
|
||||
for (i = 0; i < 2; i++) {
|
||||
intel_de_write(dev_priv, GEN3_SDVOB, bval);
|
||||
intel_de_posting_read(dev_priv, GEN3_SDVOB);
|
||||
intel_de_write(display, GEN3_SDVOB, bval);
|
||||
intel_de_posting_read(display, GEN3_SDVOB);
|
||||
|
||||
intel_de_write(dev_priv, GEN3_SDVOC, cval);
|
||||
intel_de_posting_read(dev_priv, GEN3_SDVOC);
|
||||
intel_de_write(display, GEN3_SDVOC, cval);
|
||||
intel_de_posting_read(display, GEN3_SDVOC);
|
||||
}
|
||||
}
|
||||
|
||||
static bool intel_sdvo_read_byte(struct intel_sdvo *intel_sdvo, u8 addr, u8 *ch)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
struct i2c_msg msgs[] = {
|
||||
{
|
||||
.addr = intel_sdvo->target_addr,
|
||||
|
|
@ -273,7 +273,7 @@ static bool intel_sdvo_read_byte(struct intel_sdvo *intel_sdvo, u8 addr, u8 *ch)
|
|||
if ((ret = i2c_transfer(intel_sdvo->i2c, msgs, 2)) == 2)
|
||||
return true;
|
||||
|
||||
drm_dbg_kms(&i915->drm, "i2c transfer returned %d\n", ret);
|
||||
drm_dbg_kms(display->drm, "i2c transfer returned %d\n", ret);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -415,7 +415,7 @@ static const char *sdvo_cmd_name(u8 cmd)
|
|||
static void intel_sdvo_debug_write(struct intel_sdvo *intel_sdvo, u8 cmd,
|
||||
const void *args, int args_len)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
const char *cmd_name;
|
||||
int i, pos = 0;
|
||||
char buffer[64];
|
||||
|
|
@ -436,10 +436,10 @@ static void intel_sdvo_debug_write(struct intel_sdvo *intel_sdvo, u8 cmd,
|
|||
else
|
||||
BUF_PRINT("(%02X)", cmd);
|
||||
|
||||
drm_WARN_ON(&dev_priv->drm, pos >= sizeof(buffer) - 1);
|
||||
drm_WARN_ON(display->drm, pos >= sizeof(buffer) - 1);
|
||||
#undef BUF_PRINT
|
||||
|
||||
drm_dbg_kms(&dev_priv->drm, "%s: W: %02X %s\n", SDVO_NAME(intel_sdvo),
|
||||
drm_dbg_kms(display->drm, "%s: W: %02X %s\n", SDVO_NAME(intel_sdvo),
|
||||
cmd, buffer);
|
||||
}
|
||||
|
||||
|
|
@ -465,7 +465,7 @@ static bool __intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd,
|
|||
const void *args, int args_len,
|
||||
bool unlocked)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
u8 *buf, status;
|
||||
struct i2c_msg *msgs;
|
||||
int i, ret = true;
|
||||
|
|
@ -515,13 +515,13 @@ static bool __intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd,
|
|||
else
|
||||
ret = __i2c_transfer(intel_sdvo->i2c, msgs, i+3);
|
||||
if (ret < 0) {
|
||||
drm_dbg_kms(&i915->drm, "I2c transfer returned %d\n", ret);
|
||||
drm_dbg_kms(display->drm, "I2c transfer returned %d\n", ret);
|
||||
ret = false;
|
||||
goto out;
|
||||
}
|
||||
if (ret != i+3) {
|
||||
/* failure in I2C transfer */
|
||||
drm_dbg_kms(&i915->drm, "I2c transfer returned %d/%d\n", ret, i+3);
|
||||
drm_dbg_kms(display->drm, "I2c transfer returned %d/%d\n", ret, i + 3);
|
||||
ret = false;
|
||||
}
|
||||
|
||||
|
|
@ -540,7 +540,7 @@ static bool intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd,
|
|||
static bool intel_sdvo_read_response(struct intel_sdvo *intel_sdvo,
|
||||
void *response, int response_len)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
const char *cmd_status;
|
||||
u8 retry = 15; /* 5 quick checks, followed by 10 long checks */
|
||||
u8 status;
|
||||
|
|
@ -605,15 +605,15 @@ static bool intel_sdvo_read_response(struct intel_sdvo *intel_sdvo,
|
|||
BUF_PRINT(" %02X", ((u8 *)response)[i]);
|
||||
}
|
||||
|
||||
drm_WARN_ON(&dev_priv->drm, pos >= sizeof(buffer) - 1);
|
||||
drm_WARN_ON(display->drm, pos >= sizeof(buffer) - 1);
|
||||
#undef BUF_PRINT
|
||||
|
||||
drm_dbg_kms(&dev_priv->drm, "%s: R: %s\n",
|
||||
drm_dbg_kms(display->drm, "%s: R: %s\n",
|
||||
SDVO_NAME(intel_sdvo), buffer);
|
||||
return true;
|
||||
|
||||
log_fail:
|
||||
drm_dbg_kms(&dev_priv->drm, "%s: R: ... failed %s\n",
|
||||
drm_dbg_kms(display->drm, "%s: R: ... failed %s\n",
|
||||
SDVO_NAME(intel_sdvo), buffer);
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1009,7 +1009,7 @@ static bool intel_sdvo_write_infoframe(struct intel_sdvo *intel_sdvo,
|
|||
unsigned int if_index, u8 tx_rate,
|
||||
const u8 *data, unsigned int length)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
u8 set_buf_index[2] = { if_index, 0 };
|
||||
u8 hbuf_size, tmp[8];
|
||||
int i;
|
||||
|
|
@ -1022,7 +1022,7 @@ static bool intel_sdvo_write_infoframe(struct intel_sdvo *intel_sdvo,
|
|||
if (!intel_sdvo_get_hbuf_size(intel_sdvo, &hbuf_size))
|
||||
return false;
|
||||
|
||||
drm_dbg_kms(&i915->drm,
|
||||
drm_dbg_kms(display->drm,
|
||||
"writing sdvo hbuf: %i, length %u, hbuf_size: %i\n",
|
||||
if_index, length, hbuf_size);
|
||||
|
||||
|
|
@ -1049,7 +1049,7 @@ static ssize_t intel_sdvo_read_infoframe(struct intel_sdvo *intel_sdvo,
|
|||
unsigned int if_index,
|
||||
u8 *data, unsigned int length)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
u8 set_buf_index[2] = { if_index, 0 };
|
||||
u8 hbuf_size, tx_rate, av_split;
|
||||
int i;
|
||||
|
|
@ -1079,7 +1079,7 @@ static ssize_t intel_sdvo_read_infoframe(struct intel_sdvo *intel_sdvo,
|
|||
if (!intel_sdvo_get_hbuf_size(intel_sdvo, &hbuf_size))
|
||||
return false;
|
||||
|
||||
drm_dbg_kms(&i915->drm,
|
||||
drm_dbg_kms(display->drm,
|
||||
"reading sdvo hbuf: %i, length %u, hbuf_size: %i\n",
|
||||
if_index, length, hbuf_size);
|
||||
|
||||
|
|
@ -1100,7 +1100,7 @@ static bool intel_sdvo_compute_avi_infoframe(struct intel_sdvo *intel_sdvo,
|
|||
struct intel_crtc_state *crtc_state,
|
||||
struct drm_connector_state *conn_state)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
struct hdmi_avi_infoframe *frame = &crtc_state->infoframes.avi.avi;
|
||||
const struct drm_display_mode *adjusted_mode =
|
||||
&crtc_state->hw.adjusted_mode;
|
||||
|
|
@ -1126,7 +1126,7 @@ static bool intel_sdvo_compute_avi_infoframe(struct intel_sdvo *intel_sdvo,
|
|||
HDMI_QUANTIZATION_RANGE_FULL);
|
||||
|
||||
ret = hdmi_avi_infoframe_check(frame);
|
||||
if (drm_WARN_ON(&dev_priv->drm, ret))
|
||||
if (drm_WARN_ON(display->drm, ret))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
@ -1135,7 +1135,7 @@ static bool intel_sdvo_compute_avi_infoframe(struct intel_sdvo *intel_sdvo,
|
|||
static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo,
|
||||
const struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
u8 sdvo_data[HDMI_INFOFRAME_SIZE(AVI)];
|
||||
const union hdmi_infoframe *frame = &crtc_state->infoframes.avi;
|
||||
ssize_t len;
|
||||
|
|
@ -1144,12 +1144,12 @@ static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo,
|
|||
intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_AVI)) == 0)
|
||||
return true;
|
||||
|
||||
if (drm_WARN_ON(&dev_priv->drm,
|
||||
if (drm_WARN_ON(display->drm,
|
||||
frame->any.type != HDMI_INFOFRAME_TYPE_AVI))
|
||||
return false;
|
||||
|
||||
len = hdmi_infoframe_pack_only(frame, sdvo_data, sizeof(sdvo_data));
|
||||
if (drm_WARN_ON(&dev_priv->drm, len < 0))
|
||||
if (drm_WARN_ON(display->drm, len < 0))
|
||||
return false;
|
||||
|
||||
return intel_sdvo_write_infoframe(intel_sdvo, SDVO_HBUF_INDEX_AVI_IF,
|
||||
|
|
@ -1160,7 +1160,7 @@ static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo,
|
|||
static void intel_sdvo_get_avi_infoframe(struct intel_sdvo *intel_sdvo,
|
||||
struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
u8 sdvo_data[HDMI_INFOFRAME_SIZE(AVI)];
|
||||
union hdmi_infoframe *frame = &crtc_state->infoframes.avi;
|
||||
ssize_t len;
|
||||
|
|
@ -1172,7 +1172,7 @@ static void intel_sdvo_get_avi_infoframe(struct intel_sdvo *intel_sdvo,
|
|||
len = intel_sdvo_read_infoframe(intel_sdvo, SDVO_HBUF_INDEX_AVI_IF,
|
||||
sdvo_data, sizeof(sdvo_data));
|
||||
if (len < 0) {
|
||||
drm_dbg_kms(&i915->drm, "failed to read AVI infoframe\n");
|
||||
drm_dbg_kms(display->drm, "failed to read AVI infoframe\n");
|
||||
return;
|
||||
} else if (len == 0) {
|
||||
return;
|
||||
|
|
@ -1183,12 +1183,12 @@ static void intel_sdvo_get_avi_infoframe(struct intel_sdvo *intel_sdvo,
|
|||
|
||||
ret = hdmi_infoframe_unpack(frame, sdvo_data, len);
|
||||
if (ret) {
|
||||
drm_dbg_kms(&i915->drm, "Failed to unpack AVI infoframe\n");
|
||||
drm_dbg_kms(display->drm, "Failed to unpack AVI infoframe\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (frame->any.type != HDMI_INFOFRAME_TYPE_AVI)
|
||||
drm_dbg_kms(&i915->drm,
|
||||
drm_dbg_kms(display->drm,
|
||||
"Found the wrong infoframe type 0x%x (expected 0x%02x)\n",
|
||||
frame->any.type, HDMI_INFOFRAME_TYPE_AVI);
|
||||
}
|
||||
|
|
@ -1196,7 +1196,7 @@ static void intel_sdvo_get_avi_infoframe(struct intel_sdvo *intel_sdvo,
|
|||
static void intel_sdvo_get_eld(struct intel_sdvo *intel_sdvo,
|
||||
struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
ssize_t len;
|
||||
u8 val;
|
||||
|
||||
|
|
@ -1212,7 +1212,7 @@ static void intel_sdvo_get_eld(struct intel_sdvo *intel_sdvo,
|
|||
len = intel_sdvo_read_infoframe(intel_sdvo, SDVO_HBUF_INDEX_ELD,
|
||||
crtc_state->eld, sizeof(crtc_state->eld));
|
||||
if (len < 0)
|
||||
drm_dbg_kms(&i915->drm, "failed to read ELD\n");
|
||||
drm_dbg_kms(display->drm, "failed to read ELD\n");
|
||||
}
|
||||
|
||||
static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo,
|
||||
|
|
@ -1282,7 +1282,7 @@ intel_sdvo_get_preferred_input_mode(struct intel_sdvo *intel_sdvo,
|
|||
|
||||
static int i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(pipe_config->uapi.crtc->dev);
|
||||
struct intel_display *display = to_intel_display(pipe_config);
|
||||
unsigned int dotclock = pipe_config->hw.adjusted_mode.crtc_clock;
|
||||
struct dpll *clock = &pipe_config->dpll;
|
||||
|
||||
|
|
@ -1303,7 +1303,7 @@ static int i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
|
|||
clock->m1 = 12;
|
||||
clock->m2 = 8;
|
||||
} else {
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
drm_dbg_kms(display->drm,
|
||||
"SDVO TV clock out of range: %i\n", dotclock);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
@ -1359,6 +1359,7 @@ static int intel_sdvo_compute_config(struct intel_encoder *encoder,
|
|||
struct intel_crtc_state *pipe_config,
|
||||
struct drm_connector_state *conn_state)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(encoder);
|
||||
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
|
||||
struct intel_sdvo *intel_sdvo = to_sdvo(encoder);
|
||||
struct intel_sdvo_connector *intel_sdvo_connector =
|
||||
|
|
@ -1366,13 +1367,13 @@ static int intel_sdvo_compute_config(struct intel_encoder *encoder,
|
|||
struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode;
|
||||
struct drm_display_mode *mode = &pipe_config->hw.mode;
|
||||
|
||||
if (HAS_PCH_SPLIT(to_i915(encoder->base.dev))) {
|
||||
if (HAS_PCH_SPLIT(i915)) {
|
||||
pipe_config->has_pch_encoder = true;
|
||||
if (!intel_fdi_compute_pipe_bpp(pipe_config))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
drm_dbg_kms(&i915->drm, "forcing bpc to 8 for SDVO\n");
|
||||
drm_dbg_kms(display->drm, "forcing bpc to 8 for SDVO\n");
|
||||
/* FIXME: Don't increase pipe_bpp */
|
||||
pipe_config->pipe_bpp = 8*3;
|
||||
pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB;
|
||||
|
|
@ -1451,7 +1452,7 @@ static int intel_sdvo_compute_config(struct intel_encoder *encoder,
|
|||
|
||||
if (!intel_sdvo_compute_avi_infoframe(intel_sdvo,
|
||||
pipe_config, conn_state)) {
|
||||
drm_dbg_kms(&i915->drm, "bad AVI infoframe\n");
|
||||
drm_dbg_kms(display->drm, "bad AVI infoframe\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
@ -1525,6 +1526,7 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
|
|||
const struct intel_crtc_state *crtc_state,
|
||||
const struct drm_connector_state *conn_state)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(intel_encoder);
|
||||
struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
|
||||
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
|
||||
const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
|
||||
|
|
@ -1570,7 +1572,7 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
|
|||
intel_sdvo_get_dtd_from_mode(&output_dtd, mode);
|
||||
}
|
||||
if (!intel_sdvo_set_output_timing(intel_sdvo, &output_dtd))
|
||||
drm_info(&dev_priv->drm,
|
||||
drm_info(display->drm,
|
||||
"Setting output timings on %s failed\n",
|
||||
SDVO_NAME(intel_sdvo));
|
||||
|
||||
|
|
@ -1600,13 +1602,13 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
|
|||
if (IS_TV(intel_sdvo_connector) || IS_LVDS(intel_sdvo_connector))
|
||||
input_dtd.part2.sdvo_flags = intel_sdvo->dtd_sdvo_flags;
|
||||
if (!intel_sdvo_set_input_timing(intel_sdvo, &input_dtd))
|
||||
drm_info(&dev_priv->drm,
|
||||
drm_info(display->drm,
|
||||
"Setting input timings on %s failed\n",
|
||||
SDVO_NAME(intel_sdvo));
|
||||
|
||||
switch (crtc_state->pixel_multiplier) {
|
||||
default:
|
||||
drm_WARN(&dev_priv->drm, 1,
|
||||
drm_WARN(display->drm, 1,
|
||||
"unknown pixel multiplier specified\n");
|
||||
fallthrough;
|
||||
case 1: rate = SDVO_CLOCK_RATE_MULT_1X; break;
|
||||
|
|
@ -1617,14 +1619,14 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
|
|||
return;
|
||||
|
||||
/* Set the SDVO control regs. */
|
||||
if (DISPLAY_VER(dev_priv) >= 4) {
|
||||
if (DISPLAY_VER(display) >= 4) {
|
||||
/* The real mode polarity is set by the SDVO commands, using
|
||||
* struct intel_sdvo_dtd. */
|
||||
sdvox = SDVO_VSYNC_ACTIVE_HIGH | SDVO_HSYNC_ACTIVE_HIGH;
|
||||
if (DISPLAY_VER(dev_priv) < 5)
|
||||
if (DISPLAY_VER(display) < 5)
|
||||
sdvox |= SDVO_BORDER_ENABLE;
|
||||
} else {
|
||||
sdvox = intel_de_read(dev_priv, intel_sdvo->sdvo_reg);
|
||||
sdvox = intel_de_read(display, intel_sdvo->sdvo_reg);
|
||||
if (intel_sdvo->base.port == PORT_B)
|
||||
sdvox &= SDVOB_PRESERVE_MASK;
|
||||
else
|
||||
|
|
@ -1637,10 +1639,10 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
|
|||
else
|
||||
sdvox |= SDVO_PIPE_SEL(crtc->pipe);
|
||||
|
||||
if (DISPLAY_VER(dev_priv) >= 4) {
|
||||
if (DISPLAY_VER(display) >= 4) {
|
||||
/* done in crtc_mode_set as the dpll_md reg must be written early */
|
||||
} else if (IS_I945G(dev_priv) || IS_I945GM(dev_priv) ||
|
||||
IS_G33(dev_priv) || IS_PINEVIEW(dev_priv)) {
|
||||
} else if (display->platform.i945g || display->platform.i945gm ||
|
||||
display->platform.g33 || display->platform.pineview) {
|
||||
/* done in crtc_mode_set as it lives inside the dpll register */
|
||||
} else {
|
||||
sdvox |= (crtc_state->pixel_multiplier - 1)
|
||||
|
|
@ -1648,7 +1650,7 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
|
|||
}
|
||||
|
||||
if (input_dtd.part2.sdvo_flags & SDVO_NEED_TO_STALL &&
|
||||
DISPLAY_VER(dev_priv) < 5)
|
||||
DISPLAY_VER(display) < 5)
|
||||
sdvox |= SDVO_STALL_SELECT;
|
||||
intel_sdvo_write_sdvox(intel_sdvo, sdvox);
|
||||
}
|
||||
|
|
@ -1665,17 +1667,18 @@ static bool intel_sdvo_connector_get_hw_state(struct intel_connector *connector)
|
|||
return active_outputs & intel_sdvo_connector->output_flag;
|
||||
}
|
||||
|
||||
bool intel_sdvo_port_enabled(struct drm_i915_private *dev_priv,
|
||||
bool intel_sdvo_port_enabled(struct intel_display *display,
|
||||
i915_reg_t sdvo_reg, enum pipe *pipe)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(display->drm);
|
||||
u32 val;
|
||||
|
||||
val = intel_de_read(dev_priv, sdvo_reg);
|
||||
val = intel_de_read(display, sdvo_reg);
|
||||
|
||||
/* asserts want to know the pipe even if the port is disabled */
|
||||
if (HAS_PCH_CPT(dev_priv))
|
||||
*pipe = (val & SDVO_PIPE_SEL_MASK_CPT) >> SDVO_PIPE_SEL_SHIFT_CPT;
|
||||
else if (IS_CHERRYVIEW(dev_priv))
|
||||
else if (display->platform.cherryview)
|
||||
*pipe = (val & SDVO_PIPE_SEL_MASK_CHV) >> SDVO_PIPE_SEL_SHIFT_CHV;
|
||||
else
|
||||
*pipe = (val & SDVO_PIPE_SEL_MASK) >> SDVO_PIPE_SEL_SHIFT;
|
||||
|
|
@ -1686,14 +1689,14 @@ bool intel_sdvo_port_enabled(struct drm_i915_private *dev_priv,
|
|||
static bool intel_sdvo_get_hw_state(struct intel_encoder *encoder,
|
||||
enum pipe *pipe)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
|
||||
struct intel_display *display = to_intel_display(encoder);
|
||||
struct intel_sdvo *intel_sdvo = to_sdvo(encoder);
|
||||
u16 active_outputs = 0;
|
||||
bool ret;
|
||||
|
||||
intel_sdvo_get_active_outputs(intel_sdvo, &active_outputs);
|
||||
|
||||
ret = intel_sdvo_port_enabled(dev_priv, intel_sdvo->sdvo_reg, pipe);
|
||||
ret = intel_sdvo_port_enabled(display, intel_sdvo->sdvo_reg, pipe);
|
||||
|
||||
return ret || active_outputs;
|
||||
}
|
||||
|
|
@ -1701,8 +1704,7 @@ static bool intel_sdvo_get_hw_state(struct intel_encoder *encoder,
|
|||
static void intel_sdvo_get_config(struct intel_encoder *encoder,
|
||||
struct intel_crtc_state *pipe_config)
|
||||
{
|
||||
struct drm_device *dev = encoder->base.dev;
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
struct intel_display *display = to_intel_display(encoder);
|
||||
struct intel_sdvo *intel_sdvo = to_sdvo(encoder);
|
||||
struct intel_sdvo_dtd dtd;
|
||||
int encoder_pixel_multiplier = 0;
|
||||
|
|
@ -1713,7 +1715,7 @@ static void intel_sdvo_get_config(struct intel_encoder *encoder,
|
|||
|
||||
pipe_config->output_types |= BIT(INTEL_OUTPUT_SDVO);
|
||||
|
||||
sdvox = intel_de_read(dev_priv, intel_sdvo->sdvo_reg);
|
||||
sdvox = intel_de_read(display, intel_sdvo->sdvo_reg);
|
||||
|
||||
ret = intel_sdvo_get_input_timing(intel_sdvo, &dtd);
|
||||
if (!ret) {
|
||||
|
|
@ -1721,7 +1723,7 @@ static void intel_sdvo_get_config(struct intel_encoder *encoder,
|
|||
* Some sdvo encoders are not spec compliant and don't
|
||||
* implement the mandatory get_timings function.
|
||||
*/
|
||||
drm_dbg(&dev_priv->drm, "failed to retrieve SDVO DTD\n");
|
||||
drm_dbg_kms(display->drm, "failed to retrieve SDVO DTD\n");
|
||||
pipe_config->quirks |= PIPE_CONFIG_QUIRK_MODE_SYNC_FLAGS;
|
||||
} else {
|
||||
if (dtd.part2.dtd_flags & DTD_FLAG_HSYNC_POSITIVE)
|
||||
|
|
@ -1744,7 +1746,7 @@ static void intel_sdvo_get_config(struct intel_encoder *encoder,
|
|||
* encoder->get_config we so already have a valid pixel multiplier on all
|
||||
* other platforms.
|
||||
*/
|
||||
if (IS_I915G(dev_priv) || IS_I915GM(dev_priv)) {
|
||||
if (display->platform.i915g || display->platform.i915gm) {
|
||||
pipe_config->pixel_multiplier =
|
||||
((sdvox & SDVO_PORT_MULTIPLY_MASK)
|
||||
>> SDVO_PORT_MULTIPLY_SHIFT) + 1;
|
||||
|
|
@ -1773,7 +1775,7 @@ static void intel_sdvo_get_config(struct intel_encoder *encoder,
|
|||
}
|
||||
}
|
||||
|
||||
drm_WARN(dev,
|
||||
drm_WARN(display->drm,
|
||||
encoder_pixel_multiplier != pipe_config->pixel_multiplier,
|
||||
"SDVO pixel multiplier mismatch, port: %i, encoder: %i\n",
|
||||
pipe_config->pixel_multiplier, encoder_pixel_multiplier);
|
||||
|
|
@ -1849,7 +1851,7 @@ static void intel_disable_sdvo(struct intel_atomic_state *state,
|
|||
intel_sdvo_set_encoder_power_state(intel_sdvo,
|
||||
DRM_MODE_DPMS_OFF);
|
||||
|
||||
temp = intel_de_read(dev_priv, intel_sdvo->sdvo_reg);
|
||||
temp = intel_de_read(display, intel_sdvo->sdvo_reg);
|
||||
|
||||
temp &= ~SDVO_ENABLE;
|
||||
intel_sdvo_write_sdvox(intel_sdvo, temp);
|
||||
|
|
@ -1900,8 +1902,7 @@ static void intel_enable_sdvo(struct intel_atomic_state *state,
|
|||
const struct intel_crtc_state *pipe_config,
|
||||
const struct drm_connector_state *conn_state)
|
||||
{
|
||||
struct drm_device *dev = encoder->base.dev;
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
struct intel_display *display = to_intel_display(encoder);
|
||||
struct intel_sdvo *intel_sdvo = to_sdvo(encoder);
|
||||
struct intel_sdvo_connector *intel_sdvo_connector =
|
||||
to_intel_sdvo_connector(conn_state->connector);
|
||||
|
|
@ -1911,7 +1912,7 @@ static void intel_enable_sdvo(struct intel_atomic_state *state,
|
|||
int i;
|
||||
bool success;
|
||||
|
||||
temp = intel_de_read(dev_priv, intel_sdvo->sdvo_reg);
|
||||
temp = intel_de_read(display, intel_sdvo->sdvo_reg);
|
||||
temp |= SDVO_ENABLE;
|
||||
intel_sdvo_write_sdvox(intel_sdvo, temp);
|
||||
|
||||
|
|
@ -1926,7 +1927,7 @@ static void intel_enable_sdvo(struct intel_atomic_state *state,
|
|||
* a given it the status is a success, we succeeded.
|
||||
*/
|
||||
if (success && !input1) {
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
drm_dbg_kms(display->drm,
|
||||
"First %s output reported failure to sync\n",
|
||||
SDVO_NAME(intel_sdvo));
|
||||
}
|
||||
|
|
@ -1941,12 +1942,13 @@ static enum drm_mode_status
|
|||
intel_sdvo_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(connector->dev);
|
||||
struct drm_i915_private *i915 = to_i915(connector->dev);
|
||||
struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector));
|
||||
struct intel_sdvo_connector *intel_sdvo_connector =
|
||||
to_intel_sdvo_connector(connector);
|
||||
bool has_hdmi_sink = intel_has_hdmi_sink(intel_sdvo_connector, connector->state);
|
||||
int max_dotclk = i915->display.cdclk.max_dotclk_freq;
|
||||
int max_dotclk = display->cdclk.max_dotclk_freq;
|
||||
enum drm_mode_status status;
|
||||
int clock = mode->clock;
|
||||
|
||||
|
|
@ -1982,14 +1984,15 @@ intel_sdvo_mode_valid(struct drm_connector *connector,
|
|||
|
||||
static bool intel_sdvo_get_capabilities(struct intel_sdvo *intel_sdvo, struct intel_sdvo_caps *caps)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
|
||||
BUILD_BUG_ON(sizeof(*caps) != 8);
|
||||
if (!intel_sdvo_get_value(intel_sdvo,
|
||||
SDVO_CMD_GET_DEVICE_CAPS,
|
||||
caps, sizeof(*caps)))
|
||||
return false;
|
||||
|
||||
drm_dbg_kms(&i915->drm, "SDVO capabilities:\n"
|
||||
drm_dbg_kms(display->drm, "SDVO capabilities:\n"
|
||||
" vendor_id: %d\n"
|
||||
" device_id: %d\n"
|
||||
" device_rev_id: %d\n"
|
||||
|
|
@ -2031,17 +2034,17 @@ static u8 intel_sdvo_get_colorimetry_cap(struct intel_sdvo *intel_sdvo)
|
|||
|
||||
static u16 intel_sdvo_get_hotplug_support(struct intel_sdvo *intel_sdvo)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
u16 hotplug;
|
||||
|
||||
if (!I915_HAS_HOTPLUG(dev_priv))
|
||||
if (!I915_HAS_HOTPLUG(display))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* HW Erratum: SDVO Hotplug is broken on all i945G chips, there's noise
|
||||
* on the line.
|
||||
*/
|
||||
if (IS_I945G(dev_priv) || IS_I945GM(dev_priv))
|
||||
if (display->platform.i945g || display->platform.i945gm)
|
||||
return 0;
|
||||
|
||||
if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT,
|
||||
|
|
@ -2138,13 +2141,12 @@ static enum drm_connector_status
|
|||
intel_sdvo_detect(struct drm_connector *connector, bool force)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(connector->dev);
|
||||
struct drm_i915_private *i915 = to_i915(connector->dev);
|
||||
struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector));
|
||||
struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector);
|
||||
enum drm_connector_status ret;
|
||||
u16 response;
|
||||
|
||||
drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s]\n",
|
||||
drm_dbg_kms(display->drm, "[CONNECTOR:%d:%s]\n",
|
||||
connector->base.id, connector->name);
|
||||
|
||||
if (!intel_display_device_enabled(display))
|
||||
|
|
@ -2162,7 +2164,7 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
|
|||
&response, 2))
|
||||
return connector_status_unknown;
|
||||
|
||||
drm_dbg_kms(&i915->drm, "SDVO response %d %d [%x]\n",
|
||||
drm_dbg_kms(display->drm, "SDVO response %d %d [%x]\n",
|
||||
response & 0xff, response >> 8,
|
||||
intel_sdvo_connector->output_flag);
|
||||
|
||||
|
|
@ -2301,7 +2303,6 @@ static int intel_sdvo_get_tv_modes(struct drm_connector *connector)
|
|||
{
|
||||
struct intel_display *display = to_intel_display(connector->dev);
|
||||
struct intel_sdvo *intel_sdvo = intel_attached_sdvo(to_intel_connector(connector));
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_sdvo_connector *intel_sdvo_connector =
|
||||
to_intel_sdvo_connector(connector);
|
||||
const struct drm_connector_state *conn_state = connector->state;
|
||||
|
|
@ -2310,7 +2311,7 @@ static int intel_sdvo_get_tv_modes(struct drm_connector *connector)
|
|||
int num_modes = 0;
|
||||
int i;
|
||||
|
||||
drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s]\n",
|
||||
drm_dbg_kms(display->drm, "[CONNECTOR:%d:%s]\n",
|
||||
connector->base.id, connector->name);
|
||||
|
||||
if (!intel_display_driver_check_access(display))
|
||||
|
|
@ -2352,9 +2353,9 @@ static int intel_sdvo_get_tv_modes(struct drm_connector *connector)
|
|||
|
||||
static int intel_sdvo_get_lvds_modes(struct drm_connector *connector)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(connector->dev);
|
||||
struct intel_display *display = to_intel_display(connector->dev);
|
||||
|
||||
drm_dbg_kms(&dev_priv->drm, "[CONNECTOR:%d:%s]\n",
|
||||
drm_dbg_kms(display->drm, "[CONNECTOR:%d:%s]\n",
|
||||
connector->base.id, connector->name);
|
||||
|
||||
return intel_panel_get_modes(to_intel_connector(connector));
|
||||
|
|
@ -2618,14 +2619,14 @@ static struct intel_sdvo_ddc *
|
|||
intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo,
|
||||
struct intel_sdvo_connector *connector)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&sdvo->base);
|
||||
const struct sdvo_device_mapping *mapping;
|
||||
int ddc_bus;
|
||||
|
||||
if (sdvo->base.port == PORT_B)
|
||||
mapping = &dev_priv->display.vbt.sdvo_mappings[0];
|
||||
mapping = &display->vbt.sdvo_mappings[0];
|
||||
else
|
||||
mapping = &dev_priv->display.vbt.sdvo_mappings[1];
|
||||
mapping = &display->vbt.sdvo_mappings[1];
|
||||
|
||||
if (mapping->initialized)
|
||||
ddc_bus = (mapping->ddc_pin & 0xf0) >> 4;
|
||||
|
|
@ -2642,14 +2643,13 @@ static void
|
|||
intel_sdvo_select_i2c_bus(struct intel_sdvo *sdvo)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(&sdvo->base);
|
||||
struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
|
||||
const struct sdvo_device_mapping *mapping;
|
||||
u8 pin;
|
||||
|
||||
if (sdvo->base.port == PORT_B)
|
||||
mapping = &dev_priv->display.vbt.sdvo_mappings[0];
|
||||
mapping = &display->vbt.sdvo_mappings[0];
|
||||
else
|
||||
mapping = &dev_priv->display.vbt.sdvo_mappings[1];
|
||||
mapping = &display->vbt.sdvo_mappings[1];
|
||||
|
||||
if (mapping->initialized &&
|
||||
intel_gmbus_is_valid_pin(display, mapping->i2c_pin))
|
||||
|
|
@ -2657,7 +2657,7 @@ intel_sdvo_select_i2c_bus(struct intel_sdvo *sdvo)
|
|||
else
|
||||
pin = GMBUS_PIN_DPB;
|
||||
|
||||
drm_dbg_kms(&dev_priv->drm, "[ENCODER:%d:%s] I2C pin %d, target addr 0x%x\n",
|
||||
drm_dbg_kms(display->drm, "[ENCODER:%d:%s] I2C pin %d, target addr 0x%x\n",
|
||||
sdvo->base.base.base.id, sdvo->base.base.name,
|
||||
pin, sdvo->target_addr);
|
||||
|
||||
|
|
@ -2687,15 +2687,15 @@ intel_sdvo_is_hdmi_connector(struct intel_sdvo *intel_sdvo)
|
|||
static u8
|
||||
intel_sdvo_get_target_addr(struct intel_sdvo *sdvo)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&sdvo->base);
|
||||
const struct sdvo_device_mapping *my_mapping, *other_mapping;
|
||||
|
||||
if (sdvo->base.port == PORT_B) {
|
||||
my_mapping = &dev_priv->display.vbt.sdvo_mappings[0];
|
||||
other_mapping = &dev_priv->display.vbt.sdvo_mappings[1];
|
||||
my_mapping = &display->vbt.sdvo_mappings[0];
|
||||
other_mapping = &display->vbt.sdvo_mappings[1];
|
||||
} else {
|
||||
my_mapping = &dev_priv->display.vbt.sdvo_mappings[1];
|
||||
other_mapping = &dev_priv->display.vbt.sdvo_mappings[0];
|
||||
my_mapping = &display->vbt.sdvo_mappings[1];
|
||||
other_mapping = &display->vbt.sdvo_mappings[0];
|
||||
}
|
||||
|
||||
/* If the BIOS described our SDVO device, take advantage of it. */
|
||||
|
|
@ -2731,7 +2731,7 @@ static int
|
|||
intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
|
||||
struct intel_sdvo *encoder)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(encoder->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&encoder->base);
|
||||
struct intel_sdvo_ddc *ddc = NULL;
|
||||
int ret;
|
||||
|
||||
|
|
@ -2756,7 +2756,7 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
|
|||
intel_connector_attach_encoder(&connector->base, &encoder->base);
|
||||
|
||||
if (ddc)
|
||||
drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s] using %s\n",
|
||||
drm_dbg_kms(display->drm, "[CONNECTOR:%d:%s] using %s\n",
|
||||
connector->base.base.base.id, connector->base.base.name,
|
||||
ddc->ddc.name);
|
||||
|
||||
|
|
@ -2799,14 +2799,14 @@ static struct intel_sdvo_connector *intel_sdvo_connector_alloc(void)
|
|||
static bool
|
||||
intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, u16 type)
|
||||
{
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
struct drm_encoder *encoder = &intel_sdvo->base.base;
|
||||
struct drm_connector *connector;
|
||||
struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
|
||||
struct drm_i915_private *i915 = to_i915(intel_encoder->base.dev);
|
||||
struct intel_connector *intel_connector;
|
||||
struct intel_sdvo_connector *intel_sdvo_connector;
|
||||
|
||||
drm_dbg_kms(&i915->drm, "initialising DVI type 0x%x\n", type);
|
||||
drm_dbg_kms(display->drm, "initialising DVI type 0x%x\n", type);
|
||||
|
||||
intel_sdvo_connector = intel_sdvo_connector_alloc();
|
||||
if (!intel_sdvo_connector)
|
||||
|
|
@ -2852,13 +2852,13 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, u16 type)
|
|||
static bool
|
||||
intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, u16 type)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
struct drm_encoder *encoder = &intel_sdvo->base.base;
|
||||
struct drm_connector *connector;
|
||||
struct intel_connector *intel_connector;
|
||||
struct intel_sdvo_connector *intel_sdvo_connector;
|
||||
|
||||
drm_dbg_kms(&i915->drm, "initialising TV type 0x%x\n", type);
|
||||
drm_dbg_kms(display->drm, "initialising TV type 0x%x\n", type);
|
||||
|
||||
intel_sdvo_connector = intel_sdvo_connector_alloc();
|
||||
if (!intel_sdvo_connector)
|
||||
|
|
@ -2892,13 +2892,13 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, u16 type)
|
|||
static bool
|
||||
intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, u16 type)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
struct drm_encoder *encoder = &intel_sdvo->base.base;
|
||||
struct drm_connector *connector;
|
||||
struct intel_connector *intel_connector;
|
||||
struct intel_sdvo_connector *intel_sdvo_connector;
|
||||
|
||||
drm_dbg_kms(&i915->drm, "initialising analog type 0x%x\n", type);
|
||||
drm_dbg_kms(display->drm, "initialising analog type 0x%x\n", type);
|
||||
|
||||
intel_sdvo_connector = intel_sdvo_connector_alloc();
|
||||
if (!intel_sdvo_connector)
|
||||
|
|
@ -2926,12 +2926,11 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type)
|
|||
{
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
struct drm_encoder *encoder = &intel_sdvo->base.base;
|
||||
struct drm_i915_private *i915 = to_i915(encoder->dev);
|
||||
struct drm_connector *connector;
|
||||
struct intel_connector *intel_connector;
|
||||
struct intel_sdvo_connector *intel_sdvo_connector;
|
||||
|
||||
drm_dbg_kms(&i915->drm, "initialising LVDS type 0x%x\n", type);
|
||||
drm_dbg_kms(display->drm, "initialising LVDS type 0x%x\n", type);
|
||||
|
||||
intel_sdvo_connector = intel_sdvo_connector_alloc();
|
||||
if (!intel_sdvo_connector)
|
||||
|
|
@ -2961,12 +2960,12 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type)
|
|||
intel_panel_add_vbt_sdvo_fixed_mode(intel_connector);
|
||||
|
||||
if (!intel_panel_preferred_fixed_mode(intel_connector)) {
|
||||
mutex_lock(&i915->drm.mode_config.mutex);
|
||||
mutex_lock(&display->drm->mode_config.mutex);
|
||||
|
||||
intel_ddc_get_modes(connector, connector->ddc);
|
||||
intel_panel_add_edid_fixed_modes(intel_connector, false);
|
||||
|
||||
mutex_unlock(&i915->drm.mode_config.mutex);
|
||||
mutex_unlock(&display->drm->mode_config.mutex);
|
||||
}
|
||||
|
||||
intel_panel_init(intel_connector, NULL);
|
||||
|
|
@ -3015,7 +3014,7 @@ static bool intel_sdvo_output_init(struct intel_sdvo *sdvo, u16 type)
|
|||
static bool
|
||||
intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
static const u16 probe_order[] = {
|
||||
SDVO_OUTPUT_TMDS0,
|
||||
SDVO_OUTPUT_TMDS1,
|
||||
|
|
@ -3034,7 +3033,7 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo)
|
|||
flags = intel_sdvo_filter_output_flags(intel_sdvo->caps.output_flags);
|
||||
|
||||
if (flags == 0) {
|
||||
drm_dbg_kms(&i915->drm,
|
||||
drm_dbg_kms(display->drm,
|
||||
"%s: Unknown SDVO output type (0x%04x)\n",
|
||||
SDVO_NAME(intel_sdvo), intel_sdvo->caps.output_flags);
|
||||
return false;
|
||||
|
|
@ -3057,11 +3056,11 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo)
|
|||
|
||||
static void intel_sdvo_output_cleanup(struct intel_sdvo *intel_sdvo)
|
||||
{
|
||||
struct drm_device *dev = intel_sdvo->base.base.dev;
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
struct drm_connector *connector, *tmp;
|
||||
|
||||
list_for_each_entry_safe(connector, tmp,
|
||||
&dev->mode_config.connector_list, head) {
|
||||
&display->drm->mode_config.connector_list, head) {
|
||||
if (intel_attached_encoder(to_intel_connector(connector)) == &intel_sdvo->base) {
|
||||
drm_connector_unregister(connector);
|
||||
intel_connector_destroy(connector);
|
||||
|
|
@ -3073,7 +3072,7 @@ static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,
|
|||
struct intel_sdvo_connector *intel_sdvo_connector,
|
||||
int type)
|
||||
{
|
||||
struct drm_device *dev = intel_sdvo->base.base.dev;
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
struct intel_sdvo_tv_format format;
|
||||
u32 format_map, i;
|
||||
|
||||
|
|
@ -3098,7 +3097,7 @@ static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,
|
|||
|
||||
|
||||
intel_sdvo_connector->tv_format =
|
||||
drm_property_create(dev, DRM_MODE_PROP_ENUM,
|
||||
drm_property_create(display->drm, DRM_MODE_PROP_ENUM,
|
||||
"mode", intel_sdvo_connector->format_supported_num);
|
||||
if (!intel_sdvo_connector->tv_format)
|
||||
return false;
|
||||
|
|
@ -3120,12 +3119,12 @@ static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,
|
|||
!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_##NAME, &response, 2)) \
|
||||
return false; \
|
||||
intel_sdvo_connector->name = \
|
||||
drm_property_create_range(dev, 0, #name, 0, data_value[0]); \
|
||||
drm_property_create_range(display->drm, 0, #name, 0, data_value[0]); \
|
||||
if (!intel_sdvo_connector->name) return false; \
|
||||
state_assignment = response; \
|
||||
drm_object_attach_property(&connector->base, \
|
||||
intel_sdvo_connector->name, 0); \
|
||||
drm_dbg_kms(dev, #name ": max %d, default %d, current %d\n", \
|
||||
drm_dbg_kms(display->drm, #name ": max %d, default %d, current %d\n", \
|
||||
data_value[0], data_value[1], response); \
|
||||
} \
|
||||
} while (0)
|
||||
|
|
@ -3137,8 +3136,7 @@ intel_sdvo_create_enhance_property_tv(struct intel_sdvo *intel_sdvo,
|
|||
struct intel_sdvo_connector *intel_sdvo_connector,
|
||||
struct intel_sdvo_enhancements_reply enhancements)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct drm_device *dev = intel_sdvo->base.base.dev;
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
struct drm_connector *connector = &intel_sdvo_connector->base.base;
|
||||
struct drm_connector_state *conn_state = connector->state;
|
||||
struct intel_sdvo_connector_state *sdvo_state =
|
||||
|
|
@ -3161,7 +3159,7 @@ intel_sdvo_create_enhance_property_tv(struct intel_sdvo *intel_sdvo,
|
|||
|
||||
intel_sdvo_connector->max_hscan = data_value[0];
|
||||
intel_sdvo_connector->left =
|
||||
drm_property_create_range(dev, 0, "left_margin", 0, data_value[0]);
|
||||
drm_property_create_range(display->drm, 0, "left_margin", 0, data_value[0]);
|
||||
if (!intel_sdvo_connector->left)
|
||||
return false;
|
||||
|
||||
|
|
@ -3169,13 +3167,13 @@ intel_sdvo_create_enhance_property_tv(struct intel_sdvo *intel_sdvo,
|
|||
intel_sdvo_connector->left, 0);
|
||||
|
||||
intel_sdvo_connector->right =
|
||||
drm_property_create_range(dev, 0, "right_margin", 0, data_value[0]);
|
||||
drm_property_create_range(display->drm, 0, "right_margin", 0, data_value[0]);
|
||||
if (!intel_sdvo_connector->right)
|
||||
return false;
|
||||
|
||||
drm_object_attach_property(&connector->base,
|
||||
intel_sdvo_connector->right, 0);
|
||||
drm_dbg_kms(&i915->drm, "h_overscan: max %d, default %d, current %d\n",
|
||||
drm_dbg_kms(display->drm, "h_overscan: max %d, default %d, current %d\n",
|
||||
data_value[0], data_value[1], response);
|
||||
}
|
||||
|
||||
|
|
@ -3194,7 +3192,7 @@ intel_sdvo_create_enhance_property_tv(struct intel_sdvo *intel_sdvo,
|
|||
|
||||
intel_sdvo_connector->max_vscan = data_value[0];
|
||||
intel_sdvo_connector->top =
|
||||
drm_property_create_range(dev, 0,
|
||||
drm_property_create_range(display->drm, 0,
|
||||
"top_margin", 0, data_value[0]);
|
||||
if (!intel_sdvo_connector->top)
|
||||
return false;
|
||||
|
|
@ -3203,14 +3201,14 @@ intel_sdvo_create_enhance_property_tv(struct intel_sdvo *intel_sdvo,
|
|||
intel_sdvo_connector->top, 0);
|
||||
|
||||
intel_sdvo_connector->bottom =
|
||||
drm_property_create_range(dev, 0,
|
||||
drm_property_create_range(display->drm, 0,
|
||||
"bottom_margin", 0, data_value[0]);
|
||||
if (!intel_sdvo_connector->bottom)
|
||||
return false;
|
||||
|
||||
drm_object_attach_property(&connector->base,
|
||||
intel_sdvo_connector->bottom, 0);
|
||||
drm_dbg_kms(&i915->drm, "v_overscan: max %d, default %d, current %d\n",
|
||||
drm_dbg_kms(display->drm, "v_overscan: max %d, default %d, current %d\n",
|
||||
data_value[0], data_value[1], response);
|
||||
}
|
||||
|
||||
|
|
@ -3233,13 +3231,13 @@ intel_sdvo_create_enhance_property_tv(struct intel_sdvo *intel_sdvo,
|
|||
|
||||
sdvo_state->tv.dot_crawl = response & 0x1;
|
||||
intel_sdvo_connector->dot_crawl =
|
||||
drm_property_create_range(dev, 0, "dot_crawl", 0, 1);
|
||||
drm_property_create_range(display->drm, 0, "dot_crawl", 0, 1);
|
||||
if (!intel_sdvo_connector->dot_crawl)
|
||||
return false;
|
||||
|
||||
drm_object_attach_property(&connector->base,
|
||||
intel_sdvo_connector->dot_crawl, 0);
|
||||
drm_dbg_kms(&i915->drm, "dot crawl: current %d\n", response);
|
||||
drm_dbg_kms(display->drm, "dot crawl: current %d\n", response);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -3250,7 +3248,7 @@ intel_sdvo_create_enhance_property_lvds(struct intel_sdvo *intel_sdvo,
|
|||
struct intel_sdvo_connector *intel_sdvo_connector,
|
||||
struct intel_sdvo_enhancements_reply enhancements)
|
||||
{
|
||||
struct drm_device *dev = intel_sdvo->base.base.dev;
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
struct drm_connector *connector = &intel_sdvo_connector->base.base;
|
||||
u16 response, data_value[2];
|
||||
|
||||
|
|
@ -3264,7 +3262,7 @@ intel_sdvo_create_enhance_property_lvds(struct intel_sdvo *intel_sdvo,
|
|||
static bool intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo,
|
||||
struct intel_sdvo_connector *intel_sdvo_connector)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev);
|
||||
struct intel_display *display = to_intel_display(&intel_sdvo->base);
|
||||
union {
|
||||
struct intel_sdvo_enhancements_reply reply;
|
||||
u16 response;
|
||||
|
|
@ -3276,7 +3274,7 @@ static bool intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo,
|
|||
SDVO_CMD_GET_SUPPORTED_ENHANCEMENTS,
|
||||
&enhancements, sizeof(enhancements)) ||
|
||||
enhancements.response == 0) {
|
||||
drm_dbg_kms(&i915->drm, "No enhancement is supported\n");
|
||||
drm_dbg_kms(display->drm, "No enhancement is supported\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -3351,8 +3349,8 @@ static int
|
|||
intel_sdvo_init_ddc_proxy(struct intel_sdvo_ddc *ddc,
|
||||
struct intel_sdvo *sdvo, int ddc_bus)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
|
||||
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
||||
struct intel_display *display = to_intel_display(&sdvo->base);
|
||||
struct pci_dev *pdev = to_pci_dev(display->drm->dev);
|
||||
|
||||
ddc->sdvo = sdvo;
|
||||
ddc->ddc_bus = ddc_bus;
|
||||
|
|
@ -3368,25 +3366,26 @@ intel_sdvo_init_ddc_proxy(struct intel_sdvo_ddc *ddc,
|
|||
return i2c_add_adapter(&ddc->ddc);
|
||||
}
|
||||
|
||||
static bool is_sdvo_port_valid(struct drm_i915_private *dev_priv, enum port port)
|
||||
static bool is_sdvo_port_valid(struct intel_display *display, enum port port)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(display->drm);
|
||||
|
||||
if (HAS_PCH_SPLIT(dev_priv))
|
||||
return port == PORT_B;
|
||||
else
|
||||
return port == PORT_B || port == PORT_C;
|
||||
}
|
||||
|
||||
static bool assert_sdvo_port_valid(struct drm_i915_private *dev_priv,
|
||||
enum port port)
|
||||
static bool assert_sdvo_port_valid(struct intel_display *display, enum port port)
|
||||
{
|
||||
return !drm_WARN(&dev_priv->drm, !is_sdvo_port_valid(dev_priv, port),
|
||||
return !drm_WARN(display->drm, !is_sdvo_port_valid(display, port),
|
||||
"Platform does not support SDVO %c\n", port_name(port));
|
||||
}
|
||||
|
||||
bool intel_sdvo_init(struct drm_i915_private *dev_priv,
|
||||
bool intel_sdvo_init(struct intel_display *display,
|
||||
i915_reg_t sdvo_reg, enum port port)
|
||||
{
|
||||
struct intel_display *display = &dev_priv->display;
|
||||
struct drm_i915_private *dev_priv = to_i915(display->drm);
|
||||
struct intel_encoder *intel_encoder;
|
||||
struct intel_sdvo *intel_sdvo;
|
||||
int i;
|
||||
|
|
@ -3394,7 +3393,7 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
|
|||
if (!assert_port_valid(display, port))
|
||||
return false;
|
||||
|
||||
if (!assert_sdvo_port_valid(dev_priv, port))
|
||||
if (!assert_sdvo_port_valid(display, port))
|
||||
return false;
|
||||
|
||||
intel_sdvo = kzalloc(sizeof(*intel_sdvo), GFP_KERNEL);
|
||||
|
|
@ -3407,7 +3406,7 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
|
|||
intel_encoder->power_domain = POWER_DOMAIN_PORT_OTHER;
|
||||
intel_encoder->port = port;
|
||||
|
||||
drm_encoder_init(&dev_priv->drm, &intel_encoder->base,
|
||||
drm_encoder_init(display->drm, &intel_encoder->base,
|
||||
&intel_sdvo_enc_funcs, 0,
|
||||
"SDVO %c", port_name(port));
|
||||
|
||||
|
|
@ -3421,7 +3420,7 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
|
|||
u8 byte;
|
||||
|
||||
if (!intel_sdvo_read_byte(intel_sdvo, i, &byte)) {
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
drm_dbg_kms(display->drm,
|
||||
"No SDVO device found on %s\n",
|
||||
SDVO_NAME(intel_sdvo));
|
||||
goto err;
|
||||
|
|
@ -3459,7 +3458,7 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
|
|||
}
|
||||
|
||||
if (!intel_sdvo_output_setup(intel_sdvo)) {
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
drm_dbg_kms(display->drm,
|
||||
"SDVO output failed to setup on %s\n",
|
||||
SDVO_NAME(intel_sdvo));
|
||||
/* Output_setup can leave behind connectors! */
|
||||
|
|
@ -3496,7 +3495,7 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv,
|
|||
&intel_sdvo->pixel_clock_max))
|
||||
goto err_output;
|
||||
|
||||
drm_dbg_kms(&dev_priv->drm, "%s device VID/DID: %02X:%02X.%02X, "
|
||||
drm_dbg_kms(display->drm, "%s device VID/DID: %02X:%02X.%02X, "
|
||||
"clock range %dMHz - %dMHz, "
|
||||
"num inputs: %d, "
|
||||
"output 1: %c, output 2: %c\n",
|
||||
|
|
|
|||
|
|
@ -10,22 +10,22 @@
|
|||
|
||||
#include "i915_reg_defs.h"
|
||||
|
||||
struct drm_i915_private;
|
||||
enum pipe;
|
||||
enum port;
|
||||
struct intel_display;
|
||||
|
||||
#ifdef I915
|
||||
bool intel_sdvo_port_enabled(struct drm_i915_private *dev_priv,
|
||||
bool intel_sdvo_port_enabled(struct intel_display *display,
|
||||
i915_reg_t sdvo_reg, enum pipe *pipe);
|
||||
bool intel_sdvo_init(struct drm_i915_private *dev_priv,
|
||||
bool intel_sdvo_init(struct intel_display *display,
|
||||
i915_reg_t reg, enum port port);
|
||||
#else
|
||||
static inline bool intel_sdvo_port_enabled(struct drm_i915_private *dev_priv,
|
||||
static inline bool intel_sdvo_port_enabled(struct intel_display *display,
|
||||
i915_reg_t sdvo_reg, enum pipe *pipe)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
static inline bool intel_sdvo_init(struct drm_i915_private *dev_priv,
|
||||
static inline bool intel_sdvo_init(struct intel_display *display,
|
||||
i915_reg_t reg, enum port port)
|
||||
{
|
||||
return false;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user