/*++ linux/drivers/input/keyboard/wmt_kpad.c Some descriptions of such software. Copyright (c) 2008 WonderMedia Technologies, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. 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. You should have received a copy of the GNU General Public License along with this program. If not, see . WonderMedia Technologies, Inc. 10F, 529, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C. --*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /*============================================================================= // // WM3498 SARADC control registers. // // Registers Abbreviations: // // ADCCtrl0_REG ADC Control0 Register. // // ADCCtrl1_REG ADC Control1 Register. // // ADCCTRL2_REG ADC Control2 Register. // //=============================================================================*/ /*============================================================================= // // Address constant for each register. // //============================================================================*/ #define ADCCtl0_ADDR (ADC_BASE_ADDR + 0x00) #define ADCCtl1_ADDR (ADC_BASE_ADDR + 0x04) #define ADCCtl2_ADDR (ADC_BASE_ADDR + 0x08) /*============================================================================= // // Register pointer. // //=============================================================================*/ #define ADCCtl0_REG (REG32_PTR(ADCCtl0_ADDR)) #define ADCCtl1_REG (REG32_PTR(ADCCtl1_ADDR)) #define ADCCtl2_REG (REG32_PTR(ADCCtl2_ADDR)) /*============================================================================= // // Register value. // //=============================================================================*/ #define ADCCtl0_VAL (REG32_VAL(ADCCtl0_ADDR)) #define ADCCtl1_VAL (REG32_VAL(ADCCtl1_ADDR)) #define ADCCtl2_VAL (REG32_VAL(ADCCtl2_ADDR)) /*============================================================================= // // ADCCtl0_REG ADC Control0 Register. // //=============================================================================*/ #define TOutDlyMask 0xFFFF /* Time Out Interrupt Delay Value */ #define TOutDly(x) ((x) & TOutDlyMask) #define ClrIntTOut BIT16 /* ADC Timeout Interrupt CLEAR signal */ #define ClrIntADC BIT17 /* ADC sample point Conversion Finished Interrupt CLEAR signal */ #define EndcIntEn BIT18 /* ADC Conversion Finished Interrupt Enable. */ #define TOutEn BIT19 /* Time Out Interrupt Enable. */ #define TempEn BIT20 /* Manual output valid. */ #define AutoMode BIT21 /* Auto mode select. */ #define SDataSel BIT22 /* Serial DATA select. */ #define DigClkEn BIT23 /* Digital clock enable. */ #define StartEn BIT24 /* A/D conversion starts by enable. */ #define AdcChSel BIT25 /* Analog input channel selection */ #define DBNSMASK 0x00000007 /* DBNS_SIZE bits can detect certain MSB bits comparison. */ #define DbnsSize(x) (((x) >> 26) & DBNSMASK) #define PMSel BIT29 /* SAR ADC works in Power Mode. */ #define PD BIT30 /* SAR ADC Power */ #define TestMode BIT31 /* SAR ADC Test Mode */ /*============================================================================= // // ADCCtrl1_REG ADC Control1 Register. // //=============================================================================*/ #define SARCodeMask 0x1FF /* SARADC data output. */ #define SARCode(x) ((x) & SARCodeMask) #define BufRd BIT13 /* Buffer read signal */ #define ValDetIntEn BIT14 /* ADC value changing detection INTERRUPT ENABLE */ #define ClrIntValDet BIT15 /* ADC value changing detection Interrupt CLEAR signal */ #define AutoTmpSlotMask 0xFFFF /* This value controls SAMPLE RATE */ #define AutoTmpSlot(x) (((x) >> 16) & AutoTmpSlotMask) /*============================================================================= // // ADCCtrl2_REG ADC Control1 Register. // //=============================================================================*/ #define SARCodeVld BIT0 /* SARADC valid signal. */ #define BufEmpty BIT8 /* Buffer empty signal */ #define TestDataMask 0x7F /* Test DATA */ #define TestData(x) (((x) >> 9) & TestDataMask) #define EndcIntStatus BIT16 /* ADC Conversion Finished Interrupt status */ #define BufDataMask 0x1FF /* Buffer read data (changed value saved in buffer) */ #define BufData(x) (((x) >> 17) & BufDataMask) #define TOutStatus BIT26 /* Time Out interrupt status */ #define ValDetIntStatus BIT27 /* Value changing detection interrupt status */ /* * Saradc register set structure */ struct saradc_regs_s { unsigned int volatile Ctr0; unsigned int volatile Ctr1; unsigned int volatile Ctr2; }; /* * wmt keypad operation structure. */ struct wmt_saradc_s { /* Module reference counter */ unsigned int ref; /* I/O Resource */ struct resource *res; /* Saradc I/O register set. */ struct saradc_regs_s *regs; /* Interrupt number and status counters. */ unsigned int irq; }; extern int wmt_getsyspara(char *varname, unsigned char *varval, int *varlen); extern unsigned int wmt_read_oscr(void); MODULE_AUTHOR("WonderMedia Technologies, Inc."); MODULE_DESCRIPTION("WMT [generic keypad] driver"); MODULE_LICENSE("GPL");