static long pn544_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { struct pn544_dev *pn544_dev; int ret = 0; pn544_dev = file->private_data; mutex_lock(&pn544_dev->ioctl_mutex); ret = pn544_dev_ioctl(pn544_dev, cmd, arg); if (ret != 0) { pr_err ("pn544_ioctl return error\n"); } mutex_unlock(&pn544_dev->ioctl_mutex); return ret; }
static int nfc_blk_reboot_notify(struct notifier_block *notify_block, unsigned long mode, void *unused) { int ret = 0; struct pn544_dev *pn544_dev = container_of( notify_block, struct pn544_dev, reboot_notify); pr_info("pn544 reboot notification received\n"); if (pn544_dev != NULL) { pn544_dev->discharge_delay = 0; ret = pn544_dev_ioctl(pn544_dev, PN544_SET_PWR, 0); pr_info("pn544 calling ioctl power off returned = %d\n", ret); } return NOTIFY_DONE; }
static ssize_t pn544_control_func(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct miscdevice *pn544_device = dev_get_drvdata(dev); struct pn544_dev *pn544_dev = container_of(pn544_device, struct pn544_dev, pn544_device); unsigned long val = simple_strtoul(buf, NULL, 10); int ret = 0; pr_info("pn544_control_func called value in ioctl is = %ld\n", val); ret = pn544_dev_ioctl(pn544_dev, PN544_SET_PWR, val); if (ret != 0) pr_err("pn544_control_function ioctl return error\n"); return count; }
static long p61_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { int ret = 0; struct p61_dev *p61_dev = NULL; unsigned char buf[100]; P61_DBG_MSG(KERN_ALERT "p61_dev_ioctl-Enter %u arg = %ld\n", cmd, arg); p61_dev = filp->private_data; switch (cmd) { case P61_SET_PWR: if (arg == 2) { #ifdef P61_HARD_RESET P61_DBG_MSG(KERN_ALERT " Disabling p61_regulator"); if (p61_regulator != NULL) { regulator_disable(p61_regulator); msleep(50); regulator_enable(p61_regulator); P61_DBG_MSG(KERN_ALERT " Enabling p61_regulator"); } else { P61_ERR_MSG(KERN_ALERT " ERROR : p61_regulator is not enabled"); } #endif } else if (arg == 1) { P61_DBG_MSG(KERN_ALERT " Soft Reset"); //gpio_set_value(p61_dev->rst_gpio, 1); //msleep(20); gpio_set_value(p61_dev->rst_gpio, 0); msleep(50); ret = spi_read (p61_dev -> spi,(void *) buf, sizeof(buf)); msleep(50); gpio_set_value(p61_dev->rst_gpio, 1); msleep(20); } break; case P61_SET_DBG: debug_level = (unsigned char )arg; P61_DBG_MSG(KERN_INFO"[NXP-P61] - Debug level %d", debug_level); break; case P61_SET_POLL: p61_dev-> enable_poll_mode = (unsigned char )arg; if (p61_dev-> enable_poll_mode == 0) { P61_DBG_MSG(KERN_INFO"[NXP-P61] - IRQ Mode is set \n"); } else { P61_DBG_MSG(KERN_INFO"[NXP-P61] - Poll Mode is set \n"); p61_dev->enable_poll_mode = 1; } break; case P61_SET_SPM_PWR: P61_DBG_MSG(KERN_ALERT " P61_SET_SPM_PWR: enter"); ret = pn544_dev_ioctl(filp, P61_SET_SPI_PWR, arg); P61_DBG_MSG(KERN_ALERT " P61_SET_SPM_PWR: exit"); break; case P61_GET_SPM_STATUS: P61_DBG_MSG(KERN_ALERT " P61_GET_SPM_STATUS: enter"); ret = pn544_dev_ioctl(filp, P61_GET_PWR_STATUS, arg); P61_DBG_MSG(KERN_ALERT " P61_GET_SPM_STATUS: exit"); break; case P61_SET_DWNLD_STATUS: P61_DBG_MSG(KERN_ALERT " P61_SET_DWNLD_STATUS: enter"); ret = pn544_dev_ioctl(filp, PN544_SET_DWNLD_STATUS, arg); P61_DBG_MSG(KERN_ALERT " P61_SET_DWNLD_STATUS: =%d exit",arg); break; case P61_SET_THROUGHPUT: p61_through_put_t.enable_through_put_measure = true; P61_DBG_MSG(KERN_INFO"[NXP-P61] - P61_SET_THROUGHPUT enable %d", p61_through_put_t.enable_through_put_measure); break; case P61_GET_ESE_ACCESS: P61_DBG_MSG(KERN_ALERT " P61_GET_ESE_ACCESS: enter"); ret = pn544_dev_ioctl(filp, P544_GET_ESE_ACCESS, arg); P61_DBG_MSG(KERN_ALERT " P61_GET_ESE_ACCESS ret: %d exit",ret); break; case P61_SET_POWER_SCHEME: P61_DBG_MSG(KERN_ALERT " P61_SET_POWER_SCHEME: enter"); ret = pn544_dev_ioctl(filp, P544_SET_POWER_SCHEME, arg); P61_DBG_MSG(KERN_ALERT " P61_SET_POWER_SCHEME ret: %d exit",ret); break; case P61_INHIBIT_PWR_CNTRL: P61_DBG_MSG(KERN_ALERT " P61_INHIBIT_PWR_CNTRL: enter"); ret = pn544_dev_ioctl(filp, P544_SECURE_TIMER_SESSION, arg); P61_DBG_MSG(KERN_ALERT " P61_INHIBIT_PWR_CNTRL ret: %d exit", ret); break; default: P61_DBG_MSG(KERN_ALERT " Error case"); ret = -EINVAL; } P61_DBG_MSG(KERN_ALERT "p61_dev_ioctl-exit %u arg = %ld\n", cmd, arg); return ret; }