struct gpio_desc        *gpio_typec_dir;
        int                     typec_dir_delay;
        u32 lane_phy_type[WIZ_MAX_LANES];
+       u32 master_lane_num[WIZ_MAX_LANES];
        struct clk              *input_clks[WIZ_MAX_INPUT_CLOCKS];
        struct clk              *output_clks[WIZ_MAX_OUTPUT_CLOCKS];
        struct clk_onecell_data clk_data;
        struct wiz *wiz = dev_get_drvdata(dev);
        int ret;
 
-       /* if typec-dir gpio was specified, set LN10 SWAP bit based on that */
-       if (id == 0 && wiz->gpio_typec_dir) {
-               if (wiz->typec_dir_delay)
-                       msleep_interruptible(wiz->typec_dir_delay);
-
-               if (gpiod_get_value_cansleep(wiz->gpio_typec_dir))
-                       regmap_field_write(wiz->typec_ln10_swap, 1);
-               else
-                       regmap_field_write(wiz->typec_ln10_swap, 0);
+       if (id == 0) {
+               /* if typec-dir gpio was specified, set LN10 SWAP bit based on that */
+               if (wiz->gpio_typec_dir) {
+                       if (wiz->typec_dir_delay)
+                               msleep_interruptible(wiz->typec_dir_delay);
+
+                       if (gpiod_get_value_cansleep(wiz->gpio_typec_dir))
+                               regmap_field_write(wiz->typec_ln10_swap, 1);
+                       else
+                               regmap_field_write(wiz->typec_ln10_swap, 0);
+               } else {
+                       /* if no typec-dir gpio was specified and PHY type is
+                        * USB3 with master lane number is '0', set LN10 SWAP
+                        * bit to '1'
+                        */
+                       u32 num_lanes = wiz->num_lanes;
+                       int i;
+
+                       for (i = 0; i < num_lanes; i++) {
+                               if (wiz->lane_phy_type[i] == PHY_TYPE_USB3)
+                                       if (wiz->master_lane_num[i] == 0)
+                                               regmap_field_write(wiz->typec_ln10_swap, 1);
+                       }
+               }
        }
 
        if (id == 0) {
                dev_dbg(dev, "%s: Lanes %u-%u have phy-type %u\n", __func__,
                        reg, reg + num_lanes - 1, phy_type);
 
-               for (i = reg; i < reg + num_lanes; i++)
+               for (i = reg; i < reg + num_lanes; i++) {
+                       wiz->master_lane_num[i] = reg;
                        wiz->lane_phy_type[i] = phy_type;
+               }
        }
 
        return 0;