static void max14577_muic_usb_detect(struct work_struct *work) { struct max14577_muic_data *muic_data = container_of(work, struct max14577_muic_data, usb_work.work); pr_info("%s:%s\n", MUIC_DEV_NAME, __func__); mutex_lock(&muic_data->muic_mutex); muic_data->is_usb_ready = true; switch (muic_data->attached_dev) { case ATTACHED_DEV_USB_MUIC: #if defined(CONFIG_MUIC_SUPPORT_POGO_USB) case ATTACHED_DEV_POGO_USB_MUIC: #endif /* CONFIG_MUIC_SUPPORT_POGO_USB */ case ATTACHED_DEV_JIG_USB_ON_MUIC: max14577_muic_attach_callback_usb(muic_data); break; default: break; } mutex_unlock(&muic_data->muic_mutex); }
static int max14577_muic_handle_attach(struct max14577_muic_data *muic_data, muic_attached_dev_t new_dev) { int ret = 0; if (new_dev == muic_data->attached_dev) { pr_info("%s:%s Duplicated(%d), just ignore\n", MUIC_DEV_NAME, __func__, muic_data->attached_dev); return ret; } ret = max14577_muic_logically_detach(muic_data, new_dev); if (ret) pr_warn("%s:%s fail to logically detach(%d)\n", MUIC_DEV_NAME, __func__, ret); if (muic_data->mfd_pdata->set_gpio_pogo_cb) { /* VBATT <-> VBUS voltage switching, along to new_dev. */ ret = muic_data->mfd_pdata->set_gpio_pogo_cb(new_dev); if (ret) pr_warn("%s:%s fail to VBATT <-> VBUS voltage switching(%d)\n", MUIC_DEV_NAME, __func__, ret); } switch (new_dev) { case ATTACHED_DEV_JIG_UART_OFF_MUIC: ret = write_vps_regs(muic_data, new_dev); muic_data->attached_dev = new_dev; max14577_muic_attach_callback_jig(muic_data); break; case ATTACHED_DEV_JIG_UART_OFF_VB_MUIC: case ATTACHED_DEV_TA_MUIC: #if defined(CONFIG_MUIC_SUPPORT_POGO_TA) case ATTACHED_DEV_POGO_TA_MUIC: #endif /* CONFIG_MUIC_SUPPORT_POGO_TA */ ret = write_vps_regs(muic_data, new_dev); muic_data->attached_dev = new_dev; max14577_muic_attach_callback_jig(muic_data); max14577_muic_attach_callback_chg(muic_data); break; case ATTACHED_DEV_JIG_USB_ON_MUIC: case ATTACHED_DEV_USB_MUIC: case ATTACHED_DEV_CDP_MUIC: #if defined(CONFIG_MUIC_SUPPORT_POGO_USB) case ATTACHED_DEV_POGO_USB_MUIC: #endif /* CONFIG_MUIC_SUPPORT_POGO_USB */ ret = write_vps_regs(muic_data, new_dev); muic_data->attached_dev = new_dev; max14577_muic_attach_callback_usb(muic_data); max14577_muic_attach_callback_chg(muic_data); break; #if defined(CONFIG_SEC_FACTORY_MODE) case ATTACHED_DEV_JIG_UART_ON_MUIC: ret = write_vps_regs(muic_data, new_dev); muic_data->attached_dev = new_dev; max14577_muic_attach_callback_dock(muic_data, MUIC_DOCK_AUDIODOCK); break; #endif /* CONFIG_SEC_FACTORY_MODE */ #if defined(CONFIG_MUIC_SUPPORT_FACTORY_BUTTON) case ATTACHED_DEV_FACTORY_BUTTON: ret = write_vps_regs(muic_data, new_dev); muic_data->attached_dev = new_dev; max14577_muic_attach_callback_dock(muic_data, MUIC_DOCK_FACTORY); break; #endif /* CONFIG_MUIC_SUPPORT_FACTORY_BUTTON */ default: pr_warn("%s:%s unsupported dev(%d)\n", MUIC_DEV_NAME, __func__, new_dev); break; } return ret; }