mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Clemens Ladisch <clemens@ladisch.de>
Cc: Yong Zhang <yong.zhang0@gmail.com>,
	linux-kernel@vger.kernel.org, Jaroslav Kysela <perex@perex.cz>,
	alsa-devel@alsa-project.org
Subject: Re: [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags
Date: Tue, 13 Sep 2011 09:12:25 +0200	[thread overview]
Message-ID: <s5hvcswvrty.wl%tiwai@suse.de> (raw)
In-Reply-To: <4E6E6A34.8060104@ladisch.de>

At Mon, 12 Sep 2011 22:23:16 +0200,
Clemens Ladisch wrote:
> 
> I wrote:
> > I'll have a new patch until tomorrow.
> 
> --8<---------------------------------------------------------------->8--
> ALSA: mpu401: clean up interrupt specification
> 
> The semantics of snd_mpu401_uart_new()'s interrupt parameters are
> somewhat counterintuitive:  To prevent the function from allocating its
> own interrupt, either the irq number must be invalid, or the irq_flags
> parameter must be zero.  At the same time, the irq parameter being
> invalid specifies that the mpu401 code has to work without an interrupt
> allocated by the caller.  This implies that, if there is an interrupt
> and it is allocated by the caller, the irq parameter must be set to
> a valid-looking number which then isn't actually used.
> 
> With the removal of IRQF_DISABLED, zero becomes a valid irq_flags value,
> which forces us to handle the parameters differently.
> 
> This patch introduces a new flag MPU401_INFO_IRQ_HOOK for when the
> device interrupt is handled by the caller, and makes the allocation of
> the interrupt to depend only on the irq parameter.
> 
> Signed-off-by: Clemens Ladisch <clemens@ladisch.de>

This patch looks better indeed.

However, if we are going to remove IRQF_DISABLED in near future, and
all the callers use IRQF_DISABLED when requesting an irq, why not
remove this argument now?  Then the IRQF_DISABLED-removal patch will
touch less code.
The irq registration in snd_mpu401_uart_new() is just for convenience
for ISA-type devices, and any other devices that need special IRQ
flags (if any) would require other irq handler, thus not necessarily
to be registered inside snd_mpu401_uart_new().


thanks,

Takashi

> ---
>  Documentation/DocBook/writing-an-alsa-driver.tmpl |   33 +++++++++++++---------
>  include/sound/mpu401.h                            |    6 ++--
>  sound/drivers/mpu401/mpu401.c                     |    3 --
>  sound/drivers/mpu401/mpu401_uart.c                |   17 ++++++-----
>  sound/isa/als100.c                                |    2 -
>  sound/isa/cs423x/cs4231.c                         |    2 -
>  sound/isa/cs423x/cs4236.c                         |    2 -
>  sound/isa/es18xx.c                                |    4 +-
>  sound/isa/opl3sa2.c                               |    5 ++-
>  sound/isa/sb/jazz16.c                             |    2 -
>  sound/isa/sb/sb16.c                               |    5 ++-
>  sound/pci/als4000.c                               |    5 ++-
>  sound/pci/au88x0/au88x0_mpu401.c                  |    6 ++--
>  sound/pci/azt3328.c                               |    5 ++-
>  sound/pci/cmipci.c                                |    5 ++-
>  sound/pci/es1938.c                                |    5 ++-
>  sound/pci/es1968.c                                |    5 ++-
>  sound/pci/fm801.c                                 |    5 ++-
>  sound/pci/ice1712/ice1712.c                       |   10 ++++--
>  sound/pci/maestro3.c                              |    4 +-
>  sound/pci/oxygen/oxygen_lib.c                     |    5 ++-
>  sound/pci/riptide/riptide.c                       |    2 -
>  sound/pci/sonicvibes.c                            |    6 ++--
>  sound/pci/trident/trident.c                       |    5 ++-
>  sound/pci/via82xx.c                               |    5 ++-
>  sound/pci/ymfpci/ymfpci.c                         |    5 ++-
>  26 files changed, 92 insertions(+), 67 deletions(-)
> 
> 
> diff --git a/Documentation/DocBook/writing-an-alsa-driver.tmpl b/Documentation/DocBook/writing-an-alsa-driver.tmpl
> index 598c22f..31ccd27 100644
> --- a/Documentation/DocBook/writing-an-alsa-driver.tmpl
> +++ b/Documentation/DocBook/writing-an-alsa-driver.tmpl
> @@ -4343,6 +4343,13 @@ struct _snd_pcm_runtime {
>  	by itself to start processing the output stream in the irq handler.
>  	</para>
> 
> +	<para>
> +	If the MPU-401 interface shares its interrupt with the other logical
> +	devices on the card, set <constant>MPU401_INFO_IRQ_HOOK</constant>
> +	(see <link linkend="midi-interface-interrupt-handler"><citetitle>
> +	below</citetitle></link>).
> +	</para>
> +
>        <para>
>          Usually, the port address corresponds to the command port and
>          port + 1 corresponds to the data port. If not, you may change
> @@ -4375,14 +4382,13 @@ struct _snd_pcm_runtime {
>        </para>
> 
>        <para>
> -        The 6th argument specifies the irq number for UART. If the irq
> -      is already allocated, pass 0 to the 7th argument
> -      (<parameter>irq_flags</parameter>). Otherwise, pass the flags
> -      for irq allocation
> -      (<constant>SA_XXX</constant> bits) to it, and the irq will be
> -      reserved by the mpu401-uart layer. If the card doesn't generate
> -      UART interrupts, pass -1 as the irq number. Then a timer
> -      interrupt will be invoked for polling.
> +      The 6th argument specifies the irq number that will be allocated.
> +      Pass the irq flags for calling <function>request_irq()</function>
> +      (<constant>IRQF_XXX</constant> bits) in the 7th argument.
> +      If no interrupt is to be allocated (because your code is already
> +      allocating it, or because the device does not use interrupts),
> +      pass -1 and 0 instead.  For a MPU-401 device without an interrupt,
> +      a polling timer will be used instead.
>        </para>
>      </section>
> 
> @@ -4390,12 +4396,13 @@ struct _snd_pcm_runtime {
>        <title>Interrupt Handler</title>
>        <para>
>          When the interrupt is allocated in
> -      <function>snd_mpu401_uart_new()</function>, the private
> +      <function>snd_mpu401_uart_new()</function>, a private
>        interrupt handler is used, hence you don't have anything else to do
> -      than creating the mpu401 stuff. Otherwise, you have to call
> -      <function>snd_mpu401_uart_interrupt()</function> explicitly when
> -      a UART interrupt is invoked and checked in your own interrupt
> -      handler.
> +      than creating the mpu401 stuff. Otherwise, you have to set
> +      <constant>MPU401_INFO_IRQ_HOOK</constant>, and call
> +      <function>snd_mpu401_uart_interrupt()</function> explicitly from your
> +      own interrupt handler when it has determined that a UART interrupt
> +      has occurred.
>        </para>
> 
>        <para>
> diff --git a/include/sound/mpu401.h b/include/sound/mpu401.h
> index 1f1d53f..8f26148 100644
> --- a/include/sound/mpu401.h
> +++ b/include/sound/mpu401.h
> @@ -50,7 +50,10 @@
>  #define MPU401_INFO_INTEGRATED	(1 << 2)	/* integrated h/w port */
>  #define MPU401_INFO_MMIO	(1 << 3)	/* MMIO access */
>  #define MPU401_INFO_TX_IRQ	(1 << 4)	/* independent TX irq */
> +#define MPU401_INFO_IRQ_HOOK	(1 << 5)	/* mpu401 irq handler is called
> +						   from driver irq handler */
>  #define MPU401_INFO_NO_ACK	(1 << 6)	/* No ACK cmd needed */
> +#define MPU401_INFO_USE_TIMER	(1 << 15)	/* internal */
> 
>  #define MPU401_MODE_BIT_INPUT		0
>  #define MPU401_MODE_BIT_OUTPUT		1
> @@ -73,8 +76,7 @@ struct snd_mpu401 {
>  	unsigned long port;		/* base port of MPU-401 chip */
>  	unsigned long cport;		/* port + 1 (usually) */
>  	struct resource *res;		/* port resource */
> -	int irq;			/* IRQ number of MPU-401 chip (-1 = poll) */
> -	int irq_flags;
> +	int irq;			/* IRQ number of MPU-401 chip */
> 
>  	unsigned long mode;		/* MPU401_MODE_XXXX */
>  	int timer_invoked;
> diff --git a/sound/drivers/mpu401/mpu401.c b/sound/drivers/mpu401/mpu401.c
> index 149d05a..4133e0d 100644
> --- a/sound/drivers/mpu401/mpu401.c
> +++ b/sound/drivers/mpu401/mpu401.c
> @@ -86,8 +86,7 @@ static int snd_mpu401_create(int dev, struct snd_card **rcard)
>  	}
> 
>  	err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port[dev], 0,
> -				  irq[dev], irq[dev] >= 0 ? IRQF_DISABLED : 0,
> -				  NULL);
> +				  irq[dev], IRQF_DISABLED, NULL);
>  	if (err < 0) {
>  		printk(KERN_ERR "MPU401 not detected at 0x%lx\n", port[dev]);
>  		goto _err;
> diff --git a/sound/drivers/mpu401/mpu401_uart.c b/sound/drivers/mpu401/mpu401_uart.c
> index 2af0999..893a94f 100644
> --- a/sound/drivers/mpu401/mpu401_uart.c
> +++ b/sound/drivers/mpu401/mpu401_uart.c
> @@ -3,7 +3,7 @@
>   *  Routines for control of MPU-401 in UART mode
>   *
>   *  MPU-401 supports UART mode which is not capable generate transmit
> - *  interrupts thus output is done via polling. Also, if irq < 0, then
> + *  interrupts thus output is done via polling. Without interrupt,
>   *  input is done also via polling. Do not expect good performance.
>   *
>   *
> @@ -374,7 +374,7 @@ snd_mpu401_uart_input_trigger(struct snd_rawmidi_substream *substream, int up)
>  			/* first time - flush FIFO */
>  			while (max-- > 0)
>  				mpu->read(mpu, MPU401D(mpu));
> -			if (mpu->irq < 0)
> +			if (mpu->info_flags & MPU401_INFO_USE_TIMER)
>  				snd_mpu401_uart_add_timer(mpu, 1);
>  		}
>  		
> @@ -383,7 +383,7 @@ snd_mpu401_uart_input_trigger(struct snd_rawmidi_substream *substream, int up)
>  		snd_mpu401_uart_input_read(mpu);
>  		spin_unlock_irqrestore(&mpu->input_lock, flags);
>  	} else {
> -		if (mpu->irq < 0)
> +		if (mpu->info_flags & MPU401_INFO_USE_TIMER)
>  			snd_mpu401_uart_remove_timer(mpu, 1);
>  		clear_bit(MPU401_MODE_BIT_INPUT_TRIGGER, &mpu->mode);
>  	}
> @@ -496,7 +496,7 @@ static struct snd_rawmidi_ops snd_mpu401_uart_input =
>  static void snd_mpu401_uart_free(struct snd_rawmidi *rmidi)
>  {
>  	struct snd_mpu401 *mpu = rmidi->private_data;
> -	if (mpu->irq_flags && mpu->irq >= 0)
> +	if (mpu->irq >= 0)
>  		free_irq(mpu->irq, (void *) mpu);
>  	release_and_free_resource(mpu->res);
>  	kfree(mpu);
> @@ -509,8 +509,8 @@ static void snd_mpu401_uart_free(struct snd_rawmidi *rmidi)
>   * @hardware: the hardware type, MPU401_HW_XXXX
>   * @port: the base address of MPU401 port
>   * @info_flags: bitflags MPU401_INFO_XXX
> - * @irq: the irq number, -1 if no interrupt for mpu
> - * @irq_flags: the irq request flags (SA_XXX), 0 if irq was already reserved.
> + * @irq: the irq number, -1 if not to be allocated
> + * @irq_flags: the irq request flags (IRQF_XXX)
>   * @rrawmidi: the pointer to store the new rawmidi instance
>   *
>   * Creates a new MPU-401 instance.
> @@ -577,7 +577,7 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,
>  		mpu->cport = port + 2;
>  	else
>  		mpu->cport = port + 1;
> -	if (irq >= 0 && irq_flags) {
> +	if (irq >= 0) {
>  		if (request_irq(irq, snd_mpu401_uart_interrupt, irq_flags,
>  				"MPU401 UART", (void *) mpu)) {
>  			snd_printk(KERN_ERR "mpu401_uart: "
> @@ -586,9 +586,10 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,
>  			return -EBUSY;
>  		}
>  	}
> +	if (irq < 0 && !(info_flags & MPU401_INFO_IRQ_HOOK))
> +		info_flags |= MPU401_INFO_USE_TIMER;
>  	mpu->info_flags = info_flags;
>  	mpu->irq = irq;
> -	mpu->irq_flags = irq_flags;
>  	if (card->shortname[0])
>  		snprintf(rmidi->name, sizeof(rmidi->name), "%s MIDI",
>  			 card->shortname);
> diff --git a/sound/isa/als100.c b/sound/isa/als100.c
> index 20becc8..efa071c 100644
> --- a/sound/isa/als100.c
> +++ b/sound/isa/als100.c
> @@ -256,7 +256,7 @@ static int __devinit snd_card_als100_probe(int dev,
>  					mpu_type,
>  					mpu_port[dev], 0,
>  					mpu_irq[dev],
> -					mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0,
> +					IRQF_DISABLED,
>  					NULL) < 0)
>  			snd_printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n", mpu_port[dev]);
>  	}
> diff --git a/sound/isa/cs423x/cs4231.c b/sound/isa/cs423x/cs4231.c
> index cb9153e..6c24248 100644
> --- a/sound/isa/cs423x/cs4231.c
> +++ b/sound/isa/cs423x/cs4231.c
> @@ -131,7 +131,7 @@ static int __devinit snd_cs4231_probe(struct device *dev, unsigned int n)
>  			mpu_irq[n] = -1;
>  		if (snd_mpu401_uart_new(card, 0, MPU401_HW_CS4232,
>  					mpu_port[n], 0, mpu_irq[n],
> -					mpu_irq[n] >= 0 ? IRQF_DISABLED : 0,
> +					IRQF_DISABLED,
>  					NULL) < 0)
>  			dev_warn(dev, "MPU401 not detected\n");
>  	}
> diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c
> index 999dc1e..17c9a3e 100644
> --- a/sound/isa/cs423x/cs4236.c
> +++ b/sound/isa/cs423x/cs4236.c
> @@ -450,7 +450,7 @@ static int __devinit snd_cs423x_probe(struct snd_card *card, int dev)
>  		if (snd_mpu401_uart_new(card, 0, MPU401_HW_CS4232,
>  					mpu_port[dev], 0,
>  					mpu_irq[dev],
> -					mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0, NULL) < 0)
> +					IRQF_DISABLED, NULL) < 0)
>  			printk(KERN_WARNING IDENT ": MPU401 not detected\n");
>  	}
> 
> diff --git a/sound/isa/es18xx.c b/sound/isa/es18xx.c
> index fb4d6b3..f5f3071 100644
> --- a/sound/isa/es18xx.c
> +++ b/sound/isa/es18xx.c
> @@ -2160,8 +2160,8 @@ static int __devinit snd_audiodrive_probe(struct snd_card *card, int dev)
> 
>  	if (mpu_port[dev] > 0 && mpu_port[dev] != SNDRV_AUTO_PORT) {
>  		err = snd_mpu401_uart_new(card, 0, MPU401_HW_ES18XX,
> -					  mpu_port[dev], 0,
> -					  irq[dev], 0, &chip->rmidi);
> +					  mpu_port[dev], MPU401_INFO_IRQ_HOOK,
> +					  -1, 0, &chip->rmidi);
>  		if (err < 0)
>  			return err;
>  	}
> diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c
> index 9b915e2..2003c67 100644
> --- a/sound/isa/opl3sa2.c
> +++ b/sound/isa/opl3sa2.c
> @@ -707,8 +707,9 @@ static int __devinit snd_opl3sa2_probe(struct snd_card *card, int dev)
>  	}
>  	if (midi_port[dev] >= 0x300 && midi_port[dev] < 0x340) {
>  		if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_OPL3SA2,
> -					       midi_port[dev], 0,
> -					       xirq, 0, &chip->rmidi)) < 0)
> +					       midi_port[dev],
> +					       MPU401_INFO_IRQ_HOOK, -1, 0,
> +					       &chip->rmidi)) < 0)
>  			return err;
>  	}
>  	sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d",
> diff --git a/sound/isa/sb/jazz16.c b/sound/isa/sb/jazz16.c
> index 8ccbcdd..fbd8c16 100644
> --- a/sound/isa/sb/jazz16.c
> +++ b/sound/isa/sb/jazz16.c
> @@ -322,7 +322,7 @@ static int __devinit snd_jazz16_probe(struct device *devptr, unsigned int dev)
>  					MPU401_HW_MPU401,
>  					mpu_port[dev], 0,
>  					mpu_irq[dev],
> -					mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0,
> +					IRQF_DISABLED,
>  					NULL) < 0)
>  			snd_printk(KERN_ERR "no MPU-401 device at 0x%lx\n",
>  					mpu_port[dev]);
> diff --git a/sound/isa/sb/sb16.c b/sound/isa/sb/sb16.c
> index 4d1c5a3..b10f021 100644
> --- a/sound/isa/sb/sb16.c
> +++ b/sound/isa/sb/sb16.c
> @@ -394,8 +394,9 @@ static int __devinit snd_sb16_probe(struct snd_card *card, int dev)
> 
>  	if (chip->mpu_port > 0 && chip->mpu_port != SNDRV_AUTO_PORT) {
>  		if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_SB,
> -					       chip->mpu_port, 0,
> -					       xirq, 0, &chip->rmidi)) < 0)
> +					       chip->mpu_port,
> +					       MPU401_INFO_IRQ_HOOK, -1, 0,
> +					       &chip->rmidi)) < 0)
>  			return err;
>  		chip->rmidi_callback = snd_mpu401_uart_interrupt;
>  	}
> diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c
> index a9c1af3..507434b 100644
> --- a/sound/pci/als4000.c
> +++ b/sound/pci/als4000.c
> @@ -931,8 +931,9 @@ static int __devinit snd_card_als4000_probe(struct pci_dev *pci,
> 
>  	if ((err = snd_mpu401_uart_new( card, 0, MPU401_HW_ALS4000,
>  					iobase + ALS4K_IOB_30_MIDI_DATA,
> -					MPU401_INFO_INTEGRATED,
> -					pci->irq, 0, &chip->rmidi)) < 0) {
> +					MPU401_INFO_INTEGRATED |
> +					MPU401_INFO_IRQ_HOOK,
> +					-1, 0, &chip->rmidi)) < 0) {
>  		printk(KERN_ERR "als4000: no MPU-401 device at 0x%lx?\n",
>  				iobase + ALS4K_IOB_30_MIDI_DATA);
>  		goto out_err;
> diff --git a/sound/pci/au88x0/au88x0_mpu401.c b/sound/pci/au88x0/au88x0_mpu401.c
> index 0dc8d25..fc2133b 100644
> --- a/sound/pci/au88x0/au88x0_mpu401.c
> +++ b/sound/pci/au88x0/au88x0_mpu401.c
> @@ -84,7 +84,7 @@ static int __devinit snd_vortex_midi(vortex_t * vortex)
>  #ifdef VORTEX_MPU401_LEGACY
>  	if ((temp =
>  	     snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_MPU401, 0x330,
> -				 0, 0, 0, &rmidi)) != 0) {
> +				 MPU401_INFO_IRQ_HOOK, -1, 0, &rmidi)) != 0) {
>  		hwwrite(vortex->mmio, VORTEX_CTRL,
>  			(hwread(vortex->mmio, VORTEX_CTRL) &
>  			 ~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
> @@ -94,8 +94,8 @@ static int __devinit snd_vortex_midi(vortex_t * vortex)
>  	port = (unsigned long)(vortex->mmio + VORTEX_MIDI_DATA);
>  	if ((temp =
>  	     snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_AUREAL, port,
> -				 MPU401_INFO_INTEGRATED | MPU401_INFO_MMIO,
> -				 0, 0, &rmidi)) != 0) {
> +				 MPU401_INFO_INTEGRATED | MPU401_INFO_MMIO |
> +				 MPU401_INFO_IRQ_HOOK, -1, 0, &rmidi)) != 0) {
>  		hwwrite(vortex->mmio, VORTEX_CTRL,
>  			(hwread(vortex->mmio, VORTEX_CTRL) &
>  			 ~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
> diff --git a/sound/pci/azt3328.c b/sound/pci/azt3328.c
> index 579fc0d..b80e87b 100644
> --- a/sound/pci/azt3328.c
> +++ b/sound/pci/azt3328.c
> @@ -2652,8 +2652,9 @@ snd_azf3328_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
>  	   since our hardware ought to be similar, thus use same ID. */
>  	err = snd_mpu401_uart_new(
>  		card, 0,
> -		MPU401_HW_AZT2320, chip->mpu_io, MPU401_INFO_INTEGRATED,
> -		pci->irq, 0, &chip->rmidi
> +		MPU401_HW_AZT2320, chip->mpu_io,
> +		MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
> +		-1, 0, &chip->rmidi
>  	);
>  	if (err < 0) {
>  		snd_printk(KERN_ERR "azf3328: no MPU-401 device at 0x%lx?\n",
> diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c
> index 9cf99fb..4776790 100644
> --- a/sound/pci/cmipci.c
> +++ b/sound/pci/cmipci.c
> @@ -3228,8 +3228,9 @@ static int __devinit snd_cmipci_create(struct snd_card *card, struct pci_dev *pc
>  		if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
>  					       iomidi,
>  					       (integrated_midi ?
> -						MPU401_INFO_INTEGRATED : 0),
> -					       cm->irq, 0, &cm->rmidi)) < 0) {
> +						MPU401_INFO_INTEGRATED : 0) |
> +					       MPU401_INFO_IRQ_HOOK,
> +					       -1, 0, &cm->rmidi)) < 0) {
>  			printk(KERN_ERR "cmipci: no UART401 device at 0x%lx\n", iomidi);
>  		}
>  	}
> diff --git a/sound/pci/es1938.c b/sound/pci/es1938.c
> index 26a5a2f..8f4ddc3 100644
> --- a/sound/pci/es1938.c
> +++ b/sound/pci/es1938.c
> @@ -1854,8 +1854,9 @@ static int __devinit snd_es1938_probe(struct pci_dev *pci,
>  		}
>  	}
>  	if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
> -				chip->mpu_port, MPU401_INFO_INTEGRATED,
> -				chip->irq, 0, &chip->rmidi) < 0) {
> +				chip->mpu_port,
> +				MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
> +				-1, 0, &chip->rmidi) < 0) {
>  		printk(KERN_ERR "es1938: unable to initialize MPU-401\n");
>  	} else {
>  		// this line is vital for MIDI interrupt handling on ess-solo1
> diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c
> index 99ea932..b6397d0 100644
> --- a/sound/pci/es1968.c
> +++ b/sound/pci/es1968.c
> @@ -2843,8 +2843,9 @@ static int __devinit snd_es1968_probe(struct pci_dev *pci,
>  	if (enable_mpu[dev]) {
>  		if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
>  					       chip->io_port + ESM_MPU401_PORT,
> -					       MPU401_INFO_INTEGRATED,
> -					       chip->irq, 0, &chip->rmidi)) < 0) {
> +					       MPU401_INFO_INTEGRATED |
> +					       MPU401_INFO_IRQ_HOOK,
> +					       -1, 0, &chip->rmidi)) < 0) {
>  			printk(KERN_WARNING "es1968: skipping MPU-401 MIDI support..\n");
>  		}
>  	}
> diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c
> index f9123f0..34a3414 100644
> --- a/sound/pci/fm801.c
> +++ b/sound/pci/fm801.c
> @@ -1306,8 +1306,9 @@ static int __devinit snd_card_fm801_probe(struct pci_dev *pci,
>  	}
>  	if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_FM801,
>  				       FM801_REG(chip, MPU401_DATA),
> -				       MPU401_INFO_INTEGRATED,
> -				       chip->irq, 0, &chip->rmidi)) < 0) {
> +				       MPU401_INFO_INTEGRATED |
> +				       MPU401_INFO_IRQ_HOOK,
> +				       -1, 0, &chip->rmidi)) < 0) {
>  		snd_card_free(card);
>  		return err;
>  	}
> diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
> index 0ccc0eb..a1d9815 100644
> --- a/sound/pci/ice1712/ice1712.c
> +++ b/sound/pci/ice1712/ice1712.c
> @@ -2748,8 +2748,9 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
>  	if (!c->no_mpu401) {
>  		err = snd_mpu401_uart_new(card, 0, MPU401_HW_ICE1712,
>  			ICEREG(ice, MPU1_CTRL),
> -			(c->mpu401_1_info_flags | MPU401_INFO_INTEGRATED),
> -			ice->irq, 0, &ice->rmidi[0]);
> +			c->mpu401_1_info_flags |
> +			MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
> +			-1, 0, &ice->rmidi[0]);
>  		if (err < 0) {
>  			snd_card_free(card);
>  			return err;
> @@ -2764,8 +2765,9 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
>  			/*  2nd port used  */
>  			err = snd_mpu401_uart_new(card, 1, MPU401_HW_ICE1712,
>  				ICEREG(ice, MPU2_CTRL),
> -				(c->mpu401_2_info_flags | MPU401_INFO_INTEGRATED),
> -				ice->irq, 0, &ice->rmidi[1]);
> +				c->mpu401_2_info_flags |
> +				MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
> +				-1, 0, &ice->rmidi[1]);
> 
>  			if (err < 0) {
>  				snd_card_free(card);
> diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
> index 0378126..3e5f0bd 100644
> --- a/sound/pci/maestro3.c
> +++ b/sound/pci/maestro3.c
> @@ -2820,8 +2820,8 @@ snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
>  	/* TODO enable MIDI IRQ and I/O */
>  	err = snd_mpu401_uart_new(chip->card, 0, MPU401_HW_MPU401,
>  				  chip->iobase + MPU401_DATA_PORT,
> -				  MPU401_INFO_INTEGRATED,
> -				  chip->irq, 0, &chip->rmidi);
> +				  MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK,
> +				  -1, 0, &chip->rmidi);
>  	if (err < 0)
>  		printk(KERN_WARNING "maestro3: no MIDI support.\n");
>  #endif
> diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c
> index 82311fc..4aa3a80 100644
> --- a/sound/pci/oxygen/oxygen_lib.c
> +++ b/sound/pci/oxygen/oxygen_lib.c
> @@ -678,14 +678,15 @@ int oxygen_pci_probe(struct pci_dev *pci, int index, char *id,
>  		goto err_card;
> 
>  	if (chip->model.device_config & (MIDI_OUTPUT | MIDI_INPUT)) {
> -		unsigned int info_flags = MPU401_INFO_INTEGRATED;
> +		unsigned int info_flags =
> +				MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK;
>  		if (chip->model.device_config & MIDI_OUTPUT)
>  			info_flags |= MPU401_INFO_OUTPUT;
>  		if (chip->model.device_config & MIDI_INPUT)
>  			info_flags |= MPU401_INFO_INPUT;
>  		err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
>  					  chip->addr + OXYGEN_MPU401,
> -					  info_flags, 0, 0,
> +					  info_flags, -1, 0,
>  					  &chip->midi);
>  		if (err < 0)
>  			goto err_card;
> diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c
> index e34ae14..0c2bc68 100644
> --- a/sound/pci/riptide/riptide.c
> +++ b/sound/pci/riptide/riptide.c
> @@ -2109,7 +2109,7 @@ snd_card_riptide_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
>  		val = mpu_port[dev];
>  		pci_write_config_word(chip->pci, PCI_EXT_MPU_Base, val);
>  		err = snd_mpu401_uart_new(card, 0, MPU401_HW_RIPTIDE,
> -					  val, 0, chip->irq, 0,
> +					  val, MPU401_INFO_IRQ_HOOK, -1, 0,
>  					  &chip->rmidi);
>  		if (err < 0)
>  			snd_printk(KERN_WARNING
> diff --git a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c
> index 2571a67..a439f17 100644
> --- a/sound/pci/sonicvibes.c
> +++ b/sound/pci/sonicvibes.c
> @@ -1493,8 +1493,10 @@ static int __devinit snd_sonic_probe(struct pci_dev *pci,
>  		return err;
>  	}
>  	if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_SONICVIBES,
> -				       sonic->midi_port, MPU401_INFO_INTEGRATED,
> -				       sonic->irq, 0,
> +				       sonic->midi_port,
> +				       MPU401_INFO_INTEGRATED |
> +				       MPU401_INFO_IRQ_HOOK,
> +				       -1, 0,
>  				       &midi_uart)) < 0) {
>  		snd_card_free(card);
>  		return err;
> diff --git a/sound/pci/trident/trident.c b/sound/pci/trident/trident.c
> index d8a128f..6406a18 100644
> --- a/sound/pci/trident/trident.c
> +++ b/sound/pci/trident/trident.c
> @@ -148,8 +148,9 @@ static int __devinit snd_trident_probe(struct pci_dev *pci,
>  	if (trident->device != TRIDENT_DEVICE_ID_SI7018 &&
>  	    (err = snd_mpu401_uart_new(card, 0, MPU401_HW_TRID4DWAVE,
>  				       trident->midi_port,
> -				       MPU401_INFO_INTEGRATED,
> -				       trident->irq, 0, &trident->rmidi)) < 0) {
> +				       MPU401_INFO_INTEGRATED |
> +				       MPU401_INFO_IRQ_HOOK,
> +				       -1, 0, &trident->rmidi)) < 0) {
>  		snd_card_free(card);
>  		return err;
>  	}
> diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c
> index f03fd62..d2204ed 100644
> --- a/sound/pci/via82xx.c
> +++ b/sound/pci/via82xx.c
> @@ -2068,8 +2068,9 @@ static int __devinit snd_via686_init_misc(struct via82xx *chip)
>  	pci_write_config_byte(chip->pci, VIA_PNP_CONTROL, legacy_cfg);
>  	if (chip->mpu_res) {
>  		if (snd_mpu401_uart_new(chip->card, 0, MPU401_HW_VIA686A,
> -					mpu_port, MPU401_INFO_INTEGRATED,
> -					chip->irq, 0, &chip->rmidi) < 0) {
> +					mpu_port, MPU401_INFO_INTEGRATED |
> +					MPU401_INFO_IRQ_HOOK, -1, 0,
> +					&chip->rmidi) < 0) {
>  			printk(KERN_WARNING "unable to initialize MPU-401"
>  			       " at 0x%lx, skipping\n", mpu_port);
>  			legacy &= ~VIA_FUNC_ENABLE_MIDI;
> diff --git a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c
> index 511d576..553aa57 100644
> --- a/sound/pci/ymfpci/ymfpci.c
> +++ b/sound/pci/ymfpci/ymfpci.c
> @@ -305,8 +305,9 @@ static int __devinit snd_card_ymfpci_probe(struct pci_dev *pci,
>  	if (chip->mpu_res) {
>  		if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI,
>  					       mpu_port[dev],
> -					       MPU401_INFO_INTEGRATED,
> -					       pci->irq, 0, &chip->rawmidi)) < 0) {
> +					       MPU401_INFO_INTEGRATED |
> +					       MPU401_INFO_IRQ_HOOK,
> +					       -1, 0, &chip->rawmidi)) < 0) {
>  			printk(KERN_WARNING "ymfpci: cannot initialize MPU401 at 0x%lx, skipping...\n", mpu_port[dev]);
>  			legacy_ctrl &= ~YMFPCI_LEGACY_MIEN; /* disable MPU401 irq */
>  			pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl);
> 

  reply	other threads:[~2011-09-13  7:12 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1315383059-3673-9-git-send-email-yong.zhang0@gmail.com>
     [not found] ` <1315383059-3673-1-git-send-email-yong.zhang0@gmail.com>
2011-09-07  8:10   ` [PATCH 13/62] microblaze: irq: Remove IRQF_DISABLED Yong Zhang
2011-09-07  8:10   ` [PATCH 17/62] powerpc: " Yong Zhang
2011-09-08 16:41     ` Arnd Bergmann
2011-09-07  8:10   ` [PATCH 18/62] score: " Yong Zhang
2011-09-07  8:10   ` [PATCH 24/62] xtensa: " Yong Zhang
2011-09-07  8:10   ` [PATCH 38/62] Input: " Yong Zhang
2011-09-07 23:21     ` Dmitry Torokhov
2011-09-07  8:10   ` [PATCH 39/62] ISDN: " Yong Zhang
     [not found]   ` <1315383059-3673-30-git-send-email-yong.zhang0@gmail.com>
2011-09-07 14:26     ` [PATCH 29/62] block: " Miller, Mike (OS Dev)
     [not found]   ` <1315383059-3673-34-git-send-email-yong.zhang0@gmail.com>
2011-09-07 15:02     ` [PATCH 33/62] dmaengine: " Vinod Koul
2011-09-11 21:38     ` Linus Walleij
     [not found]   ` <1315383059-3673-52-git-send-email-yong.zhang0@gmail.com>
2011-09-07 17:04     ` [PATCH 51/62] powerpc/ps3: " Geoff Levand
     [not found]   ` <1315383059-3673-21-git-send-email-yong.zhang0@gmail.com>
2011-09-07 17:12     ` [PATCH 20/62] sparc: " David Miller
2011-09-07 17:31       ` Thomas Gleixner
2011-09-07 17:33         ` Thomas Gleixner
2011-09-07 17:51           ` David Miller
2011-09-07 17:57             ` Thomas Gleixner
2011-09-07 18:14               ` David Miller
2011-09-07 18:43                 ` Thomas Gleixner
2011-09-08  3:15                   ` Yong Zhang
     [not found]   ` <1315383059-3673-61-git-send-email-yong.zhang0@gmail.com>
2011-09-07 17:12     ` [PATCH 60/62] sound: " Mark Brown
     [not found]   ` <1315383059-3673-54-git-send-email-yong.zhang0@gmail.com>
2011-09-07 17:37     ` [PATCH 53/62] spi: " Grant Likely
     [not found]   ` <1315383059-3673-6-git-send-email-yong.zhang0@gmail.com>
2011-09-07 20:29     ` [PATCH 05/62] avr32: " Hans-Christian Egtvedt
     [not found]   ` <1315383059-3673-13-git-send-email-yong.zhang0@gmail.com>
2011-09-08  3:18     ` [PATCH 12/62] m64k: " Greg Ungerer
2011-09-09 15:05       ` Geert Uytterhoeven
2011-09-10  2:01         ` Yong Zhang
     [not found]   ` <1315383059-3673-7-git-send-email-yong.zhang0@gmail.com>
2011-09-08  8:12     ` [uclinux-dist-devel] [PATCH 06/62] Blackfin: " Bob Liu
     [not found]   ` <1315383059-3673-26-git-send-email-yong.zhang0@gmail.com>
2011-09-08 10:40     ` [PATCH 25/62] staging: " Marc Dietich
2011-09-08 13:58       ` Yong Zhang
2011-09-08 14:52         ` Greg KH
2011-09-09  1:12           ` Yong Zhang
     [not found]   ` <1315383059-3673-3-git-send-email-yong.zhang0@gmail.com>
2011-09-08 10:53     ` [RFC] [PATCH 02/62] mpu401:snd_mpu401_uart_new(): split semantic of irq_flags Clemens Ladisch
2011-09-08 13:37       ` Yong Zhang
2011-09-08 13:58         ` Clemens Ladisch
2011-09-08 14:45           ` Yong Zhang
2011-09-08 20:27             ` Clemens Ladisch
2011-09-09  1:31               ` Yong Zhang
2011-09-11 15:10                 ` Clemens Ladisch
2011-09-12 10:47                   ` Takashi Iwai
2011-09-12 13:16                     ` Clemens Ladisch
2011-09-12 20:23                       ` Clemens Ladisch
2011-09-13  7:12                         ` Takashi Iwai [this message]
2011-09-13  8:17                           ` Clemens Ladisch
2011-09-13  9:24                             ` Clemens Ladisch
2011-09-14  8:49                               ` Yong Zhang
2011-09-14  9:06                                 ` Takashi Iwai
2011-09-14  9:15                                   ` Yong Zhang
     [not found]   ` <1315383059-3673-32-git-send-email-yong.zhang0@gmail.com>
2011-09-08 10:55     ` [PATCH 31/62] driver/char: irq: Remove IRQF_DISABLED Clemens Ladisch
2011-09-08 15:29     ` Corey Minyard
2011-09-08 16:04     ` Arnd Bergmann
     [not found]   ` <1315383059-3673-62-git-send-email-yong.zhang0@gmail.com>
2011-09-08 21:38     ` [PATCH 61/62] Documentation: irq: Change documents related to IRQF_DISABLED Randy Dunlap
2011-09-09  1:38       ` Yong Zhang
2011-09-09  1:48       ` [UPDATED] " Yong Zhang
2011-09-09  8:25         ` Rolf Eike Beer
2011-09-09  8:41           ` Yong Zhang
     [not found]   ` <1315383059-3673-59-git-send-email-yong.zhang0@gmail.com>
2011-09-09  8:01     ` [PATCH 58/62] watchdog: irq: Remove IRQF_DISABLED Wolfram Sang
2011-09-11 21:37     ` Linus Walleij
     [not found]   ` <1315383059-3673-45-git-send-email-yong.zhang0@gmail.com>
2011-09-09  8:03     ` [PATCH 44/62] mtd: " Wolfram Sang
     [not found]   ` <1315383059-3673-48-git-send-email-yong.zhang0@gmail.com>
2011-09-09  8:04     ` [PATCH 47/62] pcmcia: " Wolfram Sang
     [not found]   ` <1315383059-3673-8-git-send-email-yong.zhang0@gmail.com>
2011-09-09 15:10     ` [PATCH 07/62] cris: " Jesper Nilsson
     [not found]   ` <1315383059-3673-37-git-send-email-yong.zhang0@gmail.com>
2011-09-09  7:59     ` [PATCH 36/62] i2c: " Wolfram Sang
2011-09-11 21:36     ` Linus Walleij
2011-09-19  8:44     ` Barry Song
     [not found]   ` <1315383059-3673-53-git-send-email-yong.zhang0@gmail.com>
2011-09-11 21:38     ` [PATCH 52/62] rtc: " Linus Walleij
     [not found]   ` <1315383059-3673-42-git-send-email-yong.zhang0@gmail.com>
2011-09-15 19:57     ` [PATCH 41/62] mfd: " Samuel Ortiz
2011-09-20 15:03   ` [PATCH 08/62] frv: " David Howells
2011-09-20 15:04   ` [PATCH 15/62] mn10300: " David Howells
     [not found]   ` <1315383059-3673-55-git-send-email-yong.zhang0@gmail.com>
2011-09-09  9:49     ` [PATCH 54/62] TTY: " Tobias Klauser
2011-09-22 23:04     ` Greg KH
2011-09-22 23:08       ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=s5hvcswvrty.wl%tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=clemens@ladisch.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=perex@perex.cz \
    --cc=yong.zhang0@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®