|
@@ -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 */
|