// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Driver for ITE Tech Inc. IT8712F/IT8512 CIR
*
* Copyright (C) 2010 Juan Jesús García de Soria <skandalfo@gmail.com>
*
* Inspired by the original lirc_it87 and lirc_ite8709 drivers, on top of the
* skeleton provided by the nuvoton-cir driver.
*
* The lirc_it87 driver was originally written by Hans-Gunter Lutke Uphues
* <hg_lu@web.de> in 2001, with enhancements by Christoph Bartelmus
* <lirc@bartelmus.de>, Andrew Calkin <r_tay@hotmail.com> and James Edwards
* <jimbo-lirc@edwardsclan.net>.
*
* The lirc_ite8709 driver was written by Grégory Lardière
* <spmf2004-lirc@yahoo.fr> in 2008.
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pnp.h>
#include <linux/io.h>
#include <linux/interrupt.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/input.h>
#include <linux/bitops.h>
#include <media/rc-core.h>
#include <linux/pci_ids.h>
#include "ite-cir.h"
/* module parameters */
/* default sample period */
static long sample_period = NSEC_PER_SEC / 115200;
module_param(sample_period, long, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(sample_period, "sample period");
/* override detected model id */
static int model_number = -1;
module_param(model_number, int, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(model_number, "Use this model number, don't autodetect");
/* HW-independent code functions */
/* check whether carrier frequency is high frequency */
static inline