aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <m.chehab@samsung.com>2014-07-27 16:28:48 -0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-07-27 16:37:01 -0400
commit5b8c8d41919ac4985dfacd31a860e4f00f52d3a6 (patch)
treecbc46244c00a92a312a95cbba57463cac0820e3e
parent9683e01effc9ab3eb3c4584a39a6b87dadf5f391 (diff)
[media] mceusb: select default keytable based on vendor
Some vendors have their on keymap table that are used on all (or almost all) models for that vendor. So, instead of specifying the keymap table per USB ID, let's use the Vendor ID's table by default. At the end, this will mean less code to be added when newer devices for those vendors are added. Of course, if rc_map is specified per board, it takes precedence. Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
-rw-r--r--drivers/media/rc/mceusb.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c
index 48a6a0826a77..45b0894288e5 100644
--- a/drivers/media/rc/mceusb.c
+++ b/drivers/media/rc/mceusb.c
@@ -241,7 +241,6 @@ static const struct mceusb_model mceusb_model[] = {
241 * remotes, but we should have something handy, 241 * remotes, but we should have something handy,
242 * to allow testing it 242 * to allow testing it
243 */ 243 */
244 .rc_map = RC_MAP_HAUPPAUGE,
245 .name = "Conexant Hybrid TV (cx231xx) MCE IR", 244 .name = "Conexant Hybrid TV (cx231xx) MCE IR",
246 }, 245 },
247 [CX_HYBRID_TV] = { 246 [CX_HYBRID_TV] = {
@@ -249,7 +248,6 @@ static const struct mceusb_model mceusb_model[] = {
249 .name = "Conexant Hybrid TV (cx231xx) MCE IR", 248 .name = "Conexant Hybrid TV (cx231xx) MCE IR",
250 }, 249 },
251 [HAUPPAUGE_CX_HYBRID_TV] = { 250 [HAUPPAUGE_CX_HYBRID_TV] = {
252 .rc_map = RC_MAP_HAUPPAUGE,
253 .no_tx = 1, /* eeprom says it has no tx */ 251 .no_tx = 1, /* eeprom says it has no tx */
254 .name = "Conexant Hybrid TV (cx231xx) MCE IR no TX", 252 .name = "Conexant Hybrid TV (cx231xx) MCE IR no TX",
255 }, 253 },
@@ -1200,8 +1198,10 @@ static void mceusb_flash_led(struct mceusb_dev *ir)
1200 mce_async_out(ir, FLASH_LED, sizeof(FLASH_LED)); 1198 mce_async_out(ir, FLASH_LED, sizeof(FLASH_LED));
1201} 1199}
1202 1200
1203static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir) 1201static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir,
1202 struct usb_interface *intf)
1204{ 1203{
1204 struct usb_device *udev = usb_get_dev(interface_to_usbdev(intf));
1205 struct device *dev = ir->dev; 1205 struct device *dev = ir->dev;
1206 struct rc_dev *rc; 1206 struct rc_dev *rc;
1207 int ret; 1207 int ret;
@@ -1235,8 +1235,19 @@ static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir)
1235 rc->tx_ir = mceusb_tx_ir; 1235 rc->tx_ir = mceusb_tx_ir;
1236 } 1236 }
1237 rc->driver_name = DRIVER_NAME; 1237 rc->driver_name = DRIVER_NAME;
1238 rc->map_name = mceusb_model[ir->model].rc_map ? 1238
1239 mceusb_model[ir->model].rc_map : RC_MAP_RC6_MCE; 1239 switch (le16_to_cpu(udev->descriptor.idVendor)) {
1240 case VENDOR_HAUPPAUGE:
1241 rc->map_name = RC_MAP_HAUPPAUGE;
1242 break;
1243 case VENDOR_PCTV:
1244 rc->map_name = RC_MAP_PINNACLE_PCTV_HD;
1245 break;
1246 default:
1247 rc->map_name = RC_MAP_RC6_MCE;
1248 }
1249 if (mceusb_model[ir->model].rc_map)
1250 rc->map_name = mceusb_model[ir->model].rc_map;
1240 1251
1241 ret = rc_register_device(rc); 1252 ret = rc_register_device(rc);
1242 if (ret < 0) { 1253 if (ret < 0) {
@@ -1351,7 +1362,7 @@ static int mceusb_dev_probe(struct usb_interface *intf,
1351 snprintf(name + strlen(name), sizeof(name) - strlen(name), 1362 snprintf(name + strlen(name), sizeof(name) - strlen(name),
1352 " %s", buf); 1363 " %s", buf);
1353 1364
1354 ir->rc = mceusb_init_rc_dev(ir); 1365 ir->rc = mceusb_init_rc_dev(ir, intf);
1355 if (!ir->rc) 1366 if (!ir->rc)
1356 goto rc_dev_fail; 1367 goto rc_dev_fail;
1357 1368