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