static long bcm2079x_dev_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct bcm2079x_dev *bcm2079x_dev = filp->private_data; switch (cmd) { case BCMNFC_READ_FULL_PACKET: break; case BCMNFC_READ_MULTI_PACKETS: break; case BCMNFC_CHANGE_ADDR: dev_info(&bcm2079x_dev->client->dev, "%s, BCMNFC_CHANGE_ADDR (%x, %lx):\n", __func__, cmd, arg); return change_client_addr(bcm2079x_dev, arg); case BCMNFC_POWER_CTL: gpio_set_value(bcm2079x_dev->en_gpio, arg); break; case BCMNFC_WAKE_CTL: gpio_set_value(bcm2079x_dev->wake_gpio, arg); break; default: dev_err(&bcm2079x_dev->client->dev, "%s, unknown cmd (%x, %lx)\n", __func__, cmd, arg); return 0; } return 0; }
static long bcm2079x_dev_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct bcm2079x_dev *bcm2079x_dev = filp->private_data; // LGE_START [email protected] 2013-07-21 Modify for IRQ Exception Handle unsigned long flags; // LGE_END [email protected] 2013-07-21 Modify for IRQ Exception Handle switch (cmd) { case BCMNFC_READ_FULL_PACKET: break; case BCMNFC_READ_MULTI_PACKETS: break; case BCMNFC_CHANGE_ADDR: dev_info(&bcm2079x_dev->client->dev, "%s, BCMNFC_CHANGE_ADDR (%x, %lx):\n", __func__, cmd, arg); return change_client_addr(bcm2079x_dev, arg); case BCMNFC_POWER_CTL: // LGE_START [email protected] 2013-07-21 Modify for IRQ Exception Handle gpio_set_value(bcm2079x_dev->en_gpio, arg); //dev_info(&bcm2079x_dev->client->dev,"BCMNFC_POWER_CTL (%x, %lx):\n", cmd, arg); if ((sPowerState == NFC_POWER_ON) && (arg == 0)) { spin_lock_irqsave(&bcm2079x_dev->irq_enabled_lock, flags); //dev_info(&bcm2079x_dev->client->dev,"NFC_POWER_OFF\n"); if (bcm2079x_dev->count_irq > 0) { dev_err(&bcm2079x_dev->client->dev,"Clear IRQ\n"); bcm2079x_dev->count_irq = 0; wake_unlock(&nfc_wake_lock); } sPowerState = NFC_POWER_OFF; spin_unlock_irqrestore(&bcm2079x_dev->irq_enabled_lock, flags); } else if ((sPowerState == NFC_POWER_OFF) && (arg == 1)) { spin_lock_irqsave(&bcm2079x_dev->irq_enabled_lock, flags); //dev_info(&bcm2079x_dev->client->dev,"NFC_POWER_ON\n"); sPowerState = NFC_POWER_ON; spin_unlock_irqrestore(&bcm2079x_dev->irq_enabled_lock, flags); } //dev_info(&bcm2079x_dev->client->dev,"count_irq = %d\n", bcm2079x_dev->count_irq); // LGE_END [email protected] 2013-07-21 Modify for IRQ Exception Handle break; case BCMNFC_WAKE_CTL: gpio_set_value(bcm2079x_dev->wake_gpio, arg); break; default: dev_err(&bcm2079x_dev->client->dev, "%s, unknown cmd (%x, %lx)\n", __func__, cmd, arg); return 0; } return 0; }
static int bcmi2cnfc_dev_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) #endif { struct bcmi2cnfc_dev *bcmi2cnfc_dev = filp->private_data; switch (cmd) { case BCMNFC_SET_WAKE_ACTIVE_STATE: dev_info(&bcmi2cnfc_dev->client->dev, "%s, BCMNFC_SET_WAKE_ACTIVE_STATE (%x, %lx):\n", __func__, cmd, arg); bcmi2cnfc_dev->wake_active_state = arg; break; case BCMNFC_READ_FULL_PACKET: dev_info(&bcmi2cnfc_dev->client->dev, "%s, BCMNFC_READ_FULL_PACKET (%x, %lx):\n", __func__, cmd, arg); bcmi2cnfc_dev->packet_size = arg; break; case BCMNFC_READ_MULTI_PACKETS: dev_info(&bcmi2cnfc_dev->client->dev, "%s, BCMNFC_READ_MULTI_PACKETS (%x, %lx):\n", __func__, cmd, arg); bcmi2cnfc_dev->read_multiple_packets = arg; break; #if CHANGE_CLIENT_ADDR case BCMNFC_CHANGE_ADDR: dev_info(&bcmi2cnfc_dev->client->dev, "%s, BCMNFC_CHANGE_ADDR (%x, %lx):\n", __func__, cmd, arg); change_client_addr(bcmi2cnfc_dev, arg); break; #endif case BCMNFC_POWER_CTL: dev_info(&bcmi2cnfc_dev->client->dev, "%s, BCMNFC_POWER_CTL (%x, %lx):\n", __func__, cmd, arg); if (arg == BCMNFC_POWER_OFF) { bcmi2cnfc_disable_irq(bcmi2cnfc_dev); dev_info(&bcmi2cnfc_dev->client->dev,"irq disabled \n"); } else if (arg == BCMNFC_POWER_ON) { bcmi2cnfc_enable_irq(bcmi2cnfc_dev); } gpio_set_value(bcmi2cnfc_dev->en_gpio, arg); break; case BCMNFC_WAKE_CTL: dev_info(&bcmi2cnfc_dev->client->dev, "%s, BCMNFC_WAKE_CTL (%x, %lx):\n", __func__, cmd, arg); gpio_set_value(bcmi2cnfc_dev->wake_gpio, arg); break; default: dev_err(&bcmi2cnfc_dev->client->dev, "%s, unknown cmd (%x, %lx)\n", __func__, cmd, arg); return 0; } return 0; }
static long bcm2079x_dev_compat_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct bcm2079x_dev *bcm2079x_dev = filp->private_data; printk("[dsc-test]bcm2079x_dev_compat_unlocked_ioctl\n"); arg = (compat_u64)arg; switch (cmd) { case BCMNFC_READ_FULL_PACKET: break; case BCMNFC_READ_MULTI_PACKETS: break; case BCMNFC_CHANGE_ADDR: dev_info(&bcm2079x_dev->client->dev, "%s, BCMNFC_CHANGE_ADDR (%x, %lx):\n", __func__, cmd, arg); change_client_addr(bcm2079x_dev, arg); break; case BCMNFC_POWER_CTL: dev_info(&bcm2079x_dev->client->dev, "%s, BCMNFC_POWER_CTL (%x, %lx):\n", __func__, cmd, arg); if (arg != 1) set_client_addr(bcm2079x_dev, bcm2079x_dev->original_address); gpio_set_value(bcm2079x_dev->en_gpio, arg); break; case BCMNFC_WAKE_CTL: dev_info(&bcm2079x_dev->client->dev, "%s, BCMNFC_WAKE_CTL (%x, %lx):\n", __func__, cmd, arg); //printk("zhanglongbo:arg is %lx\n",arg); #ifdef USE_WAKE_LOCK if(arg != 0) { while(wake_lock_active(&bcm2079x_dev->wake_lock )) { printk("release wake lock!!!\n"); wake_unlock(&bcm2079x_dev->wake_lock); } wake_lock_timeout(&bcm2079x_dev->wake_lock, HZ*2); } #endif gpio_set_value(bcm2079x_dev->wake_gpio, arg); break; default: dev_err(&bcm2079x_dev->client->dev, "%s, unknown cmd (%x, %lx)\n", __func__, cmd, arg); return 0; } return 0; }
static long bcm2079x_dev_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct bcm2079x_dev *bcm2079x_dev = filp->private_data; switch (cmd) { case BCMNFC_READ_FULL_PACKET: DBG(dev_info(&bcm2079x_dev->client->dev, "%s, BCMNFC_READ_FULL_PACKET (%x, %lx):\n", __func__, cmd, arg)); break; case BCMNFC_READ_MULTI_PACKETS: DBG(dev_info(&bcm2079x_dev->client->dev, "%s, BCMNFC_READ_MULTI_PACKETS (%x, %lx):\n", __func__, cmd, arg)); break; case BCMNFC_CHANGE_ADDR: DBG(dev_info(&bcm2079x_dev->client->dev, "%s, BCMNFC_CHANGE_ADDR (%x, %lx):\n", __func__, cmd, arg)); change_client_addr(bcm2079x_dev, arg); break; case BCMNFC_POWER_CTL: DBG(dev_info(&bcm2079x_dev->client->dev, "%s, BCMNFC_POWER_CTL (%x, %lx):\n", __func__, cmd, arg)); if (arg == 1) { /* Power On */ gpio_set_value(bcm2079x_dev->en_gpio, 1); if (bcm2079x_dev->irq_enabled == FALSE) { bcm2079x_dev->count_irq = 0; enable_irq(bcm2079x_dev->client->irq); bcm2079x_dev->irq_enabled = true; } } else { if (bcm2079x_dev->irq_enabled == true) { bcm2079x_dev->irq_enabled = FALSE; disable_irq_nosync(bcm2079x_dev->client->irq); if (bcm2079x_dev->count_irq > 0) wake_unlock(&nfc_wake_lock); } gpio_set_value(bcm2079x_dev->en_gpio, 0); set_client_addr(bcm2079x_dev, bcm2079x_dev->original_address); } break; case BCMNFC_WAKE_CTL: DBG(dev_info(&bcm2079x_dev->client->dev, "%s, BCMNFC_WAKE_CTL (%x, %lx):\n", __func__, cmd, arg)); #ifdef CONFIG_HAS_WAKELOCK if (arg == 0) { wake_lock(&nfc_wake_lock); DBG(dev_info(&bcm2079x_dev->client->dev, "%s: got wake lock", __func__)); } #endif gpio_set_value(bcm2079x_dev->wake_gpio, arg); #ifdef CONFIG_HAS_WAKELOCK if (arg == 1) { wake_unlock(&nfc_wake_lock); DBG(dev_info(&bcm2079x_dev->client->dev, "%s: release wake lock, count_irq = %d", __func__, bcm2079x_dev->count_irq)); } #endif break; default: dev_err(&bcm2079x_dev->client->dev, "%s, unknown cmd (%x, %lx)\n", __func__, cmd, arg); return 0; } return 0; }