diff options
| -rw-r--r-- | drivers/media/IR/ir-keytable.c | 5 | ||||
| -rw-r--r-- | drivers/media/dvb/siano/sms-cards.c | 1 | ||||
| -rw-r--r-- | drivers/media/dvb/siano/sms-cards.h | 2 | ||||
| -rw-r--r-- | drivers/media/dvb/siano/smsir.c | 254 | ||||
| -rw-r--r-- | drivers/media/dvb/siano/smsir.h | 62 |
5 files changed, 47 insertions, 277 deletions
diff --git a/drivers/media/IR/ir-keytable.c b/drivers/media/IR/ir-keytable.c index 94a8577e72eb..15a0f192d413 100644 --- a/drivers/media/IR/ir-keytable.c +++ b/drivers/media/IR/ir-keytable.c | |||
| @@ -497,8 +497,9 @@ int __ir_input_register(struct input_dev *input_dev, | |||
| 497 | goto out_event; | 497 | goto out_event; |
| 498 | } | 498 | } |
| 499 | 499 | ||
| 500 | IR_dprintk(1, "Registered input device on %s for %s remote.\n", | 500 | IR_dprintk(1, "Registered input device on %s for %s remote%s.\n", |
| 501 | driver_name, rc_tab->name); | 501 | driver_name, rc_tab->name, |
| 502 | ir_dev->props->driver_type == RC_DRIVER_IR_RAW ? " in raw mode" : ""); | ||
| 502 | 503 | ||
| 503 | return 0; | 504 | return 0; |
| 504 | 505 | ||
diff --git a/drivers/media/dvb/siano/sms-cards.c b/drivers/media/dvb/siano/sms-cards.c index dcde60645960..25b43e587fa6 100644 --- a/drivers/media/dvb/siano/sms-cards.c +++ b/drivers/media/dvb/siano/sms-cards.c | |||
| @@ -64,6 +64,7 @@ static struct sms_board sms_boards[] = { | |||
| 64 | .type = SMS_NOVA_B0, | 64 | .type = SMS_NOVA_B0, |
| 65 | .fw[DEVICE_MODE_ISDBT_BDA] = "sms1xxx-hcw-55xxx-isdbt-02.fw", | 65 | .fw[DEVICE_MODE_ISDBT_BDA] = "sms1xxx-hcw-55xxx-isdbt-02.fw", |
| 66 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-hcw-55xxx-dvbt-02.fw", | 66 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-hcw-55xxx-dvbt-02.fw", |
| 67 | .rc_codes = RC_MAP_RC5_HAUPPAUGE_NEW, | ||
| 67 | .board_cfg.leds_power = 26, | 68 | .board_cfg.leds_power = 26, |
| 68 | .board_cfg.led0 = 27, | 69 | .board_cfg.led0 = 27, |
| 69 | .board_cfg.led1 = 28, | 70 | .board_cfg.led1 = 28, |
diff --git a/drivers/media/dvb/siano/sms-cards.h b/drivers/media/dvb/siano/sms-cards.h index 8f19fc000b46..d8cdf756f7cf 100644 --- a/drivers/media/dvb/siano/sms-cards.h +++ b/drivers/media/dvb/siano/sms-cards.h | |||
| @@ -75,7 +75,7 @@ struct sms_board { | |||
| 75 | enum sms_device_type_st type; | 75 | enum sms_device_type_st type; |
| 76 | char *name, *fw[DEVICE_MODE_MAX]; | 76 | char *name, *fw[DEVICE_MODE_MAX]; |
| 77 | struct sms_board_gpio_cfg board_cfg; | 77 | struct sms_board_gpio_cfg board_cfg; |
| 78 | enum ir_kb_type ir_kb_type; | 78 | char *rc_codes; /* Name of IR codes table */ |
| 79 | 79 | ||
| 80 | /* gpios */ | 80 | /* gpios */ |
| 81 | int led_power, led_hi, led_lo, lna_ctrl, rf_switch; | 81 | int led_power, led_hi, led_lo, lna_ctrl, rf_switch; |
diff --git a/drivers/media/dvb/siano/smsir.c b/drivers/media/dvb/siano/smsir.c index f8a4fd61e3dc..d0e4639ee9db 100644 --- a/drivers/media/dvb/siano/smsir.c +++ b/drivers/media/dvb/siano/smsir.c | |||
| @@ -4,6 +4,11 @@ | |||
| 4 | MDTV receiver kernel modules. | 4 | MDTV receiver kernel modules. |
| 5 | Copyright (C) 2006-2009, Uri Shkolnik | 5 | Copyright (C) 2006-2009, Uri Shkolnik |
| 6 | 6 | ||
| 7 | Copyright (c) 2010 - Mauro Carvalho Chehab | ||
| 8 | - Ported the driver to use rc-core | ||
| 9 | - IR raw event decoding is now done at rc-core | ||
| 10 | - Code almost re-written | ||
| 11 | |||
| 7 | This program is free software: you can redistribute it and/or modify | 12 | This program is free software: you can redistribute it and/or modify |
| 8 | it under the terms of the GNU General Public License as published by | 13 | it under the terms of the GNU General Public License as published by |
| 9 | the Free Software Foundation, either version 2 of the License, or | 14 | the Free Software Foundation, either version 2 of the License, or |
| @@ -22,227 +27,27 @@ | |||
| 22 | 27 | ||
| 23 | #include <linux/types.h> | 28 | #include <linux/types.h> |
| 24 | #include <linux/input.h> | 29 | #include <linux/input.h> |
| 25 | #include <media/ir-core.h> | ||
| 26 | 30 | ||
| 27 | #include "smscoreapi.h" | 31 | #include "smscoreapi.h" |
| 28 | #include "smsir.h" | 32 | #include "smsir.h" |
| 29 | #include "sms-cards.h" | 33 | #include "sms-cards.h" |
| 30 | 34 | ||
| 31 | /* In order to add new IR remote control - | 35 | #define MODULE_NAME "smsmdtv" |
| 32 | * 1) Add it to the <enum ir_kb_type> @ smsir,h, | ||
| 33 | * 2) Add its map to keyboard_layout_maps below | ||
| 34 | * 3) Set your board (sms-cards sub-module) to use it | ||
| 35 | */ | ||
| 36 | |||
| 37 | static struct keyboard_layout_map_t keyboard_layout_maps[] = { | ||
| 38 | [SMS_IR_KB_DEFAULT_TV] = { | ||
| 39 | .ir_protocol = IR_RC5, | ||
| 40 | .rc5_kbd_address = KEYBOARD_ADDRESS_TV1, | ||
| 41 | .keyboard_layout_map = { | ||
| 42 | KEY_0, KEY_1, KEY_2, | ||
| 43 | KEY_3, KEY_4, KEY_5, | ||
| 44 | KEY_6, KEY_7, KEY_8, | ||
| 45 | KEY_9, 0, 0, KEY_POWER, | ||
| 46 | KEY_MUTE, 0, 0, | ||
| 47 | KEY_VOLUMEUP, KEY_VOLUMEDOWN, | ||
| 48 | KEY_BRIGHTNESSUP, | ||
| 49 | KEY_BRIGHTNESSDOWN, KEY_CHANNELUP, | ||
| 50 | KEY_CHANNELDOWN, | ||
| 51 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 52 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 53 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 54 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 55 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | ||
| 56 | } | ||
| 57 | }, | ||
| 58 | [SMS_IR_KB_HCW_SILVER] = { | ||
| 59 | .ir_protocol = IR_RC5, | ||
| 60 | .rc5_kbd_address = KEYBOARD_ADDRESS_LIGHTING1, | ||
| 61 | .keyboard_layout_map = { | ||
| 62 | KEY_0, KEY_1, KEY_2, | ||
| 63 | KEY_3, KEY_4, KEY_5, | ||
| 64 | KEY_6, KEY_7, KEY_8, | ||
| 65 | KEY_9, KEY_TEXT, KEY_RED, | ||
| 66 | KEY_RADIO, KEY_MENU, | ||
| 67 | KEY_SUBTITLE, | ||
| 68 | KEY_MUTE, KEY_VOLUMEUP, | ||
| 69 | KEY_VOLUMEDOWN, KEY_PREVIOUS, 0, | ||
| 70 | KEY_UP, KEY_DOWN, KEY_LEFT, | ||
| 71 | KEY_RIGHT, KEY_VIDEO, KEY_AUDIO, | ||
| 72 | KEY_MHP, KEY_EPG, KEY_TV, | ||
| 73 | 0, KEY_NEXTSONG, KEY_EXIT, | ||
| 74 | KEY_CHANNELUP, KEY_CHANNELDOWN, | ||
| 75 | KEY_CHANNEL, 0, | ||
| 76 | KEY_PREVIOUSSONG, KEY_ENTER, | ||
| 77 | KEY_SLEEP, 0, 0, KEY_BLUE, | ||
| 78 | 0, 0, 0, 0, KEY_GREEN, 0, | ||
| 79 | KEY_PAUSE, 0, KEY_REWIND, | ||
| 80 | 0, KEY_FASTFORWARD, KEY_PLAY, | ||
| 81 | KEY_STOP, KEY_RECORD, | ||
| 82 | KEY_YELLOW, 0, 0, KEY_SELECT, | ||
| 83 | KEY_ZOOM, KEY_POWER, 0, 0 | ||
| 84 | } | ||
| 85 | }, | ||
| 86 | { } /* Terminating entry */ | ||
| 87 | }; | ||
| 88 | |||
| 89 | static u32 ir_pos; | ||
| 90 | static u32 ir_word; | ||
| 91 | static u32 ir_toggle; | ||
| 92 | |||
| 93 | #define RC5_PUSH_BIT(dst, bit, pos) \ | ||
| 94 | { dst <<= 1; dst |= bit; pos++; } | ||
| 95 | |||
| 96 | |||
| 97 | static void sms_ir_rc5_event(struct smscore_device_t *coredev, | ||
| 98 | u32 toggle, u32 addr, u32 cmd) | ||
| 99 | { | ||
| 100 | bool toggle_changed; | ||
| 101 | u16 keycode; | ||
| 102 | |||
| 103 | sms_log("IR RC5 word: address %d, command %d, toggle %d", | ||
| 104 | addr, cmd, toggle); | ||
| 105 | |||
| 106 | toggle_changed = ir_toggle != toggle; | ||
| 107 | /* keep toggle */ | ||
| 108 | ir_toggle = toggle; | ||
| 109 | |||
| 110 | if (addr != | ||
| 111 | keyboard_layout_maps[coredev->ir.ir_kb_type].rc5_kbd_address) | ||
| 112 | return; /* Check for valid address */ | ||
| 113 | 36 | ||
| 114 | keycode = | 37 | void sms_ir_event(struct smscore_device_t *coredev, const char *buf, int len) |
| 115 | keyboard_layout_maps | ||
| 116 | [coredev->ir.ir_kb_type].keyboard_layout_map[cmd]; | ||
| 117 | |||
| 118 | if (!toggle_changed && | ||
| 119 | (keycode != KEY_VOLUMEUP && keycode != KEY_VOLUMEDOWN)) | ||
| 120 | return; /* accept only repeated volume, reject other keys */ | ||
| 121 | |||
| 122 | sms_log("kernel input keycode (from ir) %d", keycode); | ||
| 123 | input_report_key(coredev->ir.input_dev, keycode, 1); | ||
| 124 | input_sync(coredev->ir.input_dev); | ||
| 125 | |||
| 126 | } | ||
| 127 | |||
| 128 | /* decode raw bit pattern to RC5 code */ | ||
| 129 | /* taken from ir-functions.c */ | ||
| 130 | static u32 ir_rc5_decode(unsigned int code) | ||
| 131 | { | 38 | { |
| 132 | /* unsigned int org_code = code;*/ | ||
| 133 | unsigned int pair; | ||
| 134 | unsigned int rc5 = 0; | ||
| 135 | int i; | 39 | int i; |
| 40 | const s32 *samples = (const void *)buf; | ||
| 136 | 41 | ||
| 137 | for (i = 0; i < 14; ++i) { | 42 | for (i = 0; i < len >> 2; i++) { |
| 138 | pair = code & 0x3; | ||
