2009-12-11 20:41:07 -03:00
/*
Mantis PCI bridge driver
Copyright ( C ) Manu Abraham ( abraham . manu @ gmail . com )
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 . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include <linux/input.h>
# include <media/ir-common.h>
# include <linux/pci.h>
# include "dmxdev.h"
# include "dvbdev.h"
# include "dvb_demux.h"
# include "dvb_frontend.h"
# include "dvb_net.h"
# include "mantis_common.h"
# include "mantis_reg.h"
# include "mantis_uart.h"
static struct ir_scancode mantis_ir_table [ ] = {
{ 0x29 , KEY_POWER } ,
{ 0x28 , KEY_FAVORITES } ,
{ 0x30 , KEY_TEXT } ,
2009-12-15 08:47:21 -03:00
{ 0x17 , KEY_INFO } , /* Preview */
2009-12-11 20:41:07 -03:00
{ 0x23 , KEY_EPG } ,
2009-12-15 08:47:21 -03:00
{ 0x3b , KEY_F22 } , /* Record List */
2009-12-11 20:41:07 -03:00
{ 0x3c , KEY_1 } ,
{ 0x3e , KEY_2 } ,
{ 0x39 , KEY_3 } ,
{ 0x36 , KEY_4 } ,
{ 0x22 , KEY_5 } ,
{ 0x20 , KEY_6 } ,
{ 0x32 , KEY_7 } ,
{ 0x26 , KEY_8 } ,
{ 0x24 , KEY_9 } ,
{ 0x2a , KEY_0 } ,
{ 0x33 , KEY_CANCEL } ,
{ 0x2c , KEY_BACK } ,
{ 0x15 , KEY_CLEAR } ,
{ 0x3f , KEY_TAB } ,
{ 0x10 , KEY_ENTER } ,
{ 0x14 , KEY_UP } ,
{ 0x0d , KEY_RIGHT } ,
{ 0x0e , KEY_DOWN } ,
{ 0x11 , KEY_LEFT } ,
{ 0x21 , KEY_VOLUMEUP } ,
{ 0x35 , KEY_VOLUMEDOWN } ,
{ 0x3d , KEY_CHANNELDOWN } ,
{ 0x3a , KEY_CHANNELUP } ,
{ 0x2e , KEY_RECORD } ,
{ 0x2b , KEY_PLAY } ,
{ 0x13 , KEY_PAUSE } ,
{ 0x25 , KEY_STOP } ,
{ 0x1f , KEY_REWIND } ,
{ 0x2d , KEY_FASTFORWARD } ,
2009-12-15 08:47:21 -03:00
{ 0x1e , KEY_PREVIOUS } , /* Replay |< */
{ 0x1d , KEY_NEXT } , /* Skip >| */
2009-12-11 20:41:07 -03:00
2009-12-15 08:47:21 -03:00
{ 0x0b , KEY_CAMERA } , /* Capture */
{ 0x0f , KEY_LANGUAGE } , /* SAP */
{ 0x18 , KEY_MODE } , /* PIP */
{ 0x12 , KEY_ZOOM } , /* Full screen */
2009-12-11 20:41:07 -03:00
{ 0x1c , KEY_SUBTITLE } ,
{ 0x2f , KEY_MUTE } ,
2009-12-15 08:47:21 -03:00
{ 0x16 , KEY_F20 } , /* L/R */
{ 0x38 , KEY_F21 } , /* Hibernate */
2009-12-11 20:41:07 -03:00
2009-12-15 08:47:21 -03:00
{ 0x37 , KEY_SWITCHVIDEOMODE } , /* A/V */
{ 0x31 , KEY_AGAIN } , /* Recall */
{ 0x1a , KEY_KPPLUS } , /* Zoom+ */
{ 0x19 , KEY_KPMINUS } , /* Zoom- */
2009-12-11 20:41:07 -03:00
{ 0x27 , KEY_RED } ,
{ 0x0C , KEY_GREEN } ,
{ 0x01 , KEY_YELLOW } ,
{ 0x00 , KEY_BLUE } ,
} ;
struct ir_scancode_table ir_mantis = {
. scan = mantis_ir_table ,
. size = ARRAY_SIZE ( mantis_ir_table ) ,
} ;
EXPORT_SYMBOL_GPL ( ir_mantis ) ;
int mantis_input_init ( struct mantis_pci * mantis )
{
struct input_dev * rc ;
struct ir_input_state rc_state ;
char name [ 80 ] , dev [ 80 ] ;
int err ;
rc = input_allocate_device ( ) ;
if ( ! rc ) {
dprintk ( MANTIS_ERROR , 1 , " Input device allocate failed " ) ;
return - ENOMEM ;
}
sprintf ( name , " Mantis %s IR receiver " , mantis - > hwconfig - > model_name ) ;
sprintf ( dev , " pci-%s/ir0 " , pci_name ( mantis - > pdev ) ) ;
rc - > name = name ;
rc - > phys = dev ;
2009-12-16 23:57:27 -02:00
ir_input_init ( rc , & rc_state , IR_TYPE_OTHER ) ;
2009-12-11 20:41:07 -03:00
rc - > id . bustype = BUS_PCI ;
rc - > id . vendor = mantis - > vendor_id ;
rc - > id . product = mantis - > device_id ;
rc - > id . version = 1 ;
rc - > dev = mantis - > pdev - > dev ;
2009-12-16 23:57:27 -02:00
err = ir_input_register ( rc , & ir_mantis ) ;
2009-12-11 20:41:07 -03:00
if ( err ) {
dprintk ( MANTIS_ERROR , 1 , " IR device registration failed, ret = %d " , err ) ;
2009-12-12 03:14:25 -03:00
input_free_device ( rc ) ;
2009-12-11 20:41:07 -03:00
return - ENODEV ;
}
mantis - > rc = rc ;
return 0 ;
}
int mantis_exit ( struct mantis_pci * mantis )
{
struct input_dev * rc = mantis - > rc ;
2009-12-16 23:57:27 -02:00
ir_input_unregister ( rc ) ;
2009-12-11 20:41:07 -03:00
return 0 ;
}