static void usbpd_process_pd_src_cap(struct usbpd_dev *udev)
{
struct usbpd_desc *desc = udev->desc;
- const struct usbpd_ops *ops = desc->ops;
- struct usbpd_info *pd_info = &desc->pd_info;
+ const struct usbpd_ops *ops = NULL;
+ struct usbpd_info *pd_info = NULL;
#if defined(CONFIG_IFCONN_NOTIFIER)
struct ifconn_notifier_template *template = &udev->ifconn_template;
#endif
int available_pdo_num = 0;
usbpd_pdic_sink_state_t *sink_status = &udev->pd_noti.sink_status;
+ if (desc == NULL)
+ return;
+
+ ops = desc->ops;
+ pd_info = &desc->pd_info;
+
pd_info->do_power_nego = 0;
- if (ops->usbpd_process_pd_src_cap)
- return ops->usbpd_process_pd_src_cap(udev);
+ if (ops != NULL) {
+ if (ops->usbpd_process_pd_src_cap)
+ return ops->usbpd_process_pd_src_cap(udev);
+ }
#if defined(CONFIG_IFCONN_NOTIFIER)
template->event = IFCONN_NOTIFY_EVENT_PD_SINK;
int usbpd_process_cc_attach(struct usbpd_dev *udev, usbpd_attach_mode_t attach_mode)
{
struct usbpd_desc *desc = udev->desc;
- const struct usbpd_ops *ops = desc->ops;
- struct usbpd_info *pd_info = &desc->pd_info;
+ const struct usbpd_ops *ops = NULL;
+ struct usbpd_info *pd_info = NULL;
usbpd_pdic_sink_state_t *sink_status = &udev->pd_noti.sink_status;
- if (ops->usbpd_process_cc_attach)
- return ops->usbpd_process_cc_attach(udev, attach_mode);
+ if (desc == NULL)
+ return -EINVAL;
+
+ ops = desc->ops;
+ pd_info = &desc->pd_info;
+
+ if (ops != NULL) {
+ if (ops->usbpd_process_cc_attach)
+ return ops->usbpd_process_cc_attach(udev, attach_mode);
+ }
if (pd_info->attach_mode != attach_mode) {
pd_info->attach_mode = attach_mode;
IFCONN_NOTIFY_EVENT_DETACH, NULL);
pd_info->data_role = USB_STATUS_NOTIFY_DETACH;
#if defined(CONFIG_DUAL_ROLE_USB_INTF)
- if (!pd_info->try_state_change)
- ops->usbpd_set_rprd_mode(udev, TYPE_C_ATTACH_DRP);
+ if (!pd_info->try_state_change && ops != NULL) {
+ if (ops->usbpd_set_rprd_mode)
+ ops->usbpd_set_rprd_mode(udev, TYPE_C_ATTACH_DRP);
+ }
#endif
}
const struct usbpd_ops *ops = NULL;
struct usbpd_info *pd_info = NULL;
/* TODO add error exception */
- u8 port_capability = pd_info->data_obj[1].discover_mode_dp_capability.port_capability;
- u8 receptacle_indication = pd_info->data_obj[1].discover_mode_dp_capability.receptacle_indication;
+ u8 port_capability = 0;
+ u8 receptacle_indication = 0;
if (desc == NULL)
return -EINVAL;
ops = desc->ops;
pd_info = &desc->pd_info;
+ if (pd_info == NULL)
+ return -EINVAL;
+
+ port_capability = pd_info->data_obj[1].discover_mode_dp_capability.port_capability;
+ receptacle_indication = pd_info->data_obj[1].discover_mode_dp_capability.receptacle_indication;
+
if (ops != NULL) {
if (ops->usbpd_process_discover_modes)
return ops->usbpd_process_discover_modes(udev);
dev_info(&udev->dev, "pDP_DIS_MODE->DATA_MSG_VDM_HEADER.DATA = 0x%08X\n\r", pd_info->data_obj[0].object);
dev_info(&udev->dev, "pDP_DIS_MODE->DATA_MSG_MODE_VDO_DP.DATA = 0x%08X\n\r", pd_info->data_obj[1].object);
- if (ops->usbpd_pd_next_state)
- ops->usbpd_pd_next_state(udev);
+ if (ops != NULL) {
+ if (ops->usbpd_pd_next_state)
+ ops->usbpd_pd_next_state(udev);
+ }
}
dev_info(&udev->dev, "%s\n", __func__);
- if (ops->usbpd_clear_discover_mode)
- ops->usbpd_clear_discover_mode(udev);
+ if (ops != NULL) {
+ if (ops->usbpd_clear_discover_mode)
+ ops->usbpd_clear_discover_mode(udev);
+ }
return 0;
}
dev_info(&udev->dev, "%s multi_func_preference %d %s\n", __func__,
multi_func_preference, DP_Pin_Assignment_Print[pin_info]);
- if (ops->usbpd_dp_pin_assignment) {
- ret = ops->usbpd_dp_pin_assignment(udev, pin_assignment);
- if (ret < 0) {
- dev_err(&udev->dev, "%s has i2c write error.\n",
- __func__);
- return ret;
+ if (ops != NULL) {
+ if (ops->usbpd_dp_pin_assignment) {
+ ret = ops->usbpd_dp_pin_assignment(udev, pin_assignment);
+ if (ret < 0) {
+ dev_err(&udev->dev, "%s has i2c write error.\n",
+ __func__);
+ return ret;
+ }
}
}
pd_info->is_sent_pin_configuration = 1;
/* It will start discover mode with that svid */
dev_info(&udev->dev, "%s : svid1 is dex station\n", __func__);
- if (ops->usbpd_select_svid) {
- ret = ops->usbpd_select_svid(udev, 1);
- if (ret < 0) {
- dev_err(&udev->dev, "%s select svid error.\n",
- __func__);
- return ret;
+ if (ops != NULL) {
+ if (ops->usbpd_select_svid) {
+ ret = ops->usbpd_select_svid(udev, 1);
+ if (ret < 0) {
+ dev_err(&udev->dev, "%s select svid error.\n",
+ __func__);
+ return ret;
+ }
}
}
}
dev_info(&udev->dev, "%s multi_func_preference %d %s\n", __func__,
multi_func_preference, DP_Pin_Assignment_Print[pin_info]);
- if (ops->usbpd_dp_pin_assignment) {
- ret = ops->usbpd_dp_pin_assignment(udev, pin_assignment);
- if (ret < 0) {
- dev_err(&udev->dev, "%s has i2c write error.\n",
- __func__);
- return ret;
+
+ if (ops != NULL) {
+ if (ops->usbpd_dp_pin_assignment) {
+ ret = ops->usbpd_dp_pin_assignment(udev, pin_assignment);
+ if (ret < 0) {
+ dev_err(&udev->dev, "%s has i2c write error.\n",
+ __func__);
+ return ret;
+ }
}
}
pd_info->is_sent_pin_configuration = 1;