diff options
Diffstat (limited to 'drivers/media/rc/mceusb.c')
-rw-r--r-- | drivers/media/rc/mceusb.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c index 6df0a4980645..044fb7a382d6 100644 --- a/drivers/media/rc/mceusb.c +++ b/drivers/media/rc/mceusb.c | |||
@@ -148,6 +148,7 @@ enum mceusb_model_type { | |||
148 | MCE_GEN2_TX_INV, | 148 | MCE_GEN2_TX_INV, |
149 | POLARIS_EVK, | 149 | POLARIS_EVK, |
150 | CX_HYBRID_TV, | 150 | CX_HYBRID_TV, |
151 | MULTIFUNCTION, | ||
151 | }; | 152 | }; |
152 | 153 | ||
153 | struct mceusb_model { | 154 | struct mceusb_model { |
@@ -155,9 +156,10 @@ struct mceusb_model { | |||
155 | u32 mce_gen2:1; | 156 | u32 mce_gen2:1; |
156 | u32 mce_gen3:1; | 157 | u32 mce_gen3:1; |
157 | u32 tx_mask_normal:1; | 158 | u32 tx_mask_normal:1; |
158 | u32 is_polaris:1; | ||
159 | u32 no_tx:1; | 159 | u32 no_tx:1; |
160 | 160 | ||
161 | int ir_intfnum; | ||
162 | |||
161 | const char *rc_map; /* Allow specify a per-board map */ | 163 | const char *rc_map; /* Allow specify a per-board map */ |
162 | const char *name; /* per-board name */ | 164 | const char *name; /* per-board name */ |
163 | }; | 165 | }; |
@@ -179,20 +181,22 @@ static const struct mceusb_model mceusb_model[] = { | |||
179 | .tx_mask_normal = 1, | 181 | .tx_mask_normal = 1, |
180 | }, | 182 | }, |
181 | [POLARIS_EVK] = { | 183 | [POLARIS_EVK] = { |
182 | .is_polaris = 1, | ||
183 | /* | 184 | /* |
184 | * In fact, the EVK is shipped without | 185 | * In fact, the EVK is shipped without |
185 | * remotes, but we should have something handy, | 186 | * remotes, but we should have something handy, |
186 | * to allow testing it | 187 | * to allow testing it |
187 | */ | 188 | */ |
188 | .rc_map = RC_MAP_RC5_HAUPPAUGE_NEW, | 189 | .rc_map = RC_MAP_HAUPPAUGE, |
189 | .name = "Conexant Hybrid TV (cx231xx) MCE IR", | 190 | .name = "Conexant Hybrid TV (cx231xx) MCE IR", |
190 | }, | 191 | }, |
191 | [CX_HYBRID_TV] = { | 192 | [CX_HYBRID_TV] = { |
192 | .is_polaris = 1, | ||
193 | .no_tx = 1, /* tx isn't wired up at all */ | 193 | .no_tx = 1, /* tx isn't wired up at all */ |
194 | .name = "Conexant Hybrid TV (cx231xx) MCE IR", | 194 | .name = "Conexant Hybrid TV (cx231xx) MCE IR", |
195 | }, | 195 | }, |
196 | [MULTIFUNCTION] = { | ||
197 | .mce_gen2 = 1, | ||
198 | .ir_intfnum = 2, | ||
199 | }, | ||
196 | }; | 200 | }; |
197 | 201 | ||
198 | static struct usb_device_id mceusb_dev_table[] = { | 202 | static struct usb_device_id mceusb_dev_table[] = { |
@@ -216,8 +220,9 @@ static struct usb_device_id mceusb_dev_table[] = { | |||
216 | { USB_DEVICE(VENDOR_PHILIPS, 0x206c) }, | 220 | { USB_DEVICE(VENDOR_PHILIPS, 0x206c) }, |
217 | /* Philips/Spinel plus IR transceiver for ASUS */ | 221 | /* Philips/Spinel plus IR transceiver for ASUS */ |
218 | { USB_DEVICE(VENDOR_PHILIPS, 0x2088) }, | 222 | { USB_DEVICE(VENDOR_PHILIPS, 0x2088) }, |
219 | /* Realtek MCE IR Receiver */ | 223 | /* Realtek MCE IR Receiver and card reader */ |
220 | { USB_DEVICE(VENDOR_REALTEK, 0x0161) }, | 224 | { USB_DEVICE(VENDOR_REALTEK, 0x0161), |
225 | .driver_info = MULTIFUNCTION }, | ||
221 | /* SMK/Toshiba G83C0004D410 */ | 226 | /* SMK/Toshiba G83C0004D410 */ |
222 | { USB_DEVICE(VENDOR_SMK, 0x031d), | 227 | { USB_DEVICE(VENDOR_SMK, 0x031d), |
223 | .driver_info = MCE_GEN2_TX_INV }, | 228 | .driver_info = MCE_GEN2_TX_INV }, |
@@ -256,7 +261,7 @@ static struct usb_device_id mceusb_dev_table[] = { | |||
256 | .driver_info = MCE_GEN2_TX_INV }, | 261 | .driver_info = MCE_GEN2_TX_INV }, |
257 | /* Topseed eHome Infrared Transceiver */ | 262 | /* Topseed eHome Infrared Transceiver */ |
258 | { USB_DEVICE(VENDOR_TOPSEED, 0x0011), | 263 | { USB_DEVICE(VENDOR_TOPSEED, 0x0011), |
259 | .driver_info = MCE_GEN2_TX_INV }, | 264 | .driver_info = MCE_GEN3 }, |
260 | /* Ricavision internal Infrared Transceiver */ | 265 | /* Ricavision internal Infrared Transceiver */ |
261 | { USB_DEVICE(VENDOR_RICAVISION, 0x0010) }, | 266 | { USB_DEVICE(VENDOR_RICAVISION, 0x0010) }, |
262 | /* Itron ione Libra Q-11 */ | 267 | /* Itron ione Libra Q-11 */ |
@@ -1101,7 +1106,7 @@ static int __devinit mceusb_dev_probe(struct usb_interface *intf, | |||
1101 | bool is_gen3; | 1106 | bool is_gen3; |
1102 | bool is_microsoft_gen1; | 1107 | bool is_microsoft_gen1; |
1103 | bool tx_mask_normal; | 1108 | bool tx_mask_normal; |
1104 | bool is_polaris; | 1109 | int ir_intfnum; |
1105 | 1110 | ||
1106 | dev_dbg(&intf->dev, "%s called\n", __func__); | 1111 | dev_dbg(&intf->dev, "%s called\n", __func__); |
1107 | 1112 | ||
@@ -1110,13 +1115,11 @@ static int __devinit mceusb_dev_probe(struct usb_interface *intf, | |||
1110 | is_gen3 = mceusb_model[model].mce_gen3; | 1115 | is_gen3 = mceusb_model[model].mce_gen3; |
1111 | is_microsoft_gen1 = mceusb_model[model].mce_gen1; | 1116 | is_microsoft_gen1 = mceusb_model[model].mce_gen1; |
1112 | tx_mask_normal = mceusb_model[model].tx_mask_normal; | 1117 | tx_mask_normal = mceusb_model[model].tx_mask_normal; |
1113 | is_polaris = mceusb_model[model].is_polaris; | 1118 | ir_intfnum = mceusb_model[model].ir_intfnum; |
1114 | 1119 | ||
1115 | if (is_polaris) { | 1120 | /* There are multi-function devices with non-IR interfaces */ |
1116 | /* Interface 0 is IR */ | 1121 | if (idesc->desc.bInterfaceNumber != ir_intfnum) |
1117 | if (idesc->desc.bInterfaceNumber) | 1122 | return -ENODEV; |
1118 | return -ENODEV; | ||
1119 | } | ||
1120 | 1123 | ||
1121 | /* step through the endpoints to find first bulk in and out endpoint */ | 1124 | /* step through the endpoints to find first bulk in and out endpoint */ |
1122 | for (i = 0; i < idesc->desc.bNumEndpoints; ++i) { | 1125 | for (i = 0; i < idesc->desc.bNumEndpoints; ++i) { |