static irqreturn_t earjack_debugger_irq_handler(int irq, void *_dev)
{
	struct earjack_debugger_device *adev = _dev;
	unsigned int um = lge_get_uart_mode();
	int detect;

	/* LGE_CHANGE_S
	 * add debounce time because accure earjack popup noise
	 * [email protected] 2012/12/20
	 */
	msleep(400);
	/* LGE_CHANGE_E */

	detect = earjack_debugger_detected(adev);


	if (detect) {
		pr_debug("%s() : in!!\n", __func__);
		if (um & UART_MODE_INIT_BMSK) {
			adev->set_uart_console(1);
		} else {
			lge_set_uart_mode(um | UART_MODE_EN_BMSK);
		}
	} else {
		pr_debug("%s() : out!!\n", __func__);
		if (um & UART_MODE_INIT_BMSK) {
			adev->set_uart_console(0);
		} else {
			lge_set_uart_mode(um & ~UART_MODE_EN_BMSK);
		}
	}

	return IRQ_HANDLED;
}
static irqreturn_t earjack_debugger_irq_handler(int irq, void *_dev)
{
	struct earjack_debugger_device *adev = _dev;
	int detect;

	printk(KERN_INFO "Calling %s\n", __func__);

	msleep(400);

	detect = earjack_debugger_detected(adev);

	if (detect) {
		pr_debug("%s() : in!!\n", __func__);
		printk(KERN_INFO "%s() : in!!\n", __func__);
		adev->set_uart_console(
			lge_uart_console_should_enable_on_earjack_debugger());
	} else {
		/* restore uart console status to default mode */
		pr_debug("%s() : out!!\n", __func__);
		printk(KERN_INFO "%s() : out!!\n", __func__);
		adev->set_uart_console(
				lge_uart_console_should_enable_on_default());
	}

	return IRQ_HANDLED;
}
static irqreturn_t earjack_debugger_irq_handler(int irq, void *_dev)
{
	struct earjack_debugger_device *adev = _dev;
	unsigned int um = lge_get_uart_mode();
	int detect;

	/*             
                                                        
                                    
  */
	msleep(400);
	/*              */

	detect = earjack_debugger_detected(adev);


	if (detect) {
		pr_debug("%s() : in!!\n", __func__);
		if (um & UART_MODE_INIT_BMSK) {
			adev->set_uart_console(1);
		} else {
			lge_set_uart_mode(um | UART_MODE_EN_BMSK);
		}
	} else {
		pr_debug("%s() : out!!\n", __func__);
		if (um & UART_MODE_INIT_BMSK) {
			adev->set_uart_console(0);
		} else {
			lge_set_uart_mode(um & ~UART_MODE_EN_BMSK);
		}
	}

	return IRQ_HANDLED;
}
static int earjack_debugger_suspend(struct device *dev)
{
	struct platform_device *pdev = to_platform_device(dev);
	struct earjack_debugger_device *adev = platform_get_drvdata(pdev);

	disable_irq(adev->irq);
	adev->saved_detect = earjack_debugger_detected(adev);

	return 0;
}
static void set_console_work(struct work_struct *work)
{
	struct delayed_work *dwork = to_delayed_work(work);
	struct earjack_debugger_device *adev = container_of(
			dwork, struct earjack_debugger_device, work);
	int detect = 0;

	detect = earjack_debugger_detected(adev);
	if (detect != adev->saved_detect)
		earjack_debugger_set_console(adev);
}
Example #6
0
static int zw_earjack_debugger_notifier_call(struct notifier_block *nb,
					unsigned long state, void *ptr)
{
	struct earjack_debugger_device *dev =
			(struct earjack_debugger_device *)nb->ptr;

	switch (state) {
	case ZW_STATE_OFF:
		if (!zw_keep_uart_console()) {
			/* if earjack-debugger is detected, then enable */
			if (earjack_debugger_detected(dev)) {
				unsigned int um = lge_get_uart_mode();
				if (um & UART_MODE_INIT_BMSK) {
					dev->set_uart_console(1);
				} else {
					lge_set_uart_mode(
						um | UART_MODE_EN_BMSK);
				}
			}
		}
		break;

	case ZW_STATE_ON_SYSTEM:
	case ZW_STATE_ON_USER:
		if (!zw_keep_uart_console()) {
			/* if earjack-debugger is detected, then disable */
			if (earjack_debugger_detected(dev)) {
				unsigned int um = lge_get_uart_mode();
				if (um & UART_MODE_INIT_BMSK) {
					dev->set_uart_console(0);
				} else {
					lge_set_uart_mode(
						um & ~UART_MODE_EN_BMSK);
				}
			}
		}
		break;
	}

	return NOTIFY_DONE;
}
static void earjack_debugger_set_console(void *dev)
{
	struct earjack_debugger_device *adev = dev;

	if (earjack_debugger_detected(adev)) {
		if (!mako_uart_initialized) {
			mako_uart_initialized = true;
			earjack_debugger_set_gpiomux_uart(1);
			mdelay(1);
		}
		adev->set_uart_console(1);
	} else {
		adev->set_uart_console(0);
	}
}
static int earjack_debugger_probe(struct platform_device *pdev)
{
	int ret = 0;
	struct earjack_debugger_device *adev;
	struct earjack_debugger_platform_data *pdata;

	lge_uart_console_set_config(UART_CONSOLE_ENABLE_ON_EARJACK_DEBUGGER);

	if (pdev->dev.of_node) {
		pdata = devm_kzalloc(&pdev->dev,
				sizeof(struct earjack_debugger_platform_data),
				GFP_KERNEL);
		if (pdata == NULL) {
			pr_err("%s: no pdata\n", __func__);
			return -ENOMEM;
		}
		pdev->dev.platform_data = pdata;
		earjack_debugger_parse_dt(&pdev->dev, pdata);
	} else {
		pdata = pdev->dev.platform_data;
	}

	if (!pdata) {
		pr_err("%s: no pdata\n", __func__);
		return -ENOMEM;
	}

	adev = kzalloc(sizeof(struct earjack_debugger_device), GFP_KERNEL);
	if (!adev) {
		pr_err("%s: no memory\n", __func__);
		return -ENOMEM;
	}

	adev->gpio = pdata->gpio_trigger;
	adev->irq = gpio_to_irq(pdata->gpio_trigger);
	adev->set_uart_console = msm_serial_set_uart_console;

	platform_set_drvdata(pdev, adev);

	ret = gpio_request_one(adev->gpio, GPIOF_IN,
			"gpio_earjack_debugger");
	if (ret < 0) {
		pr_err("%s: failed to request gpio %d\n", __func__,
				adev->gpio);
		goto err_gpio_request;
	}

	ret = request_threaded_irq(adev->irq, NULL,
			earjack_debugger_irq_handler,
			IRQF_TRIGGER_RISING |
				IRQF_TRIGGER_FALLING |
				IRQF_ONESHOT,
			"earjack_debugger_trigger", adev);
	if (ret < 0) {
		pr_err("%s: failed to request irq\n", __func__);
		goto err_request_irq;
	}

	if (earjack_debugger_detected(adev)) {
		pr_debug("[UART CONSOLE][%s] %s uart console\n",
			__func__,
			lge_uart_console_should_enable_on_earjack_debugger() ?
				"enable" : "disable");
		adev->set_uart_console(
			lge_uart_console_should_enable_on_earjack_debugger());
	}

	pr_info("earjack debugger probed\n");

	return ret;

err_request_irq:
	gpio_free(adev->gpio);
err_gpio_request:
	kfree(adev);

	return ret;
}
static int earjack_debugger_probe(struct platform_device *pdev)
{
	int ret = 0;
	struct earjack_debugger_device *adev;
	struct earjack_debugger_platform_data *pdata =
		pdev->dev.platform_data;

	if (!pdata) {
		pr_err("%s: no pdata\n", __func__);
		return -ENODEV;
	}

	adev = kzalloc(sizeof(struct earjack_debugger_device), GFP_KERNEL);
	if (!adev) {
		pr_err("%s: no memory\n", __func__);
		return -ENOMEM;
	}

	adev->gpio = pdata->gpio_trigger;
	adev->irq = gpio_to_irq(pdata->gpio_trigger);
	adev->set_uart_console = pdata->set_uart_console;

	if (adev->set_uart_console)
		adev->set_uart_console(0);

	platform_set_drvdata(pdev, adev);

	ret = gpio_request_one(adev->gpio, GPIOF_IN,
			"gpio_earjack_debugger");
	if (ret < 0) {
		pr_err("%s: failed to request gpio %d\n", __func__,
				adev->gpio);
		goto err_gpio_request;
	}

	INIT_DELAYED_WORK(&adev->work, set_console_work);

	ret = request_threaded_irq(adev->irq, NULL, earjack_debugger_irq_handler,
			IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING,
			"earjack_debugger_trigger", adev);
	if (ret < 0) {
		pr_err("%s: failed to request irq\n", __func__);
		goto err_request_irq;
	}

	if (earjack_debugger_detected(adev)) {
		if (adev->set_uart_console) {
			mako_uart_initialized = true;
			earjack_debugger_set_gpiomux_uart(1);
			adev->set_uart_console(1);
		}
	} else {
		earjack_debugger_set_gpiomux_uart(0);
	}

	pr_info("earjack debugger probed\n");

	return ret;

err_request_irq:
	gpio_free(adev->gpio);
err_gpio_request:
	kfree(adev);

	return ret;
}
Example #10
0
static int __devinit earjack_debugger_probe(struct platform_device *pdev)
{
	int ret = 0;
	struct earjack_debugger_device *adev;
	struct earjack_debugger_platform_data *pdata;
	unsigned int um = 0;


	if (pdev->dev.of_node) {
		pdata = devm_kzalloc(&pdev->dev,
				sizeof(struct earjack_debugger_platform_data),
				GFP_KERNEL);
		if (pdata == NULL) {
			pr_err("%s: no pdata\n", __func__);
			return -ENOMEM;
		}
		pdev->dev.platform_data = pdata;
		earjack_debugger_parse_dt(&pdev->dev, pdata);
	} else {
		pdata = pdev->dev.platform_data;
	}
	if (!pdata) {
		pr_err("%s: no pdata\n", __func__);
		return -ENOMEM;
	}

	adev = kzalloc(sizeof(struct earjack_debugger_device), GFP_KERNEL);
	if (!adev) {
		pr_err("%s: no memory\n", __func__);
		return -ENOMEM;
	}

	adev->gpio = pdata->gpio_trigger;
	adev->irq = gpio_to_irq(pdata->gpio_trigger);
	adev->set_uart_console = msm_serial_set_uart_console;

	platform_set_drvdata(pdev, adev);

	ret = gpio_request_one(adev->gpio, GPIOF_IN,
			"gpio_earjack_debugger");
	if (ret < 0) {
		pr_err("%s: failed to request gpio %d\n", __func__,
				adev->gpio);
		goto err_gpio_request;
	}

	ret = request_threaded_irq(adev->irq, NULL, earjack_debugger_irq_handler,
			IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
			"earjack_debugger_trigger", adev);
	if (ret < 0) {
		pr_err("%s: failed to request irq\n", __func__);
		goto err_request_irq;
	}

	um = lge_get_uart_mode();
	if (earjack_debugger_detected(adev))
		adev->set_uart_console(1);

#ifdef CONFIG_ZERO_WAIT
	zw_notifier_chain_register(&zw_earjack_debugger_nb, adev);
#endif

	pr_info("earjack debugger probed\n");

	return ret;

err_request_irq:
	gpio_free(adev->gpio);
err_gpio_request:
	kfree(adev);

	return ret;
}