Loading Documentation/DocBook/writing-an-alsa-driver.tmpl +21 −15 Original line number Diff line number Diff line Loading @@ -4288,7 +4288,7 @@ struct _snd_pcm_runtime { <![CDATA[ struct snd_rawmidi *rmidi; snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port, info_flags, irq, irq_flags, &rmidi); irq, &rmidi); ]]> </programlisting> </informalexample> Loading Loading @@ -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 Loading Loading @@ -4375,14 +4382,12 @@ 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 ISA irq number that will be allocated. If no interrupt is to be allocated (because your code is already allocating a shared interrupt, or because the device does not use interrupts), pass -1 instead. For a MPU-401 device without an interrupt, a polling timer will be used instead. </para> </section> Loading @@ -4390,12 +4395,13 @@ struct _snd_pcm_runtime { <title>Interrupt Handler</title> <para> When the interrupt is allocated in <function>snd_mpu401_uart_new()</function>, the 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. <function>snd_mpu401_uart_new()</function>, an exclusive ISA interrupt handler is automatically used, hence you don't have anything else to do 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> Loading MAINTAINERS +1 −1 Original line number Diff line number Diff line Loading @@ -5990,7 +5990,7 @@ M: Jaroslav Kysela <perex@perex.cz> M: Takashi Iwai <tiwai@suse.de> L: alsa-devel@alsa-project.org (moderated for non-subscribers) W: http://www.alsa-project.org/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git T: git git://git.alsa-project.org/alsa-kernel.git S: Maintained F: Documentation/sound/ Loading include/linux/usb/ch9.h +11 −6 Original line number Diff line number Diff line Loading @@ -377,12 +377,6 @@ struct usb_endpoint_descriptor { #define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ #define USB_ENDPOINT_DIR_MASK 0x80 #define USB_ENDPOINT_SYNCTYPE 0x0c #define USB_ENDPOINT_SYNC_NONE (0 << 2) #define USB_ENDPOINT_SYNC_ASYNC (1 << 2) #define USB_ENDPOINT_SYNC_ADAPTIVE (2 << 2) #define USB_ENDPOINT_SYNC_SYNC (3 << 2) #define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ #define USB_ENDPOINT_XFER_CONTROL 0 #define USB_ENDPOINT_XFER_ISOC 1 Loading @@ -390,6 +384,17 @@ struct usb_endpoint_descriptor { #define USB_ENDPOINT_XFER_INT 3 #define USB_ENDPOINT_MAX_ADJUSTABLE 0x80 #define USB_ENDPOINT_SYNCTYPE 0x0c #define USB_ENDPOINT_SYNC_NONE (0 << 2) #define USB_ENDPOINT_SYNC_ASYNC (1 << 2) #define USB_ENDPOINT_SYNC_ADAPTIVE (2 << 2) #define USB_ENDPOINT_SYNC_SYNC (3 << 2) #define USB_ENDPOINT_USAGE_MASK 0x30 #define USB_ENDPOINT_USAGE_DATA 0x00 #define USB_ENDPOINT_USAGE_FEEDBACK 0x10 #define USB_ENDPOINT_USAGE_IMPLICIT_FB 0x20 /* Implicit feedback Data endpoint */ /*-------------------------------------------------------------------------*/ /** Loading include/sound/asound.h +3 −1 Original line number Diff line number Diff line Loading @@ -706,7 +706,7 @@ struct snd_timer_tread { * * ****************************************************************************/ #define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 6) #define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7) struct snd_ctl_card_info { int card; /* card number */ Loading Loading @@ -803,6 +803,8 @@ struct snd_ctl_elem_info { unsigned int items; /* R: number of items */ unsigned int item; /* W: item number */ char name[64]; /* R: value name */ __u64 names_ptr; /* W: names list (ELEM_ADD only) */ unsigned int names_length; } enumerated; unsigned char reserved[128]; } value; Loading include/sound/mpu401.h +4 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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; Loading Loading @@ -131,7 +133,6 @@ int snd_mpu401_uart_new(struct snd_card *card, unsigned long port, unsigned int info_flags, int irq, int irq_flags, struct snd_rawmidi ** rrawmidi); #endif /* __SOUND_MPU401_H */ Loading
Documentation/DocBook/writing-an-alsa-driver.tmpl +21 −15 Original line number Diff line number Diff line Loading @@ -4288,7 +4288,7 @@ struct _snd_pcm_runtime { <![CDATA[ struct snd_rawmidi *rmidi; snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port, info_flags, irq, irq_flags, &rmidi); irq, &rmidi); ]]> </programlisting> </informalexample> Loading Loading @@ -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 Loading Loading @@ -4375,14 +4382,12 @@ 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 ISA irq number that will be allocated. If no interrupt is to be allocated (because your code is already allocating a shared interrupt, or because the device does not use interrupts), pass -1 instead. For a MPU-401 device without an interrupt, a polling timer will be used instead. </para> </section> Loading @@ -4390,12 +4395,13 @@ struct _snd_pcm_runtime { <title>Interrupt Handler</title> <para> When the interrupt is allocated in <function>snd_mpu401_uart_new()</function>, the 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. <function>snd_mpu401_uart_new()</function>, an exclusive ISA interrupt handler is automatically used, hence you don't have anything else to do 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> Loading
MAINTAINERS +1 −1 Original line number Diff line number Diff line Loading @@ -5990,7 +5990,7 @@ M: Jaroslav Kysela <perex@perex.cz> M: Takashi Iwai <tiwai@suse.de> L: alsa-devel@alsa-project.org (moderated for non-subscribers) W: http://www.alsa-project.org/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git T: git git://git.alsa-project.org/alsa-kernel.git S: Maintained F: Documentation/sound/ Loading
include/linux/usb/ch9.h +11 −6 Original line number Diff line number Diff line Loading @@ -377,12 +377,6 @@ struct usb_endpoint_descriptor { #define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ #define USB_ENDPOINT_DIR_MASK 0x80 #define USB_ENDPOINT_SYNCTYPE 0x0c #define USB_ENDPOINT_SYNC_NONE (0 << 2) #define USB_ENDPOINT_SYNC_ASYNC (1 << 2) #define USB_ENDPOINT_SYNC_ADAPTIVE (2 << 2) #define USB_ENDPOINT_SYNC_SYNC (3 << 2) #define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ #define USB_ENDPOINT_XFER_CONTROL 0 #define USB_ENDPOINT_XFER_ISOC 1 Loading @@ -390,6 +384,17 @@ struct usb_endpoint_descriptor { #define USB_ENDPOINT_XFER_INT 3 #define USB_ENDPOINT_MAX_ADJUSTABLE 0x80 #define USB_ENDPOINT_SYNCTYPE 0x0c #define USB_ENDPOINT_SYNC_NONE (0 << 2) #define USB_ENDPOINT_SYNC_ASYNC (1 << 2) #define USB_ENDPOINT_SYNC_ADAPTIVE (2 << 2) #define USB_ENDPOINT_SYNC_SYNC (3 << 2) #define USB_ENDPOINT_USAGE_MASK 0x30 #define USB_ENDPOINT_USAGE_DATA 0x00 #define USB_ENDPOINT_USAGE_FEEDBACK 0x10 #define USB_ENDPOINT_USAGE_IMPLICIT_FB 0x20 /* Implicit feedback Data endpoint */ /*-------------------------------------------------------------------------*/ /** Loading
include/sound/asound.h +3 −1 Original line number Diff line number Diff line Loading @@ -706,7 +706,7 @@ struct snd_timer_tread { * * ****************************************************************************/ #define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 6) #define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7) struct snd_ctl_card_info { int card; /* card number */ Loading Loading @@ -803,6 +803,8 @@ struct snd_ctl_elem_info { unsigned int items; /* R: number of items */ unsigned int item; /* W: item number */ char name[64]; /* R: value name */ __u64 names_ptr; /* W: names list (ELEM_ADD only) */ unsigned int names_length; } enumerated; unsigned char reserved[128]; } value; Loading
include/sound/mpu401.h +4 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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; Loading Loading @@ -131,7 +133,6 @@ int snd_mpu401_uart_new(struct snd_card *card, unsigned long port, unsigned int info_flags, int irq, int irq_flags, struct snd_rawmidi ** rrawmidi); #endif /* __SOUND_MPU401_H */