hc
2024-08-16 62c46c9150c4afde7e5b25436263fddf79d66f0b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/* SPDX-License-Identifier: GPL-2.0 */
 
#ifndef __RKXX_PWM_REMOTECTL_H__
#define __RKXX_PWM_REMOTECTL_H__
#include <linux/input.h>
 
#define MAX_NUM_KEYS            60
#define PWM_PWR_KEY_CAPURURE_MAX    10
 
/* PWM0 registers  */
#define PWM_REG_CNTR            0x00  /* Counter Register */
#define PWM_REG_HPR            0x04  /* Period Register */
#define PWM_REG_LPR            0x08  /* Duty Cycle Register */
#define PWM_REG_CTRL            0x0c  /* Control Register */
#define PWM3_REG_INTSTS            0x10  /* Interrupt Status Refister For Pwm3*/
#define PWM2_REG_INTSTS            0x20  /* Interrupt Status Refister For Pwm2*/
#define PWM1_REG_INTSTS            0x30  /* Interrupt Status Refister For Pwm1*/
#define PWM0_REG_INTSTS            0x40  /* Interrupt Status Refister For Pwm0*/
#define PWM3_REG_INT_EN            0x14  /* Interrupt Enable Refister For Pwm3*/
#define PWM2_REG_INT_EN            0x24  /* Interrupt Enable Refister For Pwm2*/
#define PWM1_REG_INT_EN            0x34  /* Interrupt Enable Refister For Pwm1*/
#define PWM0_REG_INT_EN            0x44  /* Interrupt Enable Refister For Pwm0*/
 
/*REG_CTRL bits definitions*/
#define PWM_ENABLE            (1 << 0)
#define PWM_DISABLE            (0 << 0)
 
/*operation mode*/
#define PWM_MODE_ONESHOT        (0x00 << 1)
#define PWM_MODE_CONTINUMOUS        (0x01 << 1)
#define PWM_MODE_CAPTURE        (0x02 << 1)
 
/*duty cycle output polarity*/
#define PWM_DUTY_POSTIVE        (0x01 << 3)
#define PWM_DUTY_NEGATIVE        (0x00 << 3)
 
/*incative state output polarity*/
#define PWM_INACTIVE_POSTIVE        (0x01 << 4)
#define PWM_INACTIVE_NEGATIVE        (0x00 << 4)
 
/*clock source select*/
#define PWM_CLK_SCALE            (1 << 9)
#define PWM_CLK_NON_SCALE        (0 << 9)
 
#define PWM_CH0_INT            (1 << 0)
#define PWM_CH1_INT            (1 << 1)
#define PWM_CH2_INT            (1 << 2)
#define PWM_CH3_INT            (1 << 3)
#define PWM_PWR_KEY_INT            (1 << 7)
 
#define PWM_CH0_POL            (1 << 8)
#define PWM_CH1_POL            (1 << 9)
#define PWM_CH2_POL            (1 << 10)
#define PWM_CH3_POL            (1 << 11)
 
#define PWM_CH0_INT_ENABLE        (1 << 0)
#define PWM_CH0_INT_DISABLE        (0 << 0)
 
#define PWM_CH1_INT_ENABLE        (1 << 1)
#define PWM_CH1_INT_DISABLE        (0 << 1)
 
#define PWM_CH2_INT_ENABLE        (1 << 2)
#define PWM_CH2_INT_DISABLE        (0 << 2)
 
#define PWM_CH3_INT_ENABLE        (1 << 3)
#define PWM_CH3_INT_DISABLE        (0 << 3)
 
#define PWM_INT_ENABLE            1
#define PWM_INT_DISABLE            0
 
/*prescale factor*/
#define PWMCR_MIN_PRESCALE            0x00
#define PWMCR_MAX_PRESCALE            0x07
 
#define PWMDCR_MIN_DUTY                0x0001
#define PWMDCR_MAX_DUTY                0xFFFF
 
#define PWMPCR_MIN_PERIOD            0x0001
#define PWMPCR_MAX_PERIOD            0xFFFF
 
#define PWMPCR_MIN_PERIOD            0x0001
#define PWMPCR_MAX_PERIOD            0xFFFF
 
 
enum pwm_div {
   PWM_DIV1    = (0x0 << 12),
   PWM_DIV2    = (0x1 << 12),
   PWM_DIV4    = (0x2 << 12),
   PWM_DIV8    = (0x3 << 12),
   PWM_DIV16    = (0x4 << 12),
   PWM_DIV32    = (0x5 << 12),
   PWM_DIV64    = (0x6 << 12),
   PWM_DIV128    = (0x7 << 12),
};
 
/*  NEC Protocol */
#define RK_PWM_TIME_PRE_MIN        4000
#define RK_PWM_TIME_PRE_MAX        5000
 
#define RK_PWM_TIME_PRE_MIN_LOW        8000
#define RK_PWM_TIME_PRE_MAX_LOW        10000
 
#define RK_PWM_TIME_BIT0_MIN        390
#define RK_PWM_TIME_BIT0_MAX        730
 
#define RK_PWM_TIME_BIT1_MIN        1300
#define RK_PWM_TIME_BIT1_MAX        2000
 
#define RK_PWM_TIME_BIT_MIN_LOW        390
#define RK_PWM_TIME_BIT_MAX_LOW        730
 
#define RK_PWM_TIME_RPT_MIN        2000
#define RK_PWM_TIME_RPT_MAX        2500
 
#define RK_PWM_TIME_SEQ1_MIN        95000
#define RK_PWM_TIME_SEQ1_MAX        98000
 
#define RK_PWM_TIME_SEQ2_MIN        30000
#define RK_PWM_TIME_SEQ2_MAX        55000
 
 
#define PWM_REG_INTSTS(n)        ((3 - (n)) * 0x10 + 0x10)
#define PWM_REG_INT_EN(n)        ((3 - (n)) * 0x10 + 0x14)
#define RK_PWM_VERSION_ID(n)        ((3 - (n)) * 0x10 + 0x2c)
#define PWM_REG_PWRMATCH_CTRL(n)    ((3 - (n)) * 0x10 + 0x50)
#define PWM_REG_PWRMATCH_LPRE(n)    ((3 - (n)) * 0x10 + 0x54)
#define PWM_REG_PWRMATCH_HPRE(n)    ((3 - (n)) * 0x10 + 0x58)
#define PWM_REG_PWRMATCH_LD(n)        ((3 - (n)) * 0x10 + 0x5C)
#define PWM_REG_PWRMATCH_HD_ZERO(n)    ((3 - (n)) * 0x10 + 0x60)
#define PWM_REG_PWRMATCH_HD_ONE(n)    ((3 - (n)) * 0x10 + 0x64)
#define PWM_PWRMATCH_VALUE(n)        ((3 - (n)) * 0x10 + 0x68)
#define PWM_PWRCAPTURE_VALUE(n)        ((3 - (n)) * 0x10 + 0x9c)
 
#define PWM_CH_INT(n)            BIT(n)
#define PWM_CH_POL(n)            BIT(n+8)
 
#define PWM_CH_INT_ENABLE(n)        BIT(n)
#define PWM_PWR_INT_ENABLE        BIT(7)
#define CH3_PWRKEY_ENABLE        BIT(3)
 
 
 
 
typedef enum _RMC_STATE {
   RMC_IDLE,
   RMC_PRELOAD,
   RMC_USERCODE,
   RMC_GETDATA,
   RMC_SEQUENCE,
} eRMC_STATE;
 
 
struct RKxx_remotectl_platform_data {
   int nbuttons;
   int rep;
   int timer;
   int wakeup;
};
 
#endif