linux-old/drivers/sound/adlib_card.c
<<
>>
Prefs
   1/*
   2 * sound/adlib_card.c
   3 *
   4 * Detection routine for the AdLib card.
   5 *
   6 * Copyright (C) by Hannu Savolainen 1993-1997
   7 *
   8 * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
   9 * Version 2 (June 1991). See the "COPYING" file distributed with this software
  10 * for more info.
  11 */
  12
  13#include <linux/module.h>
  14#include <linux/init.h>
  15
  16#include "sound_config.h"
  17
  18#include "opl3.h"
  19
  20static void __init attach_adlib_card(struct address_info *hw_config)
  21{
  22        hw_config->slots[0] = opl3_init(hw_config->io_base, hw_config->osp, THIS_MODULE);
  23}
  24
  25static int __init probe_adlib(struct address_info *hw_config)
  26{
  27        return opl3_detect(hw_config->io_base, hw_config->osp);
  28}
  29
  30static struct address_info cfg;
  31
  32static int __initdata io = -1;
  33
  34MODULE_PARM(io, "i");
  35
  36static int __init init_adlib(void)
  37{
  38        cfg.io_base = io;
  39
  40        if (cfg.io_base == -1) {
  41                printk(KERN_ERR "adlib: must specify I/O address.\n");
  42                return -EINVAL;
  43        }
  44        if (probe_adlib(&cfg) == 0)
  45                return -ENODEV;
  46        attach_adlib_card(&cfg);
  47
  48        return 0;
  49}
  50
  51static void __exit cleanup_adlib(void)
  52{
  53        sound_unload_synthdev(cfg.slots[0]);
  54        
  55}
  56
  57module_init(init_adlib);
  58module_exit(cleanup_adlib);
  59
  60#ifndef MODULE
  61static int __init setup_adlib(char *str)
  62{
  63        /* io */
  64        int ints[2];
  65        str = get_options(str, ARRAY_SIZE(ints), ints);
  66        
  67        io = ints[1];
  68
  69        return 1;
  70}
  71__setup("adlib=", setup_adlib);
  72#endif
  73MODULE_LICENSE("GPL");
  74