Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
fm801.c
Go to the documentation of this file.
1 /*
2  * The driver for the ForteMedia FM801 based soundcards
3  * Copyright (c) by Jaroslav Kysela <[email protected]>
4  *
5  * Support FM only card by Andy Shevchenko <[email protected]>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  *
21  */
22 
23 #include <linux/delay.h>
24 #include <linux/init.h>
25 #include <linux/interrupt.h>
26 #include <linux/pci.h>
27 #include <linux/slab.h>
28 #include <linux/module.h>
29 #include <sound/core.h>
30 #include <sound/pcm.h>
31 #include <sound/tlv.h>
32 #include <sound/ac97_codec.h>
33 #include <sound/mpu401.h>
34 #include <sound/opl3.h>
35 #include <sound/initval.h>
36 
37 #include <asm/io.h>
38 
39 #ifdef CONFIG_SND_FM801_TEA575X_BOOL
40 #include <sound/tea575x-tuner.h>
41 #endif
42 
43 MODULE_AUTHOR("Jaroslav Kysela <[email protected]>");
44 MODULE_DESCRIPTION("ForteMedia FM801");
45 MODULE_LICENSE("GPL");
46 MODULE_SUPPORTED_DEVICE("{{ForteMedia,FM801},"
47  "{Genius,SoundMaker Live 5.1}}");
48 
49 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
50 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
51 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */
52 /*
53  * Enable TEA575x tuner
54  * 1 = MediaForte 256-PCS
55  * 2 = MediaForte 256-PCP
56  * 3 = MediaForte 64-PCR
57  * 16 = setup tuner only (this is additional bit), i.e. SF64-PCR FM card
58  * High 16-bits are video (radio) device number + 1
59  */
60 static int tea575x_tuner[SNDRV_CARDS];
61 static int radio_nr[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = -1};
62 
63 module_param_array(index, int, NULL, 0444);
64 MODULE_PARM_DESC(index, "Index value for the FM801 soundcard.");
65 module_param_array(id, charp, NULL, 0444);
66 MODULE_PARM_DESC(id, "ID string for the FM801 soundcard.");
67 module_param_array(enable, bool, NULL, 0444);
68 MODULE_PARM_DESC(enable, "Enable FM801 soundcard.");
69 module_param_array(tea575x_tuner, int, NULL, 0444);
70 MODULE_PARM_DESC(tea575x_tuner, "TEA575x tuner access method (0 = auto, 1 = SF256-PCS, 2=SF256-PCP, 3=SF64-PCR, 8=disable, +16=tuner-only).");
71 module_param_array(radio_nr, int, NULL, 0444);
72 MODULE_PARM_DESC(radio_nr, "Radio device numbers");
73 
74 
75 #define TUNER_DISABLED (1<<3)
76 #define TUNER_ONLY (1<<4)
77 #define TUNER_TYPE_MASK (~TUNER_ONLY & 0xFFFF)
78 
79 /*
80  * Direct registers
81  */
82 
83 #define FM801_REG(chip, reg) (chip->port + FM801_##reg)
84 
85 #define FM801_PCM_VOL 0x00 /* PCM Output Volume */
86 #define FM801_FM_VOL 0x02 /* FM Output Volume */
87 #define FM801_I2S_VOL 0x04 /* I2S Volume */
88 #define FM801_REC_SRC 0x06 /* Record Source */
89 #define FM801_PLY_CTRL 0x08 /* Playback Control */
90 #define FM801_PLY_COUNT 0x0a /* Playback Count */
91 #define FM801_PLY_BUF1 0x0c /* Playback Bufer I */
92 #define FM801_PLY_BUF2 0x10 /* Playback Buffer II */
93 #define FM801_CAP_CTRL 0x14 /* Capture Control */
94 #define FM801_CAP_COUNT 0x16 /* Capture Count */
95 #define FM801_CAP_BUF1 0x18 /* Capture Buffer I */
96 #define FM801_CAP_BUF2 0x1c /* Capture Buffer II */
97 #define FM801_CODEC_CTRL 0x22 /* Codec Control */
98 #define FM801_I2S_MODE 0x24 /* I2S Mode Control */
99 #define FM801_VOLUME 0x26 /* Volume Up/Down/Mute Status */
100 #define FM801_I2C_CTRL 0x29 /* I2C Control */
101 #define FM801_AC97_CMD 0x2a /* AC'97 Command */
102 #define FM801_AC97_DATA 0x2c /* AC'97 Data */
103 #define FM801_MPU401_DATA 0x30 /* MPU401 Data */
104 #define FM801_MPU401_CMD 0x31 /* MPU401 Command */
105 #define FM801_GPIO_CTRL 0x52 /* General Purpose I/O Control */
106 #define FM801_GEN_CTRL 0x54 /* General Control */
107 #define FM801_IRQ_MASK 0x56 /* Interrupt Mask */
108 #define FM801_IRQ_STATUS 0x5a /* Interrupt Status */
109 #define FM801_OPL3_BANK0 0x68 /* OPL3 Status Read / Bank 0 Write */
110 #define FM801_OPL3_DATA0 0x69 /* OPL3 Data 0 Write */
111 #define FM801_OPL3_BANK1 0x6a /* OPL3 Bank 1 Write */
112 #define FM801_OPL3_DATA1 0x6b /* OPL3 Bank 1 Write */
113 #define FM801_POWERDOWN 0x70 /* Blocks Power Down Control */
114 
115 /* codec access */
116 #define FM801_AC97_READ (1<<7) /* read=1, write=0 */
117 #define FM801_AC97_VALID (1<<8) /* port valid=1 */
118 #define FM801_AC97_BUSY (1<<9) /* busy=1 */
119 #define FM801_AC97_ADDR_SHIFT 10 /* codec id (2bit) */
120 
121 /* playback and record control register bits */
122 #define FM801_BUF1_LAST (1<<1)
123 #define FM801_BUF2_LAST (1<<2)
124 #define FM801_START (1<<5)
125 #define FM801_PAUSE (1<<6)
126 #define FM801_IMMED_STOP (1<<7)
127 #define FM801_RATE_SHIFT 8
128 #define FM801_RATE_MASK (15 << FM801_RATE_SHIFT)
129 #define FM801_CHANNELS_4 (1<<12) /* playback only */
130 #define FM801_CHANNELS_6 (2<<12) /* playback only */
131 #define FM801_CHANNELS_6MS (3<<12) /* playback only */
132 #define FM801_CHANNELS_MASK (3<<12)
133 #define FM801_16BIT (1<<14)
134 #define FM801_STEREO (1<<15)
135 
136 /* IRQ status bits */
137 #define FM801_IRQ_PLAYBACK (1<<8)
138 #define FM801_IRQ_CAPTURE (1<<9)
139 #define FM801_IRQ_VOLUME (1<<14)
140 #define FM801_IRQ_MPU (1<<15)
141 
142 /* GPIO control register */
143 #define FM801_GPIO_GP0 (1<<0) /* read/write */
144 #define FM801_GPIO_GP1 (1<<1)
145 #define FM801_GPIO_GP2 (1<<2)
146 #define FM801_GPIO_GP3 (1<<3)
147 #define FM801_GPIO_GP(x) (1<<(0+(x)))
148 #define FM801_GPIO_GD0 (1<<8) /* directions: 1 = input, 0 = output*/
149 #define FM801_GPIO_GD1 (1<<9)
150 #define FM801_GPIO_GD2 (1<<10)
151 #define FM801_GPIO_GD3 (1<<11)
152 #define FM801_GPIO_GD(x) (1<<(8+(x)))
153 #define FM801_GPIO_GS0 (1<<12) /* function select: */
154 #define FM801_GPIO_GS1 (1<<13) /* 1 = GPIO */
155 #define FM801_GPIO_GS2 (1<<14) /* 0 = other (S/PDIF, VOL) */
156 #define FM801_GPIO_GS3 (1<<15)
157 #define FM801_GPIO_GS(x) (1<<(12+(x)))
158 
159 /*
160 
161  */
162 
163 struct fm801 {
164  int irq;
165 
166  unsigned long port; /* I/O port number */
167  unsigned int multichannel: 1, /* multichannel support */
168  secondary: 1; /* secondary codec */
169  unsigned char secondary_addr; /* address of the secondary codec */
170  unsigned int tea575x_tuner; /* tuner access method & flags */
171 
172  unsigned short ply_ctrl; /* playback control */
173  unsigned short cap_ctrl; /* capture control */
174 
175  unsigned long ply_buffer;
176  unsigned int ply_buf;
177  unsigned int ply_count;
178  unsigned int ply_size;
179  unsigned int ply_pos;
180 
181  unsigned long cap_buffer;
182  unsigned int cap_buf;
183  unsigned int cap_count;
184  unsigned int cap_size;
185  unsigned int cap_pos;
186 
188  struct snd_ac97 *ac97;
190 
191  struct pci_dev *pci;
192  struct snd_card *card;
193  struct snd_pcm *pcm;
197  unsigned int p_dma_size;
198  unsigned int c_dma_size;
199 
202 
203 #ifdef CONFIG_SND_FM801_TEA575X_BOOL
204  struct v4l2_device v4l2_dev;
205  struct snd_tea575x tea;
206 #endif
207 
208 #ifdef CONFIG_PM_SLEEP
209  u16 saved_regs[0x20];
210 #endif
211 };
212 
213 static DEFINE_PCI_DEVICE_TABLE(snd_fm801_ids) = {
214  { 0x1319, 0x0801, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0, }, /* FM801 */
215  { 0x5213, 0x0510, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, 0, }, /* Gallant Odyssey Sound 4 */
216  { 0, }
217 };
218 
219 MODULE_DEVICE_TABLE(pci, snd_fm801_ids);
220 
221 /*
222  * common I/O routines
223  */
224 
225 static int snd_fm801_update_bits(struct fm801 *chip, unsigned short reg,
226  unsigned short mask, unsigned short value)
227 {
228  int change;
229  unsigned long flags;
230  unsigned short old, new;
231 
232  spin_lock_irqsave(&chip->reg_lock, flags);
233  old = inw(chip->port + reg);
234  new = (old & ~mask) | value;
235  change = old != new;
236  if (change)
237  outw(new, chip->port + reg);
238  spin_unlock_irqrestore(&chip->reg_lock, flags);
239  return change;
240 }
241 
242 static void snd_fm801_codec_write(struct snd_ac97 *ac97,
243  unsigned short reg,
244  unsigned short val)
245 {
246  struct fm801 *chip = ac97->private_data;
247  int idx;
248 
249  /*
250  * Wait until the codec interface is not ready..
251  */
252  for (idx = 0; idx < 100; idx++) {
253  if (!(inw(FM801_REG(chip, AC97_CMD)) & FM801_AC97_BUSY))
254  goto ok1;
255  udelay(10);
256  }
257  snd_printk(KERN_ERR "AC'97 interface is busy (1)\n");
258  return;
259 
260  ok1:
261  /* write data and address */
262  outw(val, FM801_REG(chip, AC97_DATA));
263  outw(reg | (ac97->addr << FM801_AC97_ADDR_SHIFT), FM801_REG(chip, AC97_CMD));
264  /*
265  * Wait until the write command is not completed..
266  */
267  for (idx = 0; idx < 1000; idx++) {
268  if (!(inw(FM801_REG(chip, AC97_CMD)) & FM801_AC97_BUSY))
269  return;
270  udelay(10);
271  }
272  snd_printk(KERN_ERR "AC'97 interface #%d is busy (2)\n", ac97->num);
273 }
274 
275 static unsigned short snd_fm801_codec_read(struct snd_ac97 *ac97, unsigned short reg)
276 {
277  struct fm801 *chip = ac97->private_data;
278  int idx;
279 
280  /*
281  * Wait until the codec interface is not ready..
282  */
283  for (idx = 0; idx < 100; idx++) {
284  if (!(inw(FM801_REG(chip, AC97_CMD)) & FM801_AC97_BUSY))
285  goto ok1;
286  udelay(10);
287  }
288  snd_printk(KERN_ERR "AC'97 interface is busy (1)\n");
289  return 0;
290 
291  ok1:
292  /* read command */
293  outw(reg | (ac97->addr << FM801_AC97_ADDR_SHIFT) | FM801_AC97_READ,
294  FM801_REG(chip, AC97_CMD));
295  for (idx = 0; idx < 100; idx++) {
296  if (!(inw(FM801_REG(chip, AC97_CMD)) & FM801_AC97_BUSY))
297  goto ok2;
298  udelay(10);
299  }
300  snd_printk(KERN_ERR "AC'97 interface #%d is busy (2)\n", ac97->num);
301  return 0;
302 
303  ok2:
304  for (idx = 0; idx < 1000; idx++) {
305  if (inw(FM801_REG(chip, AC97_CMD)) & FM801_AC97_VALID)
306  goto ok3;
307  udelay(10);
308  }
309  snd_printk(KERN_ERR "AC'97 interface #%d is not valid (2)\n", ac97->num);
310  return 0;
311 
312  ok3:
313  return inw(FM801_REG(chip, AC97_DATA));
314 }
315 
316 static unsigned int rates[] = {
317  5500, 8000, 9600, 11025,
318  16000, 19200, 22050, 32000,
319  38400, 44100, 48000
320 };
321 
322 static struct snd_pcm_hw_constraint_list hw_constraints_rates = {
323  .count = ARRAY_SIZE(rates),
324  .list = rates,
325  .mask = 0,
326 };
327 
328 static unsigned int channels[] = {
329  2, 4, 6
330 };
331 
332 static struct snd_pcm_hw_constraint_list hw_constraints_channels = {
333  .count = ARRAY_SIZE(channels),
334  .list = channels,
335  .mask = 0,
336 };
337 
338 /*
339  * Sample rate routines
340  */
341 
342 static unsigned short snd_fm801_rate_bits(unsigned int rate)
343 {
344  unsigned int idx;
345 
346  for (idx = 0; idx < ARRAY_SIZE(rates); idx++)
347  if (rates[idx] == rate)
348  return idx;
349  snd_BUG();
350  return ARRAY_SIZE(rates) - 1;
351 }
352 
353 /*
354  * PCM part
355  */
356 
357 static int snd_fm801_playback_trigger(struct snd_pcm_substream *substream,
358  int cmd)
359 {
360  struct fm801 *chip = snd_pcm_substream_chip(substream);
361 
362  spin_lock(&chip->reg_lock);
363  switch (cmd) {
365  chip->ply_ctrl &= ~(FM801_BUF1_LAST |
367  FM801_PAUSE);
368  chip->ply_ctrl |= FM801_START |
370  break;
372  chip->ply_ctrl &= ~(FM801_START | FM801_PAUSE);
373  break;
376  chip->ply_ctrl |= FM801_PAUSE;
377  break;
380  chip->ply_ctrl &= ~FM801_PAUSE;
381  break;
382  default:
383  spin_unlock(&chip->reg_lock);
384  snd_BUG();
385  return -EINVAL;
386  }
387  outw(chip->ply_ctrl, FM801_REG(chip, PLY_CTRL));
388  spin_unlock(&chip->reg_lock);
389  return 0;
390 }
391 
392 static int snd_fm801_capture_trigger(struct snd_pcm_substream *substream,
393  int cmd)
394 {
395  struct fm801 *chip = snd_pcm_substream_chip(substream);
396 
397  spin_lock(&chip->reg_lock);
398  switch (cmd) {
400  chip->cap_ctrl &= ~(FM801_BUF1_LAST |
402  FM801_PAUSE);
403  chip->cap_ctrl |= FM801_START |
405  break;
407  chip->cap_ctrl &= ~(FM801_START | FM801_PAUSE);
408  break;
411  chip->cap_ctrl |= FM801_PAUSE;
412  break;
415  chip->cap_ctrl &= ~FM801_PAUSE;
416  break;
417  default:
418  spin_unlock(&chip->reg_lock);
419  snd_BUG();
420  return -EINVAL;
421  }
422  outw(chip->cap_ctrl, FM801_REG(chip, CAP_CTRL));
423  spin_unlock(&chip->reg_lock);
424  return 0;
425 }
426 
427 static int snd_fm801_hw_params(struct snd_pcm_substream *substream,
428  struct snd_pcm_hw_params *hw_params)
429 {
430  return snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
431 }
432 
433 static int snd_fm801_hw_free(struct snd_pcm_substream *substream)
434 {
435  return snd_pcm_lib_free_pages(substream);
436 }
437 
438 static int snd_fm801_playback_prepare(struct snd_pcm_substream *substream)
439 {
440  struct fm801 *chip = snd_pcm_substream_chip(substream);
441  struct snd_pcm_runtime *runtime = substream->runtime;
442 
443  chip->ply_size = snd_pcm_lib_buffer_bytes(substream);
444  chip->ply_count = snd_pcm_lib_period_bytes(substream);
445  spin_lock_irq(&chip->reg_lock);
446  chip->ply_ctrl &= ~(FM801_START | FM801_16BIT |
449  if (snd_pcm_format_width(runtime->format) == 16)
450  chip->ply_ctrl |= FM801_16BIT;
451  if (runtime->channels > 1) {
452  chip->ply_ctrl |= FM801_STEREO;
453  if (runtime->channels == 4)
454  chip->ply_ctrl |= FM801_CHANNELS_4;
455  else if (runtime->channels == 6)
456  chip->ply_ctrl |= FM801_CHANNELS_6;
457  }
458  chip->ply_ctrl |= snd_fm801_rate_bits(runtime->rate) << FM801_RATE_SHIFT;
459  chip->ply_buf = 0;
460  outw(chip->ply_ctrl, FM801_REG(chip, PLY_CTRL));
461  outw(chip->ply_count - 1, FM801_REG(chip, PLY_COUNT));
462  chip->ply_buffer = runtime->dma_addr;
463  chip->ply_pos = 0;
464  outl(chip->ply_buffer, FM801_REG(chip, PLY_BUF1));
465  outl(chip->ply_buffer + (chip->ply_count % chip->ply_size), FM801_REG(chip, PLY_BUF2));
466  spin_unlock_irq(&chip->reg_lock);
467  return 0;
468 }
469 
470 static int snd_fm801_capture_prepare(struct snd_pcm_substream *substream)
471 {
472  struct fm801 *chip = snd_pcm_substream_chip(substream);
473  struct snd_pcm_runtime *runtime = substream->runtime;
474 
475  chip->cap_size = snd_pcm_lib_buffer_bytes(substream);
476  chip->cap_count = snd_pcm_lib_period_bytes(substream);
477  spin_lock_irq(&chip->reg_lock);
478  chip->cap_ctrl &= ~(FM801_START | FM801_16BIT |
480  if (snd_pcm_format_width(runtime->format) == 16)
481  chip->cap_ctrl |= FM801_16BIT;
482  if (runtime->channels > 1)
483  chip->cap_ctrl |= FM801_STEREO;
484  chip->cap_ctrl |= snd_fm801_rate_bits(runtime->rate) << FM801_RATE_SHIFT;
485  chip->cap_buf = 0;
486  outw(chip->cap_ctrl, FM801_REG(chip, CAP_CTRL));
487  outw(chip->cap_count - 1, FM801_REG(chip, CAP_COUNT));
488  chip->cap_buffer = runtime->dma_addr;
489  chip->cap_pos = 0;
490  outl(chip->cap_buffer, FM801_REG(chip, CAP_BUF1));
491  outl(chip->cap_buffer + (chip->cap_count % chip->cap_size), FM801_REG(chip, CAP_BUF2));
492  spin_unlock_irq(&chip->reg_lock);
493  return 0;
494 }
495 
496 static snd_pcm_uframes_t snd_fm801_playback_pointer(struct snd_pcm_substream *substream)
497 {
498  struct fm801 *chip = snd_pcm_substream_chip(substream);
499  size_t ptr;
500 
501  if (!(chip->ply_ctrl & FM801_START))
502  return 0;
503  spin_lock(&chip->reg_lock);
504  ptr = chip->ply_pos + (chip->ply_count - 1) - inw(FM801_REG(chip, PLY_COUNT));
505  if (inw(FM801_REG(chip, IRQ_STATUS)) & FM801_IRQ_PLAYBACK) {
506  ptr += chip->ply_count;
507  ptr %= chip->ply_size;
508  }
509  spin_unlock(&chip->reg_lock);
510  return bytes_to_frames(substream->runtime, ptr);
511 }
512 
513 static snd_pcm_uframes_t snd_fm801_capture_pointer(struct snd_pcm_substream *substream)
514 {
515  struct fm801 *chip = snd_pcm_substream_chip(substream);
516  size_t ptr;
517 
518  if (!(chip->cap_ctrl & FM801_START))
519  return 0;
520  spin_lock(&chip->reg_lock);
521  ptr = chip->cap_pos + (chip->cap_count - 1) - inw(FM801_REG(chip, CAP_COUNT));
522  if (inw(FM801_REG(chip, IRQ_STATUS)) & FM801_IRQ_CAPTURE) {
523  ptr += chip->cap_count;
524  ptr %= chip->cap_size;
525  }
526  spin_unlock(&chip->reg_lock);
527  return bytes_to_frames(substream->runtime, ptr);
528 }
529 
530 static irqreturn_t snd_fm801_interrupt(int irq, void *dev_id)
531 {
532  struct fm801 *chip = dev_id;
533  unsigned short status;
534  unsigned int tmp;
535 
536  status = inw(FM801_REG(chip, IRQ_STATUS));
538  if (! status)
539  return IRQ_NONE;
540  /* ack first */
541  outw(status, FM801_REG(chip, IRQ_STATUS));
542  if (chip->pcm && (status & FM801_IRQ_PLAYBACK) && chip->playback_substream) {
543  spin_lock(&chip->reg_lock);
544  chip->ply_buf++;
545  chip->ply_pos += chip->ply_count;
546  chip->ply_pos %= chip->ply_size;
547  tmp = chip->ply_pos + chip->ply_count;
548  tmp %= chip->ply_size;
549  outl(chip->ply_buffer + tmp,
550  (chip->ply_buf & 1) ?
551  FM801_REG(chip, PLY_BUF1) :
552  FM801_REG(chip, PLY_BUF2));
553  spin_unlock(&chip->reg_lock);
555  }
556  if (chip->pcm && (status & FM801_IRQ_CAPTURE) && chip->capture_substream) {
557  spin_lock(&chip->reg_lock);
558  chip->cap_buf++;
559  chip->cap_pos += chip->cap_count;
560  chip->cap_pos %= chip->cap_size;
561  tmp = chip->cap_pos + chip->cap_count;
562  tmp %= chip->cap_size;
563  outl(chip->cap_buffer + tmp,
564  (chip->cap_buf & 1) ?
565  FM801_REG(chip, CAP_BUF1) :
566  FM801_REG(chip, CAP_BUF2));
567  spin_unlock(&chip->reg_lock);
569  }
570  if (chip->rmidi && (status & FM801_IRQ_MPU))
571  snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data);
572  if (status & FM801_IRQ_VOLUME)
573  ;/* TODO */
574 
575  return IRQ_HANDLED;
576 }
577 
578 static struct snd_pcm_hardware snd_fm801_playback =
579 {
586  .rate_min = 5500,
587  .rate_max = 48000,
588  .channels_min = 1,
589  .channels_max = 2,
590  .buffer_bytes_max = (128*1024),
591  .period_bytes_min = 64,
592  .period_bytes_max = (128*1024),
593  .periods_min = 1,
594  .periods_max = 1024,
595  .fifo_size = 0,
596 };
597 
598 static struct snd_pcm_hardware snd_fm801_capture =
599 {
606  .rate_min = 5500,
607  .rate_max = 48000,
608  .channels_min = 1,
609  .channels_max = 2,
610  .buffer_bytes_max = (128*1024),
611  .period_bytes_min = 64,
612  .period_bytes_max = (128*1024),
613  .periods_min = 1,
614  .periods_max = 1024,
615  .fifo_size = 0,
616 };
617 
618 static int snd_fm801_playback_open(struct snd_pcm_substream *substream)
619 {
620  struct fm801 *chip = snd_pcm_substream_chip(substream);
621  struct snd_pcm_runtime *runtime = substream->runtime;
622  int err;
623 
624  chip->playback_substream = substream;
625  runtime->hw = snd_fm801_playback;
627  &hw_constraints_rates);
628  if (chip->multichannel) {
629  runtime->hw.channels_max = 6;
630  snd_pcm_hw_constraint_list(runtime, 0,
632  &hw_constraints_channels);
633  }
635  return err;
636  return 0;
637 }
638 
639 static int snd_fm801_capture_open(struct snd_pcm_substream *substream)
640 {
641  struct fm801 *chip = snd_pcm_substream_chip(substream);
642  struct snd_pcm_runtime *runtime = substream->runtime;
643  int err;
644 
645  chip->capture_substream = substream;
646  runtime->hw = snd_fm801_capture;
648  &hw_constraints_rates);
650  return err;
651  return 0;
652 }
653 
654 static int snd_fm801_playback_close(struct snd_pcm_substream *substream)
655 {
656  struct fm801 *chip = snd_pcm_substream_chip(substream);
657 
658  chip->playback_substream = NULL;
659  return 0;
660 }
661 
662 static int snd_fm801_capture_close(struct snd_pcm_substream *substream)
663 {
664  struct fm801 *chip = snd_pcm_substream_chip(substream);
665 
666  chip->capture_substream = NULL;
667  return 0;
668 }
669 
670 static struct snd_pcm_ops snd_fm801_playback_ops = {
671  .open = snd_fm801_playback_open,
672  .close = snd_fm801_playback_close,
673  .ioctl = snd_pcm_lib_ioctl,
674  .hw_params = snd_fm801_hw_params,
675  .hw_free = snd_fm801_hw_free,
676  .prepare = snd_fm801_playback_prepare,
677  .trigger = snd_fm801_playback_trigger,
678  .pointer = snd_fm801_playback_pointer,
679 };
680 
681 static struct snd_pcm_ops snd_fm801_capture_ops = {
682  .open = snd_fm801_capture_open,
683  .close = snd_fm801_capture_close,
684  .ioctl = snd_pcm_lib_ioctl,
685  .hw_params = snd_fm801_hw_params,
686  .hw_free = snd_fm801_hw_free,
687  .prepare = snd_fm801_capture_prepare,
688  .trigger = snd_fm801_capture_trigger,
689  .pointer = snd_fm801_capture_pointer,
690 };
691 
692 static int __devinit snd_fm801_pcm(struct fm801 *chip, int device, struct snd_pcm ** rpcm)
693 {
694  struct snd_pcm *pcm;
695  int err;
696 
697  if (rpcm)
698  *rpcm = NULL;
699  if ((err = snd_pcm_new(chip->card, "FM801", device, 1, 1, &pcm)) < 0)
700  return err;
701 
702  snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_fm801_playback_ops);
703  snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_fm801_capture_ops);
704 
705  pcm->private_data = chip;
706  pcm->info_flags = 0;
707  strcpy(pcm->name, "FM801");
708  chip->pcm = pcm;
709 
711  snd_dma_pci_data(chip->pci),
712  chip->multichannel ? 128*1024 : 64*1024, 128*1024);
713 
716  chip->multichannel ? 6 : 2, 0,
717  NULL);
718  if (err < 0)
719  return err;
720 
721  if (rpcm)
722  *rpcm = pcm;
723  return 0;
724 }
725 
726 /*
727  * TEA5757 radio
728  */
729 
730 #ifdef CONFIG_SND_FM801_TEA575X_BOOL
731 
732 /* GPIO to TEA575x maps */
733 struct snd_fm801_tea575x_gpio {
734  u8 data, clk, wren, most;
735  char *name;
736 };
737 
738 static struct snd_fm801_tea575x_gpio snd_fm801_tea575x_gpios[] = {
739  { .data = 1, .clk = 3, .wren = 2, .most = 0, .name = "SF256-PCS" },
740  { .data = 1, .clk = 0, .wren = 2, .most = 3, .name = "SF256-PCP" },
741  { .data = 2, .clk = 0, .wren = 1, .most = 3, .name = "SF64-PCR" },
742 };
743 
744 #define get_tea575x_gpio(chip) \
745  (&snd_fm801_tea575x_gpios[((chip)->tea575x_tuner & TUNER_TYPE_MASK) - 1])
746 
747 static void snd_fm801_tea575x_set_pins(struct snd_tea575x *tea, u8 pins)
748 {
749  struct fm801 *chip = tea->private_data;
750  unsigned short reg = inw(FM801_REG(chip, GPIO_CTRL));
751  struct snd_fm801_tea575x_gpio gpio = *get_tea575x_gpio(chip);
752 
753  reg &= ~(FM801_GPIO_GP(gpio.data) |
754  FM801_GPIO_GP(gpio.clk) |
755  FM801_GPIO_GP(gpio.wren));
756 
757  reg |= (pins & TEA575X_DATA) ? FM801_GPIO_GP(gpio.data) : 0;
758  reg |= (pins & TEA575X_CLK) ? FM801_GPIO_GP(gpio.clk) : 0;
759  /* WRITE_ENABLE is inverted */
760  reg |= (pins & TEA575X_WREN) ? 0 : FM801_GPIO_GP(gpio.wren);
761 
762  outw(reg, FM801_REG(chip, GPIO_CTRL));
763 }
764 
765 static u8 snd_fm801_tea575x_get_pins(struct snd_tea575x *tea)
766 {
767  struct fm801 *chip = tea->private_data;
768  unsigned short reg = inw(FM801_REG(chip, GPIO_CTRL));
769  struct snd_fm801_tea575x_gpio gpio = *get_tea575x_gpio(chip);
770  u8 ret;
771 
772  ret = 0;
773  if (reg & FM801_GPIO_GP(gpio.data))
774  ret |= TEA575X_DATA;
775  if (reg & FM801_GPIO_GP(gpio.most))
776  ret |= TEA575X_MOST;
777  return ret;
778 }
779 
780 static void snd_fm801_tea575x_set_direction(struct snd_tea575x *tea, bool output)
781 {
782  struct fm801 *chip = tea->private_data;
783  unsigned short reg = inw(FM801_REG(chip, GPIO_CTRL));
784  struct snd_fm801_tea575x_gpio gpio = *get_tea575x_gpio(chip);
785 
786  /* use GPIO lines and set write enable bit */
787  reg |= FM801_GPIO_GS(gpio.data) |
788  FM801_GPIO_GS(gpio.wren) |
789  FM801_GPIO_GS(gpio.clk) |
790  FM801_GPIO_GS(gpio.most);
791  if (output) {
792  /* all of lines are in the write direction */
793  /* clear data and clock lines */
794  reg &= ~(FM801_GPIO_GD(gpio.data) |
795  FM801_GPIO_GD(gpio.wren) |
796  FM801_GPIO_GD(gpio.clk) |
797  FM801_GPIO_GP(gpio.data) |
798  FM801_GPIO_GP(gpio.clk) |
799  FM801_GPIO_GP(gpio.wren));
800  } else {
801  /* use GPIO lines, set data direction to input */
802  reg |= FM801_GPIO_GD(gpio.data) |
803  FM801_GPIO_GD(gpio.most) |
804  FM801_GPIO_GP(gpio.data) |
805  FM801_GPIO_GP(gpio.most) |
806  FM801_GPIO_GP(gpio.wren);
807  /* all of lines are in the write direction, except data */
808  /* clear data, write enable and clock lines */
809  reg &= ~(FM801_GPIO_GD(gpio.wren) |
810  FM801_GPIO_GD(gpio.clk) |
811  FM801_GPIO_GP(gpio.clk));
812  }
813 
814  outw(reg, FM801_REG(chip, GPIO_CTRL));
815 }
816 
817 static struct snd_tea575x_ops snd_fm801_tea_ops = {
818  .set_pins = snd_fm801_tea575x_set_pins,
819  .get_pins = snd_fm801_tea575x_get_pins,
820  .set_direction = snd_fm801_tea575x_set_direction,
821 };
822 #endif
823 
824 /*
825  * Mixer routines
826  */
827 
828 #define FM801_SINGLE(xname, reg, shift, mask, invert) \
829 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .info = snd_fm801_info_single, \
830  .get = snd_fm801_get_single, .put = snd_fm801_put_single, \
831  .private_value = reg | (shift << 8) | (mask << 16) | (invert << 24) }
832 
833 static int snd_fm801_info_single(struct snd_kcontrol *kcontrol,
834  struct snd_ctl_elem_info *uinfo)
835 {
836  int mask = (kcontrol->private_value >> 16) & 0xff;
837 
839  uinfo->count = 1;
840  uinfo->value.integer.min = 0;
841  uinfo->value.integer.max = mask;
842  return 0;
843 }
844 
845 static int snd_fm801_get_single(struct snd_kcontrol *kcontrol,
846  struct snd_ctl_elem_value *ucontrol)
847 {
848  struct fm801 *chip = snd_kcontrol_chip(kcontrol);
849  int reg = kcontrol->private_value & 0xff;
850  int shift = (kcontrol->private_value >> 8) & 0xff;
851  int mask = (kcontrol->private_value >> 16) & 0xff;
852  int invert = (kcontrol->private_value >> 24) & 0xff;
853 
854  ucontrol->value.integer.value[0] = (inw(chip->port + reg) >> shift) & mask;
855  if (invert)
856  ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0];
857  return 0;
858 }
859 
860 static int snd_fm801_put_single(struct snd_kcontrol *kcontrol,
861  struct snd_ctl_elem_value *ucontrol)
862 {
863  struct fm801 *chip = snd_kcontrol_chip(kcontrol);
864  int reg = kcontrol->private_value & 0xff;
865  int shift = (kcontrol->private_value >> 8) & 0xff;
866  int mask = (kcontrol->private_value >> 16) & 0xff;
867  int invert = (kcontrol->private_value >> 24) & 0xff;
868  unsigned short val;
869 
870  val = (ucontrol->value.integer.value[0] & mask);
871  if (invert)
872  val = mask - val;
873  return snd_fm801_update_bits(chip, reg, mask << shift, val << shift);
874 }
875 
876 #define FM801_DOUBLE(xname, reg, shift_left, shift_right, mask, invert) \
877 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .info = snd_fm801_info_double, \
878  .get = snd_fm801_get_double, .put = snd_fm801_put_double, \
879  .private_value = reg | (shift_left << 8) | (shift_right << 12) | (mask << 16) | (invert << 24) }
880 #define FM801_DOUBLE_TLV(xname, reg, shift_left, shift_right, mask, invert, xtlv) \
881 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
882  .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_TLV_READ, \
883  .name = xname, .info = snd_fm801_info_double, \
884  .get = snd_fm801_get_double, .put = snd_fm801_put_double, \
885  .private_value = reg | (shift_left << 8) | (shift_right << 12) | (mask << 16) | (invert << 24), \
886  .tlv = { .p = (xtlv) } }
887 
888 static int snd_fm801_info_double(struct snd_kcontrol *kcontrol,
889  struct snd_ctl_elem_info *uinfo)
890 {
891  int mask = (kcontrol->private_value >> 16) & 0xff;
892 
894  uinfo->count = 2;
895  uinfo->value.integer.min = 0;
896  uinfo->value.integer.max = mask;
897  return 0;
898 }
899 
900 static int snd_fm801_get_double(struct snd_kcontrol *kcontrol,
901  struct snd_ctl_elem_value *ucontrol)
902 {
903  struct fm801 *chip = snd_kcontrol_chip(kcontrol);
904  int reg = kcontrol->private_value & 0xff;
905  int shift_left = (kcontrol->private_value >> 8) & 0x0f;
906  int shift_right = (kcontrol->private_value >> 12) & 0x0f;
907  int mask = (kcontrol->private_value >> 16) & 0xff;
908  int invert = (kcontrol->private_value >> 24) & 0xff;
909 
910  spin_lock_irq(&chip->reg_lock);
911  ucontrol->value.integer.value[0] = (inw(chip->port + reg) >> shift_left) & mask;
912  ucontrol->value.integer.value[1] = (inw(chip->port + reg) >> shift_right) & mask;
913  spin_unlock_irq(&chip->reg_lock);
914  if (invert) {
915  ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0];
916  ucontrol->value.integer.value[1] = mask - ucontrol->value.integer.value[1];
917  }
918  return 0;
919 }
920 
921 static int snd_fm801_put_double(struct snd_kcontrol *kcontrol,
922  struct snd_ctl_elem_value *ucontrol)
923 {
924  struct fm801 *chip = snd_kcontrol_chip(kcontrol);
925  int reg = kcontrol->private_value & 0xff;
926  int shift_left = (kcontrol->private_value >> 8) & 0x0f;
927  int shift_right = (kcontrol->private_value >> 12) & 0x0f;
928  int mask = (kcontrol->private_value >> 16) & 0xff;
929  int invert = (kcontrol->private_value >> 24) & 0xff;
930  unsigned short val1, val2;
931 
932  val1 = ucontrol->value.integer.value[0] & mask;
933  val2 = ucontrol->value.integer.value[1] & mask;
934  if (invert) {
935  val1 = mask - val1;
936  val2 = mask - val2;
937  }
938  return snd_fm801_update_bits(chip, reg,
939  (mask << shift_left) | (mask << shift_right),
940  (val1 << shift_left ) | (val2 << shift_right));
941 }
942 
943 static int snd_fm801_info_mux(struct snd_kcontrol *kcontrol,
944  struct snd_ctl_elem_info *uinfo)
945 {
946  static char *texts[5] = {
947  "AC97 Primary", "FM", "I2S", "PCM", "AC97 Secondary"
948  };
949 
951  uinfo->count = 1;
952  uinfo->value.enumerated.items = 5;
953  if (uinfo->value.enumerated.item > 4)
954  uinfo->value.enumerated.item = 4;
955  strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]);
956  return 0;
957 }
958 
959 static int snd_fm801_get_mux(struct snd_kcontrol *kcontrol,
960  struct snd_ctl_elem_value *ucontrol)
961 {
962  struct fm801 *chip = snd_kcontrol_chip(kcontrol);
963  unsigned short val;
964 
965  val = inw(FM801_REG(chip, REC_SRC)) & 7;
966  if (val > 4)
967  val = 4;
968  ucontrol->value.enumerated.item[0] = val;
969  return 0;
970 }
971 
972 static int snd_fm801_put_mux(struct snd_kcontrol *kcontrol,
973  struct snd_ctl_elem_value *ucontrol)
974 {
975  struct fm801 *chip = snd_kcontrol_chip(kcontrol);
976  unsigned short val;
977 
978  if ((val = ucontrol->value.enumerated.item[0]) > 4)
979  return -EINVAL;
980  return snd_fm801_update_bits(chip, FM801_REC_SRC, 7, val);
981 }
982 
983 static const DECLARE_TLV_DB_SCALE(db_scale_dsp, -3450, 150, 0);
984 
985 #define FM801_CONTROLS ARRAY_SIZE(snd_fm801_controls)
986 
987 static struct snd_kcontrol_new snd_fm801_controls[] __devinitdata = {
988 FM801_DOUBLE_TLV("Wave Playback Volume", FM801_PCM_VOL, 0, 8, 31, 1,
989  db_scale_dsp),
990 FM801_SINGLE("Wave Playback Switch", FM801_PCM_VOL, 15, 1, 1),
991 FM801_DOUBLE_TLV("I2S Playback Volume", FM801_I2S_VOL, 0, 8, 31, 1,
992  db_scale_dsp),
993 FM801_SINGLE("I2S Playback Switch", FM801_I2S_VOL, 15, 1, 1),
994 FM801_DOUBLE_TLV("FM Playback Volume", FM801_FM_VOL, 0, 8, 31, 1,
995  db_scale_dsp),
996 FM801_SINGLE("FM Playback Switch", FM801_FM_VOL, 15, 1, 1),
997 {
999  .name = "Digital Capture Source",
1000  .info = snd_fm801_info_mux,
1001  .get = snd_fm801_get_mux,
1002  .put = snd_fm801_put_mux,
1003 }
1004 };
1005 
1006 #define FM801_CONTROLS_MULTI ARRAY_SIZE(snd_fm801_controls_multi)
1007 
1008 static struct snd_kcontrol_new snd_fm801_controls_multi[] __devinitdata = {
1009 FM801_SINGLE("AC97 2ch->4ch Copy Switch", FM801_CODEC_CTRL, 7, 1, 0),
1010 FM801_SINGLE("AC97 18-bit Switch", FM801_CODEC_CTRL, 10, 1, 0),
1015 };
1016 
1017 static void snd_fm801_mixer_free_ac97_bus(struct snd_ac97_bus *bus)
1018 {
1019  struct fm801 *chip = bus->private_data;
1020  chip->ac97_bus = NULL;
1021 }
1022 
1023 static void snd_fm801_mixer_free_ac97(struct snd_ac97 *ac97)
1024 {
1025  struct fm801 *chip = ac97->private_data;
1026  if (ac97->num == 0) {
1027  chip->ac97 = NULL;
1028  } else {
1029  chip->ac97_sec = NULL;
1030  }
1031 }
1032 
1033 static int __devinit snd_fm801_mixer(struct fm801 *chip)
1034 {
1035  struct snd_ac97_template ac97;
1036  unsigned int i;
1037  int err;
1038  static struct snd_ac97_bus_ops ops = {
1039  .write = snd_fm801_codec_write,
1040  .read = snd_fm801_codec_read,
1041  };
1042 
1043  if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &chip->ac97_bus)) < 0)
1044  return err;
1045  chip->ac97_bus->private_free = snd_fm801_mixer_free_ac97_bus;
1046 
1047  memset(&ac97, 0, sizeof(ac97));
1048  ac97.private_data = chip;
1049  ac97.private_free = snd_fm801_mixer_free_ac97;
1050  if ((err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97)) < 0)
1051  return err;
1052  if (chip->secondary) {
1053  ac97.num = 1;
1054  ac97.addr = chip->secondary_addr;
1055  if ((err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97_sec)) < 0)
1056  return err;
1057  }
1058  for (i = 0; i < FM801_CONTROLS; i++)
1059  snd_ctl_add(chip->card, snd_ctl_new1(&snd_fm801_controls[i], chip));
1060  if (chip->multichannel) {
1061  for (i = 0; i < FM801_CONTROLS_MULTI; i++)
1062  snd_ctl_add(chip->card, snd_ctl_new1(&snd_fm801_controls_multi[i], chip));
1063  }
1064  return 0;
1065 }
1066 
1067 /*
1068  * initialization routines
1069  */
1070 
1071 static int wait_for_codec(struct fm801 *chip, unsigned int codec_id,
1072  unsigned short reg, unsigned long waits)
1073 {
1074  unsigned long timeout = jiffies + waits;
1075 
1076  outw(FM801_AC97_READ | (codec_id << FM801_AC97_ADDR_SHIFT) | reg,
1077  FM801_REG(chip, AC97_CMD));
1078  udelay(5);
1079  do {
1080  if ((inw(FM801_REG(chip, AC97_CMD)) & (FM801_AC97_VALID|FM801_AC97_BUSY))
1081  == FM801_AC97_VALID)
1082  return 0;
1084  } while (time_after(timeout, jiffies));
1085  return -EIO;
1086 }
1087 
1088 static int snd_fm801_chip_init(struct fm801 *chip, int resume)
1089 {
1090  unsigned short cmdw;
1091 
1092  if (chip->tea575x_tuner & TUNER_ONLY)
1093  goto __ac97_ok;
1094 
1095  /* codec cold reset + AC'97 warm reset */
1096  outw((1<<5) | (1<<6), FM801_REG(chip, CODEC_CTRL));
1097  inw(FM801_REG(chip, CODEC_CTRL)); /* flush posting data */
1098  udelay(100);
1099  outw(0, FM801_REG(chip, CODEC_CTRL));
1100 
1101  if (wait_for_codec(chip, 0, AC97_RESET, msecs_to_jiffies(750)) < 0)
1102  if (!resume) {
1103  snd_printk(KERN_INFO "Primary AC'97 codec not found, "
1104  "assume SF64-PCR (tuner-only)\n");
1105  chip->tea575x_tuner = 3 | TUNER_ONLY;
1106  goto __ac97_ok;
1107  }
1108 
1109  if (chip->multichannel) {
1110  if (chip->secondary_addr) {
1111  wait_for_codec(chip, chip->secondary_addr,
1113  } else {
1114  /* my card has the secondary codec */
1115  /* at address #3, so the loop is inverted */
1116  int i;
1117  for (i = 3; i > 0; i--) {
1118  if (!wait_for_codec(chip, i, AC97_VENDOR_ID1,
1119  msecs_to_jiffies(50))) {
1120  cmdw = inw(FM801_REG(chip, AC97_DATA));
1121  if (cmdw != 0xffff && cmdw != 0) {
1122  chip->secondary = 1;
1123  chip->secondary_addr = i;
1124  break;
1125  }
1126  }
1127  }
1128  }
1129 
1130  /* the recovery phase, it seems that probing for non-existing codec might */
1131  /* cause timeout problems */
1132  wait_for_codec(chip, 0, AC97_VENDOR_ID1, msecs_to_jiffies(750));
1133  }
1134 
1135  __ac97_ok:
1136 
1137  /* init volume */
1138  outw(0x0808, FM801_REG(chip, PCM_VOL));
1139  outw(0x9f1f, FM801_REG(chip, FM_VOL));
1140  outw(0x8808, FM801_REG(chip, I2S_VOL));
1141 
1142  /* I2S control - I2S mode */
1143  outw(0x0003, FM801_REG(chip, I2S_MODE));
1144 
1145  /* interrupt setup */
1146  cmdw = inw(FM801_REG(chip, IRQ_MASK));
1147  if (chip->irq < 0)
1148  cmdw |= 0x00c3; /* mask everything, no PCM nor MPU */
1149  else
1150  cmdw &= ~0x0083; /* unmask MPU, PLAYBACK & CAPTURE */
1151  outw(cmdw, FM801_REG(chip, IRQ_MASK));
1152 
1153  /* interrupt clear */
1154  outw(FM801_IRQ_PLAYBACK|FM801_IRQ_CAPTURE|FM801_IRQ_MPU, FM801_REG(chip, IRQ_STATUS));
1155 
1156  return 0;
1157 }
1158 
1159 
1160 static int snd_fm801_free(struct fm801 *chip)
1161 {
1162  unsigned short cmdw;
1163 
1164  if (chip->irq < 0)
1165  goto __end_hw;
1166 
1167  /* interrupt setup - mask everything */
1168  cmdw = inw(FM801_REG(chip, IRQ_MASK));
1169  cmdw |= 0x00c3;
1170  outw(cmdw, FM801_REG(chip, IRQ_MASK));
1171 
1172  __end_hw:
1173 #ifdef CONFIG_SND_FM801_TEA575X_BOOL
1174  if (!(chip->tea575x_tuner & TUNER_DISABLED)) {
1175  snd_tea575x_exit(&chip->tea);
1176  v4l2_device_unregister(&chip->v4l2_dev);
1177  }
1178 #endif
1179  if (chip->irq >= 0)
1180  free_irq(chip->irq, chip);
1181  pci_release_regions(chip->pci);
1182  pci_disable_device(chip->pci);
1183 
1184  kfree(chip);
1185  return 0;
1186 }
1187 
1188 static int snd_fm801_dev_free(struct snd_device *device)
1189 {
1190  struct fm801 *chip = device->device_data;
1191  return snd_fm801_free(chip);
1192 }
1193 
1194 static int __devinit snd_fm801_create(struct snd_card *card,
1195  struct pci_dev * pci,
1196  int tea575x_tuner,
1197  int radio_nr,
1198  struct fm801 ** rchip)
1199 {
1200  struct fm801 *chip;
1201  int err;
1202  static struct snd_device_ops ops = {
1203  .dev_free = snd_fm801_dev_free,
1204  };
1205 
1206  *rchip = NULL;
1207  if ((err = pci_enable_device(pci)) < 0)
1208  return err;
1209  chip = kzalloc(sizeof(*chip), GFP_KERNEL);
1210  if (chip == NULL) {
1211  pci_disable_device(pci);
1212  return -ENOMEM;
1213  }
1214  spin_lock_init(&chip->reg_lock);
1215  chip->card = card;
1216  chip->pci = pci;
1217  chip->irq = -1;
1218  chip->tea575x_tuner = tea575x_tuner;
1219  if ((err = pci_request_regions(pci, "FM801")) < 0) {
1220  kfree(chip);
1221  pci_disable_device(pci);
1222  return err;
1223  }
1224  chip->port = pci_resource_start(pci, 0);
1225  if ((tea575x_tuner & TUNER_ONLY) == 0) {
1226  if (request_irq(pci->irq, snd_fm801_interrupt, IRQF_SHARED,
1227  KBUILD_MODNAME, chip)) {
1228  snd_printk(KERN_ERR "unable to grab IRQ %d\n", chip->irq);
1229  snd_fm801_free(chip);
1230  return -EBUSY;
1231  }
1232  chip->irq = pci->irq;
1233  pci_set_master(pci);
1234  }
1235 
1236  if (pci->revision >= 0xb1) /* FM801-AU */
1237  chip->multichannel = 1;
1238 
1239  snd_fm801_chip_init(chip, 0);
1240  /* init might set tuner access method */
1241  tea575x_tuner = chip->tea575x_tuner;
1242 
1243  if (chip->irq >= 0 && (tea575x_tuner & TUNER_ONLY)) {
1244  pci_clear_master(pci);
1245  free_irq(chip->irq, chip);
1246  chip->irq = -1;
1247  }
1248 
1249  if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
1250  snd_fm801_free(chip);
1251  return err;
1252  }
1253 
1254  snd_card_set_dev(card, &pci->dev);
1255 
1256 #ifdef CONFIG_SND_FM801_TEA575X_BOOL
1257  err = v4l2_device_register(&pci->dev, &chip->v4l2_dev);
1258  if (err < 0) {
1259  snd_fm801_free(chip);
1260  return err;
1261  }
1262  chip->tea.v4l2_dev = &chip->v4l2_dev;
1263  chip->tea.radio_nr = radio_nr;
1264  chip->tea.private_data = chip;
1265  chip->tea.ops = &snd_fm801_tea_ops;
1266  sprintf(chip->tea.bus_info, "PCI:%s", pci_name(pci));
1267  if ((tea575x_tuner & TUNER_TYPE_MASK) > 0 &&
1268  (tea575x_tuner & TUNER_TYPE_MASK) < 4) {
1269  if (snd_tea575x_init(&chip->tea, THIS_MODULE)) {
1270  snd_printk(KERN_ERR "TEA575x radio not found\n");
1271  snd_fm801_free(chip);
1272  return -ENODEV;
1273  }
1274  } else if ((tea575x_tuner & TUNER_TYPE_MASK) == 0) {
1275  /* autodetect tuner connection */
1276  for (tea575x_tuner = 1; tea575x_tuner <= 3; tea575x_tuner++) {
1277  chip->tea575x_tuner = tea575x_tuner;
1278  if (!snd_tea575x_init(&chip->tea, THIS_MODULE)) {
1279  snd_printk(KERN_INFO "detected TEA575x radio type %s\n",
1280  get_tea575x_gpio(chip)->name);
1281  break;
1282  }
1283  }
1284  if (tea575x_tuner == 4) {
1285  snd_printk(KERN_ERR "TEA575x radio not found\n");
1286  chip->tea575x_tuner = TUNER_DISABLED;
1287  }
1288  }
1289  if (!(chip->tea575x_tuner & TUNER_DISABLED)) {
1290  strlcpy(chip->tea.card, get_tea575x_gpio(chip)->name,
1291  sizeof(chip->tea.card));
1292  }
1293 #endif
1294 
1295  *rchip = chip;
1296  return 0;
1297 }
1298 
1299 static int __devinit snd_card_fm801_probe(struct pci_dev *pci,
1300  const struct pci_device_id *pci_id)
1301 {
1302  static int dev;
1303  struct snd_card *card;
1304  struct fm801 *chip;
1305  struct snd_opl3 *opl3;
1306  int err;
1307 
1308  if (dev >= SNDRV_CARDS)
1309  return -ENODEV;
1310  if (!enable[dev]) {
1311  dev++;
1312  return -ENOENT;
1313  }
1314 
1315  err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
1316  if (err < 0)
1317  return err;
1318  if ((err = snd_fm801_create(card, pci, tea575x_tuner[dev], radio_nr[dev], &chip)) < 0) {
1319  snd_card_free(card);
1320  return err;
1321  }
1322  card->private_data = chip;
1323 
1324  strcpy(card->driver, "FM801");
1325  strcpy(card->shortname, "ForteMedia FM801-");
1326  strcat(card->shortname, chip->multichannel ? "AU" : "AS");
1327  sprintf(card->longname, "%s at 0x%lx, irq %i",
1328  card->shortname, chip->port, chip->irq);
1329 
1330  if (chip->tea575x_tuner & TUNER_ONLY)
1331  goto __fm801_tuner_only;
1332 
1333  if ((err = snd_fm801_pcm(chip, 0, NULL)) < 0) {
1334  snd_card_free(card);
1335  return err;
1336  }
1337  if ((err = snd_fm801_mixer(chip)) < 0) {
1338  snd_card_free(card);
1339  return err;
1340  }
1341  if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_FM801,
1342  FM801_REG(chip, MPU401_DATA),
1345  -1, &chip->rmidi)) < 0) {
1346  snd_card_free(card);
1347  return err;
1348  }
1349  if ((err = snd_opl3_create(card, FM801_REG(chip, OPL3_BANK0),
1350  FM801_REG(chip, OPL3_BANK1),
1351  OPL3_HW_OPL3_FM801, 1, &opl3)) < 0) {
1352  snd_card_free(card);
1353  return err;
1354  }
1355  if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
1356  snd_card_free(card);
1357  return err;
1358  }
1359 
1360  __fm801_tuner_only:
1361  if ((err = snd_card_register(card)) < 0) {
1362  snd_card_free(card);
1363  return err;
1364  }
1365  pci_set_drvdata(pci, card);
1366  dev++;
1367  return 0;
1368 }
1369 
1370 static void __devexit snd_card_fm801_remove(struct pci_dev *pci)
1371 {
1372  snd_card_free(pci_get_drvdata(pci));
1373  pci_set_drvdata(pci, NULL);
1374 }
1375 
1376 #ifdef CONFIG_PM_SLEEP
1377 static unsigned char saved_regs[] = {
1382 };
1383 
1384 static int snd_fm801_suspend(struct device *dev)
1385 {
1386  struct pci_dev *pci = to_pci_dev(dev);
1387  struct snd_card *card = dev_get_drvdata(dev);
1388  struct fm801 *chip = card->private_data;
1389  int i;
1390 
1392  snd_pcm_suspend_all(chip->pcm);
1393  snd_ac97_suspend(chip->ac97);
1394  snd_ac97_suspend(chip->ac97_sec);
1395  for (i = 0; i < ARRAY_SIZE(saved_regs); i++)
1396  chip->saved_regs[i] = inw(chip->port + saved_regs[i]);
1397  /* FIXME: tea575x suspend */
1398 
1399  pci_disable_device(pci);
1400  pci_save_state(pci);
1402  return 0;
1403 }
1404 
1405 static int snd_fm801_resume(struct device *dev)
1406 {
1407  struct pci_dev *pci = to_pci_dev(dev);
1408  struct snd_card *card = dev_get_drvdata(dev);
1409  struct fm801 *chip = card->private_data;
1410  int i;
1411 
1413  pci_restore_state(pci);
1414  if (pci_enable_device(pci) < 0) {
1415  printk(KERN_ERR "fm801: pci_enable_device failed, "
1416  "disabling device\n");
1417  snd_card_disconnect(card);
1418  return -EIO;
1419  }
1420  pci_set_master(pci);
1421 
1422  snd_fm801_chip_init(chip, 1);
1423  snd_ac97_resume(chip->ac97);
1424  snd_ac97_resume(chip->ac97_sec);
1425  for (i = 0; i < ARRAY_SIZE(saved_regs); i++)
1426  outw(chip->saved_regs[i], chip->port + saved_regs[i]);
1427 
1429  return 0;
1430 }
1431 
1432 static SIMPLE_DEV_PM_OPS(snd_fm801_pm, snd_fm801_suspend, snd_fm801_resume);
1433 #define SND_FM801_PM_OPS &snd_fm801_pm
1434 #else
1435 #define SND_FM801_PM_OPS NULL
1436 #endif /* CONFIG_PM_SLEEP */
1437 
1438 static struct pci_driver fm801_driver = {
1439  .name = KBUILD_MODNAME,
1440  .id_table = snd_fm801_ids,
1441  .probe = snd_card_fm801_probe,
1442  .remove = __devexit_p(snd_card_fm801_remove),
1443  .driver = {
1444  .pm = SND_FM801_PM_OPS,
1445  },
1446 };
1447 
1448 module_pci_driver(fm801_driver);