typec_set_pwr_opmode(tps->port, mode);
        typec_set_pwr_role(tps->port, TPS_STATUS_TO_TYPEC_PORTROLE(status));
        typec_set_vconn_role(tps->port, TPS_STATUS_TO_TYPEC_VCONN(status));
+       if (TPS_STATUS_TO_UPSIDE_DOWN(status))
+               typec_set_orientation(tps->port, TYPEC_ORIENTATION_REVERSE);
+       else
+               typec_set_orientation(tps->port, TYPEC_ORIENTATION_NORMAL);
        tps6598x_set_data_role(tps, TPS_STATUS_TO_TYPEC_DATAROLE(status), true);
 
        tps->partner = typec_register_partner(tps->port, &desc);
        typec_set_pwr_opmode(tps->port, TYPEC_PWR_MODE_USB);
        typec_set_pwr_role(tps->port, TPS_STATUS_TO_TYPEC_PORTROLE(status));
        typec_set_vconn_role(tps->port, TPS_STATUS_TO_TYPEC_VCONN(status));
+       typec_set_orientation(tps->port, TYPEC_ORIENTATION_NONE);
        tps6598x_set_data_role(tps, TPS_STATUS_TO_TYPEC_DATAROLE(status), false);
 
        power_supply_changed(tps->psy);
 
 /* TPS_REG_STATUS bits */
 #define TPS_STATUS_PLUG_PRESENT                BIT(0)
 #define TPS_STATUS_PLUG_UPSIDE_DOWN    BIT(4)
+#define TPS_STATUS_TO_UPSIDE_DOWN(s)   (!!((s) & TPS_STATUS_PLUG_UPSIDE_DOWN))
 #define TPS_STATUS_PORTROLE            BIT(5)
 #define TPS_STATUS_TO_TYPEC_PORTROLE(s) (!!((s) & TPS_STATUS_PORTROLE))
 #define TPS_STATUS_DATAROLE            BIT(6)