Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
2612989b
Commit
2612989b
authored
Apr 03, 2003
by
Adam Belay
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://linux.bkbits.net/linux-2.5
into neo.rr.com:/home/ambx1/linux/bk/linus-2.5
parents
2c12e127
3d991731
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
390 additions
and
313 deletions
+390
-313
drivers/isdn/hisax/hisax_fcpcipnp.c
drivers/isdn/hisax/hisax_fcpcipnp.c
+2
-2
drivers/pnp/card.c
drivers/pnp/card.c
+46
-26
drivers/pnp/core.c
drivers/pnp/core.c
+1
-1
drivers/pnp/manager.c
drivers/pnp/manager.c
+2
-4
drivers/pnp/pnpbios/core.c
drivers/pnp/pnpbios/core.c
+102
-35
drivers/pnp/pnpbios/proc.c
drivers/pnp/pnpbios/proc.c
+25
-40
include/linux/pnp.h
include/linux/pnp.h
+4
-3
include/linux/pnpbios.h
include/linux/pnpbios.h
+10
-1
sound/isa/als100.c
sound/isa/als100.c
+5
-4
sound/isa/sb/es968.c
sound/isa/sb/es968.c
+4
-4
sound/isa/sb/sb16.c
sound/isa/sb/sb16.c
+187
-191
sound/oss/sb_card.c
sound/oss/sb_card.c
+1
-1
sound/oss/sb_card.h
sound/oss/sb_card.h
+1
-1
No files found.
drivers/isdn/hisax/hisax_fcpcipnp.c
View file @
2612989b
...
...
@@ -909,7 +909,7 @@ static struct pci_driver fcpci_driver = {
#ifdef CONFIG_PNP_CARD
static
int
__devinit
fcpnp_probe
(
struct
pnp_card
*
card
,
const
struct
pnp_card_id
*
card_id
)
const
struct
pnp_card_
device_
id
*
card_id
)
{
struct
fritz_adapter
*
adapter
;
struct
pnp_dev
*
pnp_dev
;
...
...
@@ -955,7 +955,7 @@ static void __devexit fcpnp_remove(struct pnp_card *pcard)
delete_adapter
(
adapter
);
}
static
struct
pnp_card_id
fcpnp_ids
[]
__devinitdata
=
{
static
struct
pnp_card_
device_
id
fcpnp_ids
[]
__devinitdata
=
{
{
.
id
=
"AVM0900"
,
.
driver_data
=
(
unsigned
long
)
"Fritz!Card PnP"
,
.
devs
=
{
{
"AVM0900"
}
},
...
...
drivers/pnp/card.c
View file @
2612989b
...
...
@@ -19,11 +19,12 @@
#include "base.h"
LIST_HEAD
(
pnp_cards
);
LIST_HEAD
(
pnp_card_drivers
);
static
const
struct
pnp_card_id
*
match_card
(
struct
pnp_card_driver
*
drv
,
struct
pnp_card
*
card
)
static
const
struct
pnp_card_
device_
id
*
match_card
(
struct
pnp_card_driver
*
drv
,
struct
pnp_card
*
card
)
{
const
struct
pnp_card_id
*
drv_id
=
drv
->
id_table
;
const
struct
pnp_card_
device_
id
*
drv_id
=
drv
->
id_table
;
while
(
*
drv_id
->
id
){
if
(
compare_pnp_id
(
card
->
id
,
drv_id
->
id
))
return
drv_id
;
...
...
@@ -32,21 +33,41 @@ static const struct pnp_card_id * match_card(struct pnp_card_driver * drv, struc
return
NULL
;
}
static
void
generic_
card_remove
(
struct
pnp_dev
*
dev
)
static
void
card_remove
(
struct
pnp_dev
*
dev
)
{
dev
->
card_link
=
NULL
;
}
static
void
generic_
card_remove_first
(
struct
pnp_dev
*
dev
)
static
void
card_remove_first
(
struct
pnp_dev
*
dev
)
{
struct
pnp_card_driver
*
drv
=
to_pnp_card_driver
(
dev
->
driver
);
if
(
!
dev
->
card
||
!
drv
)
return
;
if
(
drv
->
remove
)
drv
->
remove
(
dev
->
card_link
);
drv
->
link
.
remove
=
&
generic_
card_remove
;
drv
->
link
.
remove
=
&
card_remove
;
kfree
(
dev
->
card_link
);
generic_card_remove
(
dev
);
card_remove
(
dev
);
}
static
int
card_probe
(
struct
pnp_card
*
card
,
struct
pnp_card_driver
*
drv
)
{
const
struct
pnp_card_device_id
*
id
=
match_card
(
drv
,
card
);
if
(
id
)
{
struct
pnp_card_link
*
clink
=
pnp_alloc
(
sizeof
(
struct
pnp_card_link
));
if
(
!
clink
)
return
0
;
clink
->
card
=
card
;
clink
->
driver
=
drv
;
if
(
drv
->
probe
)
{
if
(
drv
->
probe
(
clink
,
id
)
>=
0
)
return
1
;
else
kfree
(
clink
);
}
else
return
1
;
}
return
0
;
}
/**
...
...
@@ -103,7 +124,7 @@ static void pnp_release_card(struct device *dmdev)
int
pnp_add_card
(
struct
pnp_card
*
card
)
{
int
error
;
struct
list_head
*
pos
;
struct
list_head
*
pos
,
*
temp
;
if
(
!
card
||
!
card
->
protocol
)
return
-
EINVAL
;
...
...
@@ -112,6 +133,7 @@ int pnp_add_card(struct pnp_card * card)
card
->
dev
.
bus
=
NULL
;
card
->
dev
.
release
=
&
pnp_release_card
;
error
=
device_register
(
&
card
->
dev
);
if
(
error
==
0
)
{
spin_lock
(
&
pnp_lock
);
list_add_tail
(
&
card
->
global_list
,
&
pnp_cards
);
...
...
@@ -125,6 +147,12 @@ int pnp_add_card(struct pnp_card * card)
struct
pnp_dev
*
dev
=
card_to_pnp_dev
(
pos
);
__pnp_add_device
(
dev
);
}
/* match with card drivers */
list_for_each_safe
(
pos
,
temp
,
&
pnp_card_drivers
){
struct
pnp_card_driver
*
drv
=
list_entry
(
pos
,
struct
pnp_card_driver
,
global_list
);
card_probe
(
card
,
drv
);
}
}
else
pnp_err
(
"sysfs failure, card '%s' will be unavailable"
,
card
->
dev
.
bus_id
);
return
error
;
...
...
@@ -248,9 +276,9 @@ void pnp_release_card_device(struct pnp_dev * dev)
if
(
!
drv
)
return
;
down_write
(
&
dev
->
dev
.
bus
->
subsys
.
rwsem
);
drv
->
link
.
remove
=
&
generic_
card_remove
;
drv
->
link
.
remove
=
&
card_remove
;
device_release_driver
(
&
dev
->
dev
);
drv
->
link
.
remove
=
&
generic_
card_remove_first
;
drv
->
link
.
remove
=
&
card_remove_first
;
up_write
(
&
dev
->
dev
.
bus
->
subsys
.
rwsem
);
}
...
...
@@ -268,25 +296,16 @@ int pnp_register_card_driver(struct pnp_card_driver * drv)
drv
->
link
.
id_table
=
NULL
;
/* this will disable auto matching */
drv
->
link
.
flags
=
drv
->
flags
;
drv
->
link
.
probe
=
NULL
;
drv
->
link
.
remove
=
&
generic_
card_remove_first
;
drv
->
link
.
remove
=
&
card_remove_first
;
spin_lock
(
&
pnp_lock
);
list_add_tail
(
&
drv
->
global_list
,
&
pnp_card_drivers
);
spin_unlock
(
&
pnp_lock
);
pnp_register_driver
(
&
drv
->
link
);
list_for_each_safe
(
pos
,
temp
,
&
pnp_cards
){
struct
pnp_card
*
card
=
list_entry
(
pos
,
struct
pnp_card
,
global_list
);
const
struct
pnp_card_id
*
id
=
match_card
(
drv
,
card
);
if
(
id
)
{
struct
pnp_card_link
*
clink
=
pnp_alloc
(
sizeof
(
struct
pnp_card_link
));
if
(
!
clink
)
continue
;
clink
->
card
=
card
;
clink
->
driver
=
drv
;
if
(
drv
->
probe
)
{
if
(
drv
->
probe
(
clink
,
id
)
>=
0
)
count
++
;
}
else
count
++
;
}
count
+=
card_probe
(
card
,
drv
);
}
return
count
;
}
...
...
@@ -298,9 +317,10 @@ int pnp_register_card_driver(struct pnp_card_driver * drv)
void
pnp_unregister_card_driver
(
struct
pnp_card_driver
*
drv
)
{
spin_lock
(
&
pnp_lock
);
list_del
(
&
drv
->
global_list
);
spin_unlock
(
&
pnp_lock
);
pnp_unregister_driver
(
&
drv
->
link
);
pnp_dbg
(
"the card driver '%s' has been unregistered"
,
drv
->
name
);
}
EXPORT_SYMBOL
(
pnp_add_card
);
...
...
drivers/pnp/core.c
View file @
2612989b
...
...
@@ -170,7 +170,7 @@ void pnp_remove_device(struct pnp_dev *dev)
static
int
__init
pnp_init
(
void
)
{
printk
(
KERN_INFO
"Linux Plug and Play Support v0.9
5
(c) Adam Belay
\n
"
);
printk
(
KERN_INFO
"Linux Plug and Play Support v0.9
6
(c) Adam Belay
\n
"
);
return
bus_register
(
&
pnp_bus_type
);
}
...
...
drivers/pnp/manager.c
View file @
2612989b
...
...
@@ -632,8 +632,7 @@ int pnp_activate_dev(struct pnp_dev *dev)
if
(
!
dev
)
return
-
EINVAL
;
if
(
dev
->
active
)
{
pnp_info
(
"res: The PnP device '%s' is already active."
,
dev
->
dev
.
bus_id
);
return
-
EBUSY
;
return
0
;
/* the device is already active */
}
/* If this condition is true, advanced configuration failed, we need to get this device up and running
* so we use the simple config engine which ignores cold conflicts, this of course may lead to new failures */
...
...
@@ -698,8 +697,7 @@ int pnp_disable_dev(struct pnp_dev *dev)
if
(
!
dev
)
return
-
EINVAL
;
if
(
!
dev
->
active
)
{
pnp_info
(
"res: The PnP device '%s' is already disabled."
,
dev
->
dev
.
bus_id
);
return
-
EINVAL
;
return
0
;
/* the device is already disabled */
}
if
(
dev
->
status
!=
PNP_READY
){
pnp_info
(
"res: Disable failed becuase the PnP device '%s' is busy."
,
dev
->
dev
.
bus_id
);
...
...
drivers/pnp/pnpbios/core.c
View file @
2612989b
...
...
@@ -32,6 +32,18 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* Change Log
*
* Adam Belay - <ambx1@neo.rr.com> - March 16, 2003
* rev 1.01 Only call pnp_bios_dev_node_info once
* Added pnpbios_print_status
* Added several new error messages and info messages
* Added pnpbios_interface_attach_device
* integrated core and proc init system
* Introduced PNPMODE flags
* Removed some useless includes
*/
#include <linux/types.h>
#include <linux/module.h>
...
...
@@ -46,9 +58,7 @@
#include <linux/mm.h>
#include <linux/smp.h>
#include <asm/desc.h>
#include <linux/ioport.h>
#include <linux/slab.h>
#include <linux/pci.h>
#include <linux/kmod.h>
#include <linux/completion.h>
#include <linux/spinlock.h>
...
...
@@ -93,6 +103,7 @@ static struct {
}
pnp_bios_callpoint
;
static
union
pnp_bios_expansion_header
*
pnp_bios_hdr
=
NULL
;
struct
pnp_dev_node_info
node_info
;
/* The PnP BIOS entries in the GDT */
#define PNP_GDT (GDT_ENTRY_PNPBIOS_BASE * 8)
...
...
@@ -237,9 +248,46 @@ static inline u16 call_pnp_bios(u16 func, u16 arg1, u16 arg2, u16 arg3,
*
*/
static
void
pnpbios_
warn_unexpected
_status
(
const
char
*
module
,
u16
status
)
static
void
pnpbios_
print
_status
(
const
char
*
module
,
u16
status
)
{
printk
(
KERN_ERR
"PnPBIOS: %s: Unexpected status 0x%x
\n
"
,
module
,
status
);
switch
(
status
)
{
case
PNP_SUCCESS
:
printk
(
KERN_ERR
"PnPBIOS: %s: function successful
\n
"
,
module
);
case
PNP_NOT_SET_STATICALLY
:
printk
(
KERN_ERR
"PnPBIOS: %s: unable to set static resources
\n
"
,
module
);
case
PNP_UNKNOWN_FUNCTION
:
printk
(
KERN_ERR
"PnPBIOS: %s: invalid function number passed
\n
"
,
module
);
case
PNP_FUNCTION_NOT_SUPPORTED
:
printk
(
KERN_ERR
"PnPBIOS: %s: function not supported on this system
\n
"
,
module
);
case
PNP_INVALID_HANDLE
:
printk
(
KERN_ERR
"PnPBIOS: %s: invalid handle
\n
"
,
module
);
case
PNP_BAD_PARAMETER
:
printk
(
KERN_ERR
"PnPBIOS: %s: invalid parameters were passed
\n
"
,
module
);
case
PNP_SET_FAILED
:
printk
(
KERN_ERR
"PnPBIOS: %s: unable to set resources
\n
"
,
module
);
case
PNP_EVENTS_NOT_PENDING
:
printk
(
KERN_ERR
"PnPBIOS: %s: no events are pending
\n
"
,
module
);
case
PNP_SYSTEM_NOT_DOCKED
:
printk
(
KERN_ERR
"PnPBIOS: %s: the system is not docked
\n
"
,
module
);
case
PNP_NO_ISA_PNP_CARDS
:
printk
(
KERN_ERR
"PnPBIOS: %s: no isapnp cards are installed on this system
\n
"
,
module
);
case
PNP_UNABLE_TO_DETERMINE_DOCK_CAPABILITIES
:
printk
(
KERN_ERR
"PnPBIOS: %s: cannot determine the capabilities of the docking station
\n
"
,
module
);
case
PNP_CONFIG_CHANGE_FAILED_NO_BATTERY
:
printk
(
KERN_ERR
"PnPBIOS: %s: unable to undock, the system does not have a battery
\n
"
,
module
);
case
PNP_CONFIG_CHANGE_FAILED_RESOURCE_CONFLICT
:
printk
(
KERN_ERR
"PnPBIOS: %s: could not dock due to resource conflicts
\n
"
,
module
);
case
PNP_BUFFER_TOO_SMALL
:
printk
(
KERN_ERR
"PnPBIOS: %s: the buffer passed is too small
\n
"
,
module
);
case
PNP_USE_ESCD_SUPPORT
:
printk
(
KERN_ERR
"PnPBIOS: %s: use ESCD instead
\n
"
,
module
);
case
PNP_MESSAGE_NOT_SUPPORTED
:
printk
(
KERN_ERR
"PnPBIOS: %s: the message is unsupported
\n
"
,
module
);
case
PNP_HARDWARE_ERROR
:
printk
(
KERN_ERR
"PnPBIOS: %s: a hardware failure has occured
\n
"
,
module
);
default:
printk
(
KERN_ERR
"PnPBIOS: %s: unexpected status 0x%x
\n
"
,
module
,
status
);
}
}
void
*
pnpbios_kmalloc
(
size_t
size
,
int
f
)
...
...
@@ -299,7 +347,7 @@ int pnp_bios_dev_node_info(struct pnp_dev_node_info *data)
{
int
status
=
__pnp_bios_dev_node_info
(
data
);
if
(
status
)
pnpbios_
warn_unexpected
_status
(
"dev_node_info"
,
status
);
pnpbios_
print
_status
(
"dev_node_info"
,
status
);
return
status
;
}
...
...
@@ -334,7 +382,7 @@ int pnp_bios_get_dev_node(u8 *nodenum, char boot, struct pnp_bios_node *data)
int
status
;
status
=
__pnp_bios_get_dev_node
(
nodenum
,
boot
,
data
);
if
(
status
)
pnpbios_
warn_unexpected
_status
(
"get_dev_node"
,
status
);
pnpbios_
print
_status
(
"get_dev_node"
,
status
);
return
status
;
}
...
...
@@ -362,7 +410,7 @@ int pnp_bios_set_dev_node(u8 nodenum, char boot, struct pnp_bios_node *data)
int
status
;
status
=
__pnp_bios_set_dev_node
(
nodenum
,
boot
,
data
);
if
(
status
)
{
pnpbios_
warn_unexpected
_status
(
"set_dev_node"
,
status
);
pnpbios_
print
_status
(
"set_dev_node"
,
status
);
return
status
;
}
if
(
!
boot
)
{
/* Update devlist */
...
...
@@ -452,7 +500,7 @@ int pnp_bios_get_stat_res(char *info)
int
status
;
status
=
__pnp_bios_get_stat_res
(
info
);
if
(
status
)
pnpbios_
warn_unexpected
_status
(
"get_stat_res"
,
status
);
pnpbios_
print
_status
(
"get_stat_res"
,
status
);
return
status
;
}
...
...
@@ -489,7 +537,7 @@ int pnp_bios_isapnp_config(struct pnp_isa_config_struc *data)
int
status
;
status
=
__pnp_bios_isapnp_config
(
data
);
if
(
status
)
pnpbios_
warn_unexpected
_status
(
"isapnp_config"
,
status
);
pnpbios_
print
_status
(
"isapnp_config"
,
status
);
return
status
;
}
...
...
@@ -511,7 +559,7 @@ int pnp_bios_escd_info(struct escd_info_struc *data)
int
status
;
status
=
__pnp_bios_escd_info
(
data
);
if
(
status
)
pnpbios_
warn_unexpected
_status
(
"escd_info"
,
status
);
pnpbios_
print
_status
(
"escd_info"
,
status
);
return
status
;
}
...
...
@@ -534,7 +582,7 @@ int pnp_bios_read_escd(char *data, u32 nvram_base)
int
status
;
status
=
__pnp_bios_read_escd
(
data
,
nvram_base
);
if
(
status
)
pnpbios_
warn_unexpected
_status
(
"read_escd"
,
status
);
pnpbios_
print
_status
(
"read_escd"
,
status
);
return
status
;
}
...
...
@@ -658,7 +706,7 @@ static int pnp_dock_thread(void * unused)
d
=
1
;
break
;
default:
pnpbios_
warn_unexpected
_status
(
"pnp_dock_thread"
,
status
);
pnpbios_
print
_status
(
"pnp_dock_thread"
,
status
);
continue
;
}
if
(
d
!=
docked
)
...
...
@@ -753,19 +801,17 @@ static void node_id_data_to_dev(unsigned char *p, struct pnp_bios_node *node, st
static
int
pnpbios_get_resources
(
struct
pnp_dev
*
dev
,
struct
pnp_resource_table
*
res
)
{
struct
pnp_dev_node_info
node_info
;
u8
nodenum
=
dev
->
number
;
struct
pnp_bios_node
*
node
;
/* just in case */
if
(
!
pnpbios_is_dynamic
(
dev
))
return
-
EPERM
;
if
(
pnp_bios_dev_node_info
(
&
node_info
)
!=
0
)
return
-
ENODEV
;
node
=
pnpbios_kmalloc
(
node_info
.
max_node_size
,
GFP_KERNEL
);
if
(
!
node
)
return
-
1
;
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
0
,
node
))
{
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
PNPMODE_DYNAMIC
,
node
))
{
kfree
(
node
);
return
-
ENODEV
;
}
...
...
@@ -777,7 +823,6 @@ static int pnpbios_get_resources(struct pnp_dev * dev, struct pnp_resource_table
static
int
pnpbios_set_resources
(
struct
pnp_dev
*
dev
,
struct
pnp_resource_table
*
res
)
{
struct
pnp_dev_node_info
node_info
;
u8
nodenum
=
dev
->
number
;
struct
pnp_bios_node
*
node
;
int
ret
;
...
...
@@ -785,18 +830,17 @@ static int pnpbios_set_resources(struct pnp_dev * dev, struct pnp_resource_table
/* just in case */
if
(
!
pnpbios_is_dynamic
(
dev
))
return
-
EPERM
;
if
(
pnp_bios_dev_node_info
(
&
node_info
)
!=
0
)
return
-
ENODEV
;
node
=
pnpbios_kmalloc
(
node_info
.
max_node_size
,
GFP_KERNEL
);
if
(
!
node
)
return
-
1
;
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
1
,
node
))
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
PNPMODE_STATIC
,
node
))
return
-
ENODEV
;
if
(
!
pnp_write_resources
((
char
*
)
node
->
data
,(
char
*
)
node
->
data
+
node
->
size
,
res
)){
kfree
(
node
);
return
-
1
;
}
ret
=
pnp_bios_set_dev_node
(
node
->
handle
,
(
char
)
0
,
node
);
ret
=
pnp_bios_set_dev_node
(
node
->
handle
,
(
char
)
PNPMODE_DYNAMIC
,
node
);
kfree
(
node
);
if
(
ret
>
0
)
ret
=
-
1
;
...
...
@@ -805,23 +849,18 @@ static int pnpbios_set_resources(struct pnp_dev * dev, struct pnp_resource_table
static
int
pnpbios_disable_resources
(
struct
pnp_dev
*
dev
)
{
struct
pnp_dev_node_info
node_info
;
struct
pnp_bios_node
*
node
;
int
ret
;
/* just in case */
if
(
dev
->
flags
&
PNPBIOS_NO_DISABLE
||
!
pnpbios_is_dynamic
(
dev
))
return
-
EPERM
;
if
(
!
dev
||
!
dev
->
active
)
return
-
EINVAL
;
if
(
pnp_bios_dev_node_info
(
&
node_info
)
!=
0
)
return
-
ENODEV
;
/* the value of this will be zero */
node
=
pnpbios_kmalloc
(
node_info
.
max_node_size
,
GFP_KERNEL
);
if
(
!
node
)
return
-
ENOMEM
;
ret
=
pnp_bios_set_dev_node
(
dev
->
number
,
(
char
)
0
,
node
);
dev
->
active
=
0
;
ret
=
pnp_bios_set_dev_node
(
dev
->
number
,
(
char
)
PNPMODE_DYNAMIC
,
node
);
kfree
(
node
);
if
(
ret
>
0
)
ret
=
-
1
;
...
...
@@ -879,6 +918,8 @@ static int insert_device(struct pnp_dev *dev, struct pnp_bios_node * node)
dev
->
protocol
=
&
pnpbios_protocol
;
pnp_add_device
(
dev
);
pnpbios_interface_attach_device
(
node
);
return
0
;
}
...
...
@@ -903,8 +944,16 @@ static void __init build_devlist(void)
for
(
nodenum
=
0
;
nodenum
<
0xff
;
)
{
u8
thisnodenum
=
nodenum
;
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
0
,
node
))
break
;
/* eventually we will want to use PNPMODE_STATIC here but for now
* dynamic will help us catch buggy bioses to add to the blacklist.
*/
if
(
!
pnpbios_dont_use_current_config
)
{
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
PNPMODE_DYNAMIC
,
node
))
break
;
}
else
{
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
(
char
)
PNPMODE_STATIC
,
node
))
break
;
}
nodes_got
++
;
dev
=
pnpbios_kmalloc
(
sizeof
(
struct
pnp_dev
),
GFP_KERNEL
);
if
(
!
dev
)
...
...
@@ -972,7 +1021,8 @@ int __init pnpbios_init(void)
if
(
pnpbios_disabled
||
(
dmi_broken
&
BROKEN_PNP_BIOS
))
{
printk
(
KERN_INFO
"PnPBIOS: Disabled
\n
"
);
return
-
ENODEV
;
}
}
else
printk
(
KERN_INFO
"PnPBIOS: Scanning system for PnP BIOS support...
\n
"
);
/*
* Search the defined area (0xf0000-0xffff0) for a valid PnP BIOS
...
...
@@ -1016,17 +1066,34 @@ int __init pnpbios_init(void)
}
break
;
}
if
(
!
pnp_bios_present
())
if
(
!
pnp_bios_present
())
{
printk
(
KERN_INFO
"PnPBIOS: A PnP BIOS was not detected.
\n
"
);
return
-
ENODEV
;
}
/*
* we found a pnpbios, now let's load the rest of the driver
*/
/* read the node info */
if
(
pnp_bios_dev_node_info
(
&
node_info
))
{
printk
(
KERN_ERR
"PnPBIOS: Unable to get node info. Aborting.
\n
"
);
return
-
EIO
;
}
/* register with the pnp layer */
pnp_register_protocol
(
&
pnpbios_protocol
);
build_devlist
();
/*if ( ! dont_reserve_resources )*/
/*reserve_resources();*/
#ifdef CONFIG_PROC_FS
/* start the proc interface */
r
=
pnpbios_proc_init
();
if
(
r
)
return
r
;
#endif
/* scan for pnpbios devices */
build_devlist
();
return
0
;
}
...
...
drivers/pnp/pnpbios/proc.c
View file @
2612989b
...
...
@@ -31,7 +31,6 @@
static
struct
proc_dir_entry
*
proc_pnp
=
NULL
;
static
struct
proc_dir_entry
*
proc_pnp_boot
=
NULL
;
static
struct
pnp_dev_node_info
node_info
;
static
int
proc_read_pnpconfig
(
char
*
buf
,
char
**
start
,
off_t
pos
,
int
count
,
int
*
eof
,
void
*
data
)
...
...
@@ -136,7 +135,7 @@ static int proc_read_devices(char *buf, char **start, off_t pos,
/* 26 = the number of characters per line sprintf'ed */
if
((
p
-
buf
+
26
)
>
count
)
break
;
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
1
,
node
))
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
PNPMODE_STATIC
,
node
))
break
;
p
+=
sprintf
(
p
,
"%02x
\t
%08x
\t
%02x:%02x:%02x
\t
%04x
\n
"
,
node
->
handle
,
node
->
eisa_id
,
...
...
@@ -193,6 +192,30 @@ static int proc_write_node(struct file *file, const char *buf,
return
count
;
}
int
pnpbios_interface_attach_device
(
struct
pnp_bios_node
*
node
)
{
char
name
[
3
];
struct
proc_dir_entry
*
ent
;
sprintf
(
name
,
"%02x"
,
node
->
handle
);
if
(
!
pnpbios_dont_use_current_config
)
{
ent
=
create_proc_entry
(
name
,
0
,
proc_pnp
);
if
(
ent
)
{
ent
->
read_proc
=
proc_read_node
;
ent
->
write_proc
=
proc_write_node
;
ent
->
data
=
(
void
*
)(
long
)(
node
->
handle
);
}
}
ent
=
create_proc_entry
(
name
,
0
,
proc_pnp_boot
);
if
(
ent
)
{
ent
->
read_proc
=
proc_read_node
;
ent
->
write_proc
=
proc_write_node
;
ent
->
data
=
(
void
*
)(
long
)(
node
->
handle
+
0x100
);
return
0
;
}
return
-
EIO
;
}
/*
* When this is called, pnpbios functions are assumed to
* work and the pnpbios_dont_use_current_config flag
...
...
@@ -200,14 +223,6 @@ static int proc_write_node(struct file *file, const char *buf,
*/
int
__init
pnpbios_proc_init
(
void
)
{
struct
pnp_bios_node
*
node
;
struct
proc_dir_entry
*
ent
;
char
name
[
3
];
u8
nodenum
;
if
(
pnp_bios_dev_node_info
(
&
node_info
))
return
-
EIO
;
proc_pnp
=
proc_mkdir
(
"pnp"
,
proc_bus
);
if
(
!
proc_pnp
)
return
-
EIO
;
...
...
@@ -219,36 +234,6 @@ int __init pnpbios_proc_init( void )
create_proc_read_entry
(
"escd_info"
,
0
,
proc_pnp
,
proc_read_escdinfo
,
NULL
);
create_proc_read_entry
(
"escd"
,
S_IRUSR
,
proc_pnp
,
proc_read_escd
,
NULL
);
create_proc_read_entry
(
"legacy_device_resources"
,
0
,
proc_pnp
,
proc_read_legacyres
,
NULL
);
node
=
pnpbios_kmalloc
(
node_info
.
max_node_size
,
GFP_KERNEL
);
if
(
!
node
)
return
-
ENOMEM
;
for
(
nodenum
=
0
;
nodenum
<
0xff
;
)
{
u8
thisnodenum
=
nodenum
;
if
(
pnp_bios_get_dev_node
(
&
nodenum
,
1
,
node
)
!=
0
)
break
;
sprintf
(
name
,
"%02x"
,
node
->
handle
);
if
(
!
pnpbios_dont_use_current_config
)
{
ent
=
create_proc_entry
(
name
,
0
,
proc_pnp
);
if
(
ent
)
{
ent
->
read_proc
=
proc_read_node
;
ent
->
write_proc
=
proc_write_node
;
ent
->
data
=
(
void
*
)(
long
)(
node
->
handle
);
}
}
ent
=
create_proc_entry
(
name
,
0
,
proc_pnp_boot
);
if
(
ent
)
{
ent
->
read_proc
=
proc_read_node
;
ent
->
write_proc
=
proc_write_node
;
ent
->
data
=
(
void
*
)(
long
)(
node
->
handle
+
0x100
);
}
if
(
nodenum
<=
thisnodenum
)
{
printk
(
KERN_ERR
"%s Node number 0x%x is out of sequence following node 0x%x. Aborting.
\n
"
,
"PnPBIOS: proc_init:"
,
(
unsigned
int
)
nodenum
,
(
unsigned
int
)
thisnodenum
);
break
;
}
}
kfree
(
node
);
return
0
;
}
...
...
include/linux/pnp.h
View file @
2612989b
...
...
@@ -295,7 +295,7 @@ struct pnp_device_id {
unsigned
long
driver_data
;
/* data private to the driver */
};
struct
pnp_card_id
{
struct
pnp_card_
device_
id
{
char
id
[
PNP_ID_LEN
];
unsigned
long
driver_data
;
/* data private to the driver */
struct
{
...
...
@@ -315,10 +315,11 @@ struct pnp_driver {
#define to_pnp_driver(drv) container_of(drv, struct pnp_driver, driver)
struct
pnp_card_driver
{
struct
list_head
global_list
;
char
*
name
;
const
struct
pnp_card_id
*
id_table
;
const
struct
pnp_card_
device_
id
*
id_table
;
unsigned
int
flags
;
int
(
*
probe
)
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_id
*
card_id
);
int
(
*
probe
)
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_
device_
id
*
card_id
);
void
(
*
remove
)
(
struct
pnp_card_link
*
card
);
struct
pnp_driver
link
;
};
...
...
include/linux/pnpbios.h
View file @
2612989b
...
...
@@ -29,7 +29,7 @@
#include <linux/pci.h>
/*
*
Status codes (warnings and errors)
*
Return codes
*/
#define PNP_SUCCESS 0x00
#define PNP_NOT_SET_STATICALLY 0x7f
...
...
@@ -75,6 +75,7 @@
#define PNPMSG_POWER_OFF 0x41
#define PNPMSG_PNP_OS_ACTIVE 0x42
#define PNPMSG_PNP_OS_INACTIVE 0x43
/*
* Plug and Play BIOS flags
*/
...
...
@@ -88,6 +89,12 @@
#define pnpbios_is_static(x) (((x)->flags & 0x0100) == 0x0000)
#define pnpbios_is_dynamic(x) ((x)->flags & 0x0080)
/*
* Function Parameters
*/
#define PNPMODE_STATIC 1
#define PNPMODE_DYNAMIC 0
/* 0x8000 through 0xffff are OEM defined */
#pragma pack(1)
...
...
@@ -125,8 +132,10 @@ struct pnp_bios_node {
/* non-exported */
extern
int
pnpbios_dont_use_current_config
;
extern
struct
pnp_dev_node_info
node_info
;
extern
void
*
pnpbios_kmalloc
(
size_t
size
,
int
f
);
extern
int
pnpbios_init
(
void
);
extern
int
pnpbios_interface_attach_device
(
struct
pnp_bios_node
*
node
);
extern
int
pnpbios_proc_init
(
void
);
extern
void
pnpbios_proc_exit
(
void
);
...
...
sound/isa/als100.c
View file @
2612989b
...
...
@@ -98,7 +98,7 @@ struct snd_card_als100 {
struct
pnp_dev
*
devopl
;
};
static
struct
pnp_card_id
snd_als100_pnpids
[]
__devinitdata
=
{
static
struct
pnp_card_
device_
id
snd_als100_pnpids
[]
__devinitdata
=
{
/* ALS100 - PRO16PNP */
{
.
id
=
"ALS0001"
,
.
devs
=
{
{
"@@@0001"
},
{
"@X@0001"
},
{
"@H@0001"
},
}
},
/* ALS110 - MF1000 - Digimate 3D Sound */
...
...
@@ -118,7 +118,7 @@ MODULE_DEVICE_TABLE(pnp_card, snd_als100_pnpids);
static
int
__devinit
snd_card_als100_isapnp
(
int
dev
,
struct
snd_card_als100
*
acard
,
struct
pnp_card_link
*
card
,
const
struct
pnp_card_id
*
id
)
const
struct
pnp_card_
device_
id
*
id
)
{
struct
pnp_dev
*
pdev
;
struct
pnp_resource_table
*
cfg
=
kmalloc
(
GFP_ATOMIC
,
sizeof
(
struct
pnp_resource_table
));
...
...
@@ -151,6 +151,7 @@ static int __devinit snd_card_als100_isapnp(int dev, struct snd_card_als100 *aca
err
=
pnp_activate_dev
(
pdev
);
if
(
err
<
0
)
{
printk
(
KERN_ERR
PFX
"AUDIO pnp configure failure
\n
"
);
kfree
(
cfg
);
return
err
;
}
port
[
dev
]
=
pnp_port_start
(
pdev
,
0
);
...
...
@@ -209,7 +210,7 @@ static int __devinit snd_card_als100_isapnp(int dev, struct snd_card_als100 *aca
static
int
__init
snd_card_als100_probe
(
int
dev
,
struct
pnp_card_link
*
pcard
,
const
struct
pnp_card_id
*
pid
)
const
struct
pnp_card_
device_
id
*
pid
)
{
int
error
;
sb_t
*
chip
;
...
...
@@ -287,7 +288,7 @@ static int __init snd_card_als100_probe(int dev,
}
static
int
__devinit
snd_als100_pnp_detect
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_id
*
id
)
const
struct
pnp_card_
device_
id
*
id
)
{
static
int
dev
;
int
res
;
...
...
sound/isa/sb/es968.c
View file @
2612989b
...
...
@@ -69,7 +69,7 @@ struct snd_card_es968 {
struct
pnp_dev
*
dev
;
};
static
struct
pnp_card_id
snd_es968_pnpids
[]
__devinitdata
=
{
static
struct
pnp_card_
device_
id
snd_es968_pnpids
[]
__devinitdata
=
{
{
.
id
=
"ESS0968"
,
.
devs
=
{
{
"@@@0968"
},
}
},
{
.
id
=
""
,
}
/* end */
};
...
...
@@ -92,7 +92,7 @@ static void snd_card_es968_interrupt(int irq, void *dev_id,
static
int
__devinit
snd_card_es968_isapnp
(
int
dev
,
struct
snd_card_es968
*
acard
,
struct
pnp_card_link
*
card
,
const
struct
pnp_card_id
*
id
)
const
struct
pnp_card_
device_
id
*
id
)
{
struct
pnp_dev
*
pdev
;
struct
pnp_resource_table
*
cfg
=
kmalloc
(
GFP_ATOMIC
,
sizeof
(
struct
pnp_resource_table
));
...
...
@@ -133,7 +133,7 @@ static int __devinit snd_card_es968_isapnp(int dev, struct snd_card_es968 *acard
static
int
__init
snd_card_es968_probe
(
int
dev
,
struct
pnp_card_link
*
pcard
,
const
struct
pnp_card_id
*
pid
)
const
struct
pnp_card_
device_
id
*
pid
)
{
int
error
;
sb_t
*
chip
;
...
...
@@ -188,7 +188,7 @@ static int __init snd_card_es968_probe(int dev,
}
static
int
__devinit
snd_es968_pnp_detect
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_id
*
id
)
const
struct
pnp_card_
device_
id
*
id
)
{
static
int
dev
;
int
res
;
...
...
sound/isa/sb/sb16.c
View file @
2612989b
...
...
@@ -23,11 +23,7 @@
#include <asm/dma.h>
#include <linux/init.h>
#include <linux/slab.h>
#ifndef LINUX_ISAPNP_H
#include <linux/isapnp.h>
#define isapnp_card pci_bus
#define isapnp_dev pci_dev
#endif
#include <linux/pnp.h>
#include <sound/core.h>
#include <sound/sb.h>
#include <sound/sb16_csp.h>
...
...
@@ -77,7 +73,7 @@ MODULE_DEVICES("{{Creative Labs,SB AWE 32},"
static
int
index
[
SNDRV_CARDS
]
=
SNDRV_DEFAULT_IDX
;
/* Index 0-MAX */
static
char
*
id
[
SNDRV_CARDS
]
=
SNDRV_DEFAULT_STR
;
/* ID for this card */
static
int
enable
[
SNDRV_CARDS
]
=
SNDRV_DEFAULT_ENABLE_ISAPNP
;
/* Enable this card */
#ifdef
__ISAPNP__
#ifdef
CONFIG_PNP
static
int
isapnp
[
SNDRV_CARDS
]
=
{[
0
...
(
SNDRV_CARDS
-
1
)]
=
1
};
#endif
static
long
port
[
SNDRV_CARDS
]
=
SNDRV_DEFAULT_PORT
;
/* 0x220,0x240,0x260,0x280 */
...
...
@@ -106,10 +102,10 @@ MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
MODULE_PARM
(
enable
,
"1-"
__MODULE_STRING
(
SNDRV_CARDS
)
"i"
);
MODULE_PARM_DESC
(
enable
,
"Enable SoundBlaster 16 soundcard."
);
MODULE_PARM_SYNTAX
(
enable
,
SNDRV_ENABLE_DESC
);
#ifdef
__ISAPNP__
MODULE_PARM
(
isa
pnp
,
"1-"
__MODULE_STRING
(
SNDRV_CARDS
)
"i"
);
MODULE_PARM_DESC
(
isapnp
,
"ISA
PnP detection for specified soundcard."
);
MODULE_PARM_SYNTAX
(
isa
pnp
,
SNDRV_ISAPNP_DESC
);
#ifdef
CONFIG_PNP
MODULE_PARM
(
pnp
,
"1-"
__MODULE_STRING
(
SNDRV_CARDS
)
"i"
);
MODULE_PARM_DESC
(
pnp
,
"
PnP detection for specified soundcard."
);
MODULE_PARM_SYNTAX
(
pnp
,
SNDRV_ISAPNP_DESC
);
#endif
MODULE_PARM
(
port
,
"1-"
__MODULE_STRING
(
SNDRV_CARDS
)
"l"
);
MODULE_PARM_DESC
(
port
,
"Port # for SB16 driver."
);
...
...
@@ -148,231 +144,211 @@ MODULE_PARM_DESC(seq_ports, "Number of sequencer ports for WaveTable synth.");
MODULE_PARM_SYNTAX
(
seq_ports
,
SNDRV_ENABLED
",allows:{{0,8}},skill:advanced"
);
#endif
struct
snd_sb16
{
struct
snd_
card_
sb16
{
struct
resource
*
fm_res
;
/* used to block FM i/o region for legacy cards */
#ifdef __ISAPNP__
struct
isapnp_dev
*
dev
;
#ifdef CONFIG_PNP
int
dev_no
;
struct
pnp_dev
*
dev
;
#ifdef SNDRV_SBAWE_EMU8000
struct
isa
pnp_dev
*
devwt
;
struct
pnp_dev
*
devwt
;
#endif
#endif
};
static
snd_card_t
*
snd_sb16_cards
[
SNDRV_CARDS
]
=
SNDRV_DEFAULT_PTR
;
#ifdef __ISAPNP__
static
snd_card_t
*
snd_sb16_legacy
[
SNDRV_CARDS
]
=
SNDRV_DEFAULT_PTR
;
static
struct
isapnp_card
*
snd_sb16_isapnp_cards
[
SNDRV_CARDS
]
=
SNDRV_DEFAULT_PTR
;
static
const
struct
isapnp_card_id
*
snd_sb16_isapnp_id
[
SNDRV_CARDS
]
=
SNDRV_DEFAULT_PTR
;
#define ISAPNP_SB16(_va, _vb, _vc, _device, _audio) \
{ \
ISAPNP_CARD_ID(_va, _vb, _vc, _device), \
.devs = { ISAPNP_DEVICE_ID(_va, _vb, _vc, _audio), } \
}
#define ISAPNP_SBAWE(_va, _vb, _vc, _device, _audio, _awe) \
{ \
ISAPNP_CARD_ID(_va, _vb, _vc, _device), \
.devs = { ISAPNP_DEVICE_ID(_va, _vb, _vc, _audio), \
ISAPNP_DEVICE_ID(_va, _vb, _vc, _awe), } \
}
static
struct
isapnp_card_id
snd_sb16_pnpids
[]
__devinitdata
=
{
static
struct
pnp_card_device_id
snd_sb16_pnpids
[]
__devinitdata
=
{
#ifndef SNDRV_SBAWE
/* Sound Blaster 16 PnP */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x0024
,
0x0031
)
,
{
.
id
=
"CTL0024"
,
.
devs
=
{
{
"CTL0031"
}
}
}
,
/* Sound Blaster 16 PnP */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x0025
,
0x0031
)
,
{
.
id
=
"CTL0025"
,
.
devs
=
{
{
"CTL0031"
}
}
}
,
/* Sound Blaster 16 PnP */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x0026
,
0x0031
)
,
{
.
id
=
"CTL0026"
,
.
devs
=
{
{
"CTL0031"
}
}
}
,
/* Sound Blaster 16 PnP */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x0027
,
0x0031
)
,
{
.
id
=
"CTL0027"
,
.
devs
=
{
{
"CTL0031"
}
}
}
,
/* Sound Blaster 16 PnP */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x0028
,
0x0031
)
,
{
.
id
=
"CTL0028"
,
.
devs
=
{
{
"CTL0031"
}
}
}
,
/* Sound Blaster 16 PnP */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x0029
,
0x0031
)
,
{
.
id
=
"CTL0029"
,
.
devs
=
{
{
"CTL0031"
}
}
}
,
/* Sound Blaster 16 PnP */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x002a
,
0x0031
)
,
{
.
id
=
"CTL002a"
,
.
devs
=
{
{
"CTL0031"
}
}
}
,
/* Sound Blaster 16 PnP */
/* Note: This card has also a CTL0051:StereoEnhance device!!! */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x002b
,
0x0031
)
,
{
.
id
=
"CTL002b"
,
.
devs
=
{
{
"CTL0031"
}
}
}
,
/* Sound Blaster 16 PnP */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x002c
,
0x0031
),
{
.
id
=
"CTL002c"
,
.
devs
=
{
{
"CTL0031"
}
}
},
/* Sound Blaster Vibra16S */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x0051
,
0x0001
)
,
{
.
id
=
"CTL0051"
,
.
devs
=
{
{
"CTL0001"
}
}
}
,
/* Sound Blaster Vibra16C */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x0070
,
0x0001
)
,
{
.
id
=
"CTL0070"
,
.
devs
=
{
{
"CTL0001"
}
}
}
,
/* Sound Blaster Vibra16CL - added by ctm@ardi.com */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x0080
,
0x0041
)
,
{
.
id
=
"CTL0080"
,
.
devs
=
{
{
"CTL0041"
}
}
}
,
/* Sound Blaster 16 'value' PnP. It says model ct4130 on the pcb, */
/* but ct4131 on a sticker on the board.. */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x0086
,
0x0041
)
,
{
.
id
=
"CTL0086"
,
.
devs
=
{
{
"CTL0041"
}
}
}
,
/* Sound Blaster Vibra16X */
ISAPNP_SB16
(
'C'
,
'T'
,
'L'
,
0x00f0
,
0x0043
)
,
{
.
id
=
"CTL00f0"
,
.
devs
=
{
{
"CTL0043"
}
}
}
,
#else
/* SNDRV_SBAWE defined */
/* Sound Blaster AWE 32 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x0035
,
0x0031
,
0x0021
)
,
{
.
id
=
"CTL0035"
,
.
devs
=
{
{
"CTL0031"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster AWE 32 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x0039
,
0x0031
,
0x0021
)
,
{
.
id
=
"CTL0039"
,
.
devs
=
{
{
"CTL0031"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster AWE 32 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x0042
,
0x0031
,
0x0021
)
,
{
.
id
=
"CTL0042"
,
.
devs
=
{
{
"CTL0031"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster AWE 32 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x0043
,
0x0031
,
0x0021
)
,
{
.
id
=
"CTL0043"
,
.
devs
=
{
{
"CTL0031"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster AWE 32 PnP */
/* Note: This card has also a CTL0051:StereoEnhance device!!! */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x0044
,
0x0031
,
0x0021
)
,
{
.
id
=
"CTL0044"
,
.
devs
=
{
{
"CTL0031"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster AWE 32 PnP */
/* Note: This card has also a CTL0051:StereoEnhance device!!! */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x0045
,
0x0031
,
0x0021
)
,
{
.
id
=
"CTL0045"
,
.
devs
=
{
{
"CTL0031"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster AWE 32 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x0046
,
0x0031
,
0x0021
)
,
{
.
id
=
"CTL0046"
,
.
devs
=
{
{
"CTL0031"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster AWE 32 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x0047
,
0x0031
,
0x0021
)
,
{
.
id
=
"CTL0047"
,
.
devs
=
{
{
"CTL0031"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster AWE 32 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x0048
,
0x0031
,
0x0021
)
,
{
.
id
=
"CTL0048"
,
.
devs
=
{
{
"CTL0031"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster AWE 32 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x0054
,
0x0031
,
0x0021
)
,
{
.
id
=
"CTL0054"
,
.
devs
=
{
{
"CTL0031"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster AWE 32 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x009a
,
0x0041
,
0x0021
)
,
{
.
id
=
"CTL009a"
,
.
devs
=
{
{
"CTL0041"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster AWE 32 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x009c
,
0x0041
,
0x0021
)
,
{
.
id
=
"CTL009c"
,
.
devs
=
{
{
"CTL0041"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster 32 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x009f
,
0x0041
,
0x0021
)
,
{
.
id
=
"CTL009f"
,
.
devs
=
{
{
"CTL0041"
},
{
"CTL0021"
}
}
}
,
/* Sound Blaster AWE 64 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x009d
,
0x0042
,
0x0022
)
,
{
.
id
=
"CTL009d"
,
.
devs
=
{
{
"CTL0042"
},
{
"CTL0022"
}
}
}
,
/* Sound Blaster AWE 64 PnP Gold */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x009e
,
0x0044
,
0x0023
)
,
{
.
id
=
"CTL009e"
,
.
devs
=
{
{
"CTL0044"
},
{
"CTL0023"
}
}
}
,
/* Sound Blaster AWE 64 PnP Gold */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x00b2
,
0x0044
,
0x0023
)
,
{
.
id
=
"CTL00b2"
,
.
devs
=
{
{
"CTL0044"
},
{
"CTL0023"
}
}
}
,
/* Sound Blaster AWE 64 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x00c1
,
0x0042
,
0x0022
)
,
{
.
id
=
"CTL00c1"
,
.
devs
=
{
{
"CTL0042"
},
{
"CTL0022"
}
}
}
,
/* Sound Blaster AWE 64 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x00c3
,
0x0045
,
0x0022
)
,
{
.
id
=
"CTL00c3"
,
.
devs
=
{
{
"CTL0045"
},
{
"CTL0022"
}
}
}
,
/* Sound Blaster AWE 64 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x00c5
,
0x0045
,
0x0022
)
,
{
.
id
=
"CTL00c5"
,
.
devs
=
{
{
"CTL0045"
},
{
"CTL0022"
}
}
}
,
/* Sound Blaster AWE 64 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x00c7
,
0x0045
,
0x0022
)
,
{
.
id
=
"CTL00c7"
,
.
devs
=
{
{
"CTL0045"
},
{
"CTL0022"
}
}
}
,
/* Sound Blaster AWE 64 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x00e4
,
0x0045
,
0x0022
)
,
{
.
id
=
"CTL00e4"
,
.
devs
=
{
{
"CTL0045"
},
{
"CTL0022"
}
}
}
,
/* Sound Blaster AWE 64 PnP */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x00e9
,
0x0045
,
0x0022
)
,
{
.
id
=
"CTL00e9"
,
.
devs
=
{
{
"CTL0045"
},
{
"CTL0022"
}
}
}
,
/* Sound Blaster 16 PnP (AWE) */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
0x00ed
,
0x0041
,
0x0070
)
,
{
.
id
=
"CTL00ed"
,
.
devs
=
{
{
"CTL0041"
},
{
"CTL0070"
}
}
}
,
/* Generic entries */
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
ISAPNP_ANY_ID
,
0x0031
,
0x0021
)
,
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
ISAPNP_ANY_ID
,
0x0041
,
0x0021
)
,
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
ISAPNP_ANY_ID
,
0x0042
,
0x0022
)
,
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
ISAPNP_ANY_ID
,
0x0044
,
0x0023
)
,
ISAPNP_SBAWE
(
'C'
,
'T'
,
'L'
,
ISAPNP_ANY_ID
,
0x0045
,
0x0022
)
,
{
.
id
=
"CTLXXXX"
,
.
devs
=
{
{
"CTL0031"
},
{
"CTL0021"
}
}
}
,
{
.
id
=
"CTLXXXX"
,
.
devs
=
{
{
"CTL0041"
},
{
"CTL0021"
}
}
}
,
{
.
id
=
"CTLXXXX"
,
.
devs
=
{
{
"CTL0042"
},
{
"CTL0022"
}
}
}
,
{
.
id
=
"CTLXXXX"
,
.
devs
=
{
{
"CTL0044"
},
{
"CTL0023"
}
}
}
,
{
.
id
=
"CTLXXXX"
,
.
devs
=
{
{
"CTL0045"
},
{
"CTL0022"
}
}
}
,
#endif
/* SNDRV_SBAWE */
{
ISAPNP_CARD_END
,
}
{
.
id
=
""
,
}
};
ISAPNP_CARD_TABLE
(
snd_sb16_pnpids
);
MODULE_DEVICE_TABLE
(
pnp_card
,
snd_sb16_pnpids
);
static
int
__init
snd_sb16_isapnp
(
int
dev
,
struct
snd_sb16
*
acard
)
#ifdef SNDRV_SBAWE_EMU8000
#define DRIVER_NAME "snd-card-sbawe"
#else
#define DRIVER_NAME "snd-card-sb16"
#endif
static
int
__devinit
snd_card_sb16_pnp
(
int
dev
,
struct
snd_card_sb16
*
acard
,
struct
pnp_card_link
*
card
,
const
struct
pnp_card_device_id
*
id
)
{
const
struct
isapnp_card_id
*
id
=
snd_sb16_isapnp_id
[
dev
];
struct
isapnp_card
*
card
=
snd_sb16_isapnp_cards
[
dev
];
struct
isapnp_dev
*
pdev
;
acard
->
dev
=
isapnp_find_dev
(
card
,
id
->
devs
[
0
].
vendor
,
id
->
devs
[
0
].
function
,
NULL
);
if
(
acard
->
dev
->
active
)
{
acard
->
dev
=
NULL
;
return
-
EBUSY
;
}
struct
pnp_dev
*
pdev
;
struct
pnp_resource_table
*
cfg
=
kmalloc
(
GFP_ATOMIC
,
sizeof
(
struct
pnp_resource_table
));
int
err
;
if
(
!
cfg
)
return
-
ENOMEM
;
acard
->
dev
=
pnp_request_card_device
(
card
,
id
->
devs
[
0
].
id
,
NULL
);
if
(
acard
->
dev
==
NULL
)
{
kfree
(
cfg
);
return
-
ENODEV
;
}
#ifdef SNDRV_SBAWE_EMU8000
acard
->
devwt
=
isapnp_find_dev
(
card
,
id
->
devs
[
1
].
vendor
,
id
->
devs
[
1
].
function
,
NULL
);
if
(
acard
->
devwt
->
active
)
{
acard
->
dev
=
acard
->
devwt
=
NULL
;
return
-
EBUSY
;
}
#endif
acard
->
devwt
=
pnp_request_card_device
(
card
,
id
->
devs
[
1
].
id
,
acard
->
dev
);
#endif
/* Audio initialization */
pdev
=
acard
->
dev
;
if
(
pdev
->
prepare
(
pdev
)
<
0
)
return
-
EAGAIN
;
pnp_init_resource_table
(
cfg
);
/* override resources */
if
(
port
[
dev
]
!=
SNDRV_AUTO_PORT
)
isapnp_resource_change
(
&
pdev
->
resource
[
0
],
port
[
dev
],
16
);
pnp_resource_change
(
&
cfg
->
port_
resource
[
0
],
port
[
dev
],
16
);
if
(
mpu_port
[
dev
]
!=
SNDRV_AUTO_PORT
)
isapnp_resource_change
(
&
pdev
->
resource
[
1
],
mpu_port
[
dev
],
2
);
pnp_resource_change
(
&
cfg
->
port_
resource
[
1
],
mpu_port
[
dev
],
2
);
if
(
fm_port
[
dev
]
!=
SNDRV_AUTO_PORT
)
isapnp_resource_change
(
&
pdev
->
resource
[
2
],
fm_port
[
dev
],
4
);
pnp_resource_change
(
&
cfg
->
port_
resource
[
2
],
fm_port
[
dev
],
4
);
if
(
dma8
[
dev
]
!=
SNDRV_AUTO_DMA
)
isapnp_resource_change
(
&
pdev
->
dma_resource
[
0
],
dma8
[
dev
],
1
);
pnp_resource_change
(
&
cfg
->
dma_resource
[
0
],
dma8
[
dev
],
1
);
if
(
dma16
[
dev
]
!=
SNDRV_AUTO_DMA
)
isapnp_resource_change
(
&
pdev
->
dma_resource
[
1
],
dma16
[
dev
],
1
);
pnp_resource_change
(
&
cfg
->
dma_resource
[
1
],
dma16
[
dev
],
1
);
if
(
irq
[
dev
]
!=
SNDRV_AUTO_IRQ
)
isapnp_resource_change
(
&
pdev
->
irq_resource
[
0
],
irq
[
dev
],
1
);
if
(
pdev
->
activate
(
pdev
)
<
0
)
{
printk
(
KERN_ERR
PFX
"isapnp configure failure (out of resources?)
\n
"
);
return
-
EBUSY
;
}
port
[
dev
]
=
pdev
->
resource
[
0
].
start
;
mpu_port
[
dev
]
=
pdev
->
resource
[
1
].
start
;
fm_port
[
dev
]
=
pdev
->
resource
[
2
].
start
;
dma8
[
dev
]
=
pdev
->
dma_resource
[
0
].
start
;
dma16
[
dev
]
=
pdev
->
dma_resource
[
1
].
start
;
irq
[
dev
]
=
pdev
->
irq_resource
[
0
].
start
;
snd_printdd
(
"isapnp SB16: port=0x%lx, mpu port=0x%lx, fm port=0x%lx
\n
"
,
pnp_resource_change
(
&
cfg
->
irq_resource
[
0
],
irq
[
dev
],
1
);
if
((
pnp_manual_config_dev
(
pdev
,
cfg
,
0
))
<
0
)
printk
(
KERN_ERR
PFX
"AUDIO the requested resources are invalid, using auto config
\n
"
);
err
=
pnp_activate_dev
(
pdev
);
if
(
err
<
0
)
{
printk
(
KERN_ERR
PFX
"AUDIO pnp configure failure
\n
"
);
kfree
(
cfg
);
return
err
;
}
port
[
dev
]
=
pnp_port_start
(
pdev
,
0
);
mpu_port
[
dev
]
=
pnp_port_start
(
pdev
,
1
);
fm_port
[
dev
]
=
pnp_port_start
(
pdev
,
2
);
dma8
[
dev
]
=
pnp_dma
(
pdev
,
0
);
dma16
[
dev
]
=
pnp_dma
(
pdev
,
1
);
irq
[
dev
]
=
pnp_irq
(
pdev
,
0
);
snd_printdd
(
"pnp SB16: port=0x%lx, mpu port=0x%lx, fm port=0x%lx
\n
"
,
port
[
dev
],
mpu_port
[
dev
],
fm_port
[
dev
]);
snd_printdd
(
"
isa
pnp SB16: dma1=%i, dma2=%i, irq=%i
\n
"
,
snd_printdd
(
"pnp SB16: dma1=%i, dma2=%i, irq=%i
\n
"
,
dma8
[
dev
],
dma16
[
dev
],
irq
[
dev
]);
#ifdef SNDRV_SBAWE_EMU8000
/* WaveTable initialization */
pdev
=
acard
->
devwt
;
if
(
pdev
->
prepare
(
pdev
)
<
0
)
{
acard
->
dev
->
deactivate
(
acard
->
dev
);
return
-
EAGAIN
;
}
if
(
awe_port
[
dev
]
!=
SNDRV_AUTO_PORT
)
{
isapnp_resource_change
(
&
pdev
->
resource
[
0
],
awe_port
[
dev
],
4
);
isapnp_resource_change
(
&
pdev
->
resource
[
1
],
awe_port
[
dev
]
+
0x400
,
4
);
isapnp_resource_change
(
&
pdev
->
resource
[
2
],
awe_port
[
dev
]
+
0x800
,
4
);
}
if
(
pdev
->
activate
(
pdev
)
<
0
)
{
printk
(
KERN_ERR
PFX
"WaveTable isapnp configure failure (out of resources?)
\n
"
);
acard
->
dev
->
deactivate
(
acard
->
dev
);
return
-
EBUSY
;
}
awe_port
[
dev
]
=
pdev
->
resource
[
0
].
start
;
snd_printdd
(
"isapnp SB16: wavetable port=0x%lx
\n
"
,
pdev
->
resource
[
0
].
start
);
#endif
return
0
;
}
static
void
snd_sb16_deactivate
(
struct
snd_sb16
*
acard
)
{
if
(
acard
->
dev
)
{
acard
->
dev
->
deactivate
(
acard
->
dev
);
acard
->
dev
=
NULL
;
}
#ifdef SNDRV_SBAWE_EMU8000
if
(
acard
->
devwt
)
{
acard
->
devwt
->
deactivate
(
acard
->
devwt
);
if
(
pdev
!=
NULL
)
{
pnp_init_resource_table
(
cfg
);
/* override resources */
if
(
awe_port
[
dev
]
!=
SNDRV_AUTO_PORT
)
{
pnp_resource_change
(
&
cfg
->
port_resource
[
0
],
awe_port
[
dev
],
4
);
pnp_resource_change
(
&
cfg
->
port_resource
[
1
],
awe_port
[
dev
]
+
0x400
,
4
);
pnp_resource_change
(
&
cfg
->
port_resource
[
2
],
awe_port
[
dev
]
+
0x800
,
4
);
}
if
((
pnp_manual_config_dev
(
pdev
,
cfg
,
0
))
<
0
)
printk
(
KERN_ERR
PFX
"WaveTable the requested resources are invalid, using auto config
\n
"
);
err
=
pnp_activate_dev
(
pdev
);
if
(
err
<
0
)
{
goto
__wt_error
;
}
awe_port
[
dev
]
=
pnp_port_start
(
pdev
,
0
);
snd_printdd
(
"pnp SB16: wavetable port=0x%lx
\n
"
,
pdev
->
resource
[
0
].
start
);
}
else
{
__wt_error:
if
(
pdev
)
{
pnp_release_card_device
(
pdev
);
printk
(
KERN_ERR
PFX
"WaveTable pnp configure failure
\n
"
);
}
acard
->
devwt
=
NULL
;
awe_port
[
dev
]
=
-
1
;
}
#endif
kfree
(
cfg
);
return
0
;
}
#endif
/* __ISAPNP__ */
static
void
snd_sb16_free
(
snd_card_t
*
card
)
{
struct
snd_sb16
*
acard
=
(
struct
snd_sb16
*
)
card
->
private_data
;
if
(
acard
==
NULL
)
return
;
if
(
acard
->
fm_res
)
{
release_resource
(
acard
->
fm_res
);
kfree_nocheck
(
acard
->
fm_res
);
}
#ifdef __ISAPNP__
snd_sb16_deactivate
(
acard
);
#endif
}
static
int
__init
snd_sb16_probe
(
int
dev
)
static
int
__init
snd_sb16_probe
(
int
dev
,
struct
pnp_card_link
*
pcard
,
const
struct
pnp_card_device_id
*
pid
)
{
static
int
possible_irqs
[]
=
{
5
,
9
,
10
,
7
,
-
1
};
static
int
possible_dmas8
[]
=
{
1
,
3
,
0
,
-
1
};
...
...
@@ -380,7 +356,7 @@ static int __init snd_sb16_probe(int dev)
int
xirq
,
xdma8
,
xdma16
;
sb_t
*
chip
;
snd_card_t
*
card
;
struct
snd_sb16
*
acard
;
struct
snd_
card_
sb16
*
acard
;
opl3_t
*
opl3
;
snd_hwdep_t
*
synth
=
NULL
;
#ifdef CONFIG_SND_SB16_CSP
...
...
@@ -390,22 +366,21 @@ static int __init snd_sb16_probe(int dev)
int
err
;
card
=
snd_card_new
(
index
[
dev
],
id
[
dev
],
THIS_MODULE
,
sizeof
(
struct
snd_sb16
));
sizeof
(
struct
snd_
card_
sb16
));
if
(
card
==
NULL
)
return
-
ENOMEM
;
acard
=
(
struct
snd_sb16
*
)
card
->
private_data
;
card
->
private_free
=
snd_sb16_free
;
#ifdef __ISAPNP__
if
(
isapnp
[
dev
]
&&
snd_sb16_isapnp
(
dev
,
acard
)
<
0
)
{
snd_card_free
(
card
)
;
return
-
EBUSY
;
acard
=
(
struct
snd_
card_
sb16
*
)
card
->
private_data
;
if
(
isapnp
[
dev
])
{
if
((
err
=
snd_card_sb16_pnp
(
dev
,
acard
,
pcard
,
pid
)))
{
snd_card_free
(
card
);
return
err
;
}
}
#endif
xirq
=
irq
[
dev
];
xdma8
=
dma8
[
dev
];
xdma16
=
dma16
[
dev
];
#ifdef
__ISAPNP__
#ifdef
CONFIG_PNP
if
(
!
isapnp
[
dev
])
{
#endif
if
(
xirq
==
SNDRV_AUTO_IRQ
)
{
...
...
@@ -437,7 +412,7 @@ static int __init snd_sb16_probe(int dev)
/* non-PnP AWE port address is hardwired with base port address */
awe_port
[
dev
]
=
port
[
dev
]
+
0x400
;
#endif
#ifdef
__ISAPNP__
#ifdef
CONFIG_PNP
}
#endif
...
...
@@ -458,7 +433,7 @@ static int __init snd_sb16_probe(int dev)
return
-
ENODEV
;
}
chip
->
mpu_port
=
mpu_port
[
dev
];
#ifdef
__ISAPNP__
#ifdef
CONFIG_PNP
if
(
!
isapnp
[
dev
]
&&
(
err
=
snd_sb16dsp_configure
(
chip
))
<
0
)
{
#else
if
((
err
=
snd_sb16dsp_configure
(
chip
))
<
0
)
{
...
...
@@ -554,7 +529,10 @@ static int __init snd_sb16_probe(int dev)
snd_card_free
(
card
);
return
err
;
}
snd_sb16_cards
[
dev
]
=
card
;
if
(
pcard
)
pnp_set_card_drvdata
(
pcard
,
card
);
else
snd_sb16_legacy
[
dev
]
=
card
;
return
0
;
}
...
...
@@ -566,12 +544,12 @@ static int __init snd_sb16_probe_legacy_port(unsigned long xport)
for
(
;
dev
<
SNDRV_CARDS
;
dev
++
)
{
if
(
!
enable
[
dev
]
||
port
[
dev
]
!=
SNDRV_AUTO_PORT
)
continue
;
#ifdef
__ISAPNP__
#ifdef
CONFIG_PNP
if
(
isapnp
[
dev
])
continue
;
#endif
port
[
dev
]
=
xport
;
res
=
snd_sb16_probe
(
dev
);
res
=
snd_sb16_probe
(
dev
,
NULL
,
NULL
);
if
(
res
<
0
)
port
[
dev
]
=
SNDRV_AUTO_PORT
;
return
res
;
...
...
@@ -579,10 +557,10 @@ static int __init snd_sb16_probe_legacy_port(unsigned long xport)
return
-
ENODEV
;
}
#ifdef
__ISAPNP__
#ifdef
CONFIG_PNP
static
int
__
init
snd_sb16_isapnp_detect
(
struct
isapnp_card
*
card
,
const
struct
isapnp_card
_id
*
id
)
static
int
__
devinit
snd_sb16_pnp_detect
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_device
_id
*
id
)
{
static
int
dev
;
int
res
;
...
...
@@ -590,9 +568,7 @@ static int __init snd_sb16_isapnp_detect(struct isapnp_card *card,
for
(
;
dev
<
SNDRV_CARDS
;
dev
++
)
{
if
(
!
enable
[
dev
]
||
!
isapnp
[
dev
])
continue
;
snd_sb16_isapnp_cards
[
dev
]
=
card
;
snd_sb16_isapnp_id
[
dev
]
=
id
;
res
=
snd_sb16_probe
(
dev
);
res
=
snd_sb16_probe
(
dev
,
card
,
id
);
if
(
res
<
0
)
return
res
;
dev
++
;
...
...
@@ -602,7 +578,23 @@ static int __init snd_sb16_isapnp_detect(struct isapnp_card *card,
return
-
ENODEV
;
}
#endif
/* __ISAPNP__ */
#endif
static
void
__devexit
snd_sb16_pnp_remove
(
struct
pnp_card_link
*
pcard
)
{
snd_card_t
*
card
=
(
snd_card_t
*
)
pnp_get_card_drvdata
(
pcard
);
snd_card_disconnect
(
card
);
snd_card_free_in_thread
(
card
);
}
static
struct
pnp_card_driver
sb16_pnpc_driver
=
{
.
flags
=
PNP_DRIVER_RES_DISABLE
,
.
name
=
"sb16"
,
.
id_table
=
snd_sb16_pnpids
,
.
probe
=
snd_sb16_pnp_detect
,
.
remove
=
__devexit_p
(
snd_sb16_pnp_remove
),
};
static
int
__init
alsa_card_sb16_init
(
void
)
{
...
...
@@ -613,23 +605,23 @@ static int __init alsa_card_sb16_init(void)
for
(
dev
=
0
;
dev
<
SNDRV_CARDS
;
dev
++
)
{
if
(
!
enable
[
dev
]
||
port
[
dev
]
==
SNDRV_AUTO_PORT
)
continue
;
#ifdef
__ISAPNP__
#ifdef
CONFIG_PNP
if
(
isapnp
[
dev
])
continue
;
#endif
if
(
!
snd_sb16_probe
(
dev
))
{
if
(
!
snd_sb16_probe
(
dev
,
NULL
,
NULL
))
{
cards
++
;
continue
;
}
#ifdef MODULE
printk
(
KERN_ERR
"Sound Blaster 16+ soundcard #%i not found at 0x%lx or device busy
\n
"
,
dev
,
port
[
dev
]);
#endif
#endif
}
/* legacy auto configured cards */
cards
+=
snd_legacy_auto_probe
(
possible_ports
,
snd_sb16_probe_legacy_port
);
#ifdef
__ISAPNP__
/*
ISA
PnP cards at last */
cards
+=
isapnp_probe_cards
(
snd_sb16_pnpids
,
snd_sb16_isapnp_detect
);
#ifdef
CONFIG_PNP
/* PnP cards at last */
cards
+=
pnp_register_card_driver
(
&
sb16_pnpc_driver
);
#endif
if
(
!
cards
)
{
...
...
@@ -650,8 +642,12 @@ static void __exit alsa_card_sb16_exit(void)
{
int
dev
;
#ifdef CONFIG_PNP
/* PnP cards first */
pnp_unregister_card_driver
(
&
sb16_pnpc_driver
);
#endif
for
(
dev
=
0
;
dev
<
SNDRV_CARDS
;
dev
++
)
snd_card_free
(
snd_sb16_
cards
[
dev
]);
snd_card_free
(
snd_sb16_
legacy
[
dev
]);
}
module_init
(
alsa_card_sb16_init
)
...
...
@@ -659,7 +655,7 @@ module_exit(alsa_card_sb16_exit)
#ifndef MODULE
/* format is: snd-sb16=enable,index,id,
isa
pnp,
/* format is: snd-sb16=enable,index,id,pnp,
port,mpu_port,fm_port,
irq,dma8,dma16,
mic_agc,csp,
...
...
@@ -694,7 +690,7 @@ static int __init alsa_card_sb16_setup(char *str)
get_option
(
&
str
,
&
seq_ports
[
nr_dev
])
==
2
#endif
);
#ifdef
__ISAPNP__
#ifdef
CONFIG_PNP
if
(
pnp
!=
INT_MAX
)
isapnp
[
nr_dev
]
=
pnp
;
#endif
...
...
sound/oss/sb_card.c
View file @
2612989b
...
...
@@ -224,7 +224,7 @@ static void sb_dev2cfg(struct pnp_dev *dev, struct sb_card_config *scc)
}
/* Probe callback function for the PnP API */
static
int
sb_pnp_probe
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_id
*
card_id
)
static
int
sb_pnp_probe
(
struct
pnp_card_link
*
card
,
const
struct
pnp_card_
device_
id
*
card_id
)
{
struct
sb_card_config
*
scc
;
struct
sb_module_options
sbmo
=
{
0
};
/* Default to 0 for PnP */
...
...
sound/oss/sb_card.h
View file @
2612989b
...
...
@@ -23,7 +23,7 @@ struct sb_card_config {
*/
/* Card PnP ID Table */
static
struct
pnp_card_id
sb_pnp_card_table
[]
=
{
static
struct
pnp_card_
device_
id
sb_pnp_card_table
[]
=
{
/* Sound Blaster 16 */
{.
id
=
"CTL0024"
,
.
driver_data
=
0
,
devs
:
{
{.
id
=
"CTL0031"
},
}
},
/* Sound Blaster 16 */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment