Skip to content

Commit

Permalink
[media] tm6000: automatically load alsa and dvb modules
Browse files Browse the repository at this point in the history
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: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Mauro Carvalho Chehab committed Nov 30, 2011
1 parent 9f711a8 commit 6740a93
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
31 changes: 31 additions & 0 deletions drivers/media/video/tm6000/tm6000-cards.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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) {
Expand Down
3 changes: 3 additions & 0 deletions drivers/media/video/tm6000/tm6000.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit 6740a93

Please sign in to comment.