static long pn547_dev_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct pn547_dev *pn547_dev = filp->private_data; unsigned long flags; switch (cmd) { case pn547_SET_PWR: if (arg == 2) { /* power on with firmware download (requires hw reset) */ dprintk(PN547_DRV_NAME ":%s power on with firmware\n", __func__); gpio_set_value(pn547_dev->ven_gpio, 1); gpio_set_value(pn547_dev->firm_gpio, 1); msleep(10); gpio_set_value(pn547_dev->ven_gpio, 0); msleep(10); gpio_set_value(pn547_dev->ven_gpio, 1); msleep(10); } else if (arg == 1) { /* power on */ pr_info(PN547_DRV_NAME ":%s power on\n", __func__); if (sPowerState == NFC_POWER_OFF) { #ifdef CONFIG_LGE_NFC_USE_PMIC if(clk_source == CLKS_PMIC) pn547_change_clk(pn547_dev, CLK_PIN); #endif gpio_set_value(pn547_dev->firm_gpio, 0); gpio_set_value(pn547_dev->ven_gpio, 1); msleep(10); spin_lock_irqsave(&pn547_dev->irq_enabled_lock, flags); #ifdef CONFIG_LGE_NFC_SET_IRQ_WAKEUP if (sIrqState == false) { irq_set_irq_wake(pn547_dev->client->irq,1); sIrqState = true; pr_info(PN547_DRV_NAME ":%s enable IRQ\n", __func__); } else { pr_err("%s IRQ is already enabled!\n", __func__); } #endif //pr_err("%s NFC_POWER_ON\n", __func__); // for debug sPowerState = NFC_POWER_ON; spin_unlock_irqrestore(&pn547_dev->irq_enabled_lock, flags); } else { pr_err("%s NFC is alread On!\n", __func__); } } else if (arg == 0) { /* power off */ pr_info(PN547_DRV_NAME ":%s power off\n", __func__); if (sPowerState == NFC_POWER_ON) { #ifdef CONFIG_LGE_NFC_USE_PMIC if(clk_source == CLKS_PMIC) pn547_change_clk(pn547_dev, CLK_DISABLE); #endif gpio_set_value(pn547_dev->firm_gpio, 0); gpio_set_value(pn547_dev->ven_gpio, 0); msleep(10); spin_lock_irqsave(&pn547_dev->irq_enabled_lock, flags); #ifdef CONFIG_LGE_NFC_SET_IRQ_WAKEUP if (sIrqState == true) { irq_set_irq_wake(pn547_dev->client->irq,0); sIrqState = false; dprintk(PN547_DRV_NAME ":%s disable IRQ\n", __func__); } else { pr_err("%s IRQ is already disabled!\n", __func__); } #endif if (sIsWakeLocked == true) { pr_err("%s: Release Wake_Lock\n", __func__); wake_unlock(&nfc_wake_lock); sIsWakeLocked = false; } //pr_err("%s NFC_POWER_OFF\n", __func__); // for debug sPowerState = NFC_POWER_OFF; spin_unlock_irqrestore(&pn547_dev->irq_enabled_lock, flags); } else { pr_err("%s NFC is alread Off!\n", __func__); } } else { pr_err("%s bad arg %ld\n", __func__, arg); return -EINVAL; } break; case pn547_HW_REVISION: { return pn547_get_hw_revision(); } #ifdef CONFIG_LGE_NFC_USE_PMIC case pn547_CLKS_SET: { if(arg == 0){ clk_source = CLKS_XO; dprintk(PN547_DRV_NAME "%s: clock source X-tal set!\n", __func__); }else if(arg == 1){ clk_source = CLKS_PMIC; dprintk(PN547_DRV_NAME "%s: clock source PMIC set!\n", __func__); }else{ pr_err("%s: wrong clock source set clk source : %ld\n", __func__, arg); return -1; } } break; #endif default: pr_err("%s bad ioctl %d\n", __func__, cmd); return -EINVAL; } return 0; }
static long pn547_dev_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct pn547_dev *pn547_dev = filp->private_data; unsigned long flags; switch (cmd) { case pn547_SET_PWR: if (arg == 2) { /* power on with firmware download (requires hw reset) */ dprintk(PN547_DRV_NAME ":%s power on with firmware\n", __func__); gpio_set_value(pn547_dev->ven_gpio, 1); gpio_set_value(pn547_dev->firm_gpio, 1); msleep(10); gpio_set_value(pn547_dev->ven_gpio, 0); msleep(10); gpio_set_value(pn547_dev->ven_gpio, 1); msleep(10); } else if (arg == 1) { /* power on */ dprintk(PN547_DRV_NAME ":%s power on\n", __func__); if (sPowerState == NFC_POWER_OFF) { gpio_set_value(pn547_dev->firm_gpio, 0); gpio_set_value(pn547_dev->ven_gpio, 1); msleep(10); spin_lock_irqsave(&pn547_dev->irq_enabled_lock, flags); #ifdef CONFIG_LGE_NFC_SET_IRQ_WAKEUP if (sIrqState == false) { irq_set_irq_wake(pn547_dev->client->irq,1); sIrqState = true; dprintk(PN547_DRV_NAME ":%s enable IRQ\n", __func__); } else { pr_err("%s IRQ is already enabled!\n", __func__); } #endif //pr_err("%s NFC_POWER_ON\n", __func__); // for debug sPowerState = NFC_POWER_ON; sReadSequence = NFC_PACKET_HEADER; spin_unlock_irqrestore(&pn547_dev->irq_enabled_lock, flags); } else { pr_err("%s NFC is alread On!\n", __func__); } } else if (arg == 0) { /* power off */ dprintk(PN547_DRV_NAME ":%s power off\n", __func__); if (sPowerState == NFC_POWER_ON) { gpio_set_value(pn547_dev->firm_gpio, 0); gpio_set_value(pn547_dev->ven_gpio, 0); msleep(10); spin_lock_irqsave(&pn547_dev->irq_enabled_lock, flags); #ifdef CONFIG_LGE_NFC_SET_IRQ_WAKEUP if (sIrqState == true) { irq_set_irq_wake(pn547_dev->client->irq,0); sIrqState = false; dprintk(PN547_DRV_NAME ":%s disable IRQ\n", __func__); } else { pr_err("%s IRQ is already disabled!\n", __func__); } #endif if (pn547_dev->count_irq > 0) { pr_err("%s: Clear IRQ(%d)\n", __func__, pn547_dev->count_irq); pn547_dev->count_irq = 0; wake_unlock(&nfc_wake_lock); } //pr_err("%s NFC_POWER_OFF\n", __func__); // for debug sPowerState = NFC_POWER_OFF; sReadSequence = NFC_PACKET_HEADER; spin_unlock_irqrestore(&pn547_dev->irq_enabled_lock, flags); } else { pr_err("%s NFC is alread Off!\n", __func__); } } else { pr_err("%s bad arg %ld\n", __func__, arg); return -EINVAL; } break; case pn547_HW_REVISION: { return pn547_get_hw_revision(); } default: pr_err("%s bad ioctl %d\n", __func__, cmd); return -EINVAL; } return 0; }