V4L/DVB: media: dvb/af9015, factor out remote setting

This is just a code shuffle without functional changes. For easier
review of later changes, i.e. preparation.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Acked-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Jiri Slaby 2010-01-22 12:10:53 -03:00 committed by Mauro Carvalho Chehab
parent 6c614044ff
commit 634d2d757a

View file

@ -732,12 +732,166 @@ error:
return ret;
}
static void af9015_set_remote_config(struct usb_device *udev,
struct dvb_usb_device_properties *props)
{
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;
}
} 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:
{
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);
} 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);
} 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);
}
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;
}
}
}
static int af9015_read_config(struct usb_device *udev)
{
int ret;
u8 val, i, offset = 0;
struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, &val};
char manufacturer[10];
/* IR remote controller */
req.addr = AF9015_EEPROM_IR_MODE;
@ -759,153 +913,8 @@ static int af9015_read_config(struct usb_device *udev)
if (val == AF9015_IR_MODE_DISABLED) {
af9015_properties[i].rc_key_map = NULL;
af9015_properties[i].rc_key_map_size = 0;
} else if (dvb_usb_af9015_remote) {
/* load remote defined as module param */
switch (dvb_usb_af9015_remote) {
case AF9015_REMOTE_A_LINK_DTU_M:
af9015_properties[i].rc_key_map =
af9015_rc_keys_a_link;
af9015_properties[i].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:
af9015_properties[i].rc_key_map =
af9015_rc_keys_msi;
af9015_properties[i].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:
af9015_properties[i].rc_key_map =
af9015_rc_keys_mygictv;
af9015_properties[i].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:
af9015_properties[i].rc_key_map =
af9015_rc_keys_digittrade;
af9015_properties[i].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:
af9015_properties[i].rc_key_map =
af9015_rc_keys_avermedia;
af9015_properties[i].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;
}
} else {
switch (le16_to_cpu(udev->descriptor.idVendor)) {
case USB_VID_LEADTEK:
af9015_properties[i].rc_key_map =
af9015_rc_keys_leadtek;
af9015_properties[i].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:
af9015_properties[i].rc_key_map =
af9015_rc_keys_twinhan;
af9015_properties[i].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 */
af9015_properties[i].rc_key_map =
af9015_rc_keys_twinhan;
af9015_properties[i].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:
memset(manufacturer, 0, sizeof(manufacturer));
usb_string(udev, udev->descriptor.iManufacturer,
manufacturer, sizeof(manufacturer));
if (!strcmp("Geniatech", manufacturer)) {
/* iManufacturer 1 Geniatech
iProduct 2 AF9015 */
af9015_properties[i].rc_key_map =
af9015_rc_keys_mygictv;
af9015_properties[i].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);
} else if (!strcmp("MSI", manufacturer)) {
/* iManufacturer 1 MSI
iProduct 2 MSI K-VOX */
af9015_properties[i].rc_key_map =
af9015_rc_keys_msi;
af9015_properties[i].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);
} else if (udev->descriptor.idProduct ==
cpu_to_le16(USB_PID_TREKSTOR_DVBT)) {
af9015_properties[i].rc_key_map =
af9015_rc_keys_trekstor;
af9015_properties[i].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);
}
break;
case USB_VID_AVERMEDIA:
af9015_properties[i].rc_key_map =
af9015_rc_keys_avermedia;
af9015_properties[i].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:
af9015_properties[i].rc_key_map =
af9015_rc_keys_msi_digivox_iii;
af9015_properties[i].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
af9015_set_remote_config(udev, &af9015_properties[i]);
}
/* TS mode - one or two receivers */