Skip to content

Commit

Permalink
drm/i915/gmbus: convert to struct intel_display
Browse files Browse the repository at this point in the history
struct intel_display will replace struct drm_i915_private as the main
device pointer for display code. Switch gmbus code over to it.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/d784e4799ab5095baa5c8fd840920066878c6273.1730146000.git.jani.nikula@intel.com
Jani Nikula committed Oct 30, 2024
1 parent 331313a commit fdc3873
Showing 14 changed files with 202 additions and 186 deletions.
6 changes: 2 additions & 4 deletions drivers/gpu/drm/i915/display/intel_bios.c
Original file line number Diff line number Diff line change
@@ -2787,7 +2787,6 @@ static bool child_device_size_valid(struct intel_display *display, int size)
static void
parse_general_definitions(struct intel_display *display)
{
struct drm_i915_private *i915 = to_i915(display->drm);
const struct bdb_general_definitions *defs;
struct intel_bios_encoder_data *devdata;
const struct child_device_config *child;
@@ -2812,7 +2811,7 @@ parse_general_definitions(struct intel_display *display)

bus_pin = defs->crt_ddc_gmbus_pin;
drm_dbg_kms(display->drm, "crt_ddc_bus_pin: %d\n", bus_pin);
if (intel_gmbus_is_valid_pin(i915, bus_pin))
if (intel_gmbus_is_valid_pin(display, bus_pin))
display->vbt.crt_ddc_pin = bus_pin;

if (!child_device_size_valid(display, defs->child_dev_size))
@@ -3329,7 +3328,6 @@ bool intel_bios_is_tv_present(struct intel_display *display)
*/
bool intel_bios_is_lvds_present(struct intel_display *display, u8 *i2c_pin)
{
struct drm_i915_private *i915 = to_i915(display->drm);
const struct intel_bios_encoder_data *devdata;

if (list_empty(&display->vbt.display_devices))
@@ -3346,7 +3344,7 @@ bool intel_bios_is_lvds_present(struct intel_display *display, u8 *i2c_pin)
child->device_type != DEVICE_TYPE_LFP)
continue;

if (intel_gmbus_is_valid_pin(i915, child->i2c_pin))
if (intel_gmbus_is_valid_pin(display, child->i2c_pin))
*i2c_pin = child->i2c_pin;

/* However, we cannot trust the BIOS writers to populate
6 changes: 4 additions & 2 deletions drivers/gpu/drm/i915/display/intel_crt.c
Original file line number Diff line number Diff line change
@@ -935,6 +935,7 @@ intel_crt_detect(struct drm_connector *connector,

static int intel_crt_get_modes(struct drm_connector *connector)
{
struct intel_display *display = to_intel_display(connector->dev);
struct drm_device *dev = connector->dev;
struct drm_i915_private *dev_priv = to_i915(dev);
struct intel_crt *crt = intel_attached_crt(to_intel_connector(connector));
@@ -954,7 +955,7 @@ static int intel_crt_get_modes(struct drm_connector *connector)
goto out;

/* Try to probe digital port for output in DVI-I -> VGA mode. */
ddc = intel_gmbus_get_adapter(dev_priv, GMBUS_PIN_DPB);
ddc = intel_gmbus_get_adapter(display, GMBUS_PIN_DPB);
ret = intel_crt_ddc_get_modes(connector, ddc);

out:
@@ -1009,6 +1010,7 @@ static const struct drm_encoder_funcs intel_crt_enc_funcs = {

void intel_crt_init(struct drm_i915_private *dev_priv)
{
struct intel_display *display = &dev_priv->display;
struct drm_connector *connector;
struct intel_crt *crt;
struct intel_connector *intel_connector;
@@ -1057,7 +1059,7 @@ void intel_crt_init(struct drm_i915_private *dev_priv)
drm_connector_init_with_ddc(&dev_priv->drm, connector,
&intel_crt_connector_funcs,
DRM_MODE_CONNECTOR_VGA,
intel_gmbus_get_adapter(dev_priv, ddc_pin));
intel_gmbus_get_adapter(display, ddc_pin));

drm_encoder_init(&dev_priv->drm, &crt->base.base, &intel_crt_enc_funcs,
DRM_MODE_ENCODER_DAC, "CRT");
4 changes: 2 additions & 2 deletions drivers/gpu/drm/i915/display/intel_display_driver.c
Original file line number Diff line number Diff line change
@@ -432,7 +432,7 @@ int intel_display_driver_probe_nogem(struct drm_i915_private *i915)

intel_pps_setup(display);

intel_gmbus_setup(i915);
intel_gmbus_setup(display);

drm_dbg_kms(&i915->drm, "%d display pipe%s available.\n",
INTEL_NUM_PIPES(i915),
@@ -608,7 +608,7 @@ void intel_display_driver_remove_noirq(struct drm_i915_private *i915)

intel_overlay_cleanup(i915);

intel_gmbus_teardown(i915);
intel_gmbus_teardown(display);

destroy_workqueue(i915->display.wq.flip);
destroy_workqueue(i915->display.wq.modeset);
11 changes: 6 additions & 5 deletions drivers/gpu/drm/i915/display/intel_display_irq.c
Original file line number Diff line number Diff line change
@@ -543,12 +543,13 @@ void i965_pipestat_irq_handler(struct drm_i915_private *dev_priv,
intel_opregion_asle_intr(display);

if (pipe_stats[0] & PIPE_GMBUS_INTERRUPT_STATUS)
intel_gmbus_irq_handler(dev_priv);
intel_gmbus_irq_handler(display);
}

void valleyview_pipestat_irq_handler(struct drm_i915_private *dev_priv,
u32 pipe_stats[I915_MAX_PIPES])
{
struct intel_display *display = &dev_priv->display;
enum pipe pipe;

for_each_pipe(dev_priv, pipe) {
@@ -566,7 +567,7 @@ void valleyview_pipestat_irq_handler(struct drm_i915_private *dev_priv,
}

if (pipe_stats[0] & PIPE_GMBUS_INTERRUPT_STATUS)
intel_gmbus_irq_handler(dev_priv);
intel_gmbus_irq_handler(display);
}

static void ibx_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir)
@@ -588,7 +589,7 @@ static void ibx_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir)
intel_dp_aux_irq_handler(display);

if (pch_iir & SDE_GMBUS)
intel_gmbus_irq_handler(dev_priv);
intel_gmbus_irq_handler(display);

if (pch_iir & SDE_AUDIO_HDCP_MASK)
drm_dbg(&dev_priv->drm, "PCH HDCP audio interrupt\n");
@@ -677,7 +678,7 @@ static void cpt_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir)
intel_dp_aux_irq_handler(display);

if (pch_iir & SDE_GMBUS_CPT)
intel_gmbus_irq_handler(dev_priv);
intel_gmbus_irq_handler(display);

if (pch_iir & SDE_AUDIO_CP_REQ_CPT)
drm_dbg(&dev_priv->drm, "Audio CP request interrupt\n");
@@ -1109,7 +1110,7 @@ void gen8_de_irq_handler(struct drm_i915_private *dev_priv, u32 master_ctl)

if ((IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) &&
(iir & BXT_DE_PORT_GMBUS)) {
intel_gmbus_irq_handler(dev_priv);
intel_gmbus_irq_handler(display);
found = true;
}

5 changes: 3 additions & 2 deletions drivers/gpu/drm/i915/display/intel_dsi_vbt.c
Original file line number Diff line number Diff line change
@@ -323,6 +323,7 @@ enum {
static void icl_native_gpio_set_value(struct drm_i915_private *dev_priv,
int gpio, bool value)
{
struct intel_display *display = &dev_priv->display;
int index;

if (drm_WARN_ON(&dev_priv->drm, DISPLAY_VER(dev_priv) == 11 && gpio >= MIPI_RESET_2))
@@ -367,7 +368,7 @@ static void icl_native_gpio_set_value(struct drm_i915_private *dev_priv,
case MIPI_AVEE_EN_2:
index = gpio == MIPI_AVEE_EN_1 ? 1 : 2;

intel_de_rmw(dev_priv, GPIO(dev_priv, index),
intel_de_rmw(display, GPIO(display, index),
GPIO_CLOCK_VAL_OUT,
GPIO_CLOCK_DIR_MASK | GPIO_CLOCK_DIR_OUT |
GPIO_CLOCK_VAL_MASK | (value ? GPIO_CLOCK_VAL_OUT : 0));
@@ -376,7 +377,7 @@ static void icl_native_gpio_set_value(struct drm_i915_private *dev_priv,
case MIPI_VIO_EN_2:
index = gpio == MIPI_VIO_EN_1 ? 1 : 2;

intel_de_rmw(dev_priv, GPIO(dev_priv, index),
intel_de_rmw(display, GPIO(display, index),
GPIO_DATA_VAL_OUT,
GPIO_DATA_DIR_MASK | GPIO_DATA_DIR_OUT |
GPIO_DATA_VAL_MASK | (value ? GPIO_DATA_VAL_OUT : 0));
8 changes: 5 additions & 3 deletions drivers/gpu/drm/i915/display/intel_dvo.c
Original file line number Diff line number Diff line change
@@ -417,6 +417,7 @@ static bool intel_dvo_init_dev(struct drm_i915_private *dev_priv,
struct intel_dvo *intel_dvo,
const struct intel_dvo_device *dvo)
{
struct intel_display *display = &dev_priv->display;
struct i2c_adapter *i2c;
u32 dpll[I915_MAX_PIPES];
enum pipe pipe;
@@ -428,7 +429,7 @@ static bool intel_dvo_init_dev(struct drm_i915_private *dev_priv,
* special cases, but otherwise default to what's defined
* in the spec.
*/
if (intel_gmbus_is_valid_pin(dev_priv, dvo->gpio))
if (intel_gmbus_is_valid_pin(display, dvo->gpio))
gpio = dvo->gpio;
else if (dvo->type == INTEL_DVO_CHIP_LVDS)
gpio = GMBUS_PIN_SSC;
@@ -440,7 +441,7 @@ static bool intel_dvo_init_dev(struct drm_i915_private *dev_priv,
* It appears that everything is on GPIOE except for panels
* on i830 laptops, which are on GPIOB (DVOA).
*/
i2c = intel_gmbus_get_adapter(dev_priv, gpio);
i2c = intel_gmbus_get_adapter(display, gpio);

intel_dvo->dev = *dvo;

@@ -489,6 +490,7 @@ static bool intel_dvo_probe(struct drm_i915_private *i915,

void intel_dvo_init(struct drm_i915_private *i915)
{
struct intel_display *display = &i915->display;
struct intel_connector *connector;
struct intel_encoder *encoder;
struct intel_dvo *intel_dvo;
@@ -549,7 +551,7 @@ void intel_dvo_init(struct drm_i915_private *i915)
drm_connector_init_with_ddc(&i915->drm, &connector->base,
&intel_dvo_connector_funcs,
intel_dvo_connector_type(&intel_dvo->dev),
intel_gmbus_get_adapter(i915, GMBUS_PIN_DPC));
intel_gmbus_get_adapter(display, GMBUS_PIN_DPC));

drm_connector_helper_add(&connector->base,
&intel_dvo_connector_helper_funcs);
Loading

0 comments on commit fdc3873

Please sign in to comment.