aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/dvb-usb/dvb-usb-remote.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb/dvb-usb/dvb-usb-remote.c')
-rw-r--r--drivers/media/dvb/dvb-usb/dvb-usb-remote.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-remote.c b/drivers/media/dvb/dvb-usb/dvb-usb-remote.c
index 9f1e23f82bae..fc7800f1743e 100644
--- a/drivers/media/dvb/dvb-usb/dvb-usb-remote.c
+++ b/drivers/media/dvb/dvb-usb/dvb-usb-remote.c
@@ -21,6 +21,10 @@ static void dvb_usb_read_remote_control(void *data)
21 /* TODO: need a lock here. We can simply skip checking for the remote control 21 /* TODO: need a lock here. We can simply skip checking for the remote control
22 if we're busy. */ 22 if we're busy. */
23 23
24 /* when the parameter has been set to 1 via sysfs while the driver was running */
25 if (dvb_usb_disable_rc_polling)
26 return;
27
24 if (d->props.rc_query(d,&event,&state)) { 28 if (d->props.rc_query(d,&event,&state)) {
25 err("error while querying for an remote control event."); 29 err("error while querying for an remote control event.");
26 goto schedule; 30 goto schedule;
@@ -35,7 +39,7 @@ static void dvb_usb_read_remote_control(void *data)
35 d->last_event = event; 39 d->last_event = event;
36 case REMOTE_KEY_REPEAT: 40 case REMOTE_KEY_REPEAT:
37 deb_rc("key repeated\n"); 41 deb_rc("key repeated\n");
38 input_event(&d->rc_input_dev, EV_KEY, event, 1); 42 input_event(&d->rc_input_dev, EV_KEY, d->last_event, 1);
39 input_event(&d->rc_input_dev, EV_KEY, d->last_event, 0); 43 input_event(&d->rc_input_dev, EV_KEY, d->last_event, 0);
40 input_sync(&d->rc_input_dev); 44 input_sync(&d->rc_input_dev);
41 break; 45 break;
@@ -85,7 +89,9 @@ schedule:
85int dvb_usb_remote_init(struct dvb_usb_device *d) 89int dvb_usb_remote_init(struct dvb_usb_device *d)
86{ 90{
87 int i; 91 int i;
88 if (d->props.rc_key_map == NULL) 92 if (d->props.rc_key_map == NULL ||
93 d->props.rc_query == NULL ||
94 dvb_usb_disable_rc_polling)
89 return 0; 95 return 0;
90 96
91 /* Initialise the remote-control structures.*/ 97 /* Initialise the remote-control structures.*/
@@ -154,12 +160,12 @@ int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *d,
154 break; 160 break;
155 } 161 }
156 /* See if we can match the raw key code. */ 162 /* See if we can match the raw key code. */
157 for (i = 0; i < sizeof(keymap)/sizeof(struct dvb_usb_rc_key); i++) 163 for (i = 0; i < d->props.rc_key_map_size; i++)
158 if (keymap[i].custom == keybuf[1] && 164 if (keymap[i].custom == keybuf[1] &&
159 keymap[i].data == keybuf[3]) { 165 keymap[i].data == keybuf[3]) {
160 *event = keymap[i].event; 166 *event = keymap[i].event;
161 *state = REMOTE_KEY_PRESSED; 167 *state = REMOTE_KEY_PRESSED;
162 break; 168 return 0;
163 } 169 }
164 deb_err("key mapping failed - no appropriate key found in keymapping\n"); 170 deb_err("key mapping failed - no appropriate key found in keymapping\n");
165 break; 171 break;