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); }
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; }
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; }