Skip to content

Commit

Permalink
platform/chrome: cros_ec_typec: Get mux state inside configure_mux
Browse files Browse the repository at this point in the history
Move the function which gets current mux state inside the
cros_typec_configure_mux() function. It is better to group those
bits of functionality together, and it makes it easier to move around
cros_typec_configure_mux() later.

While we are doing this, also inline the cros_typec_get_mux_info() inside
of cros_typec_configure_mux().

Signed-off-by: Prashant Malani <pmalani@chromium.org>
Reviewed-by: Tzung-Bi Shih <tzungbi@google.com>
Link: https://lore.kernel.org/chrome-platform/20220208184721.1697194-3-pmalani@chromium.org/
  • Loading branch information
Prashant Malani committed Feb 15, 2022
1 parent 53a0023 commit 0d8495d
Showing 1 changed file with 23 additions and 32 deletions.
55 changes: 23 additions & 32 deletions drivers/platform/chrome/cros_ec_typec.c
Original file line number Diff line number Diff line change
Expand Up @@ -513,27 +513,38 @@ static int cros_typec_enable_usb4(struct cros_typec_data *typec,
}

static int cros_typec_configure_mux(struct cros_typec_data *typec, int port_num,
uint8_t mux_flags,
struct ec_response_usb_pd_control_v2 *pd_ctrl)
{
struct cros_typec_port *port = typec->ports[port_num];
struct ec_response_usb_pd_mux_info resp;
struct ec_params_usb_pd_mux_info req = {
.port = port_num,
};
struct ec_params_usb_pd_mux_ack mux_ack;
enum typec_orientation orientation;
int ret;

ret = cros_ec_command(typec->ec, 0, EC_CMD_USB_PD_MUX_INFO,
&req, sizeof(req), &resp, sizeof(resp));
if (ret < 0) {
dev_warn(typec->dev, "Failed to get mux info for port: %d, err = %d\n",
port_num, ret);
return ret;
}

/* No change needs to be made, let's exit early. */
if (port->mux_flags == mux_flags && port->role == pd_ctrl->role)
if (port->mux_flags == resp.flags && port->role == pd_ctrl->role)
return 0;

port->mux_flags = mux_flags;
port->mux_flags = resp.flags;
port->role = pd_ctrl->role;

if (mux_flags == USB_PD_MUX_NONE) {
if (port->mux_flags == USB_PD_MUX_NONE) {
ret = cros_typec_usb_disconnect_state(port);
goto mux_ack;
}

if (mux_flags & USB_PD_MUX_POLARITY_INVERTED)
if (port->mux_flags & USB_PD_MUX_POLARITY_INVERTED)
orientation = TYPEC_ORIENTATION_REVERSE;
else
orientation = TYPEC_ORIENTATION_NORMAL;
Expand All @@ -548,22 +559,22 @@ static int cros_typec_configure_mux(struct cros_typec_data *typec, int port_num,
if (ret)
return ret;

if (mux_flags & USB_PD_MUX_USB4_ENABLED) {
if (port->mux_flags & USB_PD_MUX_USB4_ENABLED) {
ret = cros_typec_enable_usb4(typec, port_num, pd_ctrl);
} else if (mux_flags & USB_PD_MUX_TBT_COMPAT_ENABLED) {
} else if (port->mux_flags & USB_PD_MUX_TBT_COMPAT_ENABLED) {
ret = cros_typec_enable_tbt(typec, port_num, pd_ctrl);
} else if (mux_flags & USB_PD_MUX_DP_ENABLED) {
} else if (port->mux_flags & USB_PD_MUX_DP_ENABLED) {
ret = cros_typec_enable_dp(typec, port_num, pd_ctrl);
} else if (mux_flags & USB_PD_MUX_SAFE_MODE) {
} else if (port->mux_flags & USB_PD_MUX_SAFE_MODE) {
ret = cros_typec_usb_safe_state(port);
} else if (mux_flags & USB_PD_MUX_USB_ENABLED) {
} else if (port->mux_flags & USB_PD_MUX_USB_ENABLED) {
port->state.alt = NULL;
port->state.mode = TYPEC_STATE_USB;
ret = typec_mux_set(port->mux, &port->state);
} else {
dev_dbg(typec->dev,
"Unrecognized mode requested, mux flags: %x\n",
mux_flags);
port->mux_flags);
}

mux_ack:
Expand Down Expand Up @@ -638,17 +649,6 @@ static void cros_typec_set_port_params_v1(struct cros_typec_data *typec,
}
}

static int cros_typec_get_mux_info(struct cros_typec_data *typec, int port_num,
struct ec_response_usb_pd_mux_info *resp)
{
struct ec_params_usb_pd_mux_info req = {
.port = port_num,
};

return cros_ec_command(typec->ec, 0, EC_CMD_USB_PD_MUX_INFO, &req,
sizeof(req), resp, sizeof(*resp));
}

/*
* Helper function to register partner/plug altmodes.
*/
Expand Down Expand Up @@ -946,7 +946,6 @@ static int cros_typec_port_update(struct cros_typec_data *typec, int port_num)
{
struct ec_params_usb_pd_control req;
struct ec_response_usb_pd_control_v2 resp;
struct ec_response_usb_pd_mux_info mux_resp;
int ret;

if (port_num < 0 || port_num >= typec->num_ports) {
Expand Down Expand Up @@ -982,15 +981,7 @@ static int cros_typec_port_update(struct cros_typec_data *typec, int port_num)
cros_typec_handle_status(typec, port_num);

/* Update the switches if they exist, according to requested state */
ret = cros_typec_get_mux_info(typec, port_num, &mux_resp);
if (ret < 0) {
dev_warn(typec->dev,
"Failed to get mux info for port: %d, err = %d\n",
port_num, ret);
return 0;
}

ret = cros_typec_configure_mux(typec, port_num, mux_resp.flags, &resp);
ret = cros_typec_configure_mux(typec, port_num, &resp);
if (ret)
dev_warn(typec->dev, "Configure muxes failed, err = %d\n", ret);

Expand Down

0 comments on commit 0d8495d

Please sign in to comment.