diff --git a/drivers/platform/chrome/cros_typec_switch.c b/drivers/platform/chrome/cros_typec_switch.c index 7c01957a032d..b50ecedce662 100644 --- a/drivers/platform/chrome/cros_typec_switch.c +++ b/drivers/platform/chrome/cros_typec_switch.c @@ -7,8 +7,6 @@ */ #include -#include -#include #include #include #include @@ -65,40 +63,6 @@ static int cros_typec_get_mux_state(unsigned long mode, struct typec_altmode *al return ret; } -static int cros_typec_send_clear_event(struct cros_typec_switch_data *sdata, int port_num, - u32 events_mask) -{ - struct ec_params_typec_control req = { - .port = port_num, - .command = TYPEC_CONTROL_COMMAND_CLEAR_EVENTS, - .clear_events_mask = events_mask, - }; - - return cros_ec_command(sdata->ec, 0, EC_CMD_TYPEC_CONTROL, &req, - sizeof(req), NULL, 0); -} - -static bool cros_typec_check_event(struct cros_typec_switch_data *sdata, int port_num, u32 mask) -{ - struct ec_response_typec_status resp; - struct ec_params_typec_status req = { - .port = port_num, - }; - int ret; - - ret = cros_ec_command(sdata->ec, 0, EC_CMD_TYPEC_STATUS, &req, sizeof(req), - &resp, sizeof(resp)); - if (ret < 0) { - dev_warn(sdata->dev, "EC_CMD_TYPEC_STATUS failed for port: %d\n", port_num); - return false; - } - - if (resp.events & mask) - return true; - - return false; -} - /* * The Chrome EC treats both mode-switches and retimers as "muxes" for the purposes of the * host command API. This common function configures and verifies the retimer/mode-switch @@ -107,44 +71,12 @@ static bool cros_typec_check_event(struct cros_typec_switch_data *sdata, int por static int cros_typec_configure_mux(struct cros_typec_switch_data *sdata, int port_num, int index, unsigned long mode, struct typec_altmode *alt) { - unsigned long end; - u32 event_mask; - u8 mux_state; - int ret; + int ret = cros_typec_get_mux_state(mode, alt); - ret = cros_typec_get_mux_state(mode, alt); - if (ret < 0) - return ret; - mux_state = (u8)ret; - - /* Clear any old mux set done event. */ - if (index == 0) - event_mask = PD_STATUS_EVENT_MUX_0_SET_DONE; - else - event_mask = PD_STATUS_EVENT_MUX_1_SET_DONE; - - ret = cros_typec_send_clear_event(sdata, port_num, event_mask); if (ret < 0) return ret; - /* Send the set command. */ - ret = cros_typec_cmd_mux_set(sdata, port_num, index, mux_state); - if (ret < 0) - return ret; - - /* Check for the mux set done event. */ - end = jiffies + msecs_to_jiffies(1000); - do { - if (cros_typec_check_event(sdata, port_num, event_mask)) - return 0; - - usleep_range(500, 1000); - } while (time_before(jiffies, end)); - - dev_err(sdata->dev, "Timed out waiting for mux set done on index: %d, state: %d\n", - index, mux_state); - - return -ETIMEDOUT; + return cros_typec_cmd_mux_set(sdata, port_num, index, (u8)ret); } static int cros_typec_retimer_set(struct typec_retimer *retimer, struct typec_retimer_state *state)