drm/i915/gmbus: convert to struct intel_display
authorJani Nikula <jani.nikula@intel.com>
Mon, 28 Oct 2024 20:07:19 +0000 (22:07 +0200)
committerJani Nikula <jani.nikula@intel.com>
Wed, 30 Oct 2024 11:51:26 +0000 (13:51 +0200)
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
14 files changed:
drivers/gpu/drm/i915/display/intel_bios.c
drivers/gpu/drm/i915/display/intel_crt.c
drivers/gpu/drm/i915/display/intel_display_driver.c
drivers/gpu/drm/i915/display/intel_display_irq.c
drivers/gpu/drm/i915/display/intel_dsi_vbt.c
drivers/gpu/drm/i915/display/intel_dvo.c
drivers/gpu/drm/i915/display/intel_gmbus.c
drivers/gpu/drm/i915/display/intel_gmbus.h
drivers/gpu/drm/i915/display/intel_gmbus_regs.h
drivers/gpu/drm/i915/display/intel_hdmi.c
drivers/gpu/drm/i915/display/intel_hotplug_irq.c
drivers/gpu/drm/i915/display/intel_lvds.c
drivers/gpu/drm/i915/display/intel_sdvo.c
drivers/gpu/drm/i915/i915_suspend.c

index ef3fc83..a4cdd82 100644 (file)
@@ -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
index fd78adb..8222b1c 100644 (file)
@@ -935,6 +935,7 @@ out:
 
 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");
index 130853f..f83adab 100644 (file)
@@ -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);
index a4f42ed..0478fe3 100644 (file)
@@ -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;
                        }
 
index f0e3be0..e8129a7 100644 (file)
@@ -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));
index 9508cea..2d5ffb3 100644 (file)
@@ -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);
index 6470f75..e3d938c 100644 (file)
@@ -48,7 +48,7 @@ struct intel_gmbus {
        u32 reg0;
        i915_reg_t gpio_reg;
        struct i2c_algo_bit_data bit_algo;
-       struct drm_i915_private *i915;
+       struct intel_display *display;
 };
 
 enum gmbus_gpio {
@@ -149,9 +149,10 @@ static const struct gmbus_pin gmbus_pins_mtp[] = {
        [GMBUS_PIN_12_TC4_ICP] = { "tc4", GPIOM },
 };
 
-static const struct gmbus_pin *get_gmbus_pin(struct drm_i915_private *i915,
+static const struct gmbus_pin *get_gmbus_pin(struct intel_display *display,
                                             unsigned int pin)
 {
+       struct drm_i915_private *i915 = to_i915(display->drm);
        const struct gmbus_pin *pins;
        size_t size;
 
@@ -173,7 +174,7 @@ static const struct gmbus_pin *get_gmbus_pin(struct drm_i915_private *i915,
        } else if (IS_GEMINILAKE(i915) || IS_BROXTON(i915)) {
                pins = gmbus_pins_bxt;
                size = ARRAY_SIZE(gmbus_pins_bxt);
-       } else if (DISPLAY_VER(i915) == 9) {
+       } else if (DISPLAY_VER(display) == 9) {
                pins = gmbus_pins_skl;
                size = ARRAY_SIZE(gmbus_pins_skl);
        } else if (IS_BROADWELL(i915)) {
@@ -190,9 +191,9 @@ static const struct gmbus_pin *get_gmbus_pin(struct drm_i915_private *i915,
        return &pins[pin];
 }
 
-bool intel_gmbus_is_valid_pin(struct drm_i915_private *i915, unsigned int pin)
+bool intel_gmbus_is_valid_pin(struct intel_display *display, unsigned int pin)
 {
-       return get_gmbus_pin(i915, pin);
+       return get_gmbus_pin(display, pin);
 }
 
 /* Intel GPIO access functions */
@@ -206,42 +207,45 @@ to_intel_gmbus(struct i2c_adapter *i2c)
 }
 
 void
-intel_gmbus_reset(struct drm_i915_private *i915)
+intel_gmbus_reset(struct intel_display *display)
 {
-       intel_de_write(i915, GMBUS0(i915), 0);
-       intel_de_write(i915, GMBUS4(i915), 0);
+       intel_de_write(display, GMBUS0(display), 0);
+       intel_de_write(display, GMBUS4(display), 0);
 }
 
-static void pnv_gmbus_clock_gating(struct drm_i915_private *i915,
+static void pnv_gmbus_clock_gating(struct intel_display *display,
                                   bool enable)
 {
        /* When using bit bashing for I2C, this bit needs to be set to 1 */
-       intel_de_rmw(i915, DSPCLK_GATE_D(i915), PNV_GMBUSUNIT_CLOCK_GATE_DISABLE,
+       intel_de_rmw(display, DSPCLK_GATE_D(display),
+                    PNV_GMBUSUNIT_CLOCK_GATE_DISABLE,
                     !enable ? PNV_GMBUSUNIT_CLOCK_GATE_DISABLE : 0);
 }
 
-static void pch_gmbus_clock_gating(struct drm_i915_private *i915,
+static void pch_gmbus_clock_gating(struct intel_display *display,
                                   bool enable)
 {
-       intel_de_rmw(i915, SOUTH_DSPCLK_GATE_D, PCH_GMBUSUNIT_CLOCK_GATE_DISABLE,
+       intel_de_rmw(display, SOUTH_DSPCLK_GATE_D,
+                    PCH_GMBUSUNIT_CLOCK_GATE_DISABLE,
                     !enable ? PCH_GMBUSUNIT_CLOCK_GATE_DISABLE : 0);
 }
 
-static void bxt_gmbus_clock_gating(struct drm_i915_private *i915,
+static void bxt_gmbus_clock_gating(struct intel_display *display,
                                   bool enable)
 {
-       intel_de_rmw(i915, GEN9_CLKGATE_DIS_4, BXT_GMBUS_GATING_DIS,
+       intel_de_rmw(display, GEN9_CLKGATE_DIS_4, BXT_GMBUS_GATING_DIS,
                     !enable ? BXT_GMBUS_GATING_DIS : 0);
 }
 
 static u32 get_reserved(struct intel_gmbus *bus)
 {
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
+       struct drm_i915_private *i915 = to_i915(display->drm);
        u32 reserved = 0;
 
        /* On most chips, these bits must be preserved in software. */
        if (!IS_I830(i915) && !IS_I845G(i915))
-               reserved = intel_de_read_notrace(i915, bus->gpio_reg) &
+               reserved = intel_de_read_notrace(display, bus->gpio_reg) &
                        (GPIO_DATA_PULLUP_DISABLE | GPIO_CLOCK_PULLUP_DISABLE);
 
        return reserved;
@@ -250,31 +254,31 @@ static u32 get_reserved(struct intel_gmbus *bus)
 static int get_clock(void *data)
 {
        struct intel_gmbus *bus = data;
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
        u32 reserved = get_reserved(bus);
 
-       intel_de_write_notrace(i915, bus->gpio_reg, reserved | GPIO_CLOCK_DIR_MASK);
-       intel_de_write_notrace(i915, bus->gpio_reg, reserved);
+       intel_de_write_notrace(display, bus->gpio_reg, reserved | GPIO_CLOCK_DIR_MASK);
+       intel_de_write_notrace(display, bus->gpio_reg, reserved);
 
-       return (intel_de_read_notrace(i915, bus->gpio_reg) & GPIO_CLOCK_VAL_IN) != 0;
+       return (intel_de_read_notrace(display, bus->gpio_reg) & GPIO_CLOCK_VAL_IN) != 0;
 }
 
 static int get_data(void *data)
 {
        struct intel_gmbus *bus = data;
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
        u32 reserved = get_reserved(bus);
 
-       intel_de_write_notrace(i915, bus->gpio_reg, reserved | GPIO_DATA_DIR_MASK);
-       intel_de_write_notrace(i915, bus->gpio_reg, reserved);
+       intel_de_write_notrace(display, bus->gpio_reg, reserved | GPIO_DATA_DIR_MASK);
+       intel_de_write_notrace(display, bus->gpio_reg, reserved);
 
-       return (intel_de_read_notrace(i915, bus->gpio_reg) & GPIO_DATA_VAL_IN) != 0;
+       return (intel_de_read_notrace(display, bus->gpio_reg) & GPIO_DATA_VAL_IN) != 0;
 }
 
 static void set_clock(void *data, int state_high)
 {
        struct intel_gmbus *bus = data;
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
        u32 reserved = get_reserved(bus);
        u32 clock_bits;
 
@@ -284,14 +288,14 @@ static void set_clock(void *data, int state_high)
                clock_bits = GPIO_CLOCK_DIR_OUT | GPIO_CLOCK_DIR_MASK |
                             GPIO_CLOCK_VAL_MASK;
 
-       intel_de_write_notrace(i915, bus->gpio_reg, reserved | clock_bits);
-       intel_de_posting_read(i915, bus->gpio_reg);
+       intel_de_write_notrace(display, bus->gpio_reg, reserved | clock_bits);
+       intel_de_posting_read(display, bus->gpio_reg);
 }
 
 static void set_data(void *data, int state_high)
 {
        struct intel_gmbus *bus = data;
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
        u32 reserved = get_reserved(bus);
        u32 data_bits;
 
@@ -301,20 +305,21 @@ static void set_data(void *data, int state_high)
                data_bits = GPIO_DATA_DIR_OUT | GPIO_DATA_DIR_MASK |
                        GPIO_DATA_VAL_MASK;
 
-       intel_de_write_notrace(i915, bus->gpio_reg, reserved | data_bits);
-       intel_de_posting_read(i915, bus->gpio_reg);
+       intel_de_write_notrace(display, bus->gpio_reg, reserved | data_bits);
+       intel_de_posting_read(display, bus->gpio_reg);
 }
 
 static int
 intel_gpio_pre_xfer(struct i2c_adapter *adapter)
 {
        struct intel_gmbus *bus = to_intel_gmbus(adapter);
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
+       struct drm_i915_private *i915 = to_i915(display->drm);
 
-       intel_gmbus_reset(i915);
+       intel_gmbus_reset(display);
 
        if (IS_PINEVIEW(i915))
-               pnv_gmbus_clock_gating(i915, false);
+               pnv_gmbus_clock_gating(display, false);
 
        set_data(bus, 1);
        set_clock(bus, 1);
@@ -326,13 +331,14 @@ static void
 intel_gpio_post_xfer(struct i2c_adapter *adapter)
 {
        struct intel_gmbus *bus = to_intel_gmbus(adapter);
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
+       struct drm_i915_private *i915 = to_i915(display->drm);
 
        set_data(bus, 1);
        set_clock(bus, 1);
 
        if (IS_PINEVIEW(i915))
-               pnv_gmbus_clock_gating(i915, true);
+               pnv_gmbus_clock_gating(display, true);
 }
 
 static void
@@ -355,16 +361,17 @@ intel_gpio_setup(struct intel_gmbus *bus, i915_reg_t gpio_reg)
        algo->data = bus;
 }
 
-static bool has_gmbus_irq(struct drm_i915_private *i915)
+static bool has_gmbus_irq(struct intel_display *display)
 {
+       struct drm_i915_private *i915 = to_i915(display->drm);
        /*
         * encoder->shutdown() may want to use GMBUS
         * after irqs have already been disabled.
         */
-       return HAS_GMBUS_IRQ(i915) && intel_irqs_enabled(i915);
+       return HAS_GMBUS_IRQ(display) && intel_irqs_enabled(i915);
 }
 
-static int gmbus_wait(struct drm_i915_private *i915, u32 status, u32 irq_en)
+static int gmbus_wait(struct intel_display *display, u32 status, u32 irq_en)
 {
        DEFINE_WAIT(wait);
        u32 gmbus2;
@@ -374,21 +381,21 @@ static int gmbus_wait(struct drm_i915_private *i915, u32 status, u32 irq_en)
         * we also need to check for NAKs besides the hw ready/idle signal, we
         * need to wake up periodically and check that ourselves.
         */
-       if (!has_gmbus_irq(i915))
+       if (!has_gmbus_irq(display))
                irq_en = 0;
 
-       add_wait_queue(&i915->display.gmbus.wait_queue, &wait);
-       intel_de_write_fw(i915, GMBUS4(i915), irq_en);
+       add_wait_queue(&display->gmbus.wait_queue, &wait);
+       intel_de_write_fw(display, GMBUS4(display), irq_en);
 
        status |= GMBUS_SATOER;
-       ret = wait_for_us((gmbus2 = intel_de_read_fw(i915, GMBUS2(i915))) & status,
+       ret = wait_for_us((gmbus2 = intel_de_read_fw(display, GMBUS2(display))) & status,
                          2);
        if (ret)
-               ret = wait_for((gmbus2 = intel_de_read_fw(i915, GMBUS2(i915))) & status,
+               ret = wait_for((gmbus2 = intel_de_read_fw(display, GMBUS2(display))) & status,
                               50);
 
-       intel_de_write_fw(i915, GMBUS4(i915), 0);
-       remove_wait_queue(&i915->display.gmbus.wait_queue, &wait);
+       intel_de_write_fw(display, GMBUS4(display), 0);
+       remove_wait_queue(&display->gmbus.wait_queue, &wait);
 
        if (gmbus2 & GMBUS_SATOER)
                return -ENXIO;
@@ -397,7 +404,7 @@ static int gmbus_wait(struct drm_i915_private *i915, u32 status, u32 irq_en)
 }
 
 static int
-gmbus_wait_idle(struct drm_i915_private *i915)
+gmbus_wait_idle(struct intel_display *display)
 {
        DEFINE_WAIT(wait);
        u32 irq_enable;
@@ -405,33 +412,33 @@ gmbus_wait_idle(struct drm_i915_private *i915)
 
        /* Important: The hw handles only the first bit, so set only one! */
        irq_enable = 0;
-       if (has_gmbus_irq(i915))
+       if (has_gmbus_irq(display))
                irq_enable = GMBUS_IDLE_EN;
 
-       add_wait_queue(&i915->display.gmbus.wait_queue, &wait);
-       intel_de_write_fw(i915, GMBUS4(i915), irq_enable);
+       add_wait_queue(&display->gmbus.wait_queue, &wait);
+       intel_de_write_fw(display, GMBUS4(display), irq_enable);
 
-       ret = intel_de_wait_fw(i915, GMBUS2(i915), GMBUS_ACTIVE, 0, 10);
+       ret = intel_de_wait_fw(display, GMBUS2(display), GMBUS_ACTIVE, 0, 10);
 
-       intel_de_write_fw(i915, GMBUS4(i915), 0);
-       remove_wait_queue(&i915->display.gmbus.wait_queue, &wait);
+       intel_de_write_fw(display, GMBUS4(display), 0);
+       remove_wait_queue(&display->gmbus.wait_queue, &wait);
 
        return ret;
 }
 
-static unsigned int gmbus_max_xfer_size(struct drm_i915_private *i915)
+static unsigned int gmbus_max_xfer_size(struct intel_display *display)
 {
-       return DISPLAY_VER(i915) >= 9 ? GEN9_GMBUS_BYTE_COUNT_MAX :
+       return DISPLAY_VER(display) >= 9 ? GEN9_GMBUS_BYTE_COUNT_MAX :
               GMBUS_BYTE_COUNT_MAX;
 }
 
 static int
-gmbus_xfer_read_chunk(struct drm_i915_private *i915,
+gmbus_xfer_read_chunk(struct intel_display *display,
                      unsigned short addr, u8 *buf, unsigned int len,
                      u32 gmbus0_reg, u32 gmbus1_index)
 {
        unsigned int size = len;
-       bool burst_read = len > gmbus_max_xfer_size(i915);
+       bool burst_read = len > gmbus_max_xfer_size(display);
        bool extra_byte_added = false;
 
        if (burst_read) {
@@ -444,21 +451,21 @@ gmbus_xfer_read_chunk(struct drm_i915_private *i915,
                        len++;
                }
                size = len % 256 + 256;
-               intel_de_write_fw(i915, GMBUS0(i915),
+               intel_de_write_fw(display, GMBUS0(display),
                                  gmbus0_reg | GMBUS_BYTE_CNT_OVERRIDE);
        }
 
-       intel_de_write_fw(i915, GMBUS1(i915),
+       intel_de_write_fw(display, GMBUS1(display),
                          gmbus1_index | GMBUS_CYCLE_WAIT | (size << GMBUS_BYTE_COUNT_SHIFT) | (addr << GMBUS_SLAVE_ADDR_SHIFT) | GMBUS_SLAVE_READ | GMBUS_SW_RDY);
        while (len) {
                int ret;
                u32 val, loop = 0;
 
-               ret = gmbus_wait(i915, GMBUS_HW_RDY, GMBUS_HW_RDY_EN);
+               ret = gmbus_wait(display, GMBUS_HW_RDY, GMBUS_HW_RDY_EN);
                if (ret)
                        return ret;
 
-               val = intel_de_read_fw(i915, GMBUS3(i915));
+               val = intel_de_read_fw(display, GMBUS3(display));
                do {
                        if (extra_byte_added && len == 1)
                                break;
@@ -469,7 +476,7 @@ gmbus_xfer_read_chunk(struct drm_i915_private *i915,
 
                if (burst_read && len == size - 4)
                        /* Reset the override bit */
-                       intel_de_write_fw(i915, GMBUS0(i915), gmbus0_reg);
+                       intel_de_write_fw(display, GMBUS0(display), gmbus0_reg);
        }
 
        return 0;
@@ -486,9 +493,10 @@ gmbus_xfer_read_chunk(struct drm_i915_private *i915,
 #define INTEL_GMBUS_BURST_READ_MAX_LEN         767U
 
 static int
-gmbus_xfer_read(struct drm_i915_private *i915, struct i2c_msg *msg,
+gmbus_xfer_read(struct intel_display *display, struct i2c_msg *msg,
                u32 gmbus0_reg, u32 gmbus1_index)
 {
+       struct drm_i915_private *i915 = to_i915(display->drm);
        u8 *buf = msg->buf;
        unsigned int rx_size = msg->len;
        unsigned int len;
@@ -498,9 +506,9 @@ gmbus_xfer_read(struct drm_i915_private *i915, struct i2c_msg *msg,
                if (HAS_GMBUS_BURST_READ(i915))
                        len = min(rx_size, INTEL_GMBUS_BURST_READ_MAX_LEN);
                else
-                       len = min(rx_size, gmbus_max_xfer_size(i915));
+                       len = min(rx_size, gmbus_max_xfer_size(display));
 
-               ret = gmbus_xfer_read_chunk(i915, msg->addr, buf, len,
+               ret = gmbus_xfer_read_chunk(display, msg->addr, buf, len,
                                            gmbus0_reg, gmbus1_index);
                if (ret)
                        return ret;
@@ -513,7 +521,7 @@ gmbus_xfer_read(struct drm_i915_private *i915, struct i2c_msg *msg,
 }
 
 static int
-gmbus_xfer_write_chunk(struct drm_i915_private *i915,
+gmbus_xfer_write_chunk(struct intel_display *display,
                       unsigned short addr, u8 *buf, unsigned int len,
                       u32 gmbus1_index)
 {
@@ -526,8 +534,8 @@ gmbus_xfer_write_chunk(struct drm_i915_private *i915,
                len -= 1;
        }
 
-       intel_de_write_fw(i915, GMBUS3(i915), val);
-       intel_de_write_fw(i915, GMBUS1(i915),
+       intel_de_write_fw(display, GMBUS3(display), val);
+       intel_de_write_fw(display, GMBUS1(display),
                          gmbus1_index | GMBUS_CYCLE_WAIT | (chunk_size << GMBUS_BYTE_COUNT_SHIFT) | (addr << GMBUS_SLAVE_ADDR_SHIFT) | GMBUS_SLAVE_WRITE | GMBUS_SW_RDY);
        while (len) {
                int ret;
@@ -537,9 +545,9 @@ gmbus_xfer_write_chunk(struct drm_i915_private *i915,
                        val |= *buf++ << (8 * loop);
                } while (--len && ++loop < 4);
 
-               intel_de_write_fw(i915, GMBUS3(i915), val);
+               intel_de_write_fw(display, GMBUS3(display), val);
 
-               ret = gmbus_wait(i915, GMBUS_HW_RDY, GMBUS_HW_RDY_EN);
+               ret = gmbus_wait(display, GMBUS_HW_RDY, GMBUS_HW_RDY_EN);
                if (ret)
                        return ret;
        }
@@ -548,7 +556,7 @@ gmbus_xfer_write_chunk(struct drm_i915_private *i915,
 }
 
 static int
-gmbus_xfer_write(struct drm_i915_private *i915, struct i2c_msg *msg,
+gmbus_xfer_write(struct intel_display *display, struct i2c_msg *msg,
                 u32 gmbus1_index)
 {
        u8 *buf = msg->buf;
@@ -557,9 +565,9 @@ gmbus_xfer_write(struct drm_i915_private *i915, struct i2c_msg *msg,
        int ret;
 
        do {
-               len = min(tx_size, gmbus_max_xfer_size(i915));
+               len = min(tx_size, gmbus_max_xfer_size(display));
 
-               ret = gmbus_xfer_write_chunk(i915, msg->addr, buf, len,
+               ret = gmbus_xfer_write_chunk(display, msg->addr, buf, len,
                                             gmbus1_index);
                if (ret)
                        return ret;
@@ -586,7 +594,7 @@ gmbus_is_index_xfer(struct i2c_msg *msgs, int i, int num)
 }
 
 static int
-gmbus_index_xfer(struct drm_i915_private *i915, struct i2c_msg *msgs,
+gmbus_index_xfer(struct intel_display *display, struct i2c_msg *msgs,
                 u32 gmbus0_reg)
 {
        u32 gmbus1_index = 0;
@@ -602,17 +610,17 @@ gmbus_index_xfer(struct drm_i915_private *i915, struct i2c_msg *msgs,
 
        /* GMBUS5 holds 16-bit index */
        if (gmbus5)
-               intel_de_write_fw(i915, GMBUS5(i915), gmbus5);
+               intel_de_write_fw(display, GMBUS5(display), gmbus5);
 
        if (msgs[1].flags & I2C_M_RD)
-               ret = gmbus_xfer_read(i915, &msgs[1], gmbus0_reg,
+               ret = gmbus_xfer_read(display, &msgs[1], gmbus0_reg,
                                      gmbus1_index);
        else
-               ret = gmbus_xfer_write(i915, &msgs[1], gmbus1_index);
+               ret = gmbus_xfer_write(display, &msgs[1], gmbus1_index);
 
        /* Clear GMBUS5 after each index transfer */
        if (gmbus5)
-               intel_de_write_fw(i915, GMBUS5(i915), 0);
+               intel_de_write_fw(display, GMBUS5(display), 0);
 
        return ret;
 }
@@ -622,34 +630,35 @@ do_gmbus_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num,
              u32 gmbus0_source)
 {
        struct intel_gmbus *bus = to_intel_gmbus(adapter);
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
+       struct drm_i915_private *i915 = to_i915(display->drm);
        int i = 0, inc, try = 0;
        int ret = 0;
 
        /* Display WA #0868: skl,bxt,kbl,cfl,glk */
        if (IS_GEMINILAKE(i915) || IS_BROXTON(i915))
-               bxt_gmbus_clock_gating(i915, false);
+               bxt_gmbus_clock_gating(display, false);
        else if (HAS_PCH_SPT(i915) || HAS_PCH_CNP(i915))
-               pch_gmbus_clock_gating(i915, false);
+               pch_gmbus_clock_gating(display, false);
 
 retry:
-       intel_de_write_fw(i915, GMBUS0(i915), gmbus0_source | bus->reg0);
+       intel_de_write_fw(display, GMBUS0(display), gmbus0_source | bus->reg0);
 
        for (; i < num; i += inc) {
                inc = 1;
                if (gmbus_is_index_xfer(msgs, i, num)) {
-                       ret = gmbus_index_xfer(i915, &msgs[i],
+                       ret = gmbus_index_xfer(display, &msgs[i],
                                               gmbus0_source | bus->reg0);
                        inc = 2; /* an index transmission is two msgs */
                } else if (msgs[i].flags & I2C_M_RD) {
-                       ret = gmbus_xfer_read(i915, &msgs[i],
+                       ret = gmbus_xfer_read(display, &msgs[i],
                                              gmbus0_source | bus->reg0, 0);
                } else {
-                       ret = gmbus_xfer_write(i915, &msgs[i], 0);
+                       ret = gmbus_xfer_write(display, &msgs[i], 0);
                }
 
                if (!ret)
-                       ret = gmbus_wait(i915,
+                       ret = gmbus_wait(display,
                                         GMBUS_HW_WAIT_PHASE, GMBUS_HW_WAIT_EN);
                if (ret == -ETIMEDOUT)
                        goto timeout;
@@ -661,19 +670,19 @@ retry:
         * a STOP on the very first cycle. To simplify the code we
         * unconditionally generate the STOP condition with an additional gmbus
         * cycle. */
-       intel_de_write_fw(i915, GMBUS1(i915), GMBUS_CYCLE_STOP | GMBUS_SW_RDY);
+       intel_de_write_fw(display, GMBUS1(display), GMBUS_CYCLE_STOP | GMBUS_SW_RDY);
 
        /* Mark the GMBUS interface as disabled after waiting for idle.
         * We will re-enable it at the start of the next xfer,
         * till then let it sleep.
         */
-       if (gmbus_wait_idle(i915)) {
-               drm_dbg_kms(&i915->drm,
+       if (gmbus_wait_idle(display)) {
+               drm_dbg_kms(display->drm,
                            "GMBUS [%s] timed out waiting for idle\n",
                            adapter->name);
                ret = -ETIMEDOUT;
        }
-       intel_de_write_fw(i915, GMBUS0(i915), 0);
+       intel_de_write_fw(display, GMBUS0(display), 0);
        ret = ret ?: i;
        goto out;
 
@@ -692,8 +701,8 @@ clear_err:
         * it's slow responding and only answers on the 2nd retry.
         */
        ret = -ENXIO;
-       if (gmbus_wait_idle(i915)) {
-               drm_dbg_kms(&i915->drm,
+       if (gmbus_wait_idle(display)) {
+               drm_dbg_kms(display->drm,
                            "GMBUS [%s] timed out after NAK\n",
                            adapter->name);
                ret = -ETIMEDOUT;
@@ -703,11 +712,11 @@ clear_err:
         * of resetting the GMBUS controller and so clearing the
         * BUS_ERROR raised by the target's NAK.
         */
-       intel_de_write_fw(i915, GMBUS1(i915), GMBUS_SW_CLR_INT);
-       intel_de_write_fw(i915, GMBUS1(i915), 0);
-       intel_de_write_fw(i915, GMBUS0(i915), 0);
+       intel_de_write_fw(display, GMBUS1(display), GMBUS_SW_CLR_INT);
+       intel_de_write_fw(display, GMBUS1(display), 0);
+       intel_de_write_fw(display, GMBUS0(display), 0);
 
-       drm_dbg_kms(&i915->drm, "GMBUS [%s] NAK for addr: %04x %c(%d)\n",
+       drm_dbg_kms(display->drm, "GMBUS [%s] NAK for addr: %04x %c(%d)\n",
                    adapter->name, msgs[i].addr,
                    (msgs[i].flags & I2C_M_RD) ? 'r' : 'w', msgs[i].len);
 
@@ -718,7 +727,7 @@ clear_err:
         * drm_do_probe_ddc_edid, which bails out on the first -ENXIO.
         */
        if (ret == -ENXIO && i == 0 && try++ == 0) {
-               drm_dbg_kms(&i915->drm,
+               drm_dbg_kms(display->drm,
                            "GMBUS [%s] NAK on first message, retry\n",
                            adapter->name);
                goto retry;
@@ -727,10 +736,10 @@ clear_err:
        goto out;
 
 timeout:
-       drm_dbg_kms(&i915->drm,
+       drm_dbg_kms(display->drm,
                    "GMBUS [%s] timed out, falling back to bit banging on pin %d\n",
                    bus->adapter.name, bus->reg0 & 0xff);
-       intel_de_write_fw(i915, GMBUS0(i915), 0);
+       intel_de_write_fw(display, GMBUS0(display), 0);
 
        /*
         * Hardware may not support GMBUS over these pins? Try GPIO bitbanging
@@ -741,9 +750,9 @@ timeout:
 out:
        /* Display WA #0868: skl,bxt,kbl,cfl,glk */
        if (IS_GEMINILAKE(i915) || IS_BROXTON(i915))
-               bxt_gmbus_clock_gating(i915, true);
+               bxt_gmbus_clock_gating(display, true);
        else if (HAS_PCH_SPT(i915) || HAS_PCH_CNP(i915))
-               pch_gmbus_clock_gating(i915, true);
+               pch_gmbus_clock_gating(display, true);
 
        return ret;
 }
@@ -752,7 +761,8 @@ static int
 gmbus_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num)
 {
        struct intel_gmbus *bus = to_intel_gmbus(adapter);
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
+       struct drm_i915_private *i915 = to_i915(display->drm);
        intel_wakeref_t wakeref;
        int ret;
 
@@ -776,7 +786,8 @@ gmbus_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num)
 int intel_gmbus_output_aksv(struct i2c_adapter *adapter)
 {
        struct intel_gmbus *bus = to_intel_gmbus(adapter);
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
+       struct drm_i915_private *i915 = to_i915(display->drm);
        u8 cmd = DRM_HDCP_DDC_AKSV;
        u8 buf[DRM_HDCP_KSV_LEN] = {};
        struct i2c_msg msgs[] = {
@@ -797,7 +808,7 @@ int intel_gmbus_output_aksv(struct i2c_adapter *adapter)
        int ret;
 
        wakeref = intel_display_power_get(i915, POWER_DOMAIN_GMBUS);
-       mutex_lock(&i915->display.gmbus.mutex);
+       mutex_lock(&display->gmbus.mutex);
 
        /*
         * In order to output Aksv to the receiver, use an indexed write to
@@ -806,7 +817,7 @@ int intel_gmbus_output_aksv(struct i2c_adapter *adapter)
         */
        ret = do_gmbus_xfer(adapter, msgs, ARRAY_SIZE(msgs), GMBUS_AKSV_SELECT);
 
-       mutex_unlock(&i915->display.gmbus.mutex);
+       mutex_unlock(&display->gmbus.mutex);
        intel_display_power_put(i915, POWER_DOMAIN_GMBUS, wakeref);
 
        return ret;
@@ -830,27 +841,27 @@ static void gmbus_lock_bus(struct i2c_adapter *adapter,
                           unsigned int flags)
 {
        struct intel_gmbus *bus = to_intel_gmbus(adapter);
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
 
-       mutex_lock(&i915->display.gmbus.mutex);
+       mutex_lock(&display->gmbus.mutex);
 }
 
 static int gmbus_trylock_bus(struct i2c_adapter *adapter,
                             unsigned int flags)
 {
        struct intel_gmbus *bus = to_intel_gmbus(adapter);
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
 
-       return mutex_trylock(&i915->display.gmbus.mutex);
+       return mutex_trylock(&display->gmbus.mutex);
 }
 
 static void gmbus_unlock_bus(struct i2c_adapter *adapter,
                             unsigned int flags)
 {
        struct intel_gmbus *bus = to_intel_gmbus(adapter);
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
 
-       mutex_unlock(&i915->display.gmbus.mutex);
+       mutex_unlock(&display->gmbus.mutex);
 }
 
 static const struct i2c_lock_operations gmbus_lock_ops = {
@@ -861,31 +872,32 @@ static const struct i2c_lock_operations gmbus_lock_ops = {
 
 /**
  * intel_gmbus_setup - instantiate all Intel i2c GMBuses
- * @i915: i915 device private
+ * @display: display device
  */
-int intel_gmbus_setup(struct drm_i915_private *i915)
+int intel_gmbus_setup(struct intel_display *display)
 {
-       struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
+       struct drm_i915_private *i915 = to_i915(display->drm);
+       struct pci_dev *pdev = to_pci_dev(display->drm->dev);
        unsigned int pin;
        int ret;
 
        if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915))
-               i915->display.gmbus.mmio_base = VLV_DISPLAY_BASE;
-       else if (!HAS_GMCH(i915))
+               display->gmbus.mmio_base = VLV_DISPLAY_BASE;
+       else if (!HAS_GMCH(display))
                /*
                 * Broxton uses the same PCH offsets for South Display Engine,
                 * even though it doesn't have a PCH.
                 */
-               i915->display.gmbus.mmio_base = PCH_DISPLAY_BASE;
+               display->gmbus.mmio_base = PCH_DISPLAY_BASE;
 
-       mutex_init(&i915->display.gmbus.mutex);
-       init_waitqueue_head(&i915->display.gmbus.wait_queue);
+       mutex_init(&display->gmbus.mutex);
+       init_waitqueue_head(&display->gmbus.wait_queue);
 
-       for (pin = 0; pin < ARRAY_SIZE(i915->display.gmbus.bus); pin++) {
+       for (pin = 0; pin < ARRAY_SIZE(display->gmbus.bus); pin++) {
                const struct gmbus_pin *gmbus_pin;
                struct intel_gmbus *bus;
 
-               gmbus_pin = get_gmbus_pin(i915, pin);
+               gmbus_pin = get_gmbus_pin(display, pin);
                if (!gmbus_pin)
                        continue;
 
@@ -901,7 +913,7 @@ int intel_gmbus_setup(struct drm_i915_private *i915)
                         "i915 gmbus %s", gmbus_pin->name);
 
                bus->adapter.dev.parent = &pdev->dev;
-               bus->i915 = i915;
+               bus->display = display;
 
                bus->adapter.algo = &gmbus_algorithm;
                bus->adapter.lock_ops = &gmbus_lock_ops;
@@ -919,7 +931,7 @@ int intel_gmbus_setup(struct drm_i915_private *i915)
                if (IS_I830(i915))
                        bus->force_bit = 1;
 
-               intel_gpio_setup(bus, GPIO(i915, gmbus_pin->gpio));
+               intel_gpio_setup(bus, GPIO(display, gmbus_pin->gpio));
 
                ret = i2c_add_adapter(&bus->adapter);
                if (ret) {
@@ -927,43 +939,43 @@ int intel_gmbus_setup(struct drm_i915_private *i915)
                        goto err;
                }
 
-               i915->display.gmbus.bus[pin] = bus;
+               display->gmbus.bus[pin] = bus;
        }
 
-       intel_gmbus_reset(i915);
+       intel_gmbus_reset(display);
 
        return 0;
 
 err:
-       intel_gmbus_teardown(i915);
+       intel_gmbus_teardown(display);
 
        return ret;
 }
 
-struct i2c_adapter *intel_gmbus_get_adapter(struct drm_i915_private *i915,
+struct i2c_adapter *intel_gmbus_get_adapter(struct intel_display *display,
                                            unsigned int pin)
 {
-       if (drm_WARN_ON(&i915->drm, pin >= ARRAY_SIZE(i915->display.gmbus.bus) ||
-                       !i915->display.gmbus.bus[pin]))
+       if (drm_WARN_ON(display->drm, pin >= ARRAY_SIZE(display->gmbus.bus) ||
+                       !display->gmbus.bus[pin]))
                return NULL;
 
-       return &i915->display.gmbus.bus[pin]->adapter;
+       return &display->gmbus.bus[pin]->adapter;
 }
 
 void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit)
 {
        struct intel_gmbus *bus = to_intel_gmbus(adapter);
-       struct drm_i915_private *i915 = bus->i915;
+       struct intel_display *display = bus->display;
 
-       mutex_lock(&i915->display.gmbus.mutex);
+       mutex_lock(&display->gmbus.mutex);
 
        bus->force_bit += force_bit ? 1 : -1;
-       drm_dbg_kms(&i915->drm,
+       drm_dbg_kms(display->drm,
                    "%sabling bit-banging on %s. force bit now %d\n",
                    force_bit ? "en" : "dis", adapter->name,
                    bus->force_bit);
 
-       mutex_unlock(&i915->display.gmbus.mutex);
+       mutex_unlock(&display->gmbus.mutex);
 }
 
 bool intel_gmbus_is_forced_bit(struct i2c_adapter *adapter)
@@ -973,25 +985,25 @@ bool intel_gmbus_is_forced_bit(struct i2c_adapter *adapter)
        return bus->force_bit;
 }
 
-void intel_gmbus_teardown(struct drm_i915_private *i915)
+void intel_gmbus_teardown(struct intel_display *display)
 {
        unsigned int pin;
 
-       for (pin = 0; pin < ARRAY_SIZE(i915->display.gmbus.bus); pin++) {
+       for (pin = 0; pin < ARRAY_SIZE(display->gmbus.bus); pin++) {
                struct intel_gmbus *bus;
 
-               bus = i915->display.gmbus.bus[pin];
+               bus = display->gmbus.bus[pin];
                if (!bus)
                        continue;
 
                i2c_del_adapter(&bus->adapter);
 
                kfree(bus);
-               i915->display.gmbus.bus[pin] = NULL;
+               display->gmbus.bus[pin] = NULL;
        }
 }
 
-void intel_gmbus_irq_handler(struct drm_i915_private *i915)
+void intel_gmbus_irq_handler(struct intel_display *display)
 {
-       wake_up_all(&i915->display.gmbus.wait_queue);
+       wake_up_all(&display->gmbus.wait_queue);
 }
index 8111eb2..35a200a 100644 (file)
@@ -8,8 +8,8 @@
 
 #include <linux/types.h>
 
-struct drm_i915_private;
 struct i2c_adapter;
+struct intel_display;
 
 #define GMBUS_PIN_DISABLED     0
 #define GMBUS_PIN_SSC          1
@@ -34,18 +34,17 @@ struct i2c_adapter;
 
 #define GMBUS_NUM_PINS 15 /* including 0 */
 
-int intel_gmbus_setup(struct drm_i915_private *dev_priv);
-void intel_gmbus_teardown(struct drm_i915_private *dev_priv);
-bool intel_gmbus_is_valid_pin(struct drm_i915_private *dev_priv,
-                             unsigned int pin);
+int intel_gmbus_setup(struct intel_display *display);
+void intel_gmbus_teardown(struct intel_display *display);
+bool intel_gmbus_is_valid_pin(struct intel_display *display, unsigned int pin);
 int intel_gmbus_output_aksv(struct i2c_adapter *adapter);
 
 struct i2c_adapter *
-intel_gmbus_get_adapter(struct drm_i915_private *dev_priv, unsigned int pin);
+intel_gmbus_get_adapter(struct intel_display *display, unsigned int pin);
 void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit);
 bool intel_gmbus_is_forced_bit(struct i2c_adapter *adapter);
-void intel_gmbus_reset(struct drm_i915_private *dev_priv);
+void intel_gmbus_reset(struct intel_display *display);
 
-void intel_gmbus_irq_handler(struct drm_i915_private *i915);
+void intel_gmbus_irq_handler(struct intel_display *display);
 
 #endif /* __INTEL_GMBUS_H__ */
index 53aacbd..59bad1d 100644 (file)
@@ -8,9 +8,9 @@
 
 #include "i915_reg_defs.h"
 
-#define GMBUS_MMIO_BASE(__i915) ((__i915)->display.gmbus.mmio_base)
+#define __GMBUS_MMIO_BASE(__display) ((__display)->gmbus.mmio_base)
 
-#define GPIO(__i915, gpio)     _MMIO(GMBUS_MMIO_BASE(__i915) + 0x5010 + 4 * (gpio))
+#define GPIO(__display, gpio)  _MMIO(__GMBUS_MMIO_BASE(__display) + 0x5010 + 4 * (gpio))
 #define   GPIO_CLOCK_DIR_MASK          (1 << 0)
 #define   GPIO_CLOCK_DIR_IN            (0 << 1)
 #define   GPIO_CLOCK_DIR_OUT           (1 << 1)
@@ -27,7 +27,7 @@
 #define   GPIO_DATA_PULLUP_DISABLE     (1 << 13)
 
 /* clock/port select */
-#define GMBUS0(__i915)         _MMIO(GMBUS_MMIO_BASE(__i915) + 0x5100)
+#define GMBUS0(__display)      _MMIO(__GMBUS_MMIO_BASE(__display) + 0x5100)
 #define   GMBUS_AKSV_SELECT            (1 << 11)
 #define   GMBUS_RATE_100KHZ            (0 << 8)
 #define   GMBUS_RATE_50KHZ             (1 << 8)
@@ -37,7 +37,7 @@
 #define   GMBUS_BYTE_CNT_OVERRIDE      (1 << 6)
 
 /* command/status */
-#define GMBUS1(__i915)         _MMIO(GMBUS_MMIO_BASE(__i915) + 0x5104)
+#define GMBUS1(__display)      _MMIO(__GMBUS_MMIO_BASE(__display) + 0x5104)
 #define   GMBUS_SW_CLR_INT             (1 << 31)
 #define   GMBUS_SW_RDY                 (1 << 30)
 #define   GMBUS_ENT                    (1 << 29) /* enable timeout */
@@ -54,7 +54,7 @@
 #define   GMBUS_SLAVE_WRITE            (0 << 0)
 
 /* status */
-#define GMBUS2(__i915)         _MMIO(GMBUS_MMIO_BASE(__i915) + 0x5108)
+#define GMBUS2(__display)      _MMIO(__GMBUS_MMIO_BASE(__display) + 0x5108)
 #define   GMBUS_INUSE                  (1 << 15)
 #define   GMBUS_HW_WAIT_PHASE          (1 << 14)
 #define   GMBUS_STALL_TIMEOUT          (1 << 13)
 #define   GMBUS_ACTIVE                 (1 << 9)
 
 /* data buffer bytes 3-0 */
-#define GMBUS3(__i915)         _MMIO(GMBUS_MMIO_BASE(__i915) + 0x510c)
+#define GMBUS3(__display)      _MMIO(__GMBUS_MMIO_BASE(__display) + 0x510c)
 
 /* interrupt mask (Pineview+) */
-#define GMBUS4(__i915)         _MMIO(GMBUS_MMIO_BASE(__i915) + 0x5110)
+#define GMBUS4(__display)      _MMIO(__GMBUS_MMIO_BASE(__display) + 0x5110)
 #define   GMBUS_SLAVE_TIMEOUT_EN       (1 << 4)
 #define   GMBUS_NAK_EN                 (1 << 3)
 #define   GMBUS_IDLE_EN                        (1 << 2)
@@ -75,7 +75,7 @@
 #define   GMBUS_HW_RDY_EN              (1 << 0)
 
 /* byte index */
-#define GMBUS5(__i915)         _MMIO(GMBUS_MMIO_BASE(__i915) + 0x5120)
+#define GMBUS5(__display)      _MMIO(__GMBUS_MMIO_BASE(__display) + 0x5120)
 #define   GMBUS_2BYTE_INDEX_EN         (1 << 31)
 
 #endif /* __INTEL_GMBUS_REGS_H__ */
index 6a16194..37b61f0 100644 (file)
@@ -2918,7 +2918,6 @@ static struct intel_encoder *
 get_encoder_by_ddc_pin(struct intel_encoder *encoder, u8 ddc_pin)
 {
        struct intel_display *display = to_intel_display(encoder);
-       struct drm_i915_private *i915 = to_i915(encoder->base.dev);
        struct intel_encoder *other;
 
        for_each_intel_encoder(display->drm, other) {
@@ -2932,7 +2931,7 @@ get_encoder_by_ddc_pin(struct intel_encoder *encoder, u8 ddc_pin)
 
                connector = enc_to_dig_port(other)->hdmi.attached_connector;
 
-               if (connector && connector->base.ddc == intel_gmbus_get_adapter(i915, ddc_pin))
+               if (connector && connector->base.ddc == intel_gmbus_get_adapter(display, ddc_pin))
                        return other;
        }
 
@@ -2942,7 +2941,6 @@ get_encoder_by_ddc_pin(struct intel_encoder *encoder, u8 ddc_pin)
 static u8 intel_hdmi_ddc_pin(struct intel_encoder *encoder)
 {
        struct intel_display *display = to_intel_display(encoder);
-       struct drm_i915_private *i915 = to_i915(encoder->base.dev);
        struct intel_encoder *other;
        const char *source;
        u8 ddc_pin;
@@ -2955,7 +2953,7 @@ static u8 intel_hdmi_ddc_pin(struct intel_encoder *encoder)
                source = "platform default";
        }
 
-       if (!intel_gmbus_is_valid_pin(i915, ddc_pin)) {
+       if (!intel_gmbus_is_valid_pin(display, ddc_pin)) {
                drm_dbg_kms(display->drm,
                            "[ENCODER:%d:%s] Invalid DDC pin %d\n",
                            encoder->base.base.id, encoder->base.name, ddc_pin);
@@ -3053,7 +3051,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port,
        drm_connector_init_with_ddc(dev, connector,
                                    &intel_hdmi_connector_funcs,
                                    DRM_MODE_CONNECTOR_HDMIA,
-                                   intel_gmbus_get_adapter(dev_priv, ddc_pin));
+                                   intel_gmbus_get_adapter(display, ddc_pin));
 
        drm_connector_helper_add(connector, &intel_hdmi_connector_helper_funcs);
 
index 5d055dc..cb64c6f 100644 (file)
@@ -556,6 +556,7 @@ void xelpdp_pica_irq_handler(struct drm_i915_private *i915, u32 iir)
 
 void icp_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir)
 {
+       struct intel_display *display = &dev_priv->display;
        u32 ddi_hotplug_trigger = pch_iir & SDE_DDI_HOTPLUG_MASK_ICP;
        u32 tc_hotplug_trigger = pch_iir & SDE_TC_HOTPLUG_MASK_ICP;
        u32 pin_mask = 0, long_mask = 0;
@@ -589,11 +590,12 @@ void icp_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir)
                intel_hpd_irq_handler(dev_priv, pin_mask, long_mask);
 
        if (pch_iir & SDE_GMBUS_ICP)
-               intel_gmbus_irq_handler(dev_priv);
+               intel_gmbus_irq_handler(display);
 }
 
 void spt_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir)
 {
+       struct intel_display *display = &dev_priv->display;
        u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK_SPT &
                ~SDE_PORTE_HOTPLUG_SPT;
        u32 hotplug2_trigger = pch_iir & SDE_PORTE_HOTPLUG_SPT;
@@ -625,7 +627,7 @@ void spt_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir)
                intel_hpd_irq_handler(dev_priv, pin_mask, long_mask);
 
        if (pch_iir & SDE_GMBUS_CPT)
-               intel_gmbus_irq_handler(dev_priv);
+               intel_gmbus_irq_handler(display);
 }
 
 void ilk_hpd_irq_handler(struct drm_i915_private *dev_priv, u32 hotplug_trigger)
index 5d022b4..6d7637a 100644 (file)
@@ -901,7 +901,7 @@ void intel_lvds_init(struct drm_i915_private *i915)
        drm_connector_init_with_ddc(&i915->drm, &connector->base,
                                    &intel_lvds_connector_funcs,
                                    DRM_MODE_CONNECTOR_LVDS,
-                                   intel_gmbus_get_adapter(i915, ddc_pin));
+                                   intel_gmbus_get_adapter(display, ddc_pin));
 
        drm_encoder_init(&i915->drm, &encoder->base, &intel_lvds_enc_funcs,
                         DRM_MODE_ENCODER_LVDS, "LVDS");
index b83bf81..7a28104 100644 (file)
@@ -2082,10 +2082,10 @@ intel_sdvo_get_edid(struct drm_connector *connector)
 static const struct drm_edid *
 intel_sdvo_get_analog_edid(struct drm_connector *connector)
 {
-       struct drm_i915_private *i915 = to_i915(connector->dev);
+       struct intel_display *display = to_intel_display(connector->dev);
        struct i2c_adapter *ddc;
 
-       ddc = intel_gmbus_get_adapter(i915, i915->display.vbt.crt_ddc_pin);
+       ddc = intel_gmbus_get_adapter(display, display->vbt.crt_ddc_pin);
        if (!ddc)
                return NULL;
 
@@ -2638,6 +2638,7 @@ intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo,
 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;
@@ -2648,7 +2649,7 @@ intel_sdvo_select_i2c_bus(struct intel_sdvo *sdvo)
                mapping = &dev_priv->display.vbt.sdvo_mappings[1];
 
        if (mapping->initialized &&
-           intel_gmbus_is_valid_pin(dev_priv, mapping->i2c_pin))
+           intel_gmbus_is_valid_pin(display, mapping->i2c_pin))
                pin = mapping->i2c_pin;
        else
                pin = GMBUS_PIN_DPB;
@@ -2657,7 +2658,7 @@ intel_sdvo_select_i2c_bus(struct intel_sdvo *sdvo)
                    sdvo->base.base.base.id, sdvo->base.base.name,
                    pin, sdvo->target_addr);
 
-       sdvo->i2c = intel_gmbus_get_adapter(dev_priv, pin);
+       sdvo->i2c = intel_gmbus_get_adapter(display, pin);
 
        /*
         * With gmbus we should be able to drive sdvo i2c at 2MHz, but somehow
index 9d3d9b9..f18f1ac 100644 (file)
@@ -137,5 +137,5 @@ void i915_restore_display(struct drm_i915_private *dev_priv)
 
        intel_vga_redisable(display);
 
-       intel_gmbus_reset(dev_priv);
+       intel_gmbus_reset(display);
 }