linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [alsa, pnp] more on opl3sa2 (fwd)
       [not found] <Pine.LNX.4.44.0301271534210.2937-100000@pnote.perex-int.cz>
@ 2003-01-29 22:12 ` Adam Belay
  2003-01-30  8:45   ` Jaroslav Kysela
  0 siblings, 1 reply; 6+ messages in thread
From: Adam Belay @ 2003-01-29 22:12 UTC (permalink / raw)
  To: Jaroslav Kysela; +Cc: linux-kernel

On Mon, Jan 27, 2003 at 03:36:41PM +0100, Jaroslav Kysela wrote:
>
> Any notes?

Actually I was wondering if you could provide some further information about the 
nature of these multidevice sound cards so I can better understand the 
situation.

1.)  How are the componets of a typical card divided among the sub-devices. (ex: 
control, mpu, wave table, etc)

2.)  Are all the devices required for the card to properly function, in other 
words, must the card always have possession of all of the sound related 
sub-devices in order to function at a minimal level.

3.)  Are there any other isapnp cards that depend on multiple devices per 
driver, to my knowledge only a limited set of sound cards do.

Thanks,
Adam

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [alsa, pnp] more on opl3sa2 (fwd)
  2003-01-29 22:12 ` [alsa, pnp] more on opl3sa2 (fwd) Adam Belay
@ 2003-01-30  8:45   ` Jaroslav Kysela
  2003-01-30 22:24     ` Adam Belay
  0 siblings, 1 reply; 6+ messages in thread
From: Jaroslav Kysela @ 2003-01-30  8:45 UTC (permalink / raw)
  To: Adam Belay; +Cc: linux-kernel

On Wed, 29 Jan 2003, Adam Belay wrote:

> On Mon, Jan 27, 2003 at 03:36:41PM +0100, Jaroslav Kysela wrote:
> >
> > Any notes?
> 
> Actually I was wondering if you could provide some further information about the 
> nature of these multidevice sound cards so I can better understand the 
> situation.
> 
> 1.)  How are the componets of a typical card divided among the sub-devices. (ex: 
> control, mpu, wave table, etc)

There are these logical devices as you mentioned plus (optional) joystick 
or IDE controler which the sound driver doesn't drive.

> 2.)  Are all the devices required for the card to properly function, in other 
> words, must the card always have possession of all of the sound related 
> sub-devices in order to function at a minimal level.

No, but that's not the point. The sound driver must grab all devices to 
follow hardware structure.

3.)  Are there any other isapnp cards that depend on multiple devices per
driver, to my knowledge only a limited set of sound cards do.

Almost all isapnp soundcards. The opl3sa2 driver is an exception. Try to 
grep for ISAPNP_DEVICE_ID in linux/sound/isa directory + subdirectories.

Anyway, as I said. The card is bus (PCI has something similar - PCI 
bridges).

						Jaroslav

-----
Jaroslav Kysela <perex@suse.cz>
Linux Kernel Sound Maintainer
ALSA Project, SuSE Labs



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [alsa, pnp] more on opl3sa2 (fwd)
  2003-01-30  8:45   ` Jaroslav Kysela
@ 2003-01-30 22:24     ` Adam Belay
  2003-02-03 14:15       ` Jaroslav Kysela
  0 siblings, 1 reply; 6+ messages in thread
From: Adam Belay @ 2003-01-30 22:24 UTC (permalink / raw)
  To: Jaroslav Kysela; +Cc: linux-kernel

Hi Jaroslav,

How does this sound...

What if we make pnp card services match against all pnp cards and allow more
than one card driver to use the same card.  This can be accomplished if we detach
the card portion from the driver model and use driver_attach.  If you feel it is
necessary, we could also add an optional card id to the pnp_device_id structure.
As for the pnpbios, I disagree with putting it under one card.  If the pnpbios
contains two opl3sa2 sound cards then only one will be matched and therefore it
is a bad idea to represent the pnpbios as a card.  When ACPI is introduced, both
pnpbios and ACPI will be cardless protocols.  Therefore I think it is best to 
use the pnp_driver structure instead of the pnpc_driver structure in the
opl3sa2 ALSA driver.

Any aditional comments?

Regards,
Adam

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [alsa, pnp] more on opl3sa2 (fwd)
  2003-01-30 22:24     ` Adam Belay
@ 2003-02-03 14:15       ` Jaroslav Kysela
  2003-02-05 22:01         ` Adam Belay
  0 siblings, 1 reply; 6+ messages in thread
From: Jaroslav Kysela @ 2003-02-03 14:15 UTC (permalink / raw)
  To: Adam Belay; +Cc: linux-kernel

On Thu, 30 Jan 2003, Adam Belay wrote:

> Hi Jaroslav,
> 
> How does this sound...
> 
> What if we make pnp card services match against all pnp cards and allow more
> than one card driver to use the same card.  This can be accomplished if we detach
> the card portion from the driver model and use driver_attach.  If you feel it is

The question is probably another. I know that your solution will work, but 
do we need such hack against the driver model in our code? If you work 
with cards as buses, it allows us the same model as PCI code.

> necessary, we could also add an optional card id to the pnp_device_id structure.
> As for the pnpbios, I disagree with putting it under one card.  If the pnpbios
> contains two opl3sa2 sound cards then only one will be matched and therefore it

It's not true. The driver model calls probe for all instances.

> is a bad idea to represent the pnpbios as a card.  When ACPI is introduced, both

Note that if we make card as bus, then this problem will disapear.
The enumeration will be simple: devices on the one bus. And it's strong 
advantage over current implementation when bus == protocol.

What do you think about this model:

bus (PnP BIOS) -> devices
bus (ACPI) -> devices
bus (ISA PnP) -> bus (cards) -> devices

To allow grouping of card devices, we can use the driver_attach() function 
from the probe() callback.

Also, the current pnp_protocol should be detached from the driver model.
I think that it's internal thing for the PnP device management.

> pnpbios and ACPI will be cardless protocols.  Therefore I think it is best to 
> use the pnp_driver structure instead of the pnpc_driver structure in the
> opl3sa2 ALSA driver.

The opl3sa2 driver is an exception. All others will require groups of 
devices.

						Jaroslav

-----
Jaroslav Kysela <perex@suse.cz>
Linux Kernel Sound Maintainer
ALSA Project, SuSE Labs


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [alsa, pnp] more on opl3sa2 (fwd)
  2003-02-03 14:15       ` Jaroslav Kysela
@ 2003-02-05 22:01         ` Adam Belay
  2003-02-09 17:55           ` Jaroslav Kysela
  0 siblings, 1 reply; 6+ messages in thread
From: Adam Belay @ 2003-02-05 22:01 UTC (permalink / raw)
  To: Jaroslav Kysela; +Cc: linux-kernel

On Mon, Feb 03, 2003 at 03:15:59PM +0100, Jaroslav Kysela wrote:
> On Thu, 30 Jan 2003, Adam Belay wrote:
> 
> > Hi Jaroslav,
> > 
> > How does this sound...
> > 
> > What if we make pnp card services match against all pnp cards and allow more
> > than one card driver to use the same card.  This can be accomplished if we detach
> > the card portion from the driver model and use driver_attach.  If you feel it is
> 
> The question is probably another. I know that your solution will work, but 
> do we need such hack against the driver model in our code? If you work 
> with cards as buses, it allows us the same model as PCI code.
> 
> > necessary, we could also add an optional card id to the pnp_device_id structure.
> > As for the pnpbios, I disagree with putting it under one card.  If the pnpbios
> > contains two opl3sa2 sound cards then only one will be matched and therefore it
> 
> It's not true. The driver model calls probe for all instances.
> 
> > is a bad idea to represent the pnpbios as a card.  When ACPI is introduced, both
> 
> Note that if we make card as bus, then this problem will disapear.
> The enumeration will be simple: devices on the one bus. And it's strong 
> advantage over current implementation when bus == protocol.
> 
> What do you think about this model:
> 
> bus (PnP BIOS) -> devices
> bus (ACPI) -> devices
> bus (ISA PnP) -> bus (cards) -> devices
> 

I think this model has potential but before we go that direction I'd like to hear
your reactions on another more simplistic model.  I'll express it with a
hypothetical code example.  This model completely drops individual card matching
and is compatible with both card users and non-card users.


static struct pnp_device_id snd_als100_pnpids[] = {
	/* ALS100 - PRO16PNP */
	{.card_id = "ALS0001" .id = "@@@0001", .driver_data = ALS100_AUDIO},
	{.card_id = "ALS0001" .id = "@X@0001", .driver_data = ALS100_MPU},
	{.card_id = "ALS0001" .id = "@H@0001", .driver_data = ALS100_OPL},
	/* ALS110 - MF1000 - Digimate 3D Sound */
	{.card_id = "ALS0110" .id = "@@@1001", .driver_data = ALS100_AUDIO},
	{.card_id = "ALS0001" .id = "@X@1001", .driver_data = ALS100_MPU},
	{.card_id = "ALS0001" .id = "@H@1001", .driver_data = ALS100_OPL},
---> snip
};


static int __init snd_card_als100_probe(struct pnp_dev * dev, struct pnp_device_id * id)
{
---> snip
	snd_card_t *card;
---> snip
	card = snd_card_find(dev->card);	/* this function searches for previously
						 registered sound cards and binds this
						 device to it if it finds that it was a
						 member of the same pnp_card */
	if (!card) {
		if ((card = snd_card_new(index[dev], id[dev], THIS_MODULE,
			 sizeof(struct snd_card_als100))) == NULL)
		return -ENOMEM;
	}
	switch (id->driver_data) {
	case ALS100_AUDIO:
---> snip
	case ALS100_MPU:
---> snip
	case ALS100_OPL:
---> snip
etc . . .


I'm interested in your opinions on this approach.

Thanks,
Adam

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [alsa, pnp] more on opl3sa2 (fwd)
  2003-02-05 22:01         ` Adam Belay
@ 2003-02-09 17:55           ` Jaroslav Kysela
  0 siblings, 0 replies; 6+ messages in thread
From: Jaroslav Kysela @ 2003-02-09 17:55 UTC (permalink / raw)
  To: Adam Belay; +Cc: linux-kernel

On Wed, 5 Feb 2003, Adam Belay wrote:

> On Mon, Feb 03, 2003 at 03:15:59PM +0100, Jaroslav Kysela wrote:
> > On Thu, 30 Jan 2003, Adam Belay wrote:
> > 
> > > Hi Jaroslav,
> > > 
> > > How does this sound...
> > > 
> > > What if we make pnp card services match against all pnp cards and allow more
> > > than one card driver to use the same card.  This can be accomplished if we detach
> > > the card portion from the driver model and use driver_attach.  If you feel it is
> > 
> > The question is probably another. I know that your solution will work, but 
> > do we need such hack against the driver model in our code? If you work 
> > with cards as buses, it allows us the same model as PCI code.
> > 
> > > necessary, we could also add an optional card id to the pnp_device_id structure.
> > > As for the pnpbios, I disagree with putting it under one card.  If the pnpbios
> > > contains two opl3sa2 sound cards then only one will be matched and therefore it
> > 
> > It's not true. The driver model calls probe for all instances.
> > 
> > > is a bad idea to represent the pnpbios as a card.  When ACPI is introduced, both
> > 
> > Note that if we make card as bus, then this problem will disapear.
> > The enumeration will be simple: devices on the one bus. And it's strong 
> > advantage over current implementation when bus == protocol.
> > 
> > What do you think about this model:
> > 
> > bus (PnP BIOS) -> devices
> > bus (ACPI) -> devices
> > bus (ISA PnP) -> bus (cards) -> devices
> > 
> 
> I think this model has potential but before we go that direction I'd like to hear
> your reactions on another more simplistic model.  I'll express it with a
> hypothetical code example.  This model completely drops individual card matching
> and is compatible with both card users and non-card users.
> 
> 
> static struct pnp_device_id snd_als100_pnpids[] = {
> 	/* ALS100 - PRO16PNP */
> 	{.card_id = "ALS0001" .id = "@@@0001", .driver_data = ALS100_AUDIO},
> 	{.card_id = "ALS0001" .id = "@X@0001", .driver_data = ALS100_MPU},
> 	{.card_id = "ALS0001" .id = "@H@0001", .driver_data = ALS100_OPL},
> 	/* ALS110 - MF1000 - Digimate 3D Sound */
> 	{.card_id = "ALS0110" .id = "@@@1001", .driver_data = ALS100_AUDIO},
> 	{.card_id = "ALS0001" .id = "@X@1001", .driver_data = ALS100_MPU},
> 	{.card_id = "ALS0001" .id = "@H@1001", .driver_data = ALS100_OPL},
> ---> snip
> };
> 
> 
> static int __init snd_card_als100_probe(struct pnp_dev * dev, struct pnp_device_id * id)
> {
> ---> snip
> 	snd_card_t *card;
> ---> snip
> 	card = snd_card_find(dev->card);	/* this function searches for previously
> 						 registered sound cards and binds this
> 						 device to it if it finds that it was a
> 						 member of the same pnp_card */
> 	if (!card) {
> 		if ((card = snd_card_new(index[dev], id[dev], THIS_MODULE,
> 			 sizeof(struct snd_card_als100))) == NULL)
> 		return -ENOMEM;
> 	}
> 	switch (id->driver_data) {
> 	case ALS100_AUDIO:
> ---> snip
> 	case ALS100_MPU:
> ---> snip
> 	case ALS100_OPL:
> ---> snip
> etc . . .
> 
> 
> I'm interested in your opinions on this approach.

I'm sure that this model will work, but it's a bit complicated to 
allocate devices in this way. I'd prefer to probe / allocate devices in 
one shot. Anyway, it's a step forward. I'm thinking about this scenario:

Pass id list "match all" (or we can have a match callback in the
pnp_driver structure) and find/allocate multiple devices manually in
probe.

						Jaroslav

-----
Jaroslav Kysela <perex@suse.cz>
Linux Kernel Sound Maintainer
ALSA Project, SuSE Labs



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2003-02-09 17:46 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <Pine.LNX.4.44.0301271534210.2937-100000@pnote.perex-int.cz>
2003-01-29 22:12 ` [alsa, pnp] more on opl3sa2 (fwd) Adam Belay
2003-01-30  8:45   ` Jaroslav Kysela
2003-01-30 22:24     ` Adam Belay
2003-02-03 14:15       ` Jaroslav Kysela
2003-02-05 22:01         ` Adam Belay
2003-02-09 17:55           ` Jaroslav Kysela

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).