Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux...
[firefly-linux-kernel-4.4.55.git] / drivers / input / remotectl / rockchip_pwm_remotectl.h
1 \r
2 #ifndef __RKXX_PWM_REMOTECTL_H__\r
3 #define __RKXX_PWM_REMOTECTL_H__\r
4 #include <linux/input.h>\r
5 \r
6 #define MAX_NUM_KEYS  60\r
7 \r
8 /* PWM0 registers  */\r
9 #define PWM_REG_CNTR                    0x00  /* Counter Register */\r
10 #define PWM_REG_HPR                               0x04  /* Period Register */\r
11 #define PWM_REG_LPR                     0x08  /* Duty Cycle Register */\r
12 #define PWM_REG_CTRL                    0x0c  /* Control Register */\r
13 #define PWM3_REG_INTSTS                 0x10  /* Interrupt Status Refister For Pwm3*/\r
14 #define PWM2_REG_INTSTS                 0x20  /* Interrupt Status Refister For Pwm2*/\r
15 #define PWM1_REG_INTSTS                 0x30  /* Interrupt Status Refister For Pwm1*/\r
16 #define PWM0_REG_INTSTS                 0x40  /* Interrupt Status Refister For Pwm0*/\r
17 #define PWM3_REG_INT_EN                 0x14  /* Interrupt Enable Refister For Pwm3*/\r
18 #define PWM2_REG_INT_EN                 0x24  /* Interrupt Enable Refister For Pwm2*/\r
19 #define PWM1_REG_INT_EN                 0x34  /* Interrupt Enable Refister For Pwm1*/\r
20 #define PWM0_REG_INT_EN                 0x44  /* Interrupt Enable Refister For Pwm0*/\r
21 \r
22 /*REG_CTRL bits definitions*/\r
23 #define PWM_ENABLE                                  (1 << 0)\r
24 #define PWM_DISABLE                                 (0 << 0)\r
25 \r
26 /*operation mode*/\r
27 #define PWM_MODE_ONESHOT                             (0x00 << 1)\r
28 #define PWM_MODE_CONTINUMOUS         (0x01 << 1)\r
29 #define PWM_MODE_CAPTURE                        (0x02 << 1)\r
30 \r
31 /*duty cycle output polarity*/\r
32 #define PWM_DUTY_POSTIVE                    (0x01 << 3)\r
33 #define PWM_DUTY_NEGATIVE                   (0x00 << 3)\r
34 \r
35 /*incative state output polarity*/\r
36 #define PWM_INACTIVE_POSTIVE                (0x01 << 4)\r
37 #define PWM_INACTIVE_NEGATIVE               (0x00 << 4)\r
38 \r
39 /*clock source select*/\r
40 #define PWM_CLK_SCALE                       (1 << 9)\r
41 #define PWM_CLK_NON_SCALE                   (0 << 9)\r
42 \r
43 #define PWM_CH0_INT                     (1 << 0)\r
44 #define PWM_CH1_INT                     (1 << 1)\r
45 #define PWM_CH2_INT                     (1 << 2)\r
46 #define PWM_CH3_INT                     (1 << 3)\r
47 \r
48 #define PWM_CH0_POL                     (1 << 8)\r
49 #define PWM_CH1_POL                     (1 << 9)\r
50 #define PWM_CH2_POL                     (1 << 10)\r
51 #define PWM_CH3_POL                     (1 << 11)\r
52 \r
53 #define PWM_CH0_INT_ENABLE              (1 << 0)\r
54 #define PWM_CH0_INT_DISABLE             (0 << 0)\r
55 \r
56 #define PWM_CH1_INT_ENABLE              (1 << 0)\r
57 #define PWM_CH1_INT_DISABLE             (0 << 1)\r
58 \r
59 #define PWM_CH2_INT_ENABLE              (1 << 2)\r
60 #define PWM_CH2_INT_DISABLE             (0 << 2)\r
61 \r
62 #define PWM_CH3_INT_ENABLE              (1 << 3)\r
63 #define PWM_CH3_INT_DISABLE             (0 << 3)\r
64 \r
65 /*prescale factor*/\r
66 #define PWMCR_MIN_PRESCALE                  0x00\r
67 #define PWMCR_MAX_PRESCALE                  0x07\r
68 \r
69 #define PWMDCR_MIN_DUTY                 0x0001\r
70 #define PWMDCR_MAX_DUTY                     0xFFFF\r
71 \r
72 #define PWMPCR_MIN_PERIOD                       0x0001\r
73 #define PWMPCR_MAX_PERIOD                       0xFFFF\r
74 \r
75 #define PWMPCR_MIN_PERIOD                       0x0001\r
76 #define PWMPCR_MAX_PERIOD                       0xFFFF\r
77 \r
78 enum pwm_div {\r
79         PWM_DIV1                 = (0x0 << 12),\r
80         PWM_DIV2                 = (0x1 << 12),\r
81         PWM_DIV4                 = (0x2 << 12),\r
82         PWM_DIV8                 = (0x3 << 12),\r
83         PWM_DIV16                = (0x4 << 12),\r
84         PWM_DIV32                = (0x5 << 12),\r
85         PWM_DIV64                = (0x6 << 12),\r
86         PWM_DIV128               = (0x7 << 12),\r
87 }; \r
88 \r
89 \r
90 \r
91 \r
92 /********************************************************************\r
93 **                            ºê¶¨Òå                                *\r
94 ********************************************************************/\r
95 #define RK_PWM_TIME_PRE_MIN     4000
96 #define RK_PWM_TIME_PRE_MAX     5000
97 \r
98 #define RK_PWM_TIME_BIT0_MIN    480
99 #define RK_PWM_TIME_BIT0_MAX    700
100 \r
101 #define RK_PWM_TIME_BIT1_MIN    1300
102 #define RK_PWM_TIME_BIT1_MAX    2000
103 \r
104 #define RK_PWM_TIME_RPT_MIN     2000
105 #define RK_PWM_TIME_RPT_MAX     2500
106 \r
107 #define RK_PWM_TIME_SEQ1_MIN    95000
108 #define RK_PWM_TIME_SEQ1_MAX    98000
109 \r
110 #define RK_PWM_TIME_SEQ2_MIN    30000
111 #define RK_PWM_TIME_SEQ2_MAX    55000
112
113
114 #define PWM_REG_INTSTS(n)       ((4 - (n)) * 0x10)
115 #define PWM_CH_INT(n)   BIT(n)
116 #define PWM_CH_POL(n)   BIT(n+8)
117
118
119 /********************************************************************\r
120 **                          ½á¹¹¶¨Òå                                *\r
121 ********************************************************************/\r
122 typedef enum _RMC_STATE\r
123 {\r
124     RMC_IDLE,\r
125     RMC_PRELOAD,\r
126     RMC_USERCODE,\r
127     RMC_GETDATA,\r
128     RMC_SEQUENCE\r
129 }eRMC_STATE;\r
130 \r
131 \r
132 struct RKxx_remotectl_platform_data {\r
133         //struct rkxx_remotectl_button *buttons;\r
134         int nbuttons;\r
135         int rep;\r
136         int timer;\r
137         int wakeup;\r
138 };\r
139 \r
140 #endif\r
141 \r