Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 181630
b: refs/heads/master
c: 26c3b8b
h: refs/heads/master
v: v3
  • Loading branch information
Jiri Slaby authored and Mauro Carvalho Chehab committed Feb 26, 2010
1 parent e8675ec commit 0ff1881
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 134 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 634d2d757a435037576bac465a84a02a72c747b6
refs/heads/master: 26c3b8b060b3a06f912e5c50bc8ef6ed96195458
222 changes: 89 additions & 133 deletions trunk/drivers/media/dvb/dvb-usb/af9015.c
Original file line number Diff line number Diff line change
Expand Up @@ -732,158 +732,114 @@ static int af9015_download_firmware(struct usb_device *udev,
return ret;
}

struct af9015_setup {
unsigned int id;
struct dvb_usb_rc_key *rc_key_map;
unsigned int rc_key_map_size;
u8 *ir_table;
unsigned int ir_table_size;
};

static const struct af9015_setup *af9015_setup_match(unsigned int id,
const struct af9015_setup *table)
{
for (; table->rc_key_map; table++)
if (table->id == id)
return table;
return NULL;
}

static const struct af9015_setup af9015_setup_modparam[] = {
{ AF9015_REMOTE_A_LINK_DTU_M,
af9015_rc_keys_a_link, ARRAY_SIZE(af9015_rc_keys_a_link),
af9015_ir_table_a_link, ARRAY_SIZE(af9015_ir_table_a_link) },
{ AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
af9015_rc_keys_msi, ARRAY_SIZE(af9015_rc_keys_msi),
af9015_ir_table_msi, ARRAY_SIZE(af9015_ir_table_msi) },
{ AF9015_REMOTE_MYGICTV_U718,
af9015_rc_keys_mygictv, ARRAY_SIZE(af9015_rc_keys_mygictv),
af9015_ir_table_mygictv, ARRAY_SIZE(af9015_ir_table_mygictv) },
{ AF9015_REMOTE_DIGITTRADE_DVB_T,
af9015_rc_keys_digittrade, ARRAY_SIZE(af9015_rc_keys_digittrade),
af9015_ir_table_digittrade, ARRAY_SIZE(af9015_ir_table_digittrade) },
{ AF9015_REMOTE_AVERMEDIA_KS,
af9015_rc_keys_avermedia, ARRAY_SIZE(af9015_rc_keys_avermedia),
af9015_ir_table_avermedia_ks, ARRAY_SIZE(af9015_ir_table_avermedia_ks) },
{ }
};

/* don't add new entries here anymore, use hashes instead */
static const struct af9015_setup af9015_setup_usbids[] = {
{ USB_VID_LEADTEK,
af9015_rc_keys_leadtek, ARRAY_SIZE(af9015_rc_keys_leadtek),
af9015_ir_table_leadtek, ARRAY_SIZE(af9015_ir_table_leadtek) },
{ USB_VID_VISIONPLUS,
af9015_rc_keys_twinhan, ARRAY_SIZE(af9015_rc_keys_twinhan),
af9015_ir_table_twinhan, ARRAY_SIZE(af9015_ir_table_twinhan) },
{ USB_VID_KWORLD_2, /* TODO: use correct rc keys */
af9015_rc_keys_twinhan, ARRAY_SIZE(af9015_rc_keys_twinhan),
af9015_ir_table_kworld, ARRAY_SIZE(af9015_ir_table_kworld) },
{ USB_VID_AVERMEDIA,
af9015_rc_keys_avermedia, ARRAY_SIZE(af9015_rc_keys_avermedia),
af9015_ir_table_avermedia, ARRAY_SIZE(af9015_ir_table_avermedia) },
{ USB_VID_MSI_2,
af9015_rc_keys_msi_digivox_iii, ARRAY_SIZE(af9015_rc_keys_msi_digivox_iii),
af9015_ir_table_msi_digivox_iii, ARRAY_SIZE(af9015_ir_table_msi_digivox_iii) },
{ }
};

static void af9015_set_remote_config(struct usb_device *udev,
struct dvb_usb_device_properties *props)
{
const struct af9015_setup *table = NULL;

if (dvb_usb_af9015_remote) {
/* load remote defined as module param */
switch (dvb_usb_af9015_remote) {
case AF9015_REMOTE_A_LINK_DTU_M:
props->rc_key_map =
af9015_rc_keys_a_link;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_a_link);
af9015_config.ir_table = af9015_ir_table_a_link;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_a_link);
break;
case AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3:
props->rc_key_map =
af9015_rc_keys_msi;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_msi);
af9015_config.ir_table = af9015_ir_table_msi;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_msi);
break;
case AF9015_REMOTE_MYGICTV_U718:
props->rc_key_map =
af9015_rc_keys_mygictv;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_mygictv);
af9015_config.ir_table =
af9015_ir_table_mygictv;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_mygictv);
break;
case AF9015_REMOTE_DIGITTRADE_DVB_T:
props->rc_key_map =
af9015_rc_keys_digittrade;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_digittrade);
af9015_config.ir_table =
af9015_ir_table_digittrade;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_digittrade);
break;
case AF9015_REMOTE_AVERMEDIA_KS:
props->rc_key_map =
af9015_rc_keys_avermedia;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_avermedia);
af9015_config.ir_table =
af9015_ir_table_avermedia_ks;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_avermedia_ks);
break;
}
table = af9015_setup_match(dvb_usb_af9015_remote,
af9015_setup_modparam);
} else {
switch (le16_to_cpu(udev->descriptor.idVendor)) {
case USB_VID_LEADTEK:
props->rc_key_map =
af9015_rc_keys_leadtek;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_leadtek);
af9015_config.ir_table =
af9015_ir_table_leadtek;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_leadtek);
break;
case USB_VID_VISIONPLUS:
props->rc_key_map =
af9015_rc_keys_twinhan;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_twinhan);
af9015_config.ir_table =
af9015_ir_table_twinhan;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_twinhan);
break;
case USB_VID_KWORLD_2:
/* TODO: use correct rc keys */
props->rc_key_map =
af9015_rc_keys_twinhan;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_twinhan);
af9015_config.ir_table = af9015_ir_table_kworld;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_kworld);
break;
/* Check USB manufacturer and product strings and try
to determine correct remote in case of chip vendor
reference IDs are used. */
case USB_VID_AFATECH:
{
u16 vendor = le16_to_cpu(udev->descriptor.idVendor);

if (vendor == USB_VID_AFATECH) {
/* Check USB manufacturer and product strings and try
to determine correct remote in case of chip vendor
reference IDs are used.
DO NOT ADD ANYTHING NEW HERE. Use hashes instead.
*/
char manufacturer[10];
memset(manufacturer, 0, sizeof(manufacturer));
usb_string(udev, udev->descriptor.iManufacturer,
manufacturer, sizeof(manufacturer));
if (!strcmp("Geniatech", manufacturer)) {
/* iManufacturer 1 Geniatech
iProduct 2 AF9015 */
props->rc_key_map =
af9015_rc_keys_mygictv;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_mygictv);
af9015_config.ir_table =
af9015_ir_table_mygictv;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_mygictv);
table = af9015_setup_match(
AF9015_REMOTE_MYGICTV_U718,
af9015_setup_modparam);
} else if (!strcmp("MSI", manufacturer)) {
/* iManufacturer 1 MSI
iProduct 2 MSI K-VOX */
props->rc_key_map =
af9015_rc_keys_msi;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_msi);
af9015_config.ir_table =
af9015_ir_table_msi;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_msi);
table = af9015_setup_match(
AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
af9015_setup_modparam);
} else if (udev->descriptor.idProduct ==
cpu_to_le16(USB_PID_TREKSTOR_DVBT)) {
props->rc_key_map =
af9015_rc_keys_trekstor;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_trekstor);
af9015_config.ir_table =
af9015_ir_table_trekstor;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_trekstor);
table = &(const struct af9015_setup){ 0,
af9015_rc_keys_trekstor,
ARRAY_SIZE(af9015_rc_keys_trekstor),
af9015_ir_table_trekstor,
ARRAY_SIZE(af9015_ir_table_trekstor)
};
}
break;
}
case USB_VID_AVERMEDIA:
props->rc_key_map =
af9015_rc_keys_avermedia;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_avermedia);
af9015_config.ir_table =
af9015_ir_table_avermedia;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_avermedia);
break;
case USB_VID_MSI_2:
props->rc_key_map =
af9015_rc_keys_msi_digivox_iii;
props->rc_key_map_size =
ARRAY_SIZE(af9015_rc_keys_msi_digivox_iii);
af9015_config.ir_table =
af9015_ir_table_msi_digivox_iii;
af9015_config.ir_table_size =
ARRAY_SIZE(af9015_ir_table_msi_digivox_iii);
break;
}
} else
table = af9015_setup_match(vendor, af9015_setup_usbids);
}

if (table) {
props->rc_key_map = table->rc_key_map;
props->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;
}
}

Expand Down

0 comments on commit 0ff1881

Please sign in to comment.