.remove = tegra_dpaux_remove,
 };
 
-struct tegra_dpaux *tegra_dpaux_find_by_of_node(struct device_node *np)
+struct drm_dp_aux *drm_dp_aux_find_by_of_node(struct device_node *np)
 {
        struct tegra_dpaux *dpaux;
 
        list_for_each_entry(dpaux, &dpaux_list, list)
                if (np == dpaux->dev->of_node) {
                        mutex_unlock(&dpaux_lock);
-                       return dpaux;
+                       return &dpaux->aux;
                }
 
        mutex_unlock(&dpaux_lock);
        return NULL;
 }
 
-int tegra_dpaux_attach(struct tegra_dpaux *dpaux, struct tegra_output *output)
+int drm_dp_aux_attach(struct drm_dp_aux *aux, struct tegra_output *output)
 {
+       struct tegra_dpaux *dpaux = to_dpaux(aux);
        unsigned long timeout;
        int err;
 
        while (time_before(jiffies, timeout)) {
                enum drm_connector_status status;
 
-               status = tegra_dpaux_detect(dpaux);
+               status = drm_dp_aux_detect(aux);
                if (status == connector_status_connected) {
                        enable_irq(dpaux->irq);
                        return 0;
        return -ETIMEDOUT;
 }
 
-int tegra_dpaux_detach(struct tegra_dpaux *dpaux)
+int drm_dp_aux_detach(struct drm_dp_aux *aux)
 {
+       struct tegra_dpaux *dpaux = to_dpaux(aux);
        unsigned long timeout;
        int err;
 
        while (time_before(jiffies, timeout)) {
                enum drm_connector_status status;
 
-               status = tegra_dpaux_detect(dpaux);
+               status = drm_dp_aux_detect(aux);
                if (status == connector_status_disconnected) {
                        dpaux->output = NULL;
                        return 0;
        return -ETIMEDOUT;
 }
 
-enum drm_connector_status tegra_dpaux_detect(struct tegra_dpaux *dpaux)
+enum drm_connector_status drm_dp_aux_detect(struct drm_dp_aux *aux)
 {
+       struct tegra_dpaux *dpaux = to_dpaux(aux);
        u32 value;
 
        value = tegra_dpaux_readl(dpaux, DPAUX_DP_AUXSTAT);
        return connector_status_disconnected;
 }
 
-int tegra_dpaux_enable(struct tegra_dpaux *dpaux)
+int drm_dp_aux_enable(struct drm_dp_aux *aux)
 {
+       struct tegra_dpaux *dpaux = to_dpaux(aux);
        u32 value;
 
        value = DPAUX_HYBRID_PADCTL_AUX_CMH(2) |
        return 0;
 }
 
-int tegra_dpaux_disable(struct tegra_dpaux *dpaux)
+int drm_dp_aux_disable(struct drm_dp_aux *aux)
 {
+       struct tegra_dpaux *dpaux = to_dpaux(aux);
        u32 value;
 
        value = tegra_dpaux_readl(dpaux, DPAUX_HYBRID_SPARE);
        return 0;
 }
 
-int tegra_dpaux_prepare(struct tegra_dpaux *dpaux, u8 encoding)
+int drm_dp_aux_prepare(struct drm_dp_aux *aux, u8 encoding)
 {
        int err;
 
-       err = drm_dp_dpcd_writeb(&dpaux->aux, DP_MAIN_LINK_CHANNEL_CODING_SET,
+       err = drm_dp_dpcd_writeb(aux, DP_MAIN_LINK_CHANNEL_CODING_SET,
                                 encoding);
        if (err < 0)
                return err;
        return 0;
 }
 
-int tegra_dpaux_train(struct tegra_dpaux *dpaux, struct drm_dp_link *link,
-                     u8 pattern)
+int drm_dp_aux_train(struct drm_dp_aux *aux, struct drm_dp_link *link,
+                    u8 pattern)
 {
        u8 tp = pattern & DP_TRAINING_PATTERN_MASK;
        u8 status[DP_LINK_STATUS_SIZE], values[4];
        unsigned int i;
        int err;
 
-       err = drm_dp_dpcd_writeb(&dpaux->aux, DP_TRAINING_PATTERN_SET, pattern);
+       err = drm_dp_dpcd_writeb(aux, DP_TRAINING_PATTERN_SET, pattern);
        if (err < 0)
                return err;
 
                            DP_TRAIN_MAX_SWING_REACHED |
                            DP_TRAIN_VOLTAGE_SWING_LEVEL_0;
 
-       err = drm_dp_dpcd_write(&dpaux->aux, DP_TRAINING_LANE0_SET, values,
+       err = drm_dp_dpcd_write(aux, DP_TRAINING_LANE0_SET, values,
                                link->num_lanes);
        if (err < 0)
                return err;
 
        usleep_range(500, 1000);
 
-       err = drm_dp_dpcd_read_link_status(&dpaux->aux, status);
+       err = drm_dp_dpcd_read_link_status(aux, status);
        if (err < 0)
                return err;
 
                break;
 
        default:
-               dev_err(dpaux->dev, "unsupported training pattern %u\n", tp);
+               dev_err(aux->dev, "unsupported training pattern %u\n", tp);
                return -EINVAL;
        }
 
-       err = drm_dp_dpcd_writeb(&dpaux->aux, DP_EDP_CONFIGURATION_SET, 0);
+       err = drm_dp_dpcd_writeb(aux, DP_EDP_CONFIGURATION_SET, 0);
        if (err < 0)
                return err;
 
 
 void tegra_output_encoder_destroy(struct drm_encoder *encoder);
 
 /* from dpaux.c */
-struct tegra_dpaux;
 struct drm_dp_link;
 
-struct tegra_dpaux *tegra_dpaux_find_by_of_node(struct device_node *np);
-enum drm_connector_status tegra_dpaux_detect(struct tegra_dpaux *dpaux);
-int tegra_dpaux_attach(struct tegra_dpaux *dpaux, struct tegra_output *output);
-int tegra_dpaux_detach(struct tegra_dpaux *dpaux);
-int tegra_dpaux_enable(struct tegra_dpaux *dpaux);
-int tegra_dpaux_disable(struct tegra_dpaux *dpaux);
-int tegra_dpaux_prepare(struct tegra_dpaux *dpaux, u8 encoding);
-int tegra_dpaux_train(struct tegra_dpaux *dpaux, struct drm_dp_link *link,
-                     u8 pattern);
+struct drm_dp_aux *drm_dp_aux_find_by_of_node(struct device_node *np);
+enum drm_connector_status drm_dp_aux_detect(struct drm_dp_aux *aux);
+int drm_dp_aux_attach(struct drm_dp_aux *aux, struct tegra_output *output);
+int drm_dp_aux_detach(struct drm_dp_aux *aux);
+int drm_dp_aux_enable(struct drm_dp_aux *aux);
+int drm_dp_aux_disable(struct drm_dp_aux *aux);
+int drm_dp_aux_prepare(struct drm_dp_aux *aux, u8 encoding);
+int drm_dp_aux_train(struct drm_dp_aux *aux, struct drm_dp_link *link,
+                    u8 pattern);
 
 /* from fb.c */
 struct tegra_bo *tegra_fb_get_plane(struct drm_framebuffer *framebuffer,
 
        struct clk *clk_dp;
        struct clk *clk;
 
-       struct tegra_dpaux *dpaux;
+       struct drm_dp_aux *aux;
 
        struct drm_info_list *debugfs_files;
        struct drm_minor *minor;
                   SOR_DP_PADCTL_CM_TXD_1 | SOR_DP_PADCTL_CM_TXD_0);
        tegra_sor_writel(sor, value, SOR_DP_PADCTL0);
 
-       err = tegra_dpaux_prepare(sor->dpaux, DP_SET_ANSI_8B10B);
+       err = drm_dp_aux_prepare(sor->aux, DP_SET_ANSI_8B10B);
        if (err < 0)
                return err;
 
 
        pattern = DP_TRAINING_PATTERN_1;
 
-       err = tegra_dpaux_train(sor->dpaux, link, pattern);
+       err = drm_dp_aux_train(sor->aux, link, pattern);
        if (err < 0)
                return err;
 
 
        pattern = DP_LINK_SCRAMBLING_DISABLE | DP_TRAINING_PATTERN_2;
 
-       err = tegra_dpaux_train(sor->dpaux, link, pattern);
+       err = drm_dp_aux_train(sor->aux, link, pattern);
        if (err < 0)
                return err;
 
 
        pattern = DP_TRAINING_PATTERN_DISABLE;
 
-       err = tegra_dpaux_train(sor->dpaux, link, pattern);
+       err = drm_dp_aux_train(sor->aux, link, pattern);
        if (err < 0)
                return err;
 
        struct tegra_output *output = connector_to_output(connector);
        struct tegra_sor *sor = to_sor(output);
 
-       if (sor->dpaux)
-               return tegra_dpaux_detect(sor->dpaux);
+       if (sor->aux)
+               return drm_dp_aux_detect(sor->aux);
 
        return tegra_output_connector_detect(connector, force);
 }
        struct tegra_sor *sor = to_sor(output);
        int err;
 
-       if (sor->dpaux)
-               tegra_dpaux_enable(sor->dpaux);
+       if (sor->aux)
+               drm_dp_aux_enable(sor->aux);
 
        err = tegra_output_connector_get_modes(connector);
 
-       if (sor->dpaux)
-               tegra_dpaux_disable(sor->dpaux);
+       if (sor->aux)
+               drm_dp_aux_disable(sor->aux);
 
        return err;
 }
        if (err < 0)
                dev_err(sor->dev, "failed to power down SOR: %d\n", err);
 
-       if (sor->dpaux) {
-               err = tegra_dpaux_disable(sor->dpaux);
+       if (sor->aux) {
+               err = drm_dp_aux_disable(sor->aux);
                if (err < 0)
                        dev_err(sor->dev, "failed to disable DP: %d\n", err);
        }
        struct tegra_sor *sor = to_sor(output);
        struct tegra_sor_config config;
        struct drm_dp_link link;
-       struct drm_dp_aux *aux;
        int err = 0;
        u32 value;
 
        if (output->panel)
                drm_panel_prepare(output->panel);
 
-       /* FIXME: properly convert to struct drm_dp_aux */
-       aux = (struct drm_dp_aux *)sor->dpaux;
-
-       if (sor->dpaux) {
-               err = tegra_dpaux_enable(sor->dpaux);
+       if (sor->aux) {
+               err = drm_dp_aux_enable(sor->aux);
                if (err < 0)
                        dev_err(sor->dev, "failed to enable DP: %d\n", err);
 
-               err = drm_dp_link_probe(aux, &link);
+               err = drm_dp_link_probe(sor->aux, &link);
                if (err < 0) {
                        dev_err(sor->dev, "failed to probe eDP link: %d\n",
                                err);
        value |= SOR_DP_PADCTL_PAD_CAL_PD;
        tegra_sor_writel(sor, value, SOR_DP_PADCTL0);
 
-       if (sor->dpaux) {
+       if (sor->aux) {
                u8 rate, lanes;
 
-               err = drm_dp_link_probe(aux, &link);
+               err = drm_dp_link_probe(sor->aux, &link);
                if (err < 0)
                        dev_err(sor->dev, "failed to probe eDP link: %d\n",
                                err);
 
-               err = drm_dp_link_power_up(aux, &link);
+               err = drm_dp_link_power_up(sor->aux, &link);
                if (err < 0)
                        dev_err(sor->dev, "failed to power up eDP link: %d\n",
                                err);
 
-               err = drm_dp_link_configure(aux, &link);
+               err = drm_dp_link_configure(sor->aux, &link);
                if (err < 0)
                        dev_err(sor->dev, "failed to configure eDP link: %d\n",
                                err);
        int encoder = DRM_MODE_ENCODER_NONE;
        int err;
 
-       if (!sor->dpaux) {
+       if (!sor->aux) {
                if (sor->soc->supports_hdmi) {
                        connector = DRM_MODE_CONNECTOR_HDMIA;
                        encoder = DRM_MODE_ENCODER_TMDS;
                        dev_err(sor->dev, "debugfs setup failed: %d\n", err);
        }
 
-       if (sor->dpaux) {
-               err = tegra_dpaux_attach(sor->dpaux, &sor->output);
+       if (sor->aux) {
+               err = drm_dp_aux_attach(sor->aux, &sor->output);
                if (err < 0) {
                        dev_err(sor->dev, "failed to attach DP: %d\n", err);
                        return err;
 
        tegra_output_exit(&sor->output);
 
-       if (sor->dpaux) {
-               err = tegra_dpaux_detach(sor->dpaux);
+       if (sor->aux) {
+               err = drm_dp_aux_detach(sor->aux);
                if (err < 0) {
                        dev_err(sor->dev, "failed to detach DP: %d\n", err);
                        return err;
 
        np = of_parse_phandle(pdev->dev.of_node, "nvidia,dpaux", 0);
        if (np) {
-               sor->dpaux = tegra_dpaux_find_by_of_node(np);
+               sor->aux = drm_dp_aux_find_by_of_node(np);
                of_node_put(np);
 
-               if (!sor->dpaux)
+               if (!sor->aux)
                        return -EPROBE_DEFER;
        }
 
-       if (!sor->dpaux) {
+       if (!sor->aux) {
                if (sor->soc->supports_hdmi) {
                        sor->ops = &tegra_sor_hdmi_ops;
                } else if (sor->soc->supports_lvds) {