[media] dvb_usb_v2: register device even no remote keymap defined
It failed to register device when remote keymap was not set.
Fix it to register device even keymap is NULL. In that case
just skip remote registration.
Driver should set RC_MAP_EMPTY to enable remote in case of
there is remote receiver but default keymap is unknown.
Reported-by: pierigno <pierigno@gmail.com>
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
diff --git a/drivers/media/dvb/dvb-usb/af9015.c b/drivers/media/dvb/dvb-usb/af9015.c
index e48cb58..bbe1d33 100644
--- a/drivers/media/dvb/dvb-usb/af9015.c
+++ b/drivers/media/dvb/dvb-usb/af9015.c
@@ -1276,6 +1276,10 @@
}
}
+ /* load empty to enable rc */
+ if (!rc->map_name)
+ rc->map_name = RC_MAP_EMPTY;
+
rc->allowed_protos = RC_TYPE_NEC;
rc->query = af9015_rc_query;
rc->interval = 500;
diff --git a/drivers/media/dvb/dvb-usb/af9035.c b/drivers/media/dvb/dvb-usb/af9035.c
index 82b1ac7..79197f4 100644
--- a/drivers/media/dvb/dvb-usb/af9035.c
+++ b/drivers/media/dvb/dvb-usb/af9035.c
@@ -966,6 +966,10 @@
rc->query = af9035_rc_query;
rc->interval = 500;
+
+ /* load empty to enable rc */
+ if (!rc->map_name)
+ rc->map_name = RC_MAP_EMPTY;
}
return 0;
diff --git a/drivers/media/dvb/dvb-usb/dvb_usb.h b/drivers/media/dvb/dvb-usb/dvb_usb.h
index 6fcab07..773817b 100644
--- a/drivers/media/dvb/dvb-usb/dvb_usb.h
+++ b/drivers/media/dvb/dvb-usb/dvb_usb.h
@@ -124,7 +124,7 @@
* @bulk_mode: device supports bulk mode for rc (disable polling mode)
*/
struct dvb_usb_rc {
- char *map_name;
+ const char *map_name;
u64 allowed_protos;
int (*change_protocol)(struct rc_dev *dev, u64 rc_type);
int (*query) (struct dvb_usb_device *d);
diff --git a/drivers/media/dvb/dvb-usb/dvb_usb_core.c b/drivers/media/dvb/dvb-usb/dvb_usb_core.c
index aed7463..3224621 100644
--- a/drivers/media/dvb/dvb-usb/dvb_usb_core.c
+++ b/drivers/media/dvb/dvb-usb/dvb_usb_core.c
@@ -135,10 +135,15 @@
if (dvb_usbv2_disable_rc_polling || !d->props->get_rc_config)
return 0;
+ d->rc.map_name = d->rc_map;
ret = d->props->get_rc_config(d, &d->rc);
if (ret < 0)
goto err;
+ /* disable rc when there is no keymap defined */
+ if (!d->rc.map_name)
+ return 0;
+
dev = rc_allocate_device();
if (!dev) {
ret = -ENOMEM;
@@ -153,14 +158,11 @@
usb_to_input_id(d->udev, &dev->input_id);
/* TODO: likely RC-core should took const char * */
dev->driver_name = (char *) d->props->driver_name;
+ dev->map_name = d->rc.map_name;
dev->driver_type = d->rc.driver_type;
dev->allowed_protos = d->rc.allowed_protos;
dev->change_protocol = d->rc.change_protocol;
dev->priv = d;
- if (d->rc.map_name)
- dev->map_name = d->rc.map_name;
- else
- dev->map_name = d->rc_map;
ret = rc_register_device(dev);
if (ret < 0) {