V4L/DVB: Partially revert commit da7251dd0bca6c17571be2bd4434b9779dea72d8
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/7 V4L/DVB: Partially revert commit da7251dd0bca6c17571be2bd4434b9779dea72d8
By mistake, changeset da7251dd0bca6c17571be2bd4434b9779dea72d8 reverted the following commits:
commit 6795f9a1ac9e85deb96a49e46b29c809214bf5ea commit d69861a25a54ef1cd6ee92f5ceb6ff2c01d84803 commit 1ba30538e2d125ce821622ac1f5e7ef31d856077
This patch partially reverts the original commit, to return the code to its original state.
drivers/media/IR/ir-sysfs.c +72 -83
@@ -33,6 +33,21 @@ static struct class ir_input_class = { .devnode = ir_devnode, }; +static struct { +u64 type; +char *name; +} proto_names[] = { + {IR_TYPE_UNKNOWN ,"unknown" }, + {IR_TYPE_RC5 ,"rc-5" }, + {IR_TYPE_NEC ,"nec" }, + {IR_TYPE_RC6 ,"rc-6" }, + {IR_TYPE_JVC ,"jvc" }, + {IR_TYPE_SONY ,"sony" }, + {IR_TYPE_LIRC ,"lirc" }, +}; + +#define PROTO_NONE "none" +/** * show_protocols() - shows the current IR protocol(s) * @d: the device descriptor
@@ -50,6 +65,7 @@ static ssize_t show_protocols(struct device *d,struct ir_input_dev *ir_dev =dev_get_drvdata (d);u64 allowed, enabled;char *tmp = buf; +int i;if (ir_dev->props->driver_type ==RC_DRIVER_SCANCODE ) { enabled = ir_dev->rc_tab.ir_type;
@@ -63,35 +79,12 @@ static ssize_t show_protocols(struct device *d, (long long )allowed, (long long)enabled); -if (allowed & enabled &IR_TYPE_UNKNOWN ) - tmp +=sprintf (tmp,"[unknown] " ); -else if (allowed &IR_TYPE_UNKNOWN ) - tmp +=sprintf (tmp,"unknown " ); - -if (allowed & enabled &IR_TYPE_RC5 ) - tmp +=sprintf (tmp,"[rc5] " ); -else if (allowed &IR_TYPE_RC5 ) - tmp +=sprintf (tmp,"rc5 " ); - -if (allowed & enabled &IR_TYPE_NEC ) - tmp +=sprintf (tmp,"[nec] " ); -else if (allowed &IR_TYPE_NEC ) - tmp +=sprintf (tmp,"nec " ); - -if (allowed & enabled &IR_TYPE_RC6 ) - tmp +=sprintf (tmp,"[rc6] " ); -else if (allowed &IR_TYPE_RC6 ) - tmp +=sprintf (tmp,"rc6 " ); - -if (allowed & enabled &IR_TYPE_JVC ) - tmp +=sprintf (tmp,"[jvc] " ); -else if (allowed &IR_TYPE_JVC ) - tmp +=sprintf (tmp,"jvc " ); - -if (allowed & enabled &IR_TYPE_SONY ) - tmp +=sprintf (tmp,"[sony] " ); -else if (allowed &IR_TYPE_SONY ) - tmp +=sprintf (tmp,"sony " ); +for (i =0 ; i <ARRAY_SIZE (proto_names); i++) { +if (allowed & enabled & proto_names[i].type) + tmp +=sprintf (tmp,"[%s] " , proto_names[i].name); +else if (allowed & proto_names[i].type) + tmp +=sprintf (tmp,"%s " , proto_names[i].name); + }if (allowed & enabled &IR_TYPE_LIRC ) tmp +=sprintf (tmp,"[lirc] " );
@@ -116,6 +109,7 @@ static ssize_t show_protocols(struct device *d,* Writing "+proto" will add a protocol to the list of enabled protocols. * Writing "-proto" will remove a protocol from the list of enabled protocols. * Writing "proto" will enable only "proto". +* Writing "none" will disable all protocols. * Returns -EINVAL if an invalid protocol combination or unknown protocol name * is used, otherwise @len. */
@@ -129,67 +123,62 @@ static ssize_t store_protocols(struct device *d,const char *tmp;u64 type;u64 mask; -int rc; +int rc, i, count =0 ;unsigned long flags; - tmp =skip_spaces (data); - -if (*tmp =='+' ) { - enable = true; - disable = false; - tmp++; - }else if (*tmp =='-' ) { - enable = false; - disable = true; - tmp++; - }else { - enable = false; - disable = false; - } - -if (!strncasecmp (tmp,"unknown" ,7 )) { - tmp +=7 ; - mask =IR_TYPE_UNKNOWN ; - }else if (!strncasecmp (tmp,"rc5" ,3 )) { - tmp +=3 ; - mask =IR_TYPE_RC5 ; - }else if (!strncasecmp (tmp,"nec" ,3 )) { - tmp +=3 ; - mask =IR_TYPE_NEC ; - }else if (!strncasecmp (tmp,"rc6" ,3 )) { - tmp +=3 ; - mask =IR_TYPE_RC6 ; - }else if (!strncasecmp (tmp,"jvc" ,3 )) { - tmp +=3 ; - mask =IR_TYPE_JVC ; - }else if (!strncasecmp (tmp,"sony" ,4 )) { - tmp +=4 ; - mask =IR_TYPE_SONY ; - }else if (!strncasecmp (tmp,"lirc" ,4 )) { - tmp +=4 ; - mask =IR_TYPE_LIRC ; - }else { -IR_dprintk (1 ,"Unknown protocol\n" ); -return -EINVAL ; - } - - tmp =skip_spaces (tmp); -if (*tmp !='\0' ) { -IR_dprintk (1 ,"Invalid trailing characters\n" ); -return -EINVAL ; - } -if (ir_dev->props->driver_type ==RC_DRIVER_SCANCODE ) type = ir_dev->rc_tab.ir_type;else type = ir_dev->raw->enabled_protocols; -if (enable) - type |= mask; -else if (disable) - type &= ~mask; -else - type = mask; +while ((tmp =strsep ((char **) &data," \n" )) !=NULL ) { +if (!*tmp) +break ; + +if (*tmp =='+' ) { + enable = true; + disable = false; + tmp++; + }else if (*tmp =='-' ) { + enable = false; + disable = true; + tmp++; + }else { + enable = false; + disable = false; + } + +if (!enable && !disable && !strncasecmp (tmp,PROTO_NONE ,sizeof (PROTO_NONE ))) { + tmp +=sizeof (PROTO_NONE ); + mask =0 ; + count++; + }else { +for (i =0 ; i <ARRAY_SIZE (proto_names); i++) { +if (!strncasecmp (tmp, proto_names[i].name,strlen (proto_names[i].name))) { + tmp +=strlen (proto_names[i].name); + mask = proto_names[i].type; +break ; + } + } +if (i ==ARRAY_SIZE (proto_names)) { +IR_dprintk (1 ,"Unknown protocol: '%s'\n" , tmp); +return -EINVAL ; + } + count++; + } + +if (enable) + type |= mask; +else if (disable) + type &= ~mask; +else + type = mask; + } + +if (!count) { +IR_dprintk (1 ,"Protocol not specified\n" ); +return -EINVAL ; + }if (ir_dev->props && ir_dev->props->change_protocol) { rc = ir_dev->props->change_protocol(ir_dev->props->priv,
Signature · 1 line
1.7.1
PATCH 2/7 V4L/DVB: dvb-usb: get rid of struct dvb_usb_rc_key
In reply to a message not in the archivedvb-usb has its own IR handle code. Now that we have a Remote Controller subsystem, we should start using it. So, remove this struct, in favor of the similar struct defined at the RC subsystem.
This is a big, but trivial patch. It is a 3 line delect, plus lots of rename on several dvb-usb files.
drivers/media/dvb/dvb-usb/a800.c +1 -1
@@ -37,7 +37,7 @@ static int a800_identify_state(struct usb_device *udev, struct dvb_usb_device_prreturn 0 ; } -static struct dvb_usb_rc_key ir_codes_a800_table[] = { +static struct ir_scancode ir_codes_a800_table[] = { {0x0201 ,KEY_PROG1 },/* SOURCE */ {0x0200 ,KEY_POWER },/* POWER */ {0x0205 ,KEY_1 },/* 1 */
drivers/media/dvb/dvb-usb/af9005-remote.c +2 -2
@@ -33,7 +33,7 @@ MODULE_PARM_DESC(debug, #define deb_decode(args...) dprintk(dvb_usb_af9005_remote_debug,0x01,args) -struct dvb_usb_rc_key ir_codes_af9005_table[] = { +struct ir_scancode ir_codes_af9005_table[] = { {0x01b7 ,KEY_POWER }, {0x01a7 ,KEY_VOLUMEUP },
@@ -133,7 +133,7 @@ int af9005_rc_decode(struct dvb_usb_device *d, u8 * data, int len, u32 * event,for (i =0 ; i < ir_codes_af9005_table_size; i++) {if (rc5_custom (&ir_codes_af9005_table[i]) == cust &&rc5_data (&ir_codes_af9005_table[i]) == dat) { - *event = ir_codes_af9005_table[i].event; + *event = ir_codes_af9005_table[i].keycode; *state =REMOTE_KEY_PRESSED ;deb_decode ("key pressed, event %x\n" , *event);
drivers/media/dvb/dvb-usb/af9005.h +1 -1
@@ -3490,7 +3490,7 @@ extern u8 regmask[8];/* remote control decoder */ extern int af9005_rc_decode (struct dvb_usb_device *d,u8 * data,int len,u32 * event,int *state); -extern struct dvb_usb_rc_key ir_codes_af9005_table[]; +extern struct ir_scancode ir_codes_af9005_table[];extern int ir_codes_af9005_table_size;#endif
drivers/media/dvb/dvb-usb/af9015.c +3 -3
@@ -735,7 +735,7 @@ error:struct af9015_setup {unsigned int id; -struct dvb_usb_rc_key *rc_key_map; +struct ir_scancode *rc_key_map;unsigned int rc_key_map_size;u8 *ir_table;unsigned int ir_table_size;
@@ -1063,7 +1063,7 @@ static int af9015_rc_query(struct dvb_usb_device *d, u32 *event, int *state) {u8 buf[8 ];struct req_t req = {GET_IR_CODE ,0 ,0 ,0 ,0 ,sizeof (buf), buf}; -struct dvb_usb_rc_key *keymap = d->props.rc_key_map; +struct ir_scancode *keymap = d->props.rc_key_map;int i, ret;memset (buf,0 ,sizeof (buf));
@@ -1078,7 +1078,7 @@ static int af9015_rc_query(struct dvb_usb_device *d, u32 *event, int *state)for (i =0 ; i < d->props.rc_key_map_size; i++) {if (!buf[1 ] &&rc5_custom (&keymap[i]) == buf[0 ] &&rc5_data (&keymap[i]) == buf[2 ]) { - *event = keymap[i].event; + *event = keymap[i].keycode; *state =REMOTE_KEY_PRESSED ;break ; }
drivers/media/dvb/dvb-usb/af9015.h +9 -9
@@ -123,7 +123,7 @@ enum af9015_remote {/* LeadTek - Y04G0051 */ /* Leadtek WinFast DTV Dongle Gold */ -static struct dvb_usb_rc_key ir_codes_af9015_table_leadtek[] = { +static struct ir_scancode ir_codes_af9015_table_leadtek[] = { {0x001e ,KEY_1 }, {0x001f ,KEY_2 }, {0x0020 ,KEY_3 },
@@ -227,7 +227,7 @@ static u8 af9015_ir_table_leadtek[] = { };/* TwinHan AzureWave AD-TU700(704J) */ -static struct dvb_usb_rc_key ir_codes_af9015_table_twinhan[] = { +static struct ir_scancode ir_codes_af9015_table_twinhan[] = { {0x053f ,KEY_POWER }, {0x0019 ,KEY_FAVORITES },/* Favorite List */ {0x0004 ,KEY_TEXT },/* Teletext */
@@ -338,7 +338,7 @@ static u8 af9015_ir_table_twinhan[] = { };/* A-Link DTU(m) */ -static struct dvb_usb_rc_key ir_codes_af9015_table_a_link[] = { +static struct ir_scancode ir_codes_af9015_table_a_link[] = { {0x001e ,KEY_1 }, {0x001f ,KEY_2 }, {0x0020 ,KEY_3 },
@@ -381,7 +381,7 @@ static u8 af9015_ir_table_a_link[] = { };/* MSI DIGIVOX mini II V3.0 */ -static struct dvb_usb_rc_key ir_codes_af9015_table_msi[] = { +static struct ir_scancode ir_codes_af9015_table_msi[] = { {0x001e ,KEY_1 }, {0x001f ,KEY_2 }, {0x0020 ,KEY_3 },
@@ -424,7 +424,7 @@ static u8 af9015_ir_table_msi[] = { };/* MYGICTV U718 */ -static struct dvb_usb_rc_key ir_codes_af9015_table_mygictv[] = { +static struct ir_scancode ir_codes_af9015_table_mygictv[] = { {0x003d ,KEY_SWITCHVIDEOMODE },/* TV / AV */ {0x0545 ,KEY_POWER },
@@ -550,7 +550,7 @@ static u8 af9015_ir_table_kworld[] = { };/* AverMedia Volar X */ -static struct dvb_usb_rc_key ir_codes_af9015_table_avermedia[] = { +static struct ir_scancode ir_codes_af9015_table_avermedia[] = { {0x053d ,KEY_PROG1 },/* SOURCE */ {0x0512 ,KEY_POWER },/* POWER */ {0x051e ,KEY_1 },/* 1 */
@@ -656,7 +656,7 @@ static u8 af9015_ir_table_avermedia_ks[] = { };/* Digittrade DVB-T USB Stick */ -static struct dvb_usb_rc_key ir_codes_af9015_table_digittrade[] = { +static struct ir_scancode ir_codes_af9015_table_digittrade[] = { {0x010f ,KEY_LAST },/* RETURN */ {0x0517 ,KEY_TEXT },/* TELETEXT */ {0x0108 ,KEY_EPG },/* EPG */
@@ -719,7 +719,7 @@ static u8 af9015_ir_table_digittrade[] = { };/* TREKSTOR DVB-T USB Stick */ -static struct dvb_usb_rc_key ir_codes_af9015_table_trekstor[] = { +static struct ir_scancode ir_codes_af9015_table_trekstor[] = { {0x0704 ,KEY_AGAIN },/* Home */ {0x0705 ,KEY_MUTE },/* Mute */ {0x0706 ,KEY_UP },/* Up */
@@ -782,7 +782,7 @@ static u8 af9015_ir_table_trekstor[] = { };/* MSI DIGIVOX mini III */ -static struct dvb_usb_rc_key ir_codes_af9015_table_msi_digivox_iii[] = { +static struct ir_scancode ir_codes_af9015_table_msi_digivox_iii[] = { {0x0713 ,KEY_POWER },/* [red power button] */ {0x073b ,KEY_VIDEO },/* Source */ {0x073e ,KEY_ZOOM },/* Zoom */
drivers/media/dvb/dvb-usb/anysee.c +3 -3
@@ -377,7 +377,7 @@ static int anysee_tuner_attach(struct dvb_usb_adapter *adap)static int anysee_rc_query (struct dvb_usb_device *d,u32 *event,int *state) {u8 buf[] = {CMD_GET_IR_CODE }; -struct dvb_usb_rc_key *keymap = d->props.rc_key_map; +struct ir_scancode *keymap = d->props.rc_key_map;u8 ircode[2 ];int i, ret;
@@ -391,7 +391,7 @@ static int anysee_rc_query(struct dvb_usb_device *d, u32 *event, int *state)for (i =0 ; i < d->props.rc_key_map_size; i++) {if (rc5_custom (&keymap[i]) == ircode[0 ] &&rc5_data (&keymap[i]) == ircode[1 ]) { - *event = keymap[i].event; + *event = keymap[i].keycode; *state =REMOTE_KEY_PRESSED ;return 0 ; }
@@ -399,7 +399,7 @@ static int anysee_rc_query(struct dvb_usb_device *d, u32 *event, int *state)return 0 ; } -static struct dvb_usb_rc_key ir_codes_anysee_table[] = { +static struct ir_scancode ir_codes_anysee_table[] = { {0x0100 ,KEY_0 }, {0x0101 ,KEY_1 }, {0x0102 ,KEY_2 },
drivers/media/dvb/dvb-usb/az6027.c +1 -1
@@ -386,7 +386,7 @@ static int az6027_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) }/* keys for the enclosed remote control */ -static struct dvb_usb_rc_key ir_codes_az6027_table[] = { +static struct ir_scancode ir_codes_az6027_table[] = { {0x01 ,KEY_1 }, {0x02 ,KEY_2 }, };
drivers/media/dvb/dvb-usb/cinergyT2-core.c +1 -1
@@ -84,7 +84,7 @@ static int cinergyt2_frontend_attach(struct dvb_usb_adapter *adap)return 0 ; } -static struct dvb_usb_rc_key ir_codes_cinergyt2_table[] = { +static struct ir_scancode ir_codes_cinergyt2_table[] = { {0x0401 ,KEY_POWER }, {0x0402 ,KEY_1 }, {0x0403 ,KEY_2 },
drivers/media/dvb/dvb-usb/cxusb.c +9 -9
@@ -385,7 +385,7 @@ static int cxusb_d680_dmb_streaming_ctrl(static int cxusb_rc_query (struct dvb_usb_device *d,u32 *event,int *state) { -struct dvb_usb_rc_key *keymap = d->props.rc_key_map; +struct ir_scancode *keymap = d->props.rc_key_map;u8 ircode[4 ];int i;
@@ -397,7 +397,7 @@ static int cxusb_rc_query(struct dvb_usb_device *d, u32 *event, int *state)for (i =0 ; i < d->props.rc_key_map_size; i++) {if (rc5_custom (&keymap[i]) == ircode[2 ] &&rc5_data (&keymap[i]) == ircode[3 ]) { - *event = keymap[i].event; + *event = keymap[i].keycode; *state =REMOTE_KEY_PRESSED ;return 0 ;
@@ -410,7 +410,7 @@ static int cxusb_rc_query(struct dvb_usb_device *d, u32 *event, int *state)static int cxusb_bluebird2_rc_query (struct dvb_usb_device *d,u32 *event,int *state) { -struct dvb_usb_rc_key *keymap = d->props.rc_key_map; +struct ir_scancode *keymap = d->props.rc_key_map;u8 ircode[4 ];int i;struct i2c_msg msg = { .addr =0x6b , .flags =I2C_M_RD ,
@@ -425,7 +425,7 @@ static int cxusb_bluebird2_rc_query(struct dvb_usb_device *d, u32 *event,for (i =0 ; i < d->props.rc_key_map_size; i++) {if (rc5_custom (&keymap[i]) == ircode[1 ] &&rc5_data (&keymap[i]) == ircode[2 ]) { - *event = keymap[i].event; + *event = keymap[i].keycode; *state =REMOTE_KEY_PRESSED ;return 0 ;
@@ -438,7 +438,7 @@ static int cxusb_bluebird2_rc_query(struct dvb_usb_device *d, u32 *event,static int cxusb_d680_dmb_rc_query (struct dvb_usb_device *d,u32 *event,int *state) { -struct dvb_usb_rc_key *keymap = d->props.rc_key_map; +struct ir_scancode *keymap = d->props.rc_key_map;u8 ircode[2 ];int i;
@@ -451,7 +451,7 @@ static int cxusb_d680_dmb_rc_query(struct dvb_usb_device *d, u32 *event,for (i =0 ; i < d->props.rc_key_map_size; i++) {if (rc5_custom (&keymap[i]) == ircode[0 ] &&rc5_data (&keymap[i]) == ircode[1 ]) { - *event = keymap[i].event; + *event = keymap[i].keycode; *state =REMOTE_KEY_PRESSED ;return 0 ;
@@ -461,7 +461,7 @@ static int cxusb_d680_dmb_rc_query(struct dvb_usb_device *d, u32 *event,return 0 ; } -static struct dvb_usb_rc_key ir_codes_dvico_mce_table[] = { +static struct ir_scancode ir_codes_dvico_mce_table[] = { {0xfe02 ,KEY_TV }, {0xfe0e ,KEY_MP3 }, {0xfe1a ,KEY_DVD },
@@ -509,7 +509,7 @@ static struct dvb_usb_rc_key ir_codes_dvico_mce_table[] = { { 0xfe4e, KEY_POWER }, }; -static struct dvb_usb_rc_key ir_codes_dvico_portable_table[] = { +static struct ir_scancode ir_codes_dvico_portable_table[] = { {0xfc02 ,KEY_SETUP },/* Profile */ {0xfc43 ,KEY_POWER2 }, { 0xfc06, KEY_EPG },
@@ -548,7 +548,7 @@ static struct dvb_usb_rc_key ir_codes_dvico_portable_table[] = { { 0xfc00, KEY_UNKNOWN }, /* HD */ }; -static struct dvb_usb_rc_key ir_codes_d680_dmb_table[] = { +static struct ir_scancode ir_codes_d680_dmb_table[] = { {0x0038 ,KEY_UNKNOWN },/* TV/AV */ {0x080c ,KEY_ZOOM }, { 0x0800, KEY_0 },
drivers/media/dvb/dvb-usb/dib0700_core.c +4 -4
@@ -491,7 +491,7 @@ struct dib0700_rc_response {static void dib0700_rc_urb_completion (struct urb *purb) {struct dvb_usb_device *d = purb->context; -struct dvb_usb_rc_key *keymap; +struct ir_scancode *keymap;struct dib0700_state *st;struct dib0700_rc_response poll_reply;u8 *buf;
@@ -574,7 +574,7 @@ static void dib0700_rc_urb_completion(struct urb *purb)for (i =0 ; i < d->props.rc_key_map_size; i++) {if (rc5_custom (&keymap[i]) == (poll_reply.system &0xff ) &&rc5_data (&keymap[i]) == poll_reply.data) { - event = keymap[i].event; + event = keymap[i].keycode; found =1 ;break ; }
@@ -590,9 +590,9 @@ static void dib0700_rc_urb_completion(struct urb *purb)if (poll_reply.data_state ==1 ) {/* New key hit */ st->rc_counter =0 ; - event = keymap[i].event; + event = keymap[i].keycode; state =REMOTE_KEY_PRESSED ; - d->last_event = keymap[i].event; + d->last_event = keymap[i].keycode; }else if (poll_reply.data_state ==2 ) {/* Key repeated */ st->rc_counter++;
drivers/media/dvb/dvb-usb/dib0700_devices.c +7 -7
@@ -477,7 +477,7 @@ static int dib0700_rc_query(struct dvb_usb_device *d, u32 *event, int *state) {u8 key[4 ];int i; -struct dvb_usb_rc_key *keymap = d->props.rc_key_map; +struct ir_scancode *keymap = d->props.rc_key_map;struct dib0700_state *st = d->priv; *event =0 ;
@@ -521,9 +521,9 @@ static int dib0700_rc_query(struct dvb_usb_device *d, u32 *event, int *state)if (rc5_custom (&keymap[i]) == key[3 -2 ] &&rc5_data (&keymap[i]) == key[3 -3 ]) { st->rc_counter =0 ; - *event = keymap[i].event; + *event = keymap[i].keycode; *state =REMOTE_KEY_PRESSED ; - d->last_event = keymap[i].event; + d->last_event = keymap[i].keycode;return 0 ; } }
@@ -534,7 +534,7 @@ static int dib0700_rc_query(struct dvb_usb_device *d, u32 *event, int *state)for (i =0 ; i < d->props.rc_key_map_size; i++) {if (rc5_custom (&keymap[i]) == key[3 -2 ] &&rc5_data (&keymap[i]) == key[3 -3 ]) { -if (d->last_event == keymap[i].event && +if (d->last_event == keymap[i].keycode && key[3 -1 ] == st->rc_toggle) { st->rc_counter++;/* prevents unwanted double hits */
@@ -547,10 +547,10 @@ static int dib0700_rc_query(struct dvb_usb_device *d, u32 *event, int *state)return 0 ; } st->rc_counter =0 ; - *event = keymap[i].event; + *event = keymap[i].keycode; *state =REMOTE_KEY_PRESSED ; st->rc_toggle = key[3 -1 ]; - d->last_event = keymap[i].event; + d->last_event = keymap[i].keycode;return 0 ; } }
@@ -562,7 +562,7 @@ static int dib0700_rc_query(struct dvb_usb_device *d, u32 *event, int *state)return 0 ; } -static struct dvb_usb_rc_key ir_codes_dib0700_table[] = { +static struct ir_scancode ir_codes_dib0700_table[] = {/* Key codes for the tiny Pinnacle remote*/ {0x0700 ,KEY_MUTE }, {0x0701 ,KEY_MENU },/* Pinnacle logo */
drivers/media/dvb/dvb-usb/dibusb-common.c +1 -1
@@ -327,7 +327,7 @@ EXPORT_SYMBOL(dibusb_dib3000mc_tuner_attach);/* * common remote control stuff */ -struct dvb_usb_rc_key ir_codes_dibusb_table[] = { +struct ir_scancode ir_codes_dibusb_table[] = {/* Key codes for the little Artec T1/Twinhan/HAMA/ remote. */ {0x0016 ,KEY_POWER }, {0x0010 ,KEY_MUTE },
drivers/media/dvb/dvb-usb/dibusb.h +1 -1
@@ -124,7 +124,7 @@ extern int dibusb2_0_power_ctrl(struct dvb_usb_device *, int);#define DEFAULT_RC_INTERVAL 150//#define DEFAULT_RC_INTERVAL 100000 -extern struct dvb_usb_rc_key ir_codes_dibusb_table[]; +extern struct ir_scancode ir_codes_dibusb_table[];extern int dibusb_rc_query (struct dvb_usb_device *,u32 *,int *);extern int dibusb_read_eeprom_byte (struct dvb_usb_device *,u8 ,u8 *);
drivers/media/dvb/dvb-usb/digitv.c +2 -2
@@ -161,7 +161,7 @@ static int digitv_tuner_attach(struct dvb_usb_adapter *adap)return 0 ; } -static struct dvb_usb_rc_key ir_codes_digitv_table[] = { +static struct ir_scancode ir_codes_digitv_table[] = { {0x5f55 ,KEY_0 }, {0x6f55 ,KEY_1 }, {0x9f55 ,KEY_2 },
@@ -240,7 +240,7 @@ static int digitv_rc_query(struct dvb_usb_device *d, u32 *event, int *state)for (i =0 ; i < d->props.rc_key_map_size; i++) {if (rc5_custom (&d->props.rc_key_map[i]) == key[1 ] &&rc5_data (&d->props.rc_key_map[i]) == key[2 ]) { - *event = d->props.rc_key_map[i].event; + *event = d->props.rc_key_map[i].keycode; *state =REMOTE_KEY_PRESSED ;return 0 ; }
drivers/media/dvb/dvb-usb/dtt200u.c +1 -1
@@ -57,7 +57,7 @@ static int dtt200u_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,/* remote control */ /* key list for the tiny remote control (Yakumo, don't know about the others) */ -static struct dvb_usb_rc_key ir_codes_dtt200u_table[] = { +static struct ir_scancode ir_codes_dtt200u_table[] = { {0x8001 ,KEY_MUTE }, {0x8002 ,KEY_CHANNELDOWN }, {0x8003 ,KEY_VOLUMEDOWN },
drivers/media/dvb/dvb-usb/dvb-usb-remote.c +16 -16
@@ -13,13 +13,13 @@ static int dvb_usb_getkeycode(struct input_dev *dev, {struct dvb_usb_device *d =input_get_drvdata (dev); -struct dvb_usb_rc_key *keymap = d->props.rc_key_map; +struct ir_scancode *keymap = d->props.rc_key_map;int i;/* See if we can match the raw key code. */ for (i =0 ; i < d->props.rc_key_map_size; i++) -if (keymap[i].scan == scancode) { - *keycode = keymap[i].event; +if (keymap[i].scancode == scancode) { + *keycode = keymap[i].keycode;return 0 ; }
@@ -29,8 +29,8 @@ static int dvb_usb_getkeycode(struct input_dev *dev,* to work */ for (i =0 ; i < d->props.rc_key_map_size; i++) -if (keymap[i].event ==KEY_RESERVED || - keymap[i].event ==KEY_UNKNOWN ) { +if (keymap[i].keycode ==KEY_RESERVED || + keymap[i].keycode ==KEY_UNKNOWN ) { *keycode =KEY_RESERVED ;return 0 ; }
@@ -43,22 +43,22 @@ static int dvb_usb_setkeycode(struct input_dev *dev, {struct dvb_usb_device *d =input_get_drvdata (dev); -struct dvb_usb_rc_key *keymap = d->props.rc_key_map; +struct ir_scancode *keymap = d->props.rc_key_map;int i;/* Search if it is replacing an existing keycode */ for (i =0 ; i < d->props.rc_key_map_size; i++) -if (keymap[i].scan == scancode) { - keymap[i].event = keycode; +if (keymap[i].scancode == scancode) { + keymap[i].keycode = keycode;return 0 ; }/* Search if is there a clean entry. If so, use it */ for (i =0 ; i < d->props.rc_key_map_size; i++) -if (keymap[i].event ==KEY_RESERVED || - keymap[i].event ==KEY_UNKNOWN ) { - keymap[i].scan = scancode; - keymap[i].event = keycode; +if (keymap[i].keycode ==KEY_RESERVED || + keymap[i].keycode ==KEY_UNKNOWN ) { + keymap[i].scancode = scancode; + keymap[i].keycode = keycode;return 0 ; }
@@ -184,8 +184,8 @@ int dvb_usb_remote_init(struct dvb_usb_device *d)deb_rc ("key map size: %d\n" , d->props.rc_key_map_size);for (i =0 ; i < d->props.rc_key_map_size; i++) {deb_rc ("setting bit for event %d item %d\n" , - d->props.rc_key_map[i].event, i); -set_bit (d->props.rc_key_map[i].event, input_dev->keybit); + d->props.rc_key_map[i].keycode, i); +set_bit (d->props.rc_key_map[i].keycode, input_dev->keybit); }/* Start the remote-control polling. */
@@ -234,7 +234,7 @@ int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *d, u8 keybuf[5], u32 *event, int *state) { int i; -struct dvb_usb_rc_key *keymap = d->props.rc_key_map; +struct ir_scancode *keymap = d->props.rc_key_map; *event =0 ; *state =REMOTE_NO_KEY_PRESSED ;switch (keybuf[0 ]) {
@@ -250,7 +250,7 @@ int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *d,for (i =0 ; i < d->props.rc_key_map_size; i++)if (rc5_custom (&keymap[i]) == keybuf[1 ] &&rc5_data (&keymap[i]) == keybuf[3 ]) { - *event = keymap[i].event; + *event = keymap[i].keycode; *state =REMOTE_KEY_PRESSED ;return 0 ; }
drivers/media/dvb/dvb-usb/dvb-usb.h +9 -19
@@ -14,6 +14,7 @@#include <linux/usb.h> #include <linux/firmware.h> #include <linux/mutex.h> +#include <media/rc-map.h> #include "dvb_frontend.h" #include "dvb_demux.h"
@@ -74,30 +75,19 @@ struct dvb_usb_device_description {struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM ]; }; -/** -* struct dvb_usb_rc_key - a remote control key and its input-event -* @custom: the vendor/custom part of the key -* @data: the actual key part -* @event: the input event assigned to key identified by custom and data -*/ -struct dvb_usb_rc_key { -u16 scan; -u32 event; -}; - -static inline u8 rc5_custom (struct dvb_usb_rc_key *key) +static inline u8 rc5_custom (struct ir_scancode *key) { -return (key->scan >>8 ) &0xff ; +return (key->scancode >>8 ) &0xff ; } -static inline u8 rc5_data (struct dvb_usb_rc_key *key) +static inline u8 rc5_data (struct ir_scancode *key) { -return key->scan &0xff ; +return key->scancode &0xff ; } -static inline u8 rc5_scan (struct dvb_usb_rc_key *key) +static inline u8 rc5_scan (struct ir_scancode *key) { -return key->scan &0xffff ; +return key->scancode &0xffff ; }struct dvb_usb_device ;
@@ -185,7 +175,7 @@ struct dvb_usb_adapter_properties {* @identify_state: called to determine the state (cold or warm), when it * is not distinguishable by the USB IDs. * -* @rc_key_map: a hard-wired array of struct dvb_usb_rc_key (NULL to disable +* @rc_key_map: a hard-wired array of struct ir_scancode (NULL to disable * remote control handling). * @rc_key_map_size: number of items in @rc_key_map. * @rc_query: called to query an event event.
@@ -237,7 +227,7 @@ struct dvb_usb_device_properties {#define REMOTE_NO_KEY_PRESSED 0x00#define REMOTE_KEY_PRESSED 0x01#define REMOTE_KEY_REPEAT 0x02 -struct dvb_usb_rc_key *rc_key_map; +struct ir_scancode *rc_key_map;int rc_key_map_size;int (*rc_query) (struct dvb_usb_device *,u32 *,int *);int rc_interval;
drivers/media/dvb/dvb-usb/dw2102.c +6 -6
@@ -74,7 +74,7 @@"on firmware-problems." struct ir_codes_dvb_usb_table_table { -struct dvb_usb_rc_key *rc_keys; +struct ir_scancode *rc_keys;int rc_keys_size; };
@@ -948,7 +948,7 @@ static int dw3101_tuner_attach(struct dvb_usb_adapter *adap)return 0 ; } -static struct dvb_usb_rc_key ir_codes_dw210x_table[] = { +static struct ir_scancode ir_codes_dw210x_table[] = { {0xf80a ,KEY_Q },/*power*/ {0xf80c ,KEY_M },/*mute*/ {0xf811 ,KEY_1 },
@@ -982,7 +982,7 @@ static struct dvb_usb_rc_key ir_codes_dw210x_table[] = { { 0xf81b, KEY_B }, /*recall*/ }; -static struct dvb_usb_rc_key ir_codes_tevii_table[] = { +static struct ir_scancode ir_codes_tevii_table[] = { {0xf80a ,KEY_POWER }, {0xf80c ,KEY_MUTE }, { 0xf811, KEY_1 },
@@ -1032,7 +1032,7 @@ static struct dvb_usb_rc_key ir_codes_tevii_table[] = { { 0xf858, KEY_SWITCHVIDEOMODE }, }; -static struct dvb_usb_rc_key ir_codes_tbs_table[] = { +static struct ir_scancode ir_codes_tbs_table[] = { {0xf884 ,KEY_POWER }, {0xf894 ,KEY_MUTE }, { 0xf887, KEY_1 },
@@ -1075,7 +1075,7 @@ static struct ir_codes_dvb_usb_table_table keys_tables[] = {static int dw2102_rc_query (struct dvb_usb_device *d,u32 *event,int *state) { -struct dvb_usb_rc_key *keymap = d->props.rc_key_map; +struct ir_scancode *keymap = d->props.rc_key_map;int keymap_size = d->props.rc_key_map_size;u8 key[2 ];struct i2c_msg msg = {
@@ -1096,7 +1096,7 @@ static int dw2102_rc_query(struct dvb_usb_device *d, u32 *event, int *state)for (i =0 ; i < keymap_size ; i++) {if (rc5_data (&keymap[i]) == msg.buf[0 ]) { *state =REMOTE_KEY_PRESSED ; - *event = keymap[i].event; + *event = keymap[i].keycode;break ; }
drivers/media/dvb/dvb-usb/m920x.c +4 -4
@@ -144,7 +144,7 @@ static int m920x_rc_query(struct dvb_usb_device *d, u32 *event, int *state)for (i =0 ; i < d->props.rc_key_map_size; i++)if (rc5_data (&d->props.rc_key_map[i]) == rc_state[1 ]) { - *event = d->props.rc_key_map[i].event; + *event = d->props.rc_key_map[i].keycode;switch (rc_state[0 ]) {case 0x80 :
@@ -589,7 +589,7 @@ static struct m920x_inits pinnacle310e_init[] = { };/* ir keymaps */ -static struct dvb_usb_rc_key ir_codes_megasky_table [] = { +static struct ir_scancode ir_codes_megasky_table[] = { {0x0012 ,KEY_POWER }, {0x001e ,KEY_CYCLEWINDOWS },/* min/max */ {0x0002 ,KEY_CHANNELUP },
@@ -608,7 +608,7 @@ static struct dvb_usb_rc_key ir_codes_megasky_table [] = { { 0x000e, KEY_COFFEE }, /* "MTS" */ }; -static struct dvb_usb_rc_key ir_codes_tvwalkertwin_table [] = { +static struct ir_scancode ir_codes_tvwalkertwin_table[] = { {0x0001 ,KEY_ZOOM },/* Full Screen */ {0x0002 ,KEY_CAMERA },/* snapshot */ { 0x0003, KEY_MUTE },
@@ -628,7 +628,7 @@ static struct dvb_usb_rc_key ir_codes_tvwalkertwin_table [] = { { 0x001e, KEY_VOLUMEUP }, }; -static struct dvb_usb_rc_key ir_codes_pinnacle310e_table[] = { +static struct ir_scancode ir_codes_pinnacle310e_table[] = { {0x16 ,KEY_POWER }, {0x17 ,KEY_FAVORITES }, { 0x0f, KEY_TEXT },
drivers/media/dvb/dvb-usb/nova-t-usb2.c +2 -2
@@ -21,7 +21,7 @@ DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); #define deb_ee(args...) dprintk(debug,0x02,args)/* Hauppauge NOVA-T USB2 keys */ -static struct dvb_usb_rc_key ir_codes_haupp_table [] = { +static struct ir_scancode ir_codes_haupp_table[] = { {0x1e00 ,KEY_0 }, {0x1e01 ,KEY_1 }, {0x1e02 ,KEY_2 },
@@ -98,7 +98,7 @@ static int nova_t_rc_query(struct dvb_usb_device *d, u32 *event, int *state)deb_rc ("c: %x, d: %x\n" ,rc5_data (&ir_codes_haupp_table[i]),rc5_custom (&ir_codes_haupp_table[i])); - *event = ir_codes_haupp_table[i].event; + *event = ir_codes_haupp_table[i].keycode; *state =REMOTE_KEY_PRESSED ;if (st->old_toggle == toggle) {if (st->last_repeat_count++ <2 )
drivers/media/dvb/dvb-usb/opera1.c +3 -3
@@ -331,7 +331,7 @@ static int opera1_pid_filter_control(struct dvb_usb_adapter *adap, int onoff)return 0 ; } -static struct dvb_usb_rc_key ir_codes_opera1_table[] = { +static struct ir_scancode ir_codes_opera1_table[] = { {0x5fa0 ,KEY_1 }, {0x51af ,KEY_2 }, {0x5da2 ,KEY_3 },
@@ -407,9 +407,9 @@ static int opera1_rc_query(struct dvb_usb_device *dev, u32 * event, int *state)for (i =0 ; i <ARRAY_SIZE (ir_codes_opera1_table); i++) {if (rc5_scan (&ir_codes_opera1_table[i]) == (send_key &0xffff )) { *state =REMOTE_KEY_PRESSED ; - *event = ir_codes_opera1_table[i].event; + *event = ir_codes_opera1_table[i].keycode; opst->last_key_pressed = - ir_codes_opera1_table[i].event; + ir_codes_opera1_table[i].keycode;break ; } opst->last_key_pressed =0 ;
drivers/media/dvb/dvb-usb/vp702x.c +2 -2
@@ -174,7 +174,7 @@ static int vp702x_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) }/* keys for the enclosed remote control */ -static struct dvb_usb_rc_key ir_codes_vp702x_table[] = { +static struct ir_scancode ir_codes_vp702x_table[] = { {0x0001 ,KEY_1 }, {0x0002 ,KEY_2 }, };
@@ -200,7 +200,7 @@ static int vp702x_rc_query(struct dvb_usb_device *d, u32 *event, int *state)for (i =0 ; i <ARRAY_SIZE (ir_codes_vp702x_table); i++)if (rc5_custom (&ir_codes_vp702x_table[i]) == key[1 ]) { *state =REMOTE_KEY_PRESSED ; - *event = ir_codes_vp702x_table[i].event; + *event = ir_codes_vp702x_table[i].keycode;break ; }return 0 ;
drivers/media/dvb/dvb-usb/vp7045.c +2 -2
@@ -99,7 +99,7 @@ static int vp7045_power_ctrl(struct dvb_usb_device *d, int onoff)/* The keymapping struct. Somehow this should be loaded to the driver, but * currently it is hardcoded. */ -static struct dvb_usb_rc_key ir_codes_vp7045_table[] = { +static struct ir_scancode ir_codes_vp7045_table[] = { {0x0016 ,KEY_POWER }, {0x0010 ,KEY_MUTE }, {0x0003 ,KEY_1 },
@@ -168,7 +168,7 @@ static int vp7045_rc_query(struct dvb_usb_device *d, u32 *event, int *state)for (i =0 ; i <ARRAY_SIZE (ir_codes_vp7045_table); i++)if (rc5_data (&ir_codes_vp7045_table[i]) == key) { *state =REMOTE_KEY_PRESSED ; - *event = ir_codes_vp7045_table[i].event; + *event = ir_codes_vp7045_table[i].keycode;break ; }return 0 ;
Signature · 1 line
1.7.1
Re: [PATCH 2/7] V4L/DVB: dvb-usb: get rid of struct dvb_usb_rc_key
Quoted 8 lines · Mauro Carvalho Chehab
dvb-usb has its own IR handle code. Now that we have a Remote Controller subsystem, we should start using it. So, remove this struct, in favor of the similar struct defined at the RC subsystem.
This is a big, but trivial patch. It is a 3 line delect, plus lots of rename on several dvb-usb files.
Signed-off-by Mauro Carvalho Chehab <[email protected]>
Signature · 2 lines
Jarod Wilson [email protected]
PATCH 3/7 V4L/DVB: dvb-usb: prepare drivers for using rc-core
In reply to a message not in the archiveThis is a big patch, yet trivial. It just move the RC properties to a separate struct, in order to prepare the dvb-usb drivers to use rc-core. There's no change on the behavior of the drivers.
With this change, it is possible to have both legacy and rc-core based code inside the dvb-usb-remote, allowing a gradual migration to rc-core, driver per driver.
drivers/media/dvb/dvb-usb/a800.c +6 -4
@@ -146,10 +146,12 @@ static struct dvb_usb_device_properties a800_properties = { .power_ctrl = a800_power_ctrl, .identify_state = a800_identify_state, - .rc_interval = DEFAULT_RC_INTERVAL, - .rc_key_map = ir_codes_a800_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_a800_table), - .rc_query = a800_rc_query, + .rc.legacy = { + .rc_interval = DEFAULT_RC_INTERVAL, + .rc_key_map = ir_codes_a800_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_a800_table), + .rc_query = a800_rc_query, + }, .i2c_algo = &dibusb_i2c_algo,
drivers/media/dvb/dvb-usb/af9005.c +9 -7
@@ -1025,10 +1025,12 @@ static struct dvb_usb_device_properties af9005_properties = { .i2c_algo = &af9005_i2c_algo, - .rc_interval = 200, - .rc_key_map = NULL, - .rc_key_map_size = 0, - .rc_query = af9005_rc_query, + .rc.legacy = { + .rc_interval = 200, + .rc_key_map = NULL, + .rc_key_map_size = 0, + .rc_query = af9005_rc_query, + }, .generic_bulk_ctrl_endpoint = 2, .generic_bulk_ctrl_endpoint_response = 1,
@@ -1072,10 +1074,10 @@ static int __init af9005_usb_module_init(void) rc_keys_size =symbol_request (ir_codes_af9005_table_size);if (rc_decode ==NULL || rc_keys ==NULL || rc_keys_size ==NULL ) {err ("af9005_rc_decode function not found, disabling remote" ); - af9005_properties.rc_query =NULL ; + af9005_properties.rc.legacy.rc_query =NULL ; }else { - af9005_properties.rc_key_map = rc_keys; - af9005_properties.rc_key_map_size = *rc_keys_size; + af9005_properties.rc.legacy.rc_key_map = rc_keys; + af9005_properties.rc.legacy.rc_key_map_size = *rc_keys_size; }return 0 ;
drivers/media/dvb/dvb-usb/af9015.c +18 -12
@@ -847,8 +847,8 @@ static void af9015_set_remote_config(struct usb_device *udev, }if (table) { - props->rc_key_map = table->rc_key_map; - props->rc_key_map_size = table->rc_key_map_size; + props->rc.legacy.rc_key_map = table->rc_key_map; + props->rc.legacy.rc_key_map_size = table->rc_key_map_size; af9015_config.ir_table = table->ir_table; af9015_config.ir_table_size = table->ir_table_size; }
@@ -878,8 +878,8 @@ static int af9015_read_config(struct usb_device *udev)deb_info ("%s: IR mode:%d\n" , __func__, val);for (i =0 ; i < af9015_properties_count; i++) {if (val ==AF9015_IR_MODE_DISABLED ) { - af9015_properties[i].rc_key_map =NULL ; - af9015_properties[i].rc_key_map_size =0 ; + af9015_properties[i].rc.legacy.rc_key_map =NULL ; + af9015_properties[i].rc.legacy.rc_key_map_size =0 ; }else af9015_set_remote_config (udev, &af9015_properties[i]); }
@@ -1063,7 +1063,7 @@ static int af9015_rc_query(struct dvb_usb_device *d, u32 *event, int *state) {u8 buf[8 ];struct req_t req = {GET_IR_CODE ,0 ,0 ,0 ,0 ,sizeof (buf), buf}; -struct ir_scancode *keymap = d->props.rc_key_map; +struct ir_scancode *keymap = d->props.rc.legacy.rc_key_map;int i, ret;memset (buf,0 ,sizeof (buf));
@@ -1075,7 +1075,7 @@ static int af9015_rc_query(struct dvb_usb_device *d, u32 *event, int *state) *event =0 ; *state =REMOTE_NO_KEY_PRESSED ; -for (i =0 ; i < d->props.rc_key_map_size; i++) { +for (i =0 ; i < d->props.rc.legacy.rc_key_map_size; i++) {if (!buf[1 ] &&rc5_custom (&keymap[i]) == buf[0 ] &&rc5_data (&keymap[i]) == buf[2 ]) { *event = keymap[i].keycode;
@@ -1354,8 +1354,10 @@ static struct dvb_usb_device_properties af9015_properties[] = { .identify_state = af9015_identify_state, - .rc_query = af9015_rc_query, - .rc_interval = 150, + .rc.legacy = { + .rc_query = af9015_rc_query, + .rc_interval = 150, + }, .i2c_algo = &af9015_i2c_algo,
@@ -1461,8 +1463,10 @@ static struct dvb_usb_device_properties af9015_properties[] = { .identify_state = af9015_identify_state, - .rc_query = af9015_rc_query, - .rc_interval = 150, + .rc.legacy = { + .rc_query = af9015_rc_query, + .rc_interval = 150, + }, .i2c_algo = &af9015_i2c_algo,
@@ -1568,8 +1572,10 @@ static struct dvb_usb_device_properties af9015_properties[] = { .identify_state = af9015_identify_state, - .rc_query = af9015_rc_query, - .rc_interval = 150, + .rc.legacy = { + .rc_query = af9015_rc_query, + .rc_interval = 150, + }, .i2c_algo = &af9015_i2c_algo,
drivers/media/dvb/dvb-usb/anysee.c +8 -6
@@ -377,7 +377,7 @@ static int anysee_tuner_attach(struct dvb_usb_adapter *adap)static int anysee_rc_query (struct dvb_usb_device *d,u32 *event,int *state) {u8 buf[] = {CMD_GET_IR_CODE }; -struct ir_scancode *keymap = d->props.rc_key_map; +struct ir_scancode *keymap = d->props.rc.legacy.rc_key_map;u8 ircode[2 ];int i, ret;
@@ -388,7 +388,7 @@ static int anysee_rc_query(struct dvb_usb_device *d, u32 *event, int *state) *event =0 ; *state =REMOTE_NO_KEY_PRESSED ; -for (i =0 ; i < d->props.rc_key_map_size; i++) { +for (i =0 ; i < d->props.rc.legacy.rc_key_map_size; i++) {if (rc5_custom (&keymap[i]) == ircode[0 ] &&rc5_data (&keymap[i]) == ircode[1 ]) { *event = keymap[i].keycode;
@@ -520,10 +520,12 @@ static struct dvb_usb_device_properties anysee_properties = { } }, - .rc_key_map = ir_codes_anysee_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_anysee_table), - .rc_query = anysee_rc_query, - .rc_interval = 200, /* windows driver uses 500ms */ + .rc.legacy = { + .rc_key_map = ir_codes_anysee_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_anysee_table), + .rc_query = anysee_rc_query, + .rc_interval =200 ,/* windows driver uses 500ms */ + }, .i2c_algo = &anysee_i2c_algo,
drivers/media/dvb/dvb-usb/az6027.c +7 -4
@@ -1125,10 +1125,13 @@ static struct dvb_usb_device_properties az6027_properties = {.power_ctrl = az6027_power_ctrl, .read_mac_address = az6027_read_mac_addr, */ - .rc_key_map = ir_codes_az6027_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_az6027_table), - .rc_interval = 400, - .rc_query = az6027_rc_query, + .rc.legacy = { + .rc_key_map = ir_codes_az6027_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_az6027_table), + .rc_interval = 400, + .rc_query = az6027_rc_query, + }, + .i2c_algo = &az6027_i2c_algo, .num_device_descs = 5,
drivers/media/dvb/dvb-usb/cinergyT2-core.c +6 -4
@@ -217,10 +217,12 @@ static struct dvb_usb_device_properties cinergyt2_properties = { .power_ctrl = cinergyt2_power_ctrl, - .rc_interval = 50, - .rc_key_map = ir_codes_cinergyt2_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_cinergyt2_table), - .rc_query = cinergyt2_rc_query, + .rc.legacy = { + .rc_interval = 50, + .rc_key_map = ir_codes_cinergyt2_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_cinergyt2_table), + .rc_query = cinergyt2_rc_query, + }, .generic_bulk_ctrl_endpoint = 1,
drivers/media/dvb/dvb-usb/cxusb.c +68 -48
224 lines not on this page · raw message
drivers/media/dvb/dvb-usb/dib0700_core.c +3 -3
@@ -510,7 +510,7 @@ static void dib0700_rc_urb_completion(struct urb *purb)return ; } - keymap = d->props.rc_key_map; + keymap = d->props.rc.legacy.rc_key_map; st = d->priv; buf = (u8 *)purb->transfer_buffer;
@@ -571,7 +571,7 @@ static void dib0700_rc_urb_completion(struct urb *purb) poll_reply.system, poll_reply.data, poll_reply.not_data);/* Find the key in the map */ -for (i =0 ; i < d->props.rc_key_map_size; i++) { +for (i =0 ; i < d->props.rc.legacy.rc_key_map_size; i++) {if (rc5_custom (&keymap[i]) == (poll_reply.system &0xff ) &&rc5_data (&keymap[i]) == poll_reply.data) { event = keymap[i].keycode;
@@ -640,7 +640,7 @@ int dib0700_rc_setup(struct dvb_usb_device *d)int ret;int i; -if (d->props.rc_key_map ==NULL ) +if (d->props.rc.legacy.rc_key_map ==NULL )return 0 ;/* Set the IR mode */
drivers/media/dvb/dvb-usb/dib0700_devices.c +83 -59
238 lines not on this page · raw message
drivers/media/dvb/dvb-usb/dibusb-mb.c +24 -16
@@ -211,10 +211,12 @@ static struct dvb_usb_device_properties dibusb1_1_properties = { .power_ctrl = dibusb_power_ctrl, - .rc_interval = DEFAULT_RC_INTERVAL, - .rc_key_map = ir_codes_dibusb_table, - .rc_key_map_size = 111, /* wow, that is ugly ... I want to load it to the driver dynamically */ - .rc_query = dibusb_rc_query, + .rc.legacy = { + .rc_interval = DEFAULT_RC_INTERVAL, + .rc_key_map = ir_codes_dibusb_table, + .rc_key_map_size = 111, /* wow, that is ugly ... I want to load it to the driver dynamically */ + .rc_query = dibusb_rc_query, + }, .i2c_algo = &dibusb_i2c_algo,
@@ -295,10 +297,12 @@ static struct dvb_usb_device_properties dibusb1_1_an2235_properties = { }, .power_ctrl = dibusb_power_ctrl, - .rc_interval = DEFAULT_RC_INTERVAL, - .rc_key_map = ir_codes_dibusb_table, - .rc_key_map_size = 111, /* wow, that is ugly ... I want to load it to the driver dynamically */ - .rc_query = dibusb_rc_query, + .rc.legacy = { + .rc_interval = DEFAULT_RC_INTERVAL, + .rc_key_map = ir_codes_dibusb_table, + .rc_key_map_size = 111, /* wow, that is ugly ... I want to load it to the driver dynamically */ + .rc_query = dibusb_rc_query, + }, .i2c_algo = &dibusb_i2c_algo,
@@ -359,10 +363,12 @@ static struct dvb_usb_device_properties dibusb2_0b_properties = { }, .power_ctrl = dibusb2_0_power_ctrl, - .rc_interval = DEFAULT_RC_INTERVAL, - .rc_key_map = ir_codes_dibusb_table, - .rc_key_map_size = 111, /* wow, that is ugly ... I want to load it to the driver dynamically */ - .rc_query = dibusb_rc_query, + .rc.legacy = { + .rc_interval = DEFAULT_RC_INTERVAL, + .rc_key_map = ir_codes_dibusb_table, + .rc_key_map_size = 111, /* wow, that is ugly ... I want to load it to the driver dynamically */ + .rc_query = dibusb_rc_query, + }, .i2c_algo = &dibusb_i2c_algo,
@@ -416,10 +422,12 @@ static struct dvb_usb_device_properties artec_t1_usb2_properties = { }, .power_ctrl = dibusb2_0_power_ctrl, - .rc_interval = DEFAULT_RC_INTERVAL, - .rc_key_map = ir_codes_dibusb_table, - .rc_key_map_size = 111, /* wow, that is ugly ... I want to load it to the driver dynamically */ - .rc_query = dibusb_rc_query, + .rc.legacy = { + .rc_interval = DEFAULT_RC_INTERVAL, + .rc_key_map = ir_codes_dibusb_table, + .rc_key_map_size = 111, /* wow, that is ugly ... I want to load it to the driver dynamically */ + .rc_query = dibusb_rc_query, + }, .i2c_algo = &dibusb_i2c_algo,
drivers/media/dvb/dvb-usb/dibusb-mc.c +6 -4
@@ -81,10 +81,12 @@ static struct dvb_usb_device_properties dibusb_mc_properties = { }, .power_ctrl = dibusb2_0_power_ctrl, - .rc_interval = DEFAULT_RC_INTERVAL, - .rc_key_map = ir_codes_dibusb_table, - .rc_key_map_size = 111, /* FIXME */ - .rc_query = dibusb_rc_query, + .rc.legacy = { + .rc_interval = DEFAULT_RC_INTERVAL, + .rc_key_map = ir_codes_dibusb_table, + .rc_key_map_size = 111, /* FIXME */ + .rc_query = dibusb_rc_query, + }, .i2c_algo = &dibusb_i2c_algo,
drivers/media/dvb/dvb-usb/digitv.c +10 -8
@@ -237,10 +237,10 @@ static int digitv_rc_query(struct dvb_usb_device *d, u32 *event, int *state)/* if something is inside the buffer, simulate key press */ if (key[1 ] !=0 ) { -for (i =0 ; i < d->props.rc_key_map_size; i++) { -if (rc5_custom (&d->props.rc_key_map[i]) == key[1 ] && -rc5_data (&d->props.rc_key_map[i]) == key[2 ]) { - *event = d->props.rc_key_map[i].keycode; +for (i =0 ; i < d->props.rc.legacy.rc_key_map_size; i++) { +if (rc5_custom (&d->props.rc.legacy.rc_key_map[i]) == key[1 ] && +rc5_data (&d->props.rc.legacy.rc_key_map[i]) == key[2 ]) { + *event = d->props.rc.legacy.rc_key_map[i].keycode; *state =REMOTE_KEY_PRESSED ;return 0 ; }
@@ -310,10 +310,12 @@ static struct dvb_usb_device_properties digitv_properties = { }, .identify_state = digitv_identify_state, - .rc_interval = 1000, - .rc_key_map = ir_codes_digitv_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_digitv_table), - .rc_query = digitv_rc_query, + .rc.legacy = { + .rc_interval = 1000, + .rc_key_map = ir_codes_digitv_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_digitv_table), + .rc_query = digitv_rc_query, + }, .i2c_algo = &digitv_i2c_algo,
drivers/media/dvb/dvb-usb/dtt200u.c +24 -16
@@ -161,10 +161,12 @@ static struct dvb_usb_device_properties dtt200u_properties = { }, .power_ctrl = dtt200u_power_ctrl, - .rc_interval = 300, - .rc_key_map = ir_codes_dtt200u_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_dtt200u_table), - .rc_query = dtt200u_rc_query, + .rc.legacy = { + .rc_interval = 300, + .rc_key_map = ir_codes_dtt200u_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_dtt200u_table), + .rc_query = dtt200u_rc_query, + }, .generic_bulk_ctrl_endpoint = 0x01,
@@ -206,10 +208,12 @@ static struct dvb_usb_device_properties wt220u_properties = { }, .power_ctrl = dtt200u_power_ctrl, - .rc_interval = 300, - .rc_key_map = ir_codes_dtt200u_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_dtt200u_table), - .rc_query = dtt200u_rc_query, + .rc.legacy = { + .rc_interval = 300, + .rc_key_map = ir_codes_dtt200u_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_dtt200u_table), + .rc_query = dtt200u_rc_query, + }, .generic_bulk_ctrl_endpoint = 0x01,
@@ -251,10 +255,12 @@ static struct dvb_usb_device_properties wt220u_fc_properties = { }, .power_ctrl = dtt200u_power_ctrl, - .rc_interval = 300, - .rc_key_map = ir_codes_dtt200u_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_dtt200u_table), - .rc_query = dtt200u_rc_query, + .rc.legacy = { + .rc_interval = 300, + .rc_key_map = ir_codes_dtt200u_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_dtt200u_table), + .rc_query = dtt200u_rc_query, + }, .generic_bulk_ctrl_endpoint = 0x01,
@@ -296,10 +302,12 @@ static struct dvb_usb_device_properties wt220u_zl0353_properties = { }, .power_ctrl = dtt200u_power_ctrl, - .rc_interval = 300, - .rc_key_map = ir_codes_dtt200u_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_dtt200u_table), - .rc_query = dtt200u_rc_query, + .rc.legacy = { + .rc_interval = 300, + .rc_key_map = ir_codes_dtt200u_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_dtt200u_table), + .rc_query = dtt200u_rc_query, + }, .generic_bulk_ctrl_endpoint = 0x01,
drivers/media/dvb/dvb-usb/dvb-usb-remote.c +22 -22
122 lines not on this page · raw message
drivers/media/dvb/dvb-usb/dvb-usb.h +23 -13
@@ -158,6 +158,25 @@ struct dvb_usb_adapter_properties { };/** +* struct dvb_rc_legacy - old properties of remote controller +* @rc_key_map: a hard-wired array of struct ir_scancode (NULL to disable +* remote control handling). +* @rc_key_map_size: number of items in @rc_key_map. +* @rc_query: called to query an event event. +* @rc_interval: time in ms between two queries. +*/ +struct dvb_rc_legacy { +/* remote control properties */ +#define REMOTE_NO_KEY_PRESSED 0x00 +#define REMOTE_KEY_PRESSED 0x01 +#define REMOTE_KEY_REPEAT 0x02 +struct ir_scancode *rc_key_map; +int rc_key_map_size; +int (*rc_query) (struct dvb_usb_device *,u32 *,int *); +int rc_interval; +}; + +/** * struct dvb_usb_device_properties - properties of a dvb-usb-device * @usb_ctrl: which USB device-side controller is in use. Needed for firmware * download.
@@ -175,11 +194,7 @@ struct dvb_usb_adapter_properties {* @identify_state: called to determine the state (cold or warm), when it * is not distinguishable by the USB IDs. * -* @rc_key_map: a hard-wired array of struct ir_scancode (NULL to disable -* remote control handling). -* @rc_key_map_size: number of items in @rc_key_map. -* @rc_query: called to query an event event. -* @rc_interval: time in ms between two queries. +* @rc: remote controller properties * * @i2c_algo: i2c_algorithm if the device has I2CoverUSB. *
@@ -223,14 +238,9 @@ struct dvb_usb_device_properties {int (*identify_state) (struct usb_device *,struct dvb_usb_device_properties *,struct dvb_usb_device_description **,int *); -/* remote control properties */ -#define REMOTE_NO_KEY_PRESSED 0x00 -#define REMOTE_KEY_PRESSED 0x01 -#define REMOTE_KEY_REPEAT 0x02 -struct ir_scancode *rc_key_map; -int rc_key_map_size; -int (*rc_query) (struct dvb_usb_device *,u32 *,int *); -int rc_interval; +union { +struct dvb_rc_legacy legacy; + } rc;struct i2c_algorithm *i2c_algo;
drivers/media/dvb/dvb-usb/dw2102.c +33 -24
102 lines not on this page · raw message
drivers/media/dvb/dvb-usb/m920x.c +22 -16
@@ -69,7 +69,7 @@ static int m920x_init(struct dvb_usb_device *d, struct m920x_inits *rc_seq) int adap_enabled[M9206_MAX_ADAPTERS] = { 0 }; /* Remote controller init. */ - if (d->props.rc_query) { + if (d->props.rc.legacy.rc_query) { deb("Initialising remote control\n"); while (rc_seq->address) { if ((ret = m920x_write(d->udev, M9206_CORE,
@@ -142,9 +142,9 @@ static int m920x_rc_query(struct dvb_usb_device *d, u32 *event, int *state)if ((ret =m920x_read (d->udev,M9206_CORE ,0x0 ,M9206_RC_KEY , rc_state +1 ,1 )) !=0 ) goto unlock; -for (i =0 ; i < d->props.rc_key_map_size; i++) -if (rc5_data (&d->props.rc_key_map[i]) == rc_state[1 ]) { - *event = d->props.rc_key_map[i].keycode; +for (i =0 ; i < d->props.rc.legacy.rc_key_map_size; i++) +if (rc5_data (&d->props.rc.legacy.rc_key_map[i]) == rc_state[1 ]) { + *event = d->props.rc.legacy.rc_key_map[i].keycode;switch (rc_state[0 ]) {case 0x80 :
@@ -784,10 +784,12 @@ static struct dvb_usb_device_properties megasky_properties = { .firmware = "dvb-usb-megasky-02.fw", .download_firmware = m920x_firmware_download, - .rc_interval = 100, - .rc_key_map = ir_codes_megasky_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_megasky_table), - .rc_query = m920x_rc_query, + .rc.legacy = { + .rc_interval = 100, + .rc_key_map = ir_codes_megasky_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_megasky_table), + .rc_query = m920x_rc_query, + }, .size_of_priv = sizeof(struct m920x_state),
@@ -885,10 +887,12 @@ static struct dvb_usb_device_properties tvwalkertwin_properties = { .firmware = "dvb-usb-tvwalkert.fw", .download_firmware = m920x_firmware_download, - .rc_interval = 100, - .rc_key_map = ir_codes_tvwalkertwin_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_tvwalkertwin_table), - .rc_query = m920x_rc_query, + .rc.legacy = { + .rc_interval = 100, + .rc_key_map = ir_codes_tvwalkertwin_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_tvwalkertwin_table), + .rc_query = m920x_rc_query, + }, .size_of_priv = sizeof(struct m920x_state),
@@ -992,10 +996,12 @@ static struct dvb_usb_device_properties pinnacle_pctv310e_properties = { .usb_ctrl = DEVICE_SPECIFIC, .download_firmware = NULL, - .rc_interval = 100, - .rc_key_map = ir_codes_pinnacle310e_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_pinnacle310e_table), - .rc_query = m920x_rc_query, + .rc.legacy = { + .rc_interval = 100, + .rc_key_map = ir_codes_pinnacle310e_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_pinnacle310e_table), + .rc_query = m920x_rc_query, + }, .size_of_priv = sizeof(struct m920x_state),
drivers/media/dvb/dvb-usb/nova-t-usb2.c +6 -4
@@ -195,10 +195,12 @@ static struct dvb_usb_device_properties nova_t_properties = { .power_ctrl = dibusb2_0_power_ctrl, .read_mac_address = nova_t_read_mac_address, - .rc_interval = 100, - .rc_key_map = ir_codes_haupp_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_haupp_table), - .rc_query = nova_t_rc_query, + .rc.legacy = { + .rc_interval = 100, + .rc_key_map = ir_codes_haupp_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_haupp_table), + .rc_query = nova_t_rc_query, + }, .i2c_algo = &dibusb_i2c_algo,
drivers/media/dvb/dvb-usb/opera1.c +6 -4
@@ -498,10 +498,12 @@ static struct dvb_usb_device_properties opera1_properties = { .power_ctrl = opera1_power_ctrl, .i2c_algo = &opera1_i2c_algo, - .rc_key_map = ir_codes_opera1_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_opera1_table), - .rc_interval = 200, - .rc_query = opera1_rc_query, + .rc.legacy = { + .rc_key_map = ir_codes_opera1_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_opera1_table), + .rc_interval = 200, + .rc_query = opera1_rc_query, + }, .read_mac_address = opera1_read_mac_address, .generic_bulk_ctrl_endpoint = 0x00,/* parameter for the MPEG2-data transfer */
drivers/media/dvb/dvb-usb/vp702x.c +6 -4
@@ -283,10 +283,12 @@ static struct dvb_usb_device_properties vp702x_properties = { }, .read_mac_address = vp702x_read_mac_addr, - .rc_key_map = ir_codes_vp702x_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_vp702x_table), - .rc_interval = 400, - .rc_query = vp702x_rc_query, + .rc.legacy = { + .rc_key_map = ir_codes_vp702x_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_vp702x_table), + .rc_interval = 400, + .rc_query = vp702x_rc_query, + }, .num_device_descs = 1, .devices = {
drivers/media/dvb/dvb-usb/vp7045.c +6 -4
@@ -259,10 +259,12 @@ static struct dvb_usb_device_properties vp7045_properties = { .power_ctrl = vp7045_power_ctrl, .read_mac_address = vp7045_read_mac_addr, - .rc_interval = 400, - .rc_key_map = ir_codes_vp7045_table, - .rc_key_map_size = ARRAY_SIZE(ir_codes_vp7045_table), - .rc_query = vp7045_rc_query, + .rc.legacy = { + .rc_interval = 400, + .rc_key_map = ir_codes_vp7045_table, + .rc_key_map_size = ARRAY_SIZE(ir_codes_vp7045_table), + .rc_query = vp7045_rc_query, + }, .num_device_descs = 2, .devices = {
Signature · 1 line
1.7.1
Re: [PATCH 3/7] V4L/DVB: dvb-usb: prepare drivers for using rc-core
Quoted 9 lines · Mauro Carvalho Chehab
This is a big patch, yet trivial. It just move the RC properties to a separate struct, in order to prepare the dvb-usb drivers to use rc-core. There's no change on the behavior of the drivers.
With this change, it is possible to have both legacy and rc-core based code inside the dvb-usb-remote, allowing a gradual migration to rc-core, driver per driver.
Signed-off-by Mauro Carvalho Chehab <[email protected]>
Signature · 2 lines
Jarod Wilson [email protected]
PATCH 4/7 V4L/DVB: dvb-usb: add support for rc-core mode
In reply to a message not in the archiveAllows dvb-usb drivers to use rc-core, instead of the legacy implementation.
No driver were ported yet to rc-core, so, some small adjustments may be needed, when starting to migrate the drivers.
drivers/media/dvb/dvb-usb/dvb-usb-remote.c +117 -35
@@ -8,7 +8,7 @@#include "dvb-usb-common.h" #include <linux/usb/input.h> -static int dvb_usb_getkeycode (struct input_dev *dev, +static int legacy_dvb_usb_getkeycode (struct input_dev *dev,unsigned int scancode,unsigned int *keycode) {struct dvb_usb_device *d =input_get_drvdata (dev);
@@ -25,7 +25,7 @@ static int dvb_usb_getkeycode(struct input_dev *dev,/* * If is there extra space, returns KEY_RESERVED, -* otherwise, input core won't let dvb_usb_setkeycode +* otherwise, input core won't let legacy_dvb_usb_setkeycode * to work */ for (i =0 ; i < d->props.rc.legacy.rc_key_map_size; i++)
@@ -38,7 +38,7 @@ static int dvb_usb_getkeycode(struct input_dev *dev,return -EINVAL ; } -static int dvb_usb_setkeycode (struct input_dev *dev, +static int legacy_dvb_usb_setkeycode (struct input_dev *dev,unsigned int scancode,unsigned int keycode) {struct dvb_usb_device *d =input_get_drvdata (dev);
@@ -78,7 +78,7 @@ static int dvb_usb_setkeycode(struct input_dev *dev,* * TODO: Fix the repeat rate of the input device. */ -static void dvb_usb_read_remote_control (struct work_struct *work) +static void legacy_dvb_usb_read_remote_control (struct work_struct *work) {struct dvb_usb_device *d = container_of(work, struct dvb_usb_device, rc_query_work.work);
@@ -154,15 +154,114 @@ schedule:schedule_delayed_work (&d->rc_query_work,msecs_to_jiffies (d->props.rc.legacy.rc_interval)); } +static int legacy_dvb_usb_remote_init (struct dvb_usb_device *d, +struct input_dev *input_dev) +{ +int i, err, rc_interval; + + input_dev->getkeycode = legacy_dvb_usb_getkeycode; + input_dev->setkeycode = legacy_dvb_usb_setkeycode; + +/* set the bits for the keys */ +deb_rc ("key map size: %d\n" , d->props.rc.legacy.rc_key_map_size); +for (i =0 ; i < d->props.rc.legacy.rc_key_map_size; i++) { +deb_rc ("setting bit for event %d item %d\n" , + d->props.rc.legacy.rc_key_map[i].keycode, i); +set_bit (d->props.rc.legacy.rc_key_map[i].keycode, input_dev->keybit); + } + +/* setting these two values to non-zero, we have to manage key repeats */ + input_dev->rep[REP_PERIOD ] = d->props.rc.legacy.rc_interval; + input_dev->rep[REP_DELAY ] = d->props.rc.legacy.rc_interval +150 ; + +input_set_drvdata (input_dev, d); + + err =input_register_device (input_dev); +if (err) +input_free_device (input_dev); + + rc_interval = d->props.rc.legacy.rc_interval; + +INIT_DELAYED_WORK (&d->rc_query_work, legacy_dvb_usb_read_remote_control); + +info ("schedule remote query interval to %d msecs." , rc_interval); +schedule_delayed_work (&d->rc_query_work, +msecs_to_jiffies (rc_interval)); + + d->state |=DVB_USB_STATE_REMOTE ; + +return err; +} + +/* Remote-control poll function - called every dib->rc_query_interval ms to see +* whether the remote control has received anything. +* +* TODO: Fix the repeat rate of the input device. +*/ +static void dvb_usb_read_remote_control (struct work_struct *work) +{ +struct dvb_usb_device *d = + container_of(work, struct dvb_usb_device, rc_query_work.work); +int err; + +/* TODO: need a lock here. We can simply skip checking for the remote control +if we're busy. */ + +/* when the parameter has been set to 1 via sysfs while the +* driver was running, or when bulk mode is enabled after IR init +*/ +if (dvb_usb_disable_rc_polling || d->props.rc.core.bulk_mode) +return ; + + err = d->props.rc.core.rc_query (d); +if (err) +err ("error %d while querying for an remote control event." , err); + +schedule_delayed_work (&d->rc_query_work, +msecs_to_jiffies (d->props.rc.core.rc_interval)); +} + +static int rc_core_dvb_usb_remote_init (struct dvb_usb_device *d, +struct input_dev *input_dev) +{ +int err, rc_interval; + + d->props.rc.core.rc_props.priv = d; + err =ir_input_register (input_dev, + d->props.rc.core.rc_codes, + &d->props.rc.core.rc_props, + d->props.rc.core.module_name); +if (err <0 ) +return err; + +if (!d->props.rc.core.rc_query || d->props.rc.core.bulk_mode) +return 0 ; + +/* Polling mode - initialize a work queue for handling it */ +INIT_DELAYED_WORK (&d->rc_query_work, dvb_usb_read_remote_control); + + rc_interval = d->props.rc.core.rc_interval; + +info ("schedule remote query interval to %d msecs." , rc_interval); +schedule_delayed_work (&d->rc_query_work, +msecs_to_jiffies (rc_interval)); + +return 0 ; +} +int dvb_usb_remote_init (struct dvb_usb_device *d) {struct input_dev *input_dev; -int i;int err; -if (d->props.rc.legacy.rc_key_map ==NULL || - d->props.rc.legacy.rc_query ==NULL || - dvb_usb_disable_rc_polling) +if (dvb_usb_disable_rc_polling) +return 0 ; + +if (d->props.rc.legacy.rc_key_map && d->props.rc.legacy.rc_query) + d->props.rc.mode =DVB_RC_LEGACY ; +else if (d->props.rc.core.rc_codes) + d->props.rc.mode =DVB_RC_CORE ; +else return 0 ;usb_make_path (d->udev, d->rc_phys,sizeof (d->rc_phys));
@@ -177,39 +276,19 @@ int dvb_usb_remote_init(struct dvb_usb_device *d) input_dev->phys = d->rc_phys;usb_to_input_id (d->udev, &input_dev->id); input_dev->dev.parent = &d->udev->dev; - input_dev->getkeycode = dvb_usb_getkeycode; - input_dev->setkeycode = dvb_usb_setkeycode; - -/* set the bits for the keys */ -deb_rc ("key map size: %d\n" , d->props.rc.legacy.rc_key_map_size); -for (i =0 ; i < d->props.rc.legacy.rc_key_map_size; i++) { -deb_rc ("setting bit for event %d item %d\n" , - d->props.rc.legacy.rc_key_map[i].keycode, i); -set_bit (d->props.rc.legacy.rc_key_map[i].keycode, input_dev->keybit); - }/* Start the remote-control polling. */ if (d->props.rc.legacy.rc_interval <40 ) d->props.rc.legacy.rc_interval =100 ;/* default */ -/* setting these two values to non-zero, we have to manage key repeats */ - input_dev->rep[REP_PERIOD ] = d->props.rc.legacy.rc_interval; - input_dev->rep[REP_DELAY ] = d->props.rc.legacy.rc_interval +150 ; - -input_set_drvdata (input_dev, d); - - err =input_register_device (input_dev); -if (err) { -input_free_device (input_dev); -return err; - } - d->rc_input_dev = input_dev; -INIT_DELAYED_WORK (&d->rc_query_work, dvb_usb_read_remote_control); - -info ("schedule remote query interval to %d msecs." , d->props.rc.legacy.rc_interval); -schedule_delayed_work (&d->rc_query_work,msecs_to_jiffies (d->props.rc.legacy.rc_interval)); +if (d->props.rc.mode ==DVB_RC_LEGACY ) + err =legacy_dvb_usb_remote_init (d, input_dev); +else + err =rc_core_dvb_usb_remote_init (d, input_dev); +if (err) +return err; d->state |=DVB_USB_STATE_REMOTE ;
@@ -221,7 +300,10 @@ int dvb_usb_remote_exit(struct dvb_usb_device *d)if (d->state &DVB_USB_STATE_REMOTE ) {cancel_rearming_delayed_work (&d->rc_query_work);flush_scheduled_work (); -input_unregister_device (d->rc_input_dev); +if (d->props.rc.mode ==DVB_RC_LEGACY ) +input_unregister_device (d->rc_input_dev); +else +ir_input_unregister (d->rc_input_dev); } d->state &= ~DVB_USB_STATE_REMOTE ;return 0 ;
drivers/media/dvb/dvb-usb/dvb-usb.h +32 -2
@@ -14,7 +14,7 @@#include <linux/usb.h> #include <linux/firmware.h> #include <linux/mutex.h> -#include <media/rc-map.h> +#include <media/ir-core.h> #include "dvb_frontend.h" #include "dvb_demux.h"
@@ -177,6 +177,34 @@ struct dvb_rc_legacy { };/** +* struct dvb_rc properties of remote controller, using rc-core +* @rc_codes: name of rc codes table +* @rc_query: called to query an event event. +* @rc_interval: time in ms between two queries. +* @rc_props: remote controller properties +* @bulk_mode: device supports bulk mode for RC (disable polling mode) +*/ +struct dvb_rc { +char *rc_codes; +char *module_name; +int (*rc_query) (struct dvb_usb_device *d); +int rc_interval; +struct ir_dev_props rc_props; +bool bulk_mode;/* uses bulk mode */ +}; + +/** +* enum dvb_usb_mode - Specifies if it is using a legacy driver or a new one +* based on rc-core +* This is initialized/used only inside dvb-usb-remote.c. +* It shouldn't be set by the drivers. +*/ +enum dvb_usb_mode { +DVB_RC_LEGACY , +DVB_RC_CORE , +}; + +/** * struct dvb_usb_device_properties - properties of a dvb-usb-device * @usb_ctrl: which USB device-side controller is in use. Needed for firmware * download.
@@ -238,8 +266,10 @@ struct dvb_usb_device_properties {int (*identify_state) (struct usb_device *,struct dvb_usb_device_properties *,struct dvb_usb_device_description **,int *); -union { +struct { +enum dvb_usb_mode mode;/* Drivers shouldn't touch on it */ struct dvb_rc_legacy legacy; +struct dvb_rc core; } rc;struct i2c_algorithm *i2c_algo;
Signature · 1 line
1.7.1
PATCH 5/7 V4L/DVB: Add a keymap file with dib0700 table
In reply to a message not in the archivecreate mode 100644 drivers/media/IR/keymaps/rc-dib0700-big.c
drivers/media/IR/keymaps/Makefile +1 -0
@@ -14,6 +14,7 @@ obj-$(CONFIG_RC_MAP) += rc-adstech-dvb-t-pci.o \ rc-budget-ci-old.o \ rc-cinergy-1400.o \ rc-cinergy.o \ + rc-dib0700-big.o \ rc-dm1105-nec.o \ rc-dntv-live-dvb-t.o \ rc-dntv-live-dvbt-pro.o \
drivers/media/IR/keymaps/rc-dib0700-big.c new file +314 -0
314 lines not on this page · raw message
include/media/rc-map.h +4 -0
@@ -69,6 +69,9 @@ void rc_map_init(void);#define RC_MAP_BUDGET_CI_OLD "rc-budget-ci-old"#define RC_MAP_CINERGY_1400 "rc-cinergy-1400"#define RC_MAP_CINERGY "rc-cinergy" +/* Temporary table - should be broken into smaller tables */ +#define RC_MAP_DIB0700_BIG_TABLE "rc-dib0700-big" +#define RC_MAP_DM1105_NEC "rc-dm1105-nec"#define RC_MAP_DNTV_LIVE_DVBT_PRO "rc-dntv-live-dvbt-pro"#define RC_MAP_DNTV_LIVE_DVB_T "rc-dntv-live-dvb-t"
@@ -123,6 +126,7 @@ void rc_map_init(void);#define RC_MAP_VIDEOMATE_TV_PVR "rc-videomate-tv-pvr"#define RC_MAP_WINFAST "rc-winfast"#define RC_MAP_WINFAST_USBII_DELUXE "rc-winfast-usbii-deluxe" +/* * Please, do not just append newer Remote Controller names at the end. * The names should be ordered in alphabetical order
Signature · 1 line
1.7.1
PATCH 6/7 V4L/DVB: Port dib0700 to rc-core
In reply to a message not in the archiveUse the new rc-core handler at dvb-usb-remote for dib0700 driver.
drivers/media/dvb/dvb-usb/dib0700_core.c +16 -68
@@ -491,14 +491,11 @@ struct dib0700_rc_response {static void dib0700_rc_urb_completion (struct urb *purb) {struct dvb_usb_device *d = purb->context; -struct ir_scancode *keymap;struct dib0700_state *st;struct dib0700_rc_response poll_reply;u8 *buf; -int found =0 ; -u32 event; -int state; -int i; +u32 keycode; +u8 toggle;deb_info ("%s()\n" , __func__);if (d ==NULL )
@@ -510,7 +507,6 @@ static void dib0700_rc_urb_completion(struct urb *purb)return ; } - keymap = d->props.rc.legacy.rc_key_map; st = d->priv; buf = (u8 *)purb->transfer_buffer;
@@ -525,21 +521,17 @@ static void dib0700_rc_urb_completion(struct urb *purb) goto resubmit; } -/* Set initial results in case we exit the function early */ - event =0 ; - state =REMOTE_NO_KEY_PRESSED ; -deb_data ("IR raw %02X %02X %02X %02X %02X %02X (len %d)\n" , buf[0 ], buf[1 ], buf[2 ], buf[3 ], buf[4 ], buf[5 ], purb->actual_length);switch (dvb_usb_dib0700_ir_proto) {case 0 :/* NEC Protocol */ - poll_reply.report_id =0 ; - poll_reply.data_state =1 ; + poll_reply.data_state =0 ; poll_reply.system = buf[2 ]; poll_reply.data = buf[4 ]; poll_reply.not_data = buf[5 ]; + toggle =0 ;/* NEC protocol sends repeat code as 0 0 0 FF */ if ((poll_reply.system == 0x00) && (poll_reply.data == 0x00)
@@ -547,6 +539,7 @@ static void dib0700_rc_urb_completion(struct urb *purb) poll_reply.data_state =2 ;break ; } +break ;default :/* RC5 Protocol */
@@ -555,6 +548,9 @@ static void dib0700_rc_urb_completion(struct urb *purb) poll_reply.system = (buf[2 ] <<8 ) | buf[3 ]; poll_reply.data = buf[4 ]; poll_reply.not_data = buf[5 ]; + + toggle = poll_reply.report_id; +break ; }
@@ -570,59 +566,8 @@ static void dib0700_rc_urb_completion(struct urb *purb) poll_reply.report_id, poll_reply.data_state, poll_reply.system, poll_reply.data, poll_reply.not_data); -/* Find the key in the map */ -for (i =0 ; i < d->props.rc.legacy.rc_key_map_size; i++) { -if (rc5_custom (&keymap[i]) == (poll_reply.system &0xff ) && -rc5_data (&keymap[i]) == poll_reply.data) { - event = keymap[i].keycode; - found =1 ; -break ; - } - } - -if (found ==0 ) { -err ("Unknown remote controller key: %04x %02x %02x" , - poll_reply.system, poll_reply.data, poll_reply.not_data); - d->last_event =0 ; - goto resubmit; - } - -if (poll_reply.data_state ==1 ) { -/* New key hit */ - st->rc_counter =0 ; - event = keymap[i].keycode; - state =REMOTE_KEY_PRESSED ; - d->last_event = keymap[i].keycode; - }else if (poll_reply.data_state ==2 ) { -/* Key repeated */ - st->rc_counter++; - -/* prevents unwanted double hits */ -if (st->rc_counter >RC_REPEAT_DELAY_V1_20 ) { - event = d->last_event; - state =REMOTE_KEY_PRESSED ; - st->rc_counter =RC_REPEAT_DELAY_V1_20 ; - } - }else { -err ("Unknown data state [%d]" , poll_reply.data_state); - } - -switch (state) { -case REMOTE_NO_KEY_PRESSED : -break ; -case REMOTE_KEY_PRESSED : -deb_info ("key pressed\n" ); - d->last_event = event; -case REMOTE_KEY_REPEAT : -deb_info ("key repeated\n" ); -input_event (d->rc_input_dev,EV_KEY , event,1 ); -input_sync (d->rc_input_dev); -input_event (d->rc_input_dev,EV_KEY , d->last_event,0 ); -input_sync (d->rc_input_dev); -break ; -default : -break ; - } + keycode = poll_reply.system <<8 | poll_reply.data; +ir_keydown (d->rc_input_dev, keycode, toggle); resubmit:/* Clean the buffer before we requeue */
@@ -640,9 +585,6 @@ int dib0700_rc_setup(struct dvb_usb_device *d)int ret;int i; -if (d->props.rc.legacy.rc_key_map ==NULL ) -return 0 ; -/* Set the IR mode */ i =dib0700_ctrl_wr (d, rc_setup,sizeof (rc_setup));if (i <0 ) {
@@ -700,6 +642,12 @@ static int dib0700_probe(struct usb_interface *intf, st->fw_version = fw_version; st->nb_packet_buffer_size = (u32 )nb_packet_buffer_size; +/* Disable polling mode on newer firmwares */ +if (st->fw_version >=0x10200 ) + dev->props.rc.core.bulk_mode = true; +else + dev->props.rc.core.bulk_mode = false; +dib0700_rc_setup (dev);return 0 ;
drivers/media/dvb/dvb-usb/dib0700_devices.c +77 -376
583 lines not on this page · raw message
Signature · 1 line
1.7.1
PATCH 7/7 V4L/DVB: dib0700: avoid bad repeat
In reply to a message not in the archivea 250ms delay is too low for this device. It ends by producing false repeat events. Increase the delay time to 500 ms to avoid troubles.
drivers/media/dvb/dvb-usb/dib0700_core.c +3 -0
@@ -648,6 +648,9 @@ static int dib0700_probe(struct usb_interface *intf,else dev->props.rc.core.bulk_mode = false; +/* Need a higher delay, to avoid wrong repeat */ + dev->rc_input_dev->rep[REP_DELAY ] =500 ; +dib0700_rc_setup (dev);return 0 ;
Signature · 1 line
1.7.1