2 * forte.c - ForteMedia FM801 OSS Driver
4 * Written by Martin K. Petersen <mkp@mkp.net>
5 * Copyright (C) 2002 Hewlett-Packard Company
6 * Portions Copyright (C) 2003 Martin K. Petersen
8 * Latest version: http://mkp.net/forte/
10 * Based upon the ALSA FM801 driver by Jaroslav Kysela and OSS drivers
11 * by Thomas Sailer, Alan Cox, Zach Brown, and Jeff Garzik. Thanks
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License version
16 * 2 as published by the Free Software Foundation.
18 * This program is distributed in the hope that it will be useful, but
19 * WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 * General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
30 #include <linux/config.h>
31 #include <linux/module.h>
32 #include <linux/kernel.h>
34 #include <linux/init.h>
35 #include <linux/spinlock.h>
36 #include <linux/pci.h>
38 #include <linux/delay.h>
39 #include <linux/poll.h>
41 #include <linux/sound.h>
42 #include <linux/ac97_codec.h>
43 #include <linux/interrupt.h>
45 #include <linux/proc_fs.h>
47 #include <asm/uaccess.h>
50 #define DRIVER_NAME "forte"
51 #define DRIVER_VERSION "$Id: forte.c,v 1.63 2003/03/01 05:32:42 mkp Exp $"
52 #define PFX DRIVER_NAME ": "
57 #define DPRINTK(args...) printk(KERN_WARNING args)
59 #define DPRINTK(args...)
62 /* Card capabilities */
63 #define FORTE_CAPS (DSP_CAP_MMAP | DSP_CAP_TRIGGER)
65 /* Supported audio formats */
66 #define FORTE_FMTS (AFMT_U8 | AFMT_S16_LE)
69 #define FORTE_MIN_FRAG_SIZE 256
70 #define FORTE_MAX_FRAG_SIZE PAGE_SIZE
71 #define FORTE_DEF_FRAG_SIZE 256
72 #define FORTE_MIN_FRAGMENTS 2
73 #define FORTE_MAX_FRAGMENTS 256
74 #define FORTE_DEF_FRAGMENTS 2
75 #define FORTE_MIN_BUF_MSECS 500
76 #define FORTE_MAX_BUF_MSECS 1000
79 #define FORTE_PCM_VOL 0x00 /* PCM Output Volume */
80 #define FORTE_FM_VOL 0x02 /* FM Output Volume */
81 #define FORTE_I2S_VOL 0x04 /* I2S Volume */
82 #define FORTE_REC_SRC 0x06 /* Record Source */
83 #define FORTE_PLY_CTRL 0x08 /* Playback Control */
84 #define FORTE_PLY_COUNT 0x0a /* Playback Count */
85 #define FORTE_PLY_BUF1 0x0c /* Playback Buffer I */
86 #define FORTE_PLY_BUF2 0x10 /* Playback Buffer II */
87 #define FORTE_CAP_CTRL 0x14 /* Capture Control */
88 #define FORTE_CAP_COUNT 0x16 /* Capture Count */
89 #define FORTE_CAP_BUF1 0x18 /* Capture Buffer I */
90 #define FORTE_CAP_BUF2 0x1c /* Capture Buffer II */
91 #define FORTE_CODEC_CTRL 0x22 /* Codec Control */
92 #define FORTE_I2S_MODE 0x24 /* I2S Mode Control */
93 #define FORTE_VOLUME 0x26 /* Volume Up/Down/Mute Status */
94 #define FORTE_I2C_CTRL 0x29 /* I2C Control */
95 #define FORTE_AC97_CMD 0x2a /* AC'97 Command */
96 #define FORTE_AC97_DATA 0x2c /* AC'97 Data */
97 #define FORTE_MPU401_DATA 0x30 /* MPU401 Data */
98 #define FORTE_MPU401_CMD 0x31 /* MPU401 Command */
99 #define FORTE_GPIO_CTRL 0x52 /* General Purpose I/O Control */
100 #define FORTE_GEN_CTRL 0x54 /* General Control */
101 #define FORTE_IRQ_MASK 0x56 /* Interrupt Mask */
102 #define FORTE_IRQ_STATUS 0x5a /* Interrupt Status */
103 #define FORTE_OPL3_BANK0 0x68 /* OPL3 Status Read / Bank 0 Write */
104 #define FORTE_OPL3_DATA0 0x69 /* OPL3 Data 0 Write */
105 #define FORTE_OPL3_BANK1 0x6a /* OPL3 Bank 1 Write */
106 #define FORTE_OPL3_DATA1 0x6b /* OPL3 Bank 1 Write */
107 #define FORTE_POWERDOWN 0x70 /* Blocks Power Down Control */
109 #define FORTE_CAP_OFFSET FORTE_CAP_CTRL - FORTE_PLY_CTRL
111 #define FORTE_AC97_ADDR_SHIFT 10
113 /* Playback and record control register bits */
114 #define FORTE_BUF1_LAST (1<<1)
115 #define FORTE_BUF2_LAST (1<<2)
116 #define FORTE_START (1<<5)
117 #define FORTE_PAUSE (1<<6)
118 #define FORTE_IMMED_STOP (1<<7)
119 #define FORTE_RATE_SHIFT 8
120 #define FORTE_RATE_MASK (15 << FORTE_RATE_SHIFT)
121 #define FORTE_CHANNELS_4 (1<<12) /* Playback only */
122 #define FORTE_CHANNELS_6 (2<<12) /* Playback only */
123 #define FORTE_CHANNELS_6MS (3<<12) /* Playback only */
124 #define FORTE_CHANNELS_MASK (3<<12)
125 #define FORTE_16BIT (1<<14)
126 #define FORTE_STEREO (1<<15)
128 /* IRQ status bits */
129 #define FORTE_IRQ_PLAYBACK (1<<8)
130 #define FORTE_IRQ_CAPTURE (1<<9)
131 #define FORTE_IRQ_VOLUME (1<<14)
132 #define FORTE_IRQ_MPU (1<<15)
135 #define FORTE_CC_CODEC_RESET (1<<5)
136 #define FORTE_CC_AC97_RESET (1<<6)
139 #define FORTE_AC97_WRITE (0<<7)
140 #define FORTE_AC97_READ (1<<7)
141 #define FORTE_AC97_DP_INVALID (0<<8)
142 #define FORTE_AC97_DP_VALID (1<<8)
143 #define FORTE_AC97_PORT_RDY (0<<9)
144 #define FORTE_AC97_PORT_BSY (1<<9)
147 struct forte_channel
{
150 unsigned short ctrl
; /* Ctrl BAR contents */
151 unsigned long iobase
; /* Ctrl BAR address */
153 wait_queue_head_t wait
;
155 void *buf
; /* Buffer */
156 dma_addr_t buf_handle
; /* Buffer handle */
163 unsigned int frag_sz
; /* Current fragment size */
164 unsigned int frag_num
; /* Current # of fragments */
165 unsigned int frag_msecs
; /* Milliseconds per frag */
166 unsigned int buf_sz
; /* Current buffer size */
168 unsigned int hwptr
; /* Tail */
169 unsigned int swptr
; /* Head */
170 unsigned int filled_frags
; /* Fragments currently full */
171 unsigned int next_buf
; /* Index of next buffer */
173 unsigned int active
; /* Channel currently in use */
174 unsigned int mapped
; /* mmap */
176 unsigned int buf_pages
; /* Real size of buffer */
177 unsigned int nr_irqs
; /* Number of interrupts */
178 unsigned int bytes
; /* Total bytes */
179 unsigned int residue
; /* Partial fragment */
184 struct pci_dev
*pci_dev
;
185 unsigned long iobase
;
188 struct semaphore open_sem
; /* Device access */
189 spinlock_t lock
; /* State */
191 spinlock_t ac97_lock
;
192 struct ac97_codec
*ac97
;
195 int dsp
; /* OSS handle */
196 int trigger
; /* mmap I/O trigger */
198 struct forte_channel play
;
199 struct forte_channel rec
;
203 static int channels
[] = { 2, 4, 6, };
204 static int rates
[] = { 5500, 8000, 9600, 11025, 16000, 19200,
205 22050, 32000, 38400, 44100, 48000, };
207 static struct forte_chip
*forte
;
211 /* AC97 Codec -------------------------------------------------------------- */
216 * @chip: fm801 instance whose AC97 codec to wait on
223 forte_ac97_wait (struct forte_chip
*chip
)
227 while ( (inw (chip
->iobase
+ FORTE_AC97_CMD
) & FORTE_AC97_PORT_BSY
)
237 * @codec: AC97 codec to read from
238 * @reg: register to read
242 forte_ac97_read (struct ac97_codec
*codec
, u8 reg
)
245 struct forte_chip
*chip
= codec
->private_data
;
247 spin_lock (&chip
->ac97_lock
);
250 if (forte_ac97_wait (chip
)) {
251 printk (KERN_ERR PFX
"ac97_read: Serial bus busy\n");
255 /* Send read command */
256 outw (reg
| (1<<7), chip
->iobase
+ FORTE_AC97_CMD
);
258 if (forte_ac97_wait (chip
)) {
259 printk (KERN_ERR PFX
"ac97_read: Bus busy reading reg 0x%x\n",
264 /* Sanity checking */
265 if (inw (chip
->iobase
+ FORTE_AC97_CMD
) & FORTE_AC97_DP_INVALID
) {
266 printk (KERN_ERR PFX
"ac97_read: Invalid data port");
271 ret
= inw (chip
->iobase
+ FORTE_AC97_DATA
);
274 spin_unlock (&chip
->ac97_lock
);
281 * @codec: AC97 codec to send command to
282 * @reg: register to write
283 * @val: value to write
287 forte_ac97_write (struct ac97_codec
*codec
, u8 reg
, u16 val
)
289 struct forte_chip
*chip
= codec
->private_data
;
291 spin_lock (&chip
->ac97_lock
);
294 if (forte_ac97_wait (chip
)) {
295 printk (KERN_ERR PFX
"ac97_write: Serial bus busy\n");
299 outw (val
, chip
->iobase
+ FORTE_AC97_DATA
);
300 outb (reg
| FORTE_AC97_WRITE
, chip
->iobase
+ FORTE_AC97_CMD
);
302 /* Wait for completion */
303 if (forte_ac97_wait (chip
)) {
304 printk (KERN_ERR PFX
"ac97_write: Bus busy after write\n");
309 spin_unlock (&chip
->ac97_lock
);
313 /* Mixer ------------------------------------------------------------------- */
323 forte_mixer_open (struct inode
*inode
, struct file
*file
)
325 struct forte_chip
*chip
= forte
;
326 file
->private_data
= chip
->ac97
;
332 * forte_mixer_release:
338 forte_mixer_release (struct inode
*inode
, struct file
*file
)
340 /* We will welease Wodewick */
352 forte_mixer_ioctl (struct inode
*inode
, struct file
*file
,
353 unsigned int cmd
, unsigned long arg
)
355 struct ac97_codec
*codec
= (struct ac97_codec
*) file
->private_data
;
357 return codec
->mixer_ioctl (codec
, cmd
, arg
);
361 static struct file_operations forte_mixer_fops
= {
362 .owner
= THIS_MODULE
,
364 .ioctl
= forte_mixer_ioctl
,
365 .open
= forte_mixer_open
,
366 .release
= forte_mixer_release
,
370 /* Channel ----------------------------------------------------------------- */
373 * forte_channel_reset:
374 * @channel: Channel to reset
376 * Locking: Must be called with lock held.
380 forte_channel_reset (struct forte_channel
*channel
)
382 if (!channel
|| !channel
->iobase
)
385 DPRINTK ("%s: channel = %s\n", __FUNCTION__
, channel
->name
);
387 channel
->ctrl
&= ~FORTE_START
;
388 outw (channel
->ctrl
, channel
->iobase
+ FORTE_PLY_CTRL
);
390 /* We always play at least two fragments, hence these defaults */
391 channel
->hwptr
= channel
->frag_sz
;
392 channel
->next_buf
= 1;
394 channel
->filled_frags
= 0;
397 channel
->nr_irqs
= 0;
399 channel
->residue
= 0;
404 * forte_channel_start:
405 * @channel: Channel to start (record/playback)
407 * Locking: Must be called with lock held.
411 forte_channel_start (struct forte_channel
*channel
)
413 if (!channel
|| !channel
->iobase
|| channel
->active
)
416 channel
->ctrl
&= ~(FORTE_PAUSE
| FORTE_BUF1_LAST
| FORTE_BUF2_LAST
418 channel
->ctrl
|= FORTE_START
;
420 outw (channel
->ctrl
, channel
->iobase
+ FORTE_PLY_CTRL
);
425 * forte_channel_stop:
426 * @channel: Channel to stop
428 * Locking: Must be called with lock held.
432 forte_channel_stop (struct forte_channel
*channel
)
434 if (!channel
|| !channel
->iobase
)
437 channel
->ctrl
&= ~(FORTE_START
| FORTE_PAUSE
);
438 channel
->ctrl
|= FORTE_IMMED_STOP
;
441 outw (channel
->ctrl
, channel
->iobase
+ FORTE_PLY_CTRL
);
446 * forte_channel_pause:
447 * @channel: Channel to pause
449 * Locking: Must be called with lock held.
453 forte_channel_pause (struct forte_channel
*channel
)
455 if (!channel
|| !channel
->iobase
)
458 channel
->ctrl
|= FORTE_PAUSE
;
461 outw (channel
->ctrl
, channel
->iobase
+ FORTE_PLY_CTRL
);
466 * forte_channel_rate:
467 * @channel: Channel whose rate to set. Playback and record are
469 * @rate: Channel rate in Hz
471 * Locking: Must be called with lock held.
475 forte_channel_rate (struct forte_channel
*channel
, unsigned int rate
)
479 if (!channel
|| !channel
->iobase
)
482 /* The FM801 only supports a handful of fixed frequencies.
483 * We find the value closest to what userland requested.
485 if (rate
<= 6250) { rate
= 5500; new_rate
= 0; }
486 else if (rate
<= 8800) { rate
= 8000; new_rate
= 1; }
487 else if (rate
<= 10312) { rate
= 9600; new_rate
= 2; }
488 else if (rate
<= 13512) { rate
= 11025; new_rate
= 3; }
489 else if (rate
<= 17600) { rate
= 16000; new_rate
= 4; }
490 else if (rate
<= 20625) { rate
= 19200; new_rate
= 5; }
491 else if (rate
<= 27025) { rate
= 22050; new_rate
= 6; }
492 else if (rate
<= 35200) { rate
= 32000; new_rate
= 7; }
493 else if (rate
<= 41250) { rate
= 38400; new_rate
= 8; }
494 else if (rate
<= 46050) { rate
= 44100; new_rate
= 9; }
495 else { rate
= 48000; new_rate
= 10; }
497 channel
->ctrl
&= ~FORTE_RATE_MASK
;
498 channel
->ctrl
|= new_rate
<< FORTE_RATE_SHIFT
;
499 channel
->rate
= rate
;
501 DPRINTK ("%s: %s rate = %d\n", __FUNCTION__
, channel
->name
, rate
);
508 * forte_channel_format:
509 * @channel: Channel whose audio format to set
510 * @format: OSS format ID
512 * Locking: Must be called with lock held.
516 forte_channel_format (struct forte_channel
*channel
, int format
)
518 if (!channel
|| !channel
->iobase
)
527 channel
->ctrl
&= ~FORTE_16BIT
;
528 channel
->format
= AFMT_U8
;
533 channel
->ctrl
|= FORTE_16BIT
;
534 channel
->format
= AFMT_S16_LE
;
538 DPRINTK ("%s: %s want %d format, got %d\n", __FUNCTION__
, channel
->name
,
539 format
, channel
->format
);
541 return channel
->format
;
546 * forte_channel_stereo:
547 * @channel: Channel to toggle
548 * @stereo: 0 for Mono, 1 for Stereo
550 * Locking: Must be called with lock held.
554 forte_channel_stereo (struct forte_channel
*channel
, unsigned int stereo
)
558 if (!channel
|| !channel
->iobase
)
561 DPRINTK ("%s: %s stereo = %d\n", __FUNCTION__
, channel
->name
, stereo
);
566 channel
->ctrl
&= ~(FORTE_STEREO
| FORTE_CHANNELS_MASK
);
567 channel
-> stereo
= stereo
;
572 channel
->ctrl
&= ~FORTE_CHANNELS_MASK
;
573 channel
->ctrl
|= FORTE_STEREO
;
574 channel
-> stereo
= stereo
;
579 DPRINTK ("Unsupported channel format");
589 * forte_channel_buffer:
590 * @channel: Channel whose buffer to set up
592 * Locking: Must be called with lock held.
596 forte_channel_buffer (struct forte_channel
*channel
, int sz
, int num
)
598 unsigned int msecs
, shift
;
600 /* Go away, I'm busy */
601 if (channel
->filled_frags
|| channel
->bytes
)
604 /* Fragment size must be a power of 2 */
608 channel
->frag_sz
= 1 << shift
;
610 /* Round fragment size to something reasonable */
611 if (channel
->frag_sz
< FORTE_MIN_FRAG_SIZE
)
612 channel
->frag_sz
= FORTE_MIN_FRAG_SIZE
;
614 if (channel
->frag_sz
> FORTE_MAX_FRAG_SIZE
)
615 channel
->frag_sz
= FORTE_MAX_FRAG_SIZE
;
617 /* Find fragment length in milliseconds */
618 msecs
= channel
->frag_sz
/
619 (channel
->format
== AFMT_S16_LE
? 2 : 1) /
620 (channel
->stereo
? 2 : 1) /
621 (channel
->rate
/ 1000);
623 channel
->frag_msecs
= msecs
;
625 /* Pick a suitable number of fragments */
626 if (msecs
* num
< FORTE_MIN_BUF_MSECS
)
627 num
= FORTE_MIN_BUF_MSECS
/ msecs
;
629 if (msecs
* num
> FORTE_MAX_BUF_MSECS
)
630 num
= FORTE_MAX_BUF_MSECS
/ msecs
;
632 /* Fragment number must be a power of 2 */
636 channel
->frag_num
= 1 << (shift
+ 1);
638 /* Round fragment number to something reasonable */
639 if (channel
->frag_num
< FORTE_MIN_FRAGMENTS
)
640 channel
->frag_num
= FORTE_MIN_FRAGMENTS
;
642 if (channel
->frag_num
> FORTE_MAX_FRAGMENTS
)
643 channel
->frag_num
= FORTE_MAX_FRAGMENTS
;
645 channel
->buf_sz
= channel
->frag_sz
* channel
->frag_num
;
647 DPRINTK ("%s: %s frag_sz = %d, frag_num = %d, buf_sz = %d\n",
648 __FUNCTION__
, channel
->name
, channel
->frag_sz
,
649 channel
->frag_num
, channel
->buf_sz
);
654 * forte_channel_prep:
655 * @channel: Channel whose buffer to prepare
657 * Locking: Lock held.
661 forte_channel_prep (struct forte_channel
*channel
)
669 forte_channel_buffer (channel
, channel
->frag_sz
, channel
->frag_num
);
670 channel
->buf_pages
= channel
->buf_sz
>> PAGE_SHIFT
;
672 if (channel
->buf_sz
% PAGE_SIZE
)
673 channel
->buf_pages
++;
675 DPRINTK ("%s: %s frag_sz = %d, frag_num = %d, buf_sz = %d, pg = %d\n",
676 __FUNCTION__
, channel
->name
, channel
->frag_sz
,
677 channel
->frag_num
, channel
->buf_sz
, channel
->buf_pages
);
680 channel
->buf
= pci_alloc_consistent (forte
->pci_dev
,
681 channel
->buf_pages
* PAGE_SIZE
,
682 &channel
->buf_handle
);
684 if (!channel
->buf
|| !channel
->buf_handle
)
687 page
= virt_to_page (channel
->buf
);
689 /* FIXME: can this go away ? */
690 for (i
= 0 ; i
< channel
->buf_pages
; i
++)
691 SetPageReserved(page
++);
693 /* Prep buffer registers */
694 outw (channel
->frag_sz
- 1, channel
->iobase
+ FORTE_PLY_COUNT
);
695 outl (channel
->buf_handle
, channel
->iobase
+ FORTE_PLY_BUF1
);
696 outl (channel
->buf_handle
+ channel
->frag_sz
,
697 channel
->iobase
+ FORTE_PLY_BUF2
);
700 channel
->hwptr
= channel
->frag_sz
;
701 channel
->next_buf
= 1;
703 DPRINTK ("%s: %s buffer @ %p (%p)\n", __FUNCTION__
, channel
->name
,
704 channel
->buf
, channel
->buf_handle
);
709 * forte_channel_drain:
713 * Locking: Don't hold the lock.
717 forte_channel_drain (struct forte_channel
*channel
)
719 DECLARE_WAITQUEUE (wait
, current
);
722 DPRINTK ("%s\n", __FUNCTION__
);
724 if (channel
->mapped
) {
725 spin_lock_irqsave (&forte
->lock
, flags
);
726 forte_channel_stop (channel
);
727 spin_unlock_irqrestore (&forte
->lock
, flags
);
731 spin_lock_irqsave (&forte
->lock
, flags
);
732 add_wait_queue (&channel
->wait
, &wait
);
735 if (channel
->active
== 0 || channel
->filled_frags
== 1)
738 spin_unlock_irqrestore (&forte
->lock
, flags
);
740 __set_current_state (TASK_INTERRUPTIBLE
);
743 spin_lock_irqsave (&forte
->lock
, flags
);
746 forte_channel_stop (channel
);
747 forte_channel_reset (channel
);
748 set_current_state (TASK_RUNNING
);
749 remove_wait_queue (&channel
->wait
, &wait
);
750 spin_unlock_irqrestore (&forte
->lock
, flags
);
757 * forte_channel_init:
758 * @chip: Forte chip instance the channel hangs off
759 * @channel: Channel to initialize
762 * Initializes a channel, sets defaults, and allocates
765 * Locking: No lock held.
769 forte_channel_init (struct forte_chip
*chip
, struct forte_channel
*channel
)
771 DPRINTK ("%s: chip iobase @ %p\n", __FUNCTION__
, (void *)chip
->iobase
);
773 spin_lock_irq (&chip
->lock
);
774 memset (channel
, 0x0, sizeof (*channel
));
776 if (channel
== &chip
->play
) {
777 channel
->name
= "PCM_OUT";
778 channel
->iobase
= chip
->iobase
;
779 DPRINTK ("%s: PCM-OUT iobase @ %p\n", __FUNCTION__
,
780 (void *) channel
->iobase
);
782 else if (channel
== &chip
->rec
) {
783 channel
->name
= "PCM_IN";
784 channel
->iobase
= chip
->iobase
+ FORTE_CAP_OFFSET
;
786 DPRINTK ("%s: PCM-IN iobase @ %p\n", __FUNCTION__
,
787 (void *) channel
->iobase
);
792 init_waitqueue_head (&channel
->wait
);
794 /* Defaults: 48kHz, 16-bit, stereo */
795 channel
->ctrl
= inw (channel
->iobase
+ FORTE_PLY_CTRL
);
796 forte_channel_reset (channel
);
797 forte_channel_stereo (channel
, 1);
798 forte_channel_format (channel
, AFMT_S16_LE
);
799 forte_channel_rate (channel
, 48000);
800 channel
->frag_sz
= FORTE_DEF_FRAG_SIZE
;
801 channel
->frag_num
= FORTE_DEF_FRAGMENTS
;
804 spin_unlock_irq (&chip
->lock
);
811 * forte_channel_free:
812 * @chip: Chip this channel hangs off
813 * @channel: Channel to nuke
816 * Resets channel and frees buffers.
818 * Locking: Hold your horses.
822 forte_channel_free (struct forte_chip
*chip
, struct forte_channel
*channel
)
824 DPRINTK ("%s: %s\n", __FUNCTION__
, channel
->name
);
826 if (!channel
->buf_handle
)
829 pci_free_consistent (chip
->pci_dev
, channel
->buf_pages
* PAGE_SIZE
,
830 channel
->buf
, channel
->buf_handle
);
832 memset (channel
, 0x0, sizeof (*channel
));
836 /* DSP --------------------------------------------------------------------- */
844 forte_dsp_ioctl (struct inode
*inode
, struct file
*file
, unsigned int cmd
,
847 int ival
=0, ret
, rval
=0, rd
, wr
, count
;
848 struct forte_chip
*chip
;
849 struct audio_buf_info abi
;
850 struct count_info cinfo
;
851 void __user
*argp
= (void __user
*)arg
;
852 int __user
*p
= argp
;
854 chip
= file
->private_data
;
856 if (file
->f_mode
& FMODE_WRITE
)
861 if (file
->f_mode
& FMODE_READ
)
869 return put_user (SOUND_VERSION
, p
);
871 case SNDCTL_DSP_GETCAPS
:
872 DPRINTK ("%s: GETCAPS\n", __FUNCTION__
);
874 ival
= FORTE_CAPS
; /* DUPLEX */
875 return put_user (ival
, p
);
877 case SNDCTL_DSP_GETFMTS
:
878 DPRINTK ("%s: GETFMTS\n", __FUNCTION__
);
880 ival
= FORTE_FMTS
; /* U8, 16LE */
881 return put_user (ival
, p
);
883 case SNDCTL_DSP_SETFMT
: /* U8, 16LE */
884 DPRINTK ("%s: SETFMT\n", __FUNCTION__
);
886 if (get_user (ival
, p
))
889 spin_lock_irq (&chip
->lock
);
892 forte_channel_stop (&chip
->rec
);
893 rval
= forte_channel_format (&chip
->rec
, ival
);
897 forte_channel_stop (&chip
->rec
);
898 rval
= forte_channel_format (&chip
->play
, ival
);
901 spin_unlock_irq (&chip
->lock
);
903 return put_user (rval
, p
);
905 case SNDCTL_DSP_STEREO
: /* 0 - mono, 1 - stereo */
906 DPRINTK ("%s: STEREO\n", __FUNCTION__
);
908 if (get_user (ival
, p
))
911 spin_lock_irq (&chip
->lock
);
914 forte_channel_stop (&chip
->rec
);
915 rval
= forte_channel_stereo (&chip
->rec
, ival
);
919 forte_channel_stop (&chip
->rec
);
920 rval
= forte_channel_stereo (&chip
->play
, ival
);
923 spin_unlock_irq (&chip
->lock
);
925 return put_user (rval
, p
);
927 case SNDCTL_DSP_CHANNELS
: /* 1 - mono, 2 - stereo */
928 DPRINTK ("%s: CHANNELS\n", __FUNCTION__
);
930 if (get_user (ival
, p
))
933 spin_lock_irq (&chip
->lock
);
936 forte_channel_stop (&chip
->rec
);
937 rval
= forte_channel_stereo (&chip
->rec
, ival
-1) + 1;
941 forte_channel_stop (&chip
->play
);
942 rval
= forte_channel_stereo (&chip
->play
, ival
-1) + 1;
945 spin_unlock_irq (&chip
->lock
);
947 return put_user (rval
, p
);
949 case SNDCTL_DSP_SPEED
:
950 DPRINTK ("%s: SPEED\n", __FUNCTION__
);
952 if (get_user (ival
, p
))
955 spin_lock_irq (&chip
->lock
);
958 forte_channel_stop (&chip
->rec
);
959 rval
= forte_channel_rate (&chip
->rec
, ival
);
963 forte_channel_stop (&chip
->play
);
964 rval
= forte_channel_rate (&chip
->play
, ival
);
967 spin_unlock_irq (&chip
->lock
);
969 return put_user(rval
, p
);
971 case SNDCTL_DSP_GETBLKSIZE
:
972 DPRINTK ("%s: GETBLKSIZE\n", __FUNCTION__
);
974 spin_lock_irq (&chip
->lock
);
977 ival
= chip
->rec
.frag_sz
;
980 ival
= chip
->play
.frag_sz
;
982 spin_unlock_irq (&chip
->lock
);
984 return put_user (ival
, p
);
986 case SNDCTL_DSP_RESET
:
987 DPRINTK ("%s: RESET\n", __FUNCTION__
);
989 spin_lock_irq (&chip
->lock
);
992 forte_channel_reset (&chip
->rec
);
995 forte_channel_reset (&chip
->play
);
997 spin_unlock_irq (&chip
->lock
);
1001 case SNDCTL_DSP_SYNC
:
1002 DPRINTK ("%s: SYNC\n", __FUNCTION__
);
1005 ret
= forte_channel_drain (&chip
->play
);
1009 case SNDCTL_DSP_POST
:
1010 DPRINTK ("%s: POST\n", __FUNCTION__
);
1013 spin_lock_irq (&chip
->lock
);
1015 if (chip
->play
.filled_frags
)
1016 forte_channel_start (&chip
->play
);
1018 spin_unlock_irq (&chip
->lock
);
1023 case SNDCTL_DSP_SETFRAGMENT
:
1024 DPRINTK ("%s: SETFRAGMENT\n", __FUNCTION__
);
1026 if (get_user (ival
, p
))
1029 spin_lock_irq (&chip
->lock
);
1032 forte_channel_buffer (&chip
->rec
, ival
& 0xffff,
1033 (ival
>> 16) & 0xffff);
1034 ival
= (chip
->rec
.frag_num
<< 16) + chip
->rec
.frag_sz
;
1038 forte_channel_buffer (&chip
->play
, ival
& 0xffff,
1039 (ival
>> 16) & 0xffff);
1040 ival
= (chip
->play
.frag_num
<< 16) +chip
->play
.frag_sz
;
1043 spin_unlock_irq (&chip
->lock
);
1045 return put_user (ival
, p
);
1047 case SNDCTL_DSP_GETISPACE
:
1048 DPRINTK ("%s: GETISPACE\n", __FUNCTION__
);
1053 spin_lock_irq (&chip
->lock
);
1055 abi
.fragstotal
= chip
->rec
.frag_num
;
1056 abi
.fragsize
= chip
->rec
.frag_sz
;
1058 if (chip
->rec
.mapped
) {
1059 abi
.fragments
= chip
->rec
.frag_num
- 2;
1060 abi
.bytes
= abi
.fragments
* abi
.fragsize
;
1063 abi
.fragments
= chip
->rec
.filled_frags
;
1064 abi
.bytes
= abi
.fragments
* abi
.fragsize
;
1067 spin_unlock_irq (&chip
->lock
);
1069 return copy_to_user (argp
, &abi
, sizeof (abi
)) ? -EFAULT
: 0;
1071 case SNDCTL_DSP_GETIPTR
:
1072 DPRINTK ("%s: GETIPTR\n", __FUNCTION__
);
1077 spin_lock_irq (&chip
->lock
);
1079 if (chip
->rec
.active
)
1080 cinfo
.ptr
= chip
->rec
.hwptr
;
1084 cinfo
.bytes
= chip
->rec
.bytes
;
1085 cinfo
.blocks
= chip
->rec
.nr_irqs
;
1086 chip
->rec
.nr_irqs
= 0;
1088 spin_unlock_irq (&chip
->lock
);
1090 return copy_to_user (argp
, &cinfo
, sizeof (cinfo
)) ? -EFAULT
: 0;
1092 case SNDCTL_DSP_GETOSPACE
:
1096 spin_lock_irq (&chip
->lock
);
1098 abi
.fragstotal
= chip
->play
.frag_num
;
1099 abi
.fragsize
= chip
->play
.frag_sz
;
1101 if (chip
->play
.mapped
) {
1102 abi
.fragments
= chip
->play
.frag_num
- 2;
1103 abi
.bytes
= chip
->play
.buf_sz
;
1106 abi
.fragments
= chip
->play
.frag_num
-
1107 chip
->play
.filled_frags
;
1109 if (chip
->play
.residue
)
1112 abi
.bytes
= abi
.fragments
* abi
.fragsize
+
1116 spin_unlock_irq (&chip
->lock
);
1118 return copy_to_user (argp
, &abi
, sizeof (abi
)) ? -EFAULT
: 0;
1120 case SNDCTL_DSP_GETOPTR
:
1124 spin_lock_irq (&chip
->lock
);
1126 if (chip
->play
.active
)
1127 cinfo
.ptr
= chip
->play
.hwptr
;
1131 cinfo
.bytes
= chip
->play
.bytes
;
1132 cinfo
.blocks
= chip
->play
.nr_irqs
;
1133 chip
->play
.nr_irqs
= 0;
1135 spin_unlock_irq (&chip
->lock
);
1137 return copy_to_user (argp
, &cinfo
, sizeof (cinfo
)) ? -EFAULT
: 0;
1139 case SNDCTL_DSP_GETODELAY
:
1143 spin_lock_irq (&chip
->lock
);
1145 if (!chip
->play
.active
) {
1148 else if (chip
->play
.mapped
) {
1149 count
= inw (chip
->play
.iobase
+ FORTE_PLY_COUNT
) + 1;
1150 ival
= chip
->play
.frag_sz
- count
;
1153 ival
= chip
->play
.filled_frags
* chip
->play
.frag_sz
;
1155 if (chip
->play
.residue
)
1156 ival
+= chip
->play
.frag_sz
- chip
->play
.residue
;
1159 spin_unlock_irq (&chip
->lock
);
1161 return put_user (ival
, p
);
1163 case SNDCTL_DSP_SETDUPLEX
:
1164 DPRINTK ("%s: SETDUPLEX\n", __FUNCTION__
);
1168 case SNDCTL_DSP_GETTRIGGER
:
1169 DPRINTK ("%s: GETTRIGGER\n", __FUNCTION__
);
1171 return put_user (chip
->trigger
, p
);
1173 case SNDCTL_DSP_SETTRIGGER
:
1175 if (get_user (ival
, p
))
1178 DPRINTK ("%s: SETTRIGGER %d\n", __FUNCTION__
, ival
);
1181 spin_lock_irq (&chip
->lock
);
1183 if (ival
& PCM_ENABLE_OUTPUT
)
1184 forte_channel_start (&chip
->play
);
1187 forte_channel_prep (&chip
->play
);
1188 forte_channel_stop (&chip
->play
);
1191 spin_unlock_irq (&chip
->lock
);
1194 spin_lock_irq (&chip
->lock
);
1196 if (ival
& PCM_ENABLE_INPUT
)
1197 forte_channel_start (&chip
->rec
);
1200 forte_channel_prep (&chip
->rec
);
1201 forte_channel_stop (&chip
->rec
);
1204 spin_unlock_irq (&chip
->lock
);
1209 case SOUND_PCM_READ_RATE
:
1210 DPRINTK ("%s: PCM_READ_RATE\n", __FUNCTION__
);
1211 return put_user (chip
->play
.rate
, p
);
1213 case SOUND_PCM_READ_CHANNELS
:
1214 DPRINTK ("%s: PCM_READ_CHANNELS\n", __FUNCTION__
);
1215 return put_user (chip
->play
.stereo
, p
);
1217 case SOUND_PCM_READ_BITS
:
1218 DPRINTK ("%s: PCM_READ_BITS\n", __FUNCTION__
);
1219 return put_user (chip
->play
.format
, p
);
1221 case SNDCTL_DSP_NONBLOCK
:
1222 DPRINTK ("%s: DSP_NONBLOCK\n", __FUNCTION__
);
1223 file
->f_flags
|= O_NONBLOCK
;
1227 DPRINTK ("Unsupported ioctl: %x (%p)\n", cmd
, argp
);
1240 forte_dsp_open (struct inode
*inode
, struct file
*file
)
1242 struct forte_chip
*chip
= forte
; /* FIXME: HACK FROM HELL! */
1244 if (file
->f_flags
& O_NONBLOCK
) {
1245 if (down_trylock (&chip
->open_sem
)) {
1246 DPRINTK ("%s: returning -EAGAIN\n", __FUNCTION__
);
1251 if (down_interruptible (&chip
->open_sem
)) {
1252 DPRINTK ("%s: returning -ERESTARTSYS\n", __FUNCTION__
);
1253 return -ERESTARTSYS
;
1257 file
->private_data
= forte
;
1259 DPRINTK ("%s: dsp opened by %d\n", __FUNCTION__
, current
->pid
);
1261 if (file
->f_mode
& FMODE_WRITE
)
1262 forte_channel_init (forte
, &forte
->play
);
1264 if (file
->f_mode
& FMODE_READ
)
1265 forte_channel_init (forte
, &forte
->rec
);
1267 return nonseekable_open(inode
, file
);
1272 * forte_dsp_release:
1276 forte_dsp_release (struct inode
*inode
, struct file
*file
)
1278 struct forte_chip
*chip
= file
->private_data
;
1281 DPRINTK ("%s: chip @ %p\n", __FUNCTION__
, chip
);
1283 if (file
->f_mode
& FMODE_WRITE
) {
1284 forte_channel_drain (&chip
->play
);
1286 spin_lock_irq (&chip
->lock
);
1288 forte_channel_free (chip
, &chip
->play
);
1290 spin_unlock_irq (&chip
->lock
);
1293 if (file
->f_mode
& FMODE_READ
) {
1294 while (chip
->rec
.filled_frags
> 0)
1295 interruptible_sleep_on (&chip
->rec
.wait
);
1297 spin_lock_irq (&chip
->lock
);
1299 forte_channel_stop (&chip
->rec
);
1300 forte_channel_free (chip
, &chip
->rec
);
1302 spin_unlock_irq (&chip
->lock
);
1305 up (&chip
->open_sem
);
1317 forte_dsp_poll (struct file
*file
, struct poll_table_struct
*wait
)
1319 struct forte_chip
*chip
;
1320 struct forte_channel
*channel
;
1321 unsigned int mask
= 0;
1323 chip
= file
->private_data
;
1325 if (file
->f_mode
& FMODE_WRITE
) {
1326 channel
= &chip
->play
;
1328 if (channel
->active
)
1329 poll_wait (file
, &channel
->wait
, wait
);
1331 spin_lock_irq (&chip
->lock
);
1333 if (channel
->frag_num
- channel
->filled_frags
> 0)
1334 mask
|= POLLOUT
| POLLWRNORM
;
1336 spin_unlock_irq (&chip
->lock
);
1339 if (file
->f_mode
& FMODE_READ
) {
1340 channel
= &chip
->rec
;
1342 if (channel
->active
)
1343 poll_wait (file
, &channel
->wait
, wait
);
1345 spin_lock_irq (&chip
->lock
);
1347 if (channel
->filled_frags
> 0)
1348 mask
|= POLLIN
| POLLRDNORM
;
1350 spin_unlock_irq (&chip
->lock
);
1362 forte_dsp_mmap (struct file
*file
, struct vm_area_struct
*vma
)
1364 struct forte_chip
*chip
;
1365 struct forte_channel
*channel
;
1369 chip
= file
->private_data
;
1371 DPRINTK ("%s: start %lXh, size %ld, pgoff %ld\n", __FUNCTION__
,
1372 vma
->vm_start
, vma
->vm_end
- vma
->vm_start
, vma
->vm_pgoff
);
1374 spin_lock_irq (&chip
->lock
);
1376 if (vma
->vm_flags
& VM_WRITE
&& chip
->play
.active
) {
1381 if (vma
->vm_flags
& VM_READ
&& chip
->rec
.active
) {
1386 if (file
->f_mode
& FMODE_WRITE
)
1387 channel
= &chip
->play
;
1388 else if (file
->f_mode
& FMODE_READ
)
1389 channel
= &chip
->rec
;
1395 forte_channel_prep (channel
);
1396 channel
->mapped
= 1;
1398 if (vma
->vm_pgoff
!= 0) {
1403 size
= vma
->vm_end
- vma
->vm_start
;
1405 if (size
> channel
->buf_pages
* PAGE_SIZE
) {
1406 DPRINTK ("%s: size (%ld) > buf_sz (%d) \n", __FUNCTION__
,
1407 size
, channel
->buf_sz
);
1412 if (remap_pfn_range(vma
, vma
->vm_start
,
1413 virt_to_phys(channel
->buf
) >> PAGE_SHIFT
,
1414 size
, vma
->vm_page_prot
)) {
1415 DPRINTK ("%s: remap el a no worko\n", __FUNCTION__
);
1423 spin_unlock_irq (&chip
->lock
);
1433 forte_dsp_write (struct file
*file
, const char __user
*buffer
, size_t bytes
,
1436 struct forte_chip
*chip
;
1437 struct forte_channel
*channel
;
1438 unsigned int i
= bytes
, sz
= 0;
1439 unsigned long flags
;
1441 if (!access_ok (VERIFY_READ
, buffer
, bytes
))
1444 chip
= (struct forte_chip
*) file
->private_data
;
1449 channel
= &chip
->play
;
1454 spin_lock_irqsave (&chip
->lock
, flags
);
1456 /* Set up buffers with the right fragment size */
1457 forte_channel_prep (channel
);
1460 /* All fragment buffers in use -> wait */
1461 if (channel
->frag_num
- channel
->filled_frags
== 0) {
1462 DECLARE_WAITQUEUE (wait
, current
);
1464 /* For trigger or non-blocking operation, get out */
1465 if (chip
->trigger
|| file
->f_flags
& O_NONBLOCK
) {
1466 spin_unlock_irqrestore (&chip
->lock
, flags
);
1470 /* Otherwise wait for buffers */
1471 add_wait_queue (&channel
->wait
, &wait
);
1474 spin_unlock_irqrestore (&chip
->lock
, flags
);
1476 set_current_state (TASK_INTERRUPTIBLE
);
1479 spin_lock_irqsave (&chip
->lock
, flags
);
1481 if (channel
->frag_num
- channel
->filled_frags
)
1485 remove_wait_queue (&channel
->wait
, &wait
);
1486 set_current_state (TASK_RUNNING
);
1488 if (signal_pending (current
)) {
1489 spin_unlock_irqrestore (&chip
->lock
, flags
);
1490 return -ERESTARTSYS
;
1494 if (channel
->residue
)
1495 sz
= channel
->residue
;
1496 else if (i
> channel
->frag_sz
)
1497 sz
= channel
->frag_sz
;
1501 spin_unlock_irqrestore (&chip
->lock
, flags
);
1503 if (copy_from_user ((void *) channel
->buf
+ channel
->swptr
, buffer
, sz
))
1506 spin_lock_irqsave (&chip
->lock
, flags
);
1508 /* Advance software pointer */
1510 channel
->swptr
+= sz
;
1511 channel
->swptr
%= channel
->buf_sz
;
1514 /* Only bump filled_frags if a full fragment has been written */
1515 if (channel
->swptr
% channel
->frag_sz
== 0) {
1516 channel
->filled_frags
++;
1517 channel
->residue
= 0;
1520 channel
->residue
= channel
->frag_sz
- sz
;
1522 /* If playback isn't active, start it */
1523 if (channel
->active
== 0 && chip
->trigger
== 0)
1524 forte_channel_start (channel
);
1527 spin_unlock_irqrestore (&chip
->lock
, flags
);
1538 forte_dsp_read (struct file
*file
, char __user
*buffer
, size_t bytes
,
1541 struct forte_chip
*chip
;
1542 struct forte_channel
*channel
;
1543 unsigned int i
= bytes
, sz
;
1544 unsigned long flags
;
1546 if (!access_ok (VERIFY_WRITE
, buffer
, bytes
))
1549 chip
= (struct forte_chip
*) file
->private_data
;
1554 channel
= &chip
->rec
;
1559 spin_lock_irqsave (&chip
->lock
, flags
);
1561 /* Set up buffers with the right fragment size */
1562 forte_channel_prep (channel
);
1564 /* Start recording */
1566 forte_channel_start (channel
);
1569 /* No fragment buffers in use -> wait */
1570 if (channel
->filled_frags
== 0) {
1571 DECLARE_WAITQUEUE (wait
, current
);
1573 /* For trigger mode operation, get out */
1574 if (chip
->trigger
) {
1575 spin_unlock_irqrestore (&chip
->lock
, flags
);
1579 add_wait_queue (&channel
->wait
, &wait
);
1582 if (channel
->active
== 0)
1585 if (channel
->filled_frags
)
1588 spin_unlock_irqrestore (&chip
->lock
, flags
);
1590 set_current_state (TASK_INTERRUPTIBLE
);
1593 spin_lock_irqsave (&chip
->lock
, flags
);
1596 set_current_state (TASK_RUNNING
);
1597 remove_wait_queue (&channel
->wait
, &wait
);
1600 if (i
> channel
->frag_sz
)
1601 sz
= channel
->frag_sz
;
1605 spin_unlock_irqrestore (&chip
->lock
, flags
);
1607 if (copy_to_user (buffer
, (void *)channel
->buf
+channel
->swptr
, sz
)) {
1608 DPRINTK ("%s: copy_to_user failed\n", __FUNCTION__
);
1612 spin_lock_irqsave (&chip
->lock
, flags
);
1614 /* Advance software pointer */
1616 if (channel
->filled_frags
> 0)
1617 channel
->filled_frags
--;
1618 channel
->swptr
+= channel
->frag_sz
;
1619 channel
->swptr
%= channel
->buf_sz
;
1623 spin_unlock_irqrestore (&chip
->lock
, flags
);
1629 static struct file_operations forte_dsp_fops
= {
1630 .owner
= THIS_MODULE
,
1631 .llseek
= &no_llseek
,
1632 .read
= &forte_dsp_read
,
1633 .write
= &forte_dsp_write
,
1634 .poll
= &forte_dsp_poll
,
1635 .ioctl
= &forte_dsp_ioctl
,
1636 .open
= &forte_dsp_open
,
1637 .release
= &forte_dsp_release
,
1638 .mmap
= &forte_dsp_mmap
,
1642 /* Common ------------------------------------------------------------------ */
1650 forte_interrupt (int irq
, void *dev_id
, struct pt_regs
*regs
)
1652 struct forte_chip
*chip
= dev_id
;
1653 struct forte_channel
*channel
= NULL
;
1656 status
= inw (chip
->iobase
+ FORTE_IRQ_STATUS
);
1658 /* If this is not for us, get outta here ASAP */
1659 if ((status
& (FORTE_IRQ_PLAYBACK
| FORTE_IRQ_CAPTURE
)) == 0)
1662 if (status
& FORTE_IRQ_PLAYBACK
) {
1663 channel
= &chip
->play
;
1665 spin_lock (&chip
->lock
);
1667 if (channel
->frag_sz
== 0)
1670 /* Declare a fragment done */
1671 if (channel
->filled_frags
> 0)
1672 channel
->filled_frags
--;
1673 channel
->bytes
+= channel
->frag_sz
;
1676 /* Flip-flop between buffer I and II */
1677 channel
->next_buf
^= 1;
1679 /* Advance hardware pointer by fragment size and wrap around */
1680 channel
->hwptr
+= channel
->frag_sz
;
1681 channel
->hwptr
%= channel
->buf_sz
;
1683 /* Buffer I or buffer II BAR */
1684 outl (channel
->buf_handle
+ channel
->hwptr
,
1685 channel
->next_buf
== 0 ?
1686 channel
->iobase
+ FORTE_PLY_BUF1
:
1687 channel
->iobase
+ FORTE_PLY_BUF2
);
1689 /* If the currently playing fragment is last, schedule pause */
1690 if (channel
->filled_frags
== 1)
1691 forte_channel_pause (channel
);
1694 /* Acknowledge interrupt */
1695 outw (FORTE_IRQ_PLAYBACK
, chip
->iobase
+ FORTE_IRQ_STATUS
);
1697 if (waitqueue_active (&channel
->wait
))
1698 wake_up_all (&channel
->wait
);
1700 spin_unlock (&chip
->lock
);
1703 if (status
& FORTE_IRQ_CAPTURE
) {
1704 channel
= &chip
->rec
;
1705 spin_lock (&chip
->lock
);
1707 /* One fragment filled */
1708 channel
->filled_frags
++;
1710 /* Get # of completed bytes */
1711 count
= inw (channel
->iobase
+ FORTE_PLY_COUNT
) + 1;
1714 DPRINTK ("%s: last, filled_frags = %d\n", __FUNCTION__
,
1715 channel
->filled_frags
);
1716 channel
->filled_frags
= 0;
1720 /* Buffer I or buffer II BAR */
1721 outl (channel
->buf_handle
+ channel
->hwptr
,
1722 channel
->next_buf
== 0 ?
1723 channel
->iobase
+ FORTE_PLY_BUF1
:
1724 channel
->iobase
+ FORTE_PLY_BUF2
);
1726 /* Flip-flop between buffer I and II */
1727 channel
->next_buf
^= 1;
1729 /* Advance hardware pointer by fragment size and wrap around */
1730 channel
->hwptr
+= channel
->frag_sz
;
1731 channel
->hwptr
%= channel
->buf_sz
;
1733 /* Out of buffers */
1734 if (channel
->filled_frags
== channel
->frag_num
- 1)
1735 forte_channel_stop (channel
);
1737 /* Acknowledge interrupt */
1738 outw (FORTE_IRQ_CAPTURE
, chip
->iobase
+ FORTE_IRQ_STATUS
);
1740 spin_unlock (&chip
->lock
);
1742 if (waitqueue_active (&channel
->wait
))
1743 wake_up_all (&channel
->wait
);
1755 forte_proc_read (char *page
, char **start
, off_t off
, int count
,
1756 int *eof
, void *data
)
1758 int i
= 0, p_rate
, p_chan
, r_rate
;
1759 unsigned short p_reg
, r_reg
;
1761 i
+= sprintf (page
, "ForteMedia FM801 OSS Lite driver\n%s\n \n",
1767 p_rate
= p_chan
= -1;
1768 p_reg
= inw (forte
->iobase
+ FORTE_PLY_CTRL
);
1769 p_rate
= (p_reg
>> 8) & 15;
1770 p_chan
= (p_reg
>> 12) & 3;
1772 if (p_rate
>= 0 || p_rate
<= 10)
1773 p_rate
= rates
[p_rate
];
1775 if (p_chan
>= 0 || p_chan
<= 2)
1776 p_chan
= channels
[p_chan
];
1779 r_reg
= inw (forte
->iobase
+ FORTE_CAP_CTRL
);
1780 r_rate
= (r_reg
>> 8) & 15;
1782 if (r_rate
>= 0 || r_rate
<= 10)
1783 r_rate
= rates
[r_rate
];
1785 i
+= sprintf (page
+ i
,
1786 " Playback Capture\n"
1787 "FIFO empty : %-3s %-3s\n"
1788 "Buf1 Last : %-3s %-3s\n"
1789 "Buf2 Last : %-3s %-3s\n"
1790 "Started : %-3s %-3s\n"
1791 "Paused : %-3s %-3s\n"
1792 "Immed Stop : %-3s %-3s\n"
1793 "Rate : %-5d %-5d\n"
1794 "Channels : %-5d -\n"
1795 "16-bit : %-3s %-3s\n"
1796 "Stereo : %-3s %-3s\n"
1798 "Buffer Sz : %-6d %-6d\n"
1799 "Frag Sz : %-6d %-6d\n"
1800 "Frag Num : %-6d %-6d\n"
1801 "Frag msecs : %-6d %-6d\n"
1802 "Used Frags : %-6d %-6d\n"
1803 "Mapped : %-3s %-3s\n",
1804 p_reg
& 1<<0 ? "yes" : "no",
1805 r_reg
& 1<<0 ? "yes" : "no",
1806 p_reg
& 1<<1 ? "yes" : "no",
1807 r_reg
& 1<<1 ? "yes" : "no",
1808 p_reg
& 1<<2 ? "yes" : "no",
1809 r_reg
& 1<<2 ? "yes" : "no",
1810 p_reg
& 1<<5 ? "yes" : "no",
1811 r_reg
& 1<<5 ? "yes" : "no",
1812 p_reg
& 1<<6 ? "yes" : "no",
1813 r_reg
& 1<<6 ? "yes" : "no",
1814 p_reg
& 1<<7 ? "yes" : "no",
1815 r_reg
& 1<<7 ? "yes" : "no",
1818 p_reg
& 1<<14 ? "yes" : "no",
1819 r_reg
& 1<<14 ? "yes" : "no",
1820 p_reg
& 1<<15 ? "yes" : "no",
1821 r_reg
& 1<<15 ? "yes" : "no",
1822 forte
->play
.buf_sz
, forte
->rec
.buf_sz
,
1823 forte
->play
.frag_sz
, forte
->rec
.frag_sz
,
1824 forte
->play
.frag_num
, forte
->rec
.frag_num
,
1825 forte
->play
.frag_msecs
, forte
->rec
.frag_msecs
,
1826 forte
->play
.filled_frags
, forte
->rec
.filled_frags
,
1827 forte
->play
.mapped
? "yes" : "no",
1828 forte
->rec
.mapped
? "yes" : "no"
1838 * Creates driver info entries in /proc
1842 forte_proc_init (void)
1844 if (!proc_mkdir ("driver/forte", NULL
))
1847 if (!create_proc_read_entry ("driver/forte/chip", 0, NULL
, forte_proc_read
, forte
)) {
1848 remove_proc_entry ("driver/forte", NULL
);
1852 if (!create_proc_read_entry("driver/forte/ac97", 0, NULL
, ac97_read_proc
, forte
->ac97
)) {
1853 remove_proc_entry ("driver/forte/chip", NULL
);
1854 remove_proc_entry ("driver/forte", NULL
);
1863 * forte_proc_remove:
1865 * Removes driver info entries in /proc
1869 forte_proc_remove (void)
1871 remove_proc_entry ("driver/forte/ac97", NULL
);
1872 remove_proc_entry ("driver/forte/chip", NULL
);
1873 remove_proc_entry ("driver/forte", NULL
);
1879 * @chip: Chip instance to initialize
1882 * Resets chip, configures codec and registers the driver with
1883 * the sound subsystem.
1885 * Press and hold Start for 8 secs, then switch on Run
1886 * and hold for 4 seconds. Let go of Start. Numbers
1887 * assume a properly oiled TWG.
1890 static int __devinit
1891 forte_chip_init (struct forte_chip
*chip
)
1895 struct ac97_codec
*codec
;
1897 pci_read_config_byte (chip
->pci_dev
, PCI_REVISION_ID
, &revision
);
1899 if (revision
>= 0xB1) {
1900 chip
->multichannel
= 1;
1901 printk (KERN_INFO PFX
"Multi-channel device detected.\n");
1905 outw (FORTE_CC_CODEC_RESET
| FORTE_CC_AC97_RESET
,
1906 chip
->iobase
+ FORTE_CODEC_CTRL
);
1908 outw (0, chip
->iobase
+ FORTE_CODEC_CTRL
);
1910 /* Request read from AC97 */
1911 outw (FORTE_AC97_READ
| (0 << FORTE_AC97_ADDR_SHIFT
),
1912 chip
->iobase
+ FORTE_AC97_CMD
);
1915 if ((inw (chip
->iobase
+ FORTE_AC97_CMD
) & (3<<8)) != (1<<8)) {
1916 printk (KERN_INFO PFX
"AC97 codec not responding");
1921 outw (0x0808, chip
->iobase
+ FORTE_PCM_VOL
);
1922 outw (0x9f1f, chip
->iobase
+ FORTE_FM_VOL
);
1923 outw (0x8808, chip
->iobase
+ FORTE_I2S_VOL
);
1925 /* I2S control - I2S mode */
1926 outw (0x0003, chip
->iobase
+ FORTE_I2S_MODE
);
1928 /* Interrupt setup - unmask PLAYBACK & CAPTURE */
1929 cmdw
= inw (chip
->iobase
+ FORTE_IRQ_MASK
);
1931 outw (cmdw
, chip
->iobase
+ FORTE_IRQ_MASK
);
1933 /* Interrupt clear */
1934 outw (FORTE_IRQ_PLAYBACK
|FORTE_IRQ_CAPTURE
,
1935 chip
->iobase
+ FORTE_IRQ_STATUS
);
1937 /* Set up the AC97 codec */
1938 if ((codec
= ac97_alloc_codec()) == NULL
)
1940 codec
->private_data
= chip
;
1941 codec
->codec_read
= forte_ac97_read
;
1942 codec
->codec_write
= forte_ac97_write
;
1945 if (ac97_probe_codec (codec
) == 0) {
1946 printk (KERN_ERR PFX
"codec probe failed\n");
1947 ac97_release_codec(codec
);
1951 /* Register mixer */
1952 if ((codec
->dev_mixer
=
1953 register_sound_mixer (&forte_mixer_fops
, -1)) < 0) {
1954 printk (KERN_ERR PFX
"couldn't register mixer!\n");
1955 ac97_release_codec(codec
);
1962 if ((chip
->dsp
= register_sound_dsp (&forte_dsp_fops
, -1) ) < 0) {
1963 printk (KERN_ERR PFX
"couldn't register dsp!\n");
1967 /* Register with /proc */
1968 if (forte_proc_init()) {
1969 printk (KERN_ERR PFX
"couldn't add entries to /proc!\n");
1979 * @pci_dev: PCI struct for probed device
1983 * Allocates chip instance, I/O region, and IRQ
1986 forte_probe (struct pci_dev
*pci_dev
, const struct pci_device_id
*pci_id
)
1988 struct forte_chip
*chip
;
1991 /* FIXME: Support more than one chip */
1996 if (pci_enable_device (pci_dev
))
1999 pci_set_master (pci_dev
);
2001 /* Allocate chip instance and configure */
2002 forte
= (struct forte_chip
*)
2003 kmalloc (sizeof (struct forte_chip
), GFP_KERNEL
);
2007 printk (KERN_WARNING PFX
"Out of memory");
2011 memset (chip
, 0, sizeof (struct forte_chip
));
2012 chip
->pci_dev
= pci_dev
;
2014 init_MUTEX(&chip
->open_sem
);
2015 spin_lock_init (&chip
->lock
);
2016 spin_lock_init (&chip
->ac97_lock
);
2018 if (! request_region (pci_resource_start (pci_dev
, 0),
2019 pci_resource_len (pci_dev
, 0), DRIVER_NAME
)) {
2020 printk (KERN_WARNING PFX
"Unable to reserve I/O space");
2025 chip
->iobase
= pci_resource_start (pci_dev
, 0);
2026 chip
->irq
= pci_dev
->irq
;
2028 if (request_irq (chip
->irq
, forte_interrupt
, SA_SHIRQ
, DRIVER_NAME
,
2030 printk (KERN_WARNING PFX
"Unable to reserve IRQ");
2035 pci_set_drvdata (pci_dev
, chip
);
2037 printk (KERN_INFO PFX
"FM801 chip found at 0x%04lX-0x%04lX IRQ %u\n",
2038 chip
->iobase
, pci_resource_end (pci_dev
, 0), chip
->irq
);
2041 if ((ret
= forte_chip_init (chip
)) == 0)
2046 free_irq (chip
->irq
, chip
);
2049 release_region (pci_resource_start (pci_dev
, 0),
2050 pci_resource_len (pci_dev
, 0));
2060 * @pci_dev: PCI device to unclaim
2065 forte_remove (struct pci_dev
*pci_dev
)
2067 struct forte_chip
*chip
= pci_get_drvdata (pci_dev
);
2072 /* Turn volume down to avoid popping */
2073 outw (0x1f1f, chip
->iobase
+ FORTE_PCM_VOL
);
2074 outw (0x1f1f, chip
->iobase
+ FORTE_FM_VOL
);
2075 outw (0x1f1f, chip
->iobase
+ FORTE_I2S_VOL
);
2077 forte_proc_remove();
2078 free_irq (chip
->irq
, chip
);
2079 release_region (chip
->iobase
, pci_resource_len (pci_dev
, 0));
2081 unregister_sound_dsp (chip
->dsp
);
2082 unregister_sound_mixer (chip
->ac97
->dev_mixer
);
2083 ac97_release_codec(chip
->ac97
);
2086 printk (KERN_INFO PFX
"driver released\n");
2090 static struct pci_device_id forte_pci_ids
[] = {
2091 { 0x1319, 0x0801, PCI_ANY_ID
, PCI_ANY_ID
, 0, 0, 0, },
2096 static struct pci_driver forte_pci_driver
= {
2097 .name
= DRIVER_NAME
,
2098 .id_table
= forte_pci_ids
,
2099 .probe
= forte_probe
,
2100 .remove
= forte_remove
,
2106 * forte_init_module:
2111 forte_init_module (void)
2113 printk (KERN_INFO PFX DRIVER_VERSION
"\n");
2115 return pci_register_driver (&forte_pci_driver
);
2120 * forte_cleanup_module:
2125 forte_cleanup_module (void)
2127 pci_unregister_driver (&forte_pci_driver
);
2131 module_init(forte_init_module
);
2132 module_exit(forte_cleanup_module
);
2134 MODULE_AUTHOR("Martin K. Petersen <mkp@mkp.net>");
2135 MODULE_DESCRIPTION("ForteMedia FM801 OSS Driver");
2136 MODULE_LICENSE("GPL");
2137 MODULE_DEVICE_TABLE (pci
, forte_pci_ids
);