* [PATCH] opl3sa2: drop snd_card pointer from the snd_opl3sa2 structure
@ 2008-08-17 18:01 Krzysztof Helt
2008-08-17 18:26 ` Rene Herman
0 siblings, 1 reply; 3+ messages in thread
From: Krzysztof Helt @ 2008-08-17 18:01 UTC (permalink / raw)
To: Alsa-devel; +Cc: Rene Herman
From: Krzysztof Helt <krzysztof.h1@wp.pl>
Remove card pointer from the snd_opl3sa2
structure and break circular reference
snd_card->snd_opl3sa2->snd_card.
Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl>
---
A very small opl3sa2 clean up.
diff -urp linux-ref/sound/isa/opl3sa2.c linux-2.6/sound/isa/opl3sa2.c
--- linux-ref/sound/isa/opl3sa2.c 2008-08-14 00:05:30.000000000 +0200
+++ linux-2.6/sound/isa/opl3sa2.c 2008-08-15 12:30:58.000000000 +0200
@@ -124,7 +124,6 @@ static int pnpc_registered;
#define OPL3SA2_PM_D3 (OPL3SA2_PM_ADOWN|OPL3SA2_PM_PSV|OPL3SA2_PM_PDN|OPL3SA2_PM_PDX)
struct snd_opl3sa2 {
- struct snd_card *card;
int version; /* 2 or 3 */
unsigned long port; /* control port */
struct resource *res_port; /* control port resource */
@@ -222,14 +221,13 @@ static void snd_opl3sa2_write(struct snd
spin_unlock_irqrestore(&chip->reg_lock, flags);
}
-static int __devinit snd_opl3sa2_detect(struct snd_opl3sa2 *chip)
+static int __devinit snd_opl3sa2_detect(struct snd_card *card)
{
- struct snd_card *card;
+ struct snd_opl3sa2 *chip = card->private_data;
unsigned long port;
unsigned char tmp, tmp1;
char str[2];
- card = chip->card;
port = chip->port;
if ((chip->res_port = request_region(port, 2, "OPL3-SA control")) == NULL) {
snd_printk(KERN_ERR PFX "can't grab port 0x%lx\n", port);
@@ -298,12 +296,14 @@ static int __devinit snd_opl3sa2_detect(
static irqreturn_t snd_opl3sa2_interrupt(int irq, void *dev_id)
{
unsigned short status;
- struct snd_opl3sa2 *chip = dev_id;
+ struct snd_card *card = dev_id;
+ struct snd_opl3sa2 *chip;
int handled = 0;
- if (chip == NULL || chip->card == NULL)
+ if (card == NULL || card->private_data == NULL)
return IRQ_NONE;
+ chip = card->private_data;
status = snd_opl3sa2_read(chip, OPL3SA2_IRQ_STATUS);
if (status & 0x20) {
@@ -327,8 +327,10 @@ static irqreturn_t snd_opl3sa2_interrupt
snd_opl3sa2_read(chip, OPL3SA2_MASTER_RIGHT);
snd_opl3sa2_read(chip, OPL3SA2_MASTER_LEFT);
if (chip->master_switch && chip->master_volume) {
- snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->master_switch->id);
- snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->master_volume->id);
+ snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
+ &chip->master_switch->id);
+ snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
+ &chip->master_volume->id);
}
}
return IRQ_RETVAL(handled);
@@ -512,9 +514,9 @@ static void snd_opl3sa2_master_free(stru
chip->master_volume = NULL;
}
-static int __devinit snd_opl3sa2_mixer(struct snd_opl3sa2 *chip)
+static int __devinit snd_opl3sa2_mixer(struct snd_card *card)
{
- struct snd_card *card = chip->card;
+ struct snd_opl3sa2 *chip = card->private_data;
struct snd_ctl_elem_id id1, id2;
struct snd_kcontrol *kctl;
unsigned int idx;
@@ -650,7 +652,6 @@ static struct snd_card *snd_opl3sa2_card
chip = card->private_data;
spin_lock_init(&chip->reg_lock);
chip->irq = -1;
- chip->card = card;
card->private_free = snd_opl3sa2_free;
return card;
}
@@ -672,9 +673,12 @@ static int __devinit snd_opl3sa2_probe(s
xdma2 = dma2[dev];
if (xdma2 < 0)
chip->single_dma = 1;
- if ((err = snd_opl3sa2_detect(chip)) < 0)
+ err = snd_opl3sa2_detect(card);
+ if (err < 0)
return err;
- if (request_irq(xirq, snd_opl3sa2_interrupt, IRQF_DISABLED, "OPL3-SA2", chip)) {
+ err = request_irq(xirq, snd_opl3sa2_interrupt, IRQF_DISABLED,
+ "OPL3-SA2", card);
+ if (err) {
snd_printk(KERN_ERR PFX "can't grab IRQ %d\n", xirq);
return -ENODEV;
}
@@ -694,7 +698,8 @@ static int __devinit snd_opl3sa2_probe(s
err = snd_wss_mixer(wss);
if (err < 0)
return err;
- if ((err = snd_opl3sa2_mixer(chip)) < 0)
+ err = snd_opl3sa2_mixer(card);
+ if (err < 0)
return err;
err = snd_wss_timer(wss, 0, NULL);
if (err < 0)
----------------------------------------------------------------------
Prosty kredyt na wszystkie potrzeby.
Od 1000 zl do 120 000 zl.
Bez poreczycieli i zabezpieczen >>> http://link.interia.pl/f1edf
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] opl3sa2: drop snd_card pointer from the snd_opl3sa2 structure
2008-08-17 18:01 [PATCH] opl3sa2: drop snd_card pointer from the snd_opl3sa2 structure Krzysztof Helt
@ 2008-08-17 18:26 ` Rene Herman
2008-08-17 20:39 ` Krzysztof Helt
0 siblings, 1 reply; 3+ messages in thread
From: Rene Herman @ 2008-08-17 18:26 UTC (permalink / raw)
To: Krzysztof Helt; +Cc: Alsa-devel
On 17-08-08 20:01, Krzysztof Helt wrote:
> From: Krzysztof Helt <krzysztof.h1@wp.pl>
>
> Remove card pointer from the snd_opl3sa2
> structure and break circular reference
> snd_card->snd_opl3sa2->snd_card.
>
> Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl>
Acked-by: Rene Herman <rene.herman@gmail.com>
Note, you had me worried for a bit as you reminded me I still have a
patch pending to pass the card->dev to snd_pcm_preallocate_pages() in
order to stop using the magic "NULL dev means ISA" behaviour in the DMA
layer (meaning we need a chip->card) but this "chip" isn't in fact "a
chip" so fine here.
> @@ -298,12 +296,14 @@ static int __devinit snd_opl3sa2_detect(
> static irqreturn_t snd_opl3sa2_interrupt(int irq, void *dev_id)
> {
> unsigned short status;
> - struct snd_opl3sa2 *chip = dev_id;
> + struct snd_card *card = dev_id;
> + struct snd_opl3sa2 *chip;
> int handled = 0;
>
> - if (chip == NULL || chip->card == NULL)
> + if (card == NULL || card->private_data == NULL)
micro-comment: card->private_data can't actually be NULL on initialized
card (it's card + n) but yes, I guess we're pretending we don't know that...
Rene.
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] opl3sa2: drop snd_card pointer from the snd_opl3sa2 structure
2008-08-17 18:26 ` Rene Herman
@ 2008-08-17 20:39 ` Krzysztof Helt
0 siblings, 0 replies; 3+ messages in thread
From: Krzysztof Helt @ 2008-08-17 20:39 UTC (permalink / raw)
To: Rene Herman; +Cc: Alsa-devel
On Sun, 17 Aug 2008 20:26:10 +0200
Rene Herman <rene.herman@keyaccess.nl> wrote:
> > @@ -298,12 +296,14 @@ static int __devinit snd_opl3sa2_detect(
> > static irqreturn_t snd_opl3sa2_interrupt(int irq, void *dev_id)
> > {
> > unsigned short status;
> > - struct snd_opl3sa2 *chip = dev_id;
> > + struct snd_card *card = dev_id;
> > + struct snd_opl3sa2 *chip;
> > int handled = 0;
> >
> > - if (chip == NULL || chip->card == NULL)
> > + if (card == NULL || card->private_data == NULL)
>
> micro-comment: card->private_data can't actually be NULL on initialized
> card (it's card + n) but yes, I guess we're pretending we don't know that...
>
Right. The next opl3sa2 patch will fix this.
Regards,
Krzysztof
----------------------------------------------------------------------
Farmerzy tez maja Olimpiade!
Sprawdz >> http://link.interia.pl/f1edd
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2008-08-17 20:33 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-17 18:01 [PATCH] opl3sa2: drop snd_card pointer from the snd_opl3sa2 structure Krzysztof Helt
2008-08-17 18:26 ` Rene Herman
2008-08-17 20:39 ` Krzysztof Helt
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.