mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 08:07:32 -04:00
Merge "usb: pd: Do not respond to SVDM messages in PD 2.0"
This commit is contained in:
commit
7f0235fa21
1 changed files with 19 additions and 22 deletions
|
|
@ -275,7 +275,7 @@ static void *usbpd_ipc_log;
|
|||
#define PD_MAX_DATA_OBJ 7
|
||||
|
||||
#define PD_SRC_CAP_EXT_DB_LEN 24
|
||||
#define PD_STATUS_DB_LEN 5
|
||||
#define PD_STATUS_DB_LEN 6
|
||||
#define PD_BATTERY_CAP_DB_LEN 9
|
||||
|
||||
#define PD_MAX_EXT_MSG_LEN 260
|
||||
|
|
@ -1412,10 +1412,12 @@ int usbpd_send_svdm(struct usbpd *pd, u16 svid, u8 cmd,
|
|||
enum usbpd_svdm_cmd_type cmd_type, int obj_pos,
|
||||
const u32 *vdos, int num_vdos)
|
||||
{
|
||||
u32 svdm_hdr = SVDM_HDR(svid, 0, obj_pos, cmd_type, cmd);
|
||||
u32 svdm_hdr = SVDM_HDR(svid, pd->spec_rev == USBPD_REV_30 ? 1 : 0,
|
||||
obj_pos, cmd_type, cmd);
|
||||
|
||||
usbpd_dbg(&pd->dev, "VDM tx: svid:%x cmd:%x cmd_type:%x svdm_hdr:%x\n",
|
||||
svid, cmd, cmd_type, svdm_hdr);
|
||||
usbpd_dbg(&pd->dev, "VDM tx: svid:%04x ver:%d obj_pos:%d cmd:%x cmd_type:%x svdm_hdr:%x\n",
|
||||
svid, pd->spec_rev == USBPD_REV_30 ? 1 : 0, obj_pos,
|
||||
cmd, cmd_type, svdm_hdr);
|
||||
|
||||
return usbpd_send_vdm(pd, svdm_hdr, vdos, num_vdos);
|
||||
}
|
||||
|
|
@ -1582,7 +1584,7 @@ static void handle_vdm_rx(struct usbpd *pd, struct rx_msg *rx_msg)
|
|||
ktime_t recvd_time = ktime_get();
|
||||
|
||||
usbpd_dbg(&pd->dev,
|
||||
"VDM rx: svid:%x cmd:%x cmd_type:%x vdm_hdr:%x has_dp: %s\n",
|
||||
"VDM rx: svid:%04x cmd:%x cmd_type:%x vdm_hdr:%x has_dp: %s\n",
|
||||
svid, cmd, cmd_type, vdm_hdr,
|
||||
pd->has_dp ? "true" : "false");
|
||||
|
||||
|
|
@ -1605,11 +1607,9 @@ static void handle_vdm_rx(struct usbpd *pd, struct rx_msg *rx_msg)
|
|||
return;
|
||||
}
|
||||
|
||||
if (SVDM_HDR_VER(vdm_hdr) > 1) {
|
||||
usbpd_dbg(&pd->dev, "Discarding SVDM with incorrect version:%d\n",
|
||||
if (SVDM_HDR_VER(vdm_hdr) > 1)
|
||||
usbpd_dbg(&pd->dev, "Received SVDM with unsupported version:%d\n",
|
||||
SVDM_HDR_VER(vdm_hdr));
|
||||
return;
|
||||
}
|
||||
|
||||
if (cmd_type != SVDM_CMD_TYPE_INITIATOR &&
|
||||
pd->current_state != PE_SRC_STARTUP_WAIT_FOR_VDM_RESP)
|
||||
|
|
@ -1634,11 +1634,6 @@ static void handle_vdm_rx(struct usbpd *pd, struct rx_msg *rx_msg)
|
|||
0, SOP_MSG);
|
||||
if (ret)
|
||||
usbpd_set_state(pd, PE_SEND_SOFT_RESET);
|
||||
} else {
|
||||
usbpd_send_svdm(pd, svid, cmd,
|
||||
SVDM_CMD_TYPE_RESP_NAK,
|
||||
SVDM_HDR_OBJ_POS(vdm_hdr),
|
||||
NULL, 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -3016,13 +3011,15 @@ static bool handle_ext_snk_ready(struct usbpd *pd, struct rx_msg *rx_msg)
|
|||
complete(&pd->is_ready);
|
||||
break;
|
||||
case MSG_STATUS:
|
||||
if (rx_msg->data_len != PD_STATUS_DB_LEN) {
|
||||
usbpd_err(&pd->dev, "Invalid status db\n");
|
||||
break;
|
||||
}
|
||||
if (rx_msg->data_len > PD_STATUS_DB_LEN)
|
||||
usbpd_err(&pd->dev, "Invalid status db length:%d\n",
|
||||
rx_msg->data_len);
|
||||
|
||||
memset(&pd->status_db, 0, sizeof(pd->status_db));
|
||||
memcpy(&pd->status_db, rx_msg->payload,
|
||||
sizeof(pd->status_db));
|
||||
min((size_t)rx_msg->data_len, sizeof(pd->status_db)));
|
||||
kobject_uevent(&pd->dev.kobj, KOBJ_CHANGE);
|
||||
complete(&pd->is_ready);
|
||||
break;
|
||||
case MSG_BATTERY_CAPABILITIES:
|
||||
if (rx_msg->data_len != PD_BATTERY_CAP_DB_LEN) {
|
||||
|
|
@ -4014,9 +4011,9 @@ static int usbpd_uevent(struct device *dev, struct kobj_uevent_env *env)
|
|||
"explicit" : "implicit");
|
||||
add_uevent_var(env, "ALT_MODE=%d", pd->vdm_state == MODE_ENTERED);
|
||||
|
||||
add_uevent_var(env, "SDB=%02x %02x %02x %02x %02x", pd->status_db[0],
|
||||
pd->status_db[1], pd->status_db[2], pd->status_db[3],
|
||||
pd->status_db[4]);
|
||||
add_uevent_var(env, "SDB=%02x %02x %02x %02x %02x %02x",
|
||||
pd->status_db[0], pd->status_db[1], pd->status_db[2],
|
||||
pd->status_db[3], pd->status_db[4], pd->status_db[5]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue