}
 }
 
-static int dsi_configure_pins(struct omap_dss_device *dssdev,
-               const struct omap_dsi_pin_config *pin_cfg)
+static int dsi_configure_pins(struct dsi_data *dsi,
+               int num_pins, const u32 *pins)
 {
-       struct dsi_data *dsi = to_dsi_data(dssdev);
-       int num_pins;
-       const int *pins;
        struct dsi_lane_config lanes[DSI_MAX_NR_LANES];
        int num_lanes;
        int i;
                DSI_LANE_DATA4,
        };
 
-       num_pins = pin_cfg->num_pins;
-       pins = pin_cfg->pins;
-
        if (num_pins < 4 || num_pins > dsi->num_lanes_supported * 2
                        || num_pins % 2 != 0)
                return -EINVAL;
 
        for (i = 0; i < num_pins; i += 2) {
                u8 lane, pol;
-               int dx, dy;
+               u32 dx, dy;
 
                dx = pins[i];
                dy = pins[i + 1];
 
-               if (dx < 0 || dx >= dsi->num_lanes_supported * 2)
+               if (dx >= dsi->num_lanes_supported * 2)
                        return -EINVAL;
 
-               if (dy < 0 || dy >= dsi->num_lanes_supported * 2)
+               if (dy >= dsi->num_lanes_supported * 2)
                        return -EINVAL;
 
                if (dx & 1) {
        struct property *prop;
        u32 lane_arr[10];
        int len, num_pins;
-       int r, i;
+       int r;
        struct device_node *ep;
-       struct omap_dsi_pin_config pin_cfg;
 
        ep = of_graph_get_endpoint_by_regs(node, 0, 0);
        if (!ep)
                goto err;
        }
 
-       pin_cfg.num_pins = num_pins;
-       for (i = 0; i < num_pins; ++i)
-               pin_cfg.pins[i] = (int)lane_arr[i];
-
-       r = dsi_configure_pins(&dsi->output, &pin_cfg);
+       r = dsi_configure_pins(dsi, num_pins, lane_arr);
        if (r) {
                dev_err(dsi->dev, "failed to configure pins");
                goto err;
        dsi->host.ops = &omap_dsi_host_ops;
        dsi->host.dev = &pdev->dev;
 
+       r = dsi_probe_of(dsi);
+       if (r) {
+               DSSERR("Invalid DSI DT data\n");
+               goto err_pm_disable;
+       }
+
        r = mipi_dsi_host_register(&dsi->host);
        if (r < 0) {
                dev_err(&pdev->dev, "failed to register DSI host: %d\n", r);
        if (r)
                goto err_dsi_host_unregister;
 
-       r = dsi_probe_of(dsi);
-       if (r) {
-               DSSERR("Invalid DSI DT data\n");
-               goto err_uninit_output;
-       }
-
        r = component_add(&pdev->dev, &dsi_component_ops);
        if (r)
                goto err_uninit_output;
 
        struct omap_dss_cpr_coefs cpr_coefs;
 };
 
-/* 22 pins means 1 clk lane and 10 data lanes */
-#define OMAP_DSS_MAX_DSI_PINS 22
-
-struct omap_dsi_pin_config {
-       int num_pins;
-       /*
-        * pin numbers in the following order:
-        * clk+, clk-
-        * data1+, data1-
-        * data2+, data2-
-        * ...
-        */
-       int pins[OMAP_DSS_MAX_DSI_PINS];
-};
-
 struct omap_dss_writeback_info {
        u32 paddr;
        u32 p_uv_addr;