#include <linux/device.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/of_platform.h>
#include <linux/platform_device.h>
#include <media/rc-core.h>
#define DRIVER_NAME "zx-irdec"
#define ZX_IR_ENABLE 0x04
#define ZX_DEGL_MASK GENMASK(21, 20)
#define ZX_DEGL_VALUE(x) (((x) << 20) & ZX_DEGL_MASK)
#define ZX_WDBEGIN_MASK GENMASK(18, 8)
#define ZX_WDBEGIN_VALUE(x) (((x) << 8) & ZX_WDBEGIN_MASK)
#define ZX_IR_INTSTCLR 0x14
#define ZX_NECRPT BIT(16)
static void zx_irdec_set_mask(struct zx_irdec *irdec, unsigned int reg,
data = readl(irdec->base + reg);
writel(data, irdec->base + reg);
static irqreturn_t zx_irdec_irq(int irq, void *dev_id)
struct zx_irdec *irdec = dev_id;
writel(1, irdec->base + ZX_IR_INTSTCLR);
if (readl(irdec->base + ZX_IR_CNUM) & ZX_NECRPT) {