2005-04-17 02:20:36 +04:00
/*
*
* some common structs and functions to handle infrared remotes via
* input layer . . .
*
* ( c ) 2003 Gerd Knorr < kraxel @ bytesex . org > [ SuSE Labs ]
*
* 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 , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
2005-11-09 08:37:32 +03:00
# ifndef _IR_COMMON
# define _IR_COMMON
2005-04-17 02:20:36 +04:00
2005-11-09 08:37:32 +03:00
# include <linux/input.h>
2006-12-27 19:04:09 +03:00
# include <linux/workqueue.h>
2008-08-05 17:03:17 +04:00
# include <linux/interrupt.h>
2009-12-11 14:34:07 +03:00
# include <media/ir-core.h>
2005-04-17 02:20:36 +04:00
2006-12-08 03:45:28 +03:00
# define RC5_START(x) (((x)>>12)&3)
# define RC5_TOGGLE(x) (((x)>>11)&1)
# define RC5_ADDR(x) (((x)>>6)&31)
# define RC5_INSTR(x) ((x)&63)
2005-04-17 02:20:36 +04:00
struct ir_input_state {
/* configuration */
2009-12-14 19:53:37 +03:00
u64 ir_type ;
2005-04-17 02:20:36 +04:00
/* key info */
2009-11-28 04:40:22 +03:00
u32 ir_key ; /* ir scancode */
2005-04-17 02:20:36 +04:00
u32 keycode ; /* linux key code */
int keypressed ; /* current state */
} ;
2006-12-08 03:45:28 +03:00
/* this was saa7134_ir and bttv_ir, moved here for
* rc5 decoding . */
struct card_ir {
struct input_dev * dev ;
struct ir_input_state ir ;
char name [ 32 ] ;
char phys [ 32 ] ;
2010-03-31 21:40:35 +04:00
int users ;
2006-12-08 03:45:28 +03:00
2010-03-20 06:25:37 +03:00
u32 running : 1 ;
struct ir_dev_props props ;
2006-12-08 03:45:28 +03:00
/* Usual gpio signalling */
u32 mask_keycode ;
u32 mask_keydown ;
u32 mask_keyup ;
u32 polling ;
u32 last_gpio ;
int shift_by ;
int start ; // What should RC5_START() be
int addr ; // What RC5_ADDR() should be.
int rc5_key_timeout ;
int rc5_remote_gap ;
struct work_struct work ;
struct timer_list timer ;
/* RC5 gpio */
u32 rc5_gpio ;
struct timer_list timer_end ; /* timer_end for code completion */
struct timer_list timer_keyup ; /* timer_end for key release */
u32 last_rc5 ; /* last good rc5 code */
u32 last_bit ; /* last raw bit seen */
u32 code ; /* raw code under construction */
struct timeval base_time ; /* time of last seen code */
int active ; /* building raw code */
2008-08-05 17:03:17 +04:00
/* NEC decoding */
u32 nec_gpio ;
struct tasklet_struct tlet ;
2010-03-21 02:59:44 +03:00
/* IR core raw decoding */
u32 raw_decode ;
2006-12-08 03:45:28 +03:00
} ;
2009-11-28 04:01:23 +03:00
/* Routines from ir-functions.c */
2009-11-29 14:19:59 +03:00
int ir_input_init ( struct input_dev * dev , struct ir_input_state * ir ,
2009-12-14 19:53:37 +03:00
const u64 ir_type ) ;
2005-04-17 02:20:36 +04:00
void ir_input_nokey ( struct input_dev * dev , struct ir_input_state * ir ) ;
void ir_input_keydown ( struct input_dev * dev , struct ir_input_state * ir ,
2009-11-28 04:40:22 +03:00
u32 ir_key ) ;
2005-04-17 02:20:36 +04:00
u32 ir_extract_bits ( u32 data , u32 mask ) ;
int ir_dump_samples ( u32 * samples , int count ) ;
int ir_decode_biphase ( u32 * samples , int count , int low , int high ) ;
2005-09-10 00:03:37 +04:00
int ir_decode_pulsedistance ( u32 * samples , int count , int low , int high ) ;
2009-09-28 03:05:23 +04:00
u32 ir_rc5_decode ( unsigned int code ) ;
2005-04-17 02:20:36 +04:00
2006-12-08 03:45:28 +03:00
void ir_rc5_timer_end ( unsigned long data ) ;
void ir_rc5_timer_keyup ( unsigned long data ) ;
2005-11-09 08:37:32 +03:00
# endif