summaryrefslogtreecommitdiff
path: root/drivers/media/rc/mtk-cir.c
diff options
context:
space:
mode:
authorSean Wang <sean.wang@mediatek.com>2017-06-30 02:03:06 -0400
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2017-08-20 09:38:43 -0400
commit583899828c607e59f51ce818f8e5de6996ad2ef7 (patch)
treedf71ddf61a37de291b35bca7ca3d69ee1d401776 /drivers/media/rc/mtk-cir.c
parent50c3c1ba171f3f68f2aa820121517deb5211e7ee (diff)
media: rc: mtk-cir: add support for MediaTek MT7622 SoC
This patch adds driver for CIR controller on MT7622 SoC. It has similar handling logic as the previously MT7623 does, but there are some differences in the register and field definition. So for ease portability and maintenance, those differences all are being kept inside the platform data as other drivers usually do. Currently testing successfully on NEC and SONY remote controller. Signed-off-by: Sean Wang <sean.wang@mediatek.com> Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/rc/mtk-cir.c')
-rw-r--r--drivers/media/rc/mtk-cir.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/media/rc/mtk-cir.c b/drivers/media/rc/mtk-cir.c
index 32b1031f08c9..667277205fee 100644
--- a/drivers/media/rc/mtk-cir.c
+++ b/drivers/media/rc/mtk-cir.c
@@ -84,6 +84,13 @@ static const u32 mt7623_regs[] = {
[MTK_IRINT_CLR_REG] = 0xd0,
};
+static const u32 mt7622_regs[] = {
+ [MTK_IRCLR_REG] = 0x18,
+ [MTK_CHKDATA_REG] = 0x30,
+ [MTK_IRINT_EN_REG] = 0x1c,
+ [MTK_IRINT_CLR_REG] = 0x20,
+};
+
struct mtk_field_type {
u32 reg;
u8 offset;
@@ -113,6 +120,11 @@ static const struct mtk_field_type mt7623_fields[] = {
[MTK_HW_PERIOD] = {0x10, 0, GENMASK(7, 0)},
};
+static const struct mtk_field_type mt7622_fields[] = {
+ [MTK_CHK_PERIOD] = {0x24, 0, GENMASK(24, 0)},
+ [MTK_HW_PERIOD] = {0x10, 0, GENMASK(24, 0)},
+};
+
/*
* struct mtk_ir - This is the main datasructure for holding the state
* of the driver
@@ -268,8 +280,17 @@ static const struct mtk_ir_data mt7623_data = {
.div = 4,
};
+static const struct mtk_ir_data mt7622_data = {
+ .regs = mt7622_regs,
+ .fields = mt7622_fields,
+ .ok_count = 0xf,
+ .hw_period = 0xffff,
+ .div = 32,
+};
+
static const struct of_device_id mtk_ir_match[] = {
{ .compatible = "mediatek,mt7623-cir", .data = &mt7623_data},
+ { .compatible = "mediatek,mt7622-cir", .data = &mt7622_data},
{},
};
MODULE_DEVICE_TABLE(of, mtk_ir_match);