Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6740a932 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

[media] tm6000: automatically load alsa and dvb modules



All devices should support alsa module. Devices with DVB will
auto-load the dvb module. This way, tm6000-based devices should
now have hot plugin.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 9f711a80
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -1052,6 +1052,33 @@ static void use_alternative_detection_method(struct tm6000_core *dev)
	       tm6000_boards[model].name, model);
}

#if defined(CONFIG_MODULES) && defined(MODULE)
static void request_module_async(struct work_struct *work)
{
	struct tm6000_core *dev = container_of(work, struct tm6000_core,
					       request_module_wk);

	request_module("tm6000-alsa");

	if (dev->caps.has_dvb)
		request_module("tm6000-dvb");
}

static void request_modules(struct tm6000_core *dev)
{
	INIT_WORK(&dev->request_module_wk, request_module_async);
	schedule_work(&dev->request_module_wk);
}

static void flush_request_modules(struct tm6000_core *dev)
{
	flush_work_sync(&dev->request_module_wk);
}
#else
#define request_modules(dev)
#define flush_request_modules(dev)
#endif /* CONFIG_MODULES */

static int tm6000_init_dev(struct tm6000_core *dev)
{
	struct v4l2_frequency f;
@@ -1114,6 +1141,8 @@ static int tm6000_init_dev(struct tm6000_core *dev)

	tm6000_ir_init(dev);

	request_modules(dev);

	mutex_unlock(&dev->lock);
	return 0;

@@ -1326,6 +1355,8 @@ static void tm6000_usb_disconnect(struct usb_interface *interface)

	printk(KERN_INFO "tm6000: disconnecting %s\n", dev->name);

	flush_request_modules(dev);

	tm6000_ir_fini(dev);

	if (dev->gpio.power_led) {
+3 −0
Original line number Diff line number Diff line
@@ -188,6 +188,9 @@ struct tm6000_core {
	/* Device Capabilities*/
	struct tm6000_capabilities	caps;

	/* Used to load alsa/dvb */
        struct work_struct		request_module_wk;

	/* Tuner configuration */
	int				tuner_type;		/* type of the tuner */
	int				tuner_addr;		/* tuner address */