mirror of https://github.com/OpenIPC/firmware.git
130 lines
3.6 KiB
Diff
130 lines
3.6 KiB
Diff
diff -drupN a/drivers/media/rc/sunxi-ir-rx.h b/drivers/media/rc/sunxi-ir-rx.h
|
|
--- a/drivers/media/rc/sunxi-ir-rx.h 1970-01-01 03:00:00.000000000 +0300
|
|
+++ b/drivers/media/rc/sunxi-ir-rx.h 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -0,0 +1,125 @@
|
|
+/*
|
|
+ * linux-4.4/drivers/media/rc/sunxi-ir-rx.h
|
|
+ *
|
|
+ * Copyright (c) 2007-2017 Allwinnertech Co., Ltd.
|
|
+ *
|
|
+ * This software is licensed under the terms of the GNU General Public
|
|
+ * License version 2, as published by the Free Software Foundation, and
|
|
+ * may be copied, distributed, and modified under those terms.
|
|
+ *
|
|
+ * This program is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ * GNU General Public License for more details.
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef SUNXI_IR_RX_H
|
|
+#define SUNXI_IR_RX_H
|
|
+
|
|
+/* Registers */
|
|
+#define IR_CTRL_REG (0x00) /* IR Control */
|
|
+#define IR_RXCFG_REG (0x10) /* Rx Config */
|
|
+#define IR_RXDAT_REG (0x20) /* Rx Data */
|
|
+#define IR_RXINTE_REG (0x2C) /* Rx Interrupt Enable */
|
|
+#define IR_RXINTS_REG (0x30) /* Rx Interrupt Status */
|
|
+#define IR_SPLCFG_REG (0x34) /* IR Sample Config */
|
|
+
|
|
+#define IR_FIFO_SIZE (64) /* 64Bytes */
|
|
+
|
|
+#define IR_SIMPLE_UNIT (21000) /* simple in ns */
|
|
+#define IR_CLK (24000000) /* 24Mhz */
|
|
+#define IR_SAMPLE_DEV (0x3<<0) /* 24MHz/512 =46875Hz (~21us) */
|
|
+
|
|
+/* Active Threshold (0+1)*128clock*21us = 2.6ms */
|
|
+#define IR_ACTIVE_T ((0&0xff)<<16)
|
|
+
|
|
+/* Filter Threshold = 16*21us = 336us < 500us */
|
|
+#define IR_RXFILT_VAL (((16)&0x3f)<<2)
|
|
+
|
|
+/* Filter Threshold = 22*21us = 336us < 500us */
|
|
+#define IR_RXFILT_VAL_RC5 (((22)&0x3f)<<2)
|
|
+
|
|
+/* Idle Threshold = (5+1)*128clock*21us = 16ms > 9ms */
|
|
+#define IR_RXIDLE_VAL (((5)&0xff)<<8)
|
|
+
|
|
+/* Active Threshold (0+1)*128clock*21us = 2.6ms */
|
|
+#define IR_ACTIVE_T_SAMPLE ((16&0xff)<<16)
|
|
+
|
|
+#define IR_ACTIVE_T_C (1<<23) /* Active Threshold */
|
|
+#define IR_CIR_MODE (0x3<<4) /* CIR mode enable */
|
|
+#define IR_ENTIRE_ENABLE (0x3<<0) /* IR entire enable */
|
|
+#define IR_FIFO_20 (((20)-1)<<8)
|
|
+#define IR_IRQ_STATUS ((0x1<<4)|0x3)
|
|
+#define IR_BOTH_PULSE (0x1 << 6)
|
|
+#define IR_LOW_PULSE (0x2 << 6)
|
|
+#define IR_HIGH_PULSE (0x3 << 6)
|
|
+
|
|
+/*Bit Definition of IR_RXINTS_REG Register*/
|
|
+#define IR_RXINTS_RXOF (0x1<<0) /* Rx FIFO Overflow */
|
|
+#define IR_RXINTS_RXPE (0x1<<1) /* Rx Packet End */
|
|
+#define IR_RXINTS_RXDA (0x1<<4) /* Rx FIFO Data Available */
|
|
+
|
|
+#define MAX_ADDR_NUM (32)
|
|
+
|
|
+#define RC_MAP_SUNXI "rc_map_sunxi"
|
|
+
|
|
+enum {
|
|
+ DEBUG_INIT = 1U << 0,
|
|
+ DEBUG_INT = 1U << 1,
|
|
+ DEBUG_DATA_INFO = 1U << 2,
|
|
+ DEBUG_SUSPEND = 1U << 3,
|
|
+ DEBUG_ERR = 1U << 4,
|
|
+};
|
|
+
|
|
+enum ir_mode {
|
|
+ CIR_MODE_ENABLE,
|
|
+ IR_MODULE_ENABLE,
|
|
+ IR_BOTH_PULSE_MODE, /* new feature to avoid noisy */
|
|
+ IR_LOW_PULSE_MODE,
|
|
+ IR_HIGH_PULSE_MODE,
|
|
+};
|
|
+
|
|
+enum ir_sample_config {
|
|
+ IR_SAMPLE_REG_CLEAR,
|
|
+ IR_CLK_SAMPLE,
|
|
+ IR_FILTER_TH_NEC,
|
|
+ IR_FILTER_TH_RC5,
|
|
+ IR_IDLE_TH,
|
|
+ IR_ACTIVE_TH,
|
|
+ IR_ACTIVE_TH_SAMPLE,
|
|
+};
|
|
+
|
|
+enum ir_irq_config {
|
|
+ IR_IRQ_STATUS_CLEAR,
|
|
+ IR_IRQ_ENABLE,
|
|
+ IR_IRQ_FIFO_SIZE,
|
|
+};
|
|
+
|
|
+enum {
|
|
+ IR_SUPLY_DISABLE = 0,
|
|
+ IR_SUPLY_ENABLE,
|
|
+};
|
|
+
|
|
+struct sunxi_ir_data {
|
|
+ void __iomem *reg_base;
|
|
+ struct platform_device *pdev;
|
|
+ struct clk *mclk;
|
|
+ struct clk *pclk;
|
|
+ struct rc_dev *rcdev;
|
|
+ struct regulator *suply;
|
|
+ struct pinctrl *pctrl;
|
|
+ u32 suply_vol;
|
|
+ int irq_num;
|
|
+ u32 ir_protocols;
|
|
+ u32 ir_addr_cnt;
|
|
+ u32 ir_addr[MAX_ADDR_NUM];
|
|
+ u32 ir_powerkey[MAX_ADDR_NUM];
|
|
+};
|
|
+
|
|
+int init_sunxi_ir_map(void);
|
|
+void exit_sunxi_ir_map(void);
|
|
+#ifdef CONFIG_SUNXI_KEYMAPPING_SUPPORT
|
|
+int init_sunxi_ir_map_ext(void *addr, int num);
|
|
+#endif
|
|
+#endif /* SUNXI_IR_RX_H */
|