コード例 #1
0
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);
}
コード例 #2
0
ファイル: max14577-muic.c プロジェクト: sdemills/SM-V700
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;
}