in interface.c [206:249]
void gb_interface_mailbox_event(struct gb_interface *intf, u16 result,
u32 mailbox)
{
mutex_lock(&intf->mutex);
if (result) {
dev_warn(&intf->dev,
"mailbox event with UniPro error: 0x%04x\n",
result);
goto err_disable;
}
if (mailbox != GB_SVC_INTF_MAILBOX_GREYBUS) {
dev_warn(&intf->dev,
"mailbox event with unexpected value: 0x%08x\n",
mailbox);
goto err_disable;
}
if (intf->quirks & GB_INTERFACE_QUIRK_LEGACY_MODE_SWITCH) {
gb_interface_legacy_mode_switch(intf);
goto out_unlock;
}
if (!intf->mode_switch) {
dev_warn(&intf->dev, "unexpected mailbox event: 0x%08x\n",
mailbox);
goto err_disable;
}
dev_info(&intf->dev, "mode switch detected\n");
complete(&intf->mode_switch_completion);
out_unlock:
mutex_unlock(&intf->mutex);
return;
err_disable:
gb_interface_disable(intf);
gb_interface_deactivate(intf);
mutex_unlock(&intf->mutex);
}