Lines Matching refs:chip

122 #define OPTi93X_PORT(chip, r)		((chip)->port + OPTi93X_##r)  argument
185 static int snd_opti9xx_init(struct snd_opti9xx *chip, in snd_opti9xx_init() argument
190 chip->hardware = hardware; in snd_opti9xx_init()
191 strcpy(chip->name, snd_opti9xx_names[hardware]); in snd_opti9xx_init()
193 spin_lock_init(&chip->lock); in snd_opti9xx_init()
195 chip->irq = -1; in snd_opti9xx_init()
199 if (isapnp && chip->mc_base) in snd_opti9xx_init()
201 chip->mc_base |= 0xc00; in snd_opti9xx_init()
205 chip->mc_base = 0xf8c; in snd_opti9xx_init()
206 chip->mc_base_size = opti9xx_mc_size[hardware]; in snd_opti9xx_init()
209 chip->mc_base_size = opti9xx_mc_size[hardware]; in snd_opti9xx_init()
216 chip->password = (hardware == OPTi9XX_HW_82C928) ? 0xe2 : 0xe3; in snd_opti9xx_init()
217 chip->pwd_reg = 3; in snd_opti9xx_init()
222 chip->password = 0xe5; in snd_opti9xx_init()
223 chip->pwd_reg = 3; in snd_opti9xx_init()
230 chip->mc_base = (hardware == OPTi9XX_HW_82C930) ? 0xf8f : 0xf8d; in snd_opti9xx_init()
231 if (!chip->mc_indir_index) in snd_opti9xx_init()
232 chip->mc_indir_index = 0xe0e; in snd_opti9xx_init()
233 chip->password = 0xe4; in snd_opti9xx_init()
234 chip->pwd_reg = 0; in snd_opti9xx_init()
245 static unsigned char snd_opti9xx_read(struct snd_opti9xx *chip, in snd_opti9xx_read() argument
251 spin_lock_irqsave(&chip->lock, flags); in snd_opti9xx_read()
252 outb(chip->password, chip->mc_base + chip->pwd_reg); in snd_opti9xx_read()
254 switch (chip->hardware) { in snd_opti9xx_read()
259 outb(reg, chip->mc_base + 8); in snd_opti9xx_read()
260 outb(chip->password, chip->mc_base + chip->pwd_reg); in snd_opti9xx_read()
261 retval = inb(chip->mc_base + 9); in snd_opti9xx_read()
267 retval = inb(chip->mc_base + reg); in snd_opti9xx_read()
274 outb(reg, chip->mc_indir_index); in snd_opti9xx_read()
275 outb(chip->password, chip->mc_base + chip->pwd_reg); in snd_opti9xx_read()
276 retval = inb(chip->mc_indir_index + 1); in snd_opti9xx_read()
281 snd_printk(KERN_ERR "chip %d not supported\n", chip->hardware); in snd_opti9xx_read()
284 spin_unlock_irqrestore(&chip->lock, flags); in snd_opti9xx_read()
288 static void snd_opti9xx_write(struct snd_opti9xx *chip, unsigned char reg, in snd_opti9xx_write() argument
293 spin_lock_irqsave(&chip->lock, flags); in snd_opti9xx_write()
294 outb(chip->password, chip->mc_base + chip->pwd_reg); in snd_opti9xx_write()
296 switch (chip->hardware) { in snd_opti9xx_write()
301 outb(reg, chip->mc_base + 8); in snd_opti9xx_write()
302 outb(chip->password, chip->mc_base + chip->pwd_reg); in snd_opti9xx_write()
303 outb(value, chip->mc_base + 9); in snd_opti9xx_write()
309 outb(value, chip->mc_base + reg); in snd_opti9xx_write()
316 outb(reg, chip->mc_indir_index); in snd_opti9xx_write()
317 outb(chip->password, chip->mc_base + chip->pwd_reg); in snd_opti9xx_write()
318 outb(value, chip->mc_indir_index + 1); in snd_opti9xx_write()
323 snd_printk(KERN_ERR "chip %d not supported\n", chip->hardware); in snd_opti9xx_write()
326 spin_unlock_irqrestore(&chip->lock, flags); in snd_opti9xx_write()
330 #define snd_opti9xx_write_mask(chip, reg, value, mask) \ argument
331 snd_opti9xx_write(chip, reg, \
332 (snd_opti9xx_read(chip, reg) & ~(mask)) | ((value) & (mask)))
335 static int snd_opti9xx_configure(struct snd_opti9xx *chip, in snd_opti9xx_configure() argument
346 switch (chip->hardware) { in snd_opti9xx_configure()
350 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(4), 0xf0, 0xfc); in snd_opti9xx_configure()
352 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(6), 0x02, 0x02); in snd_opti9xx_configure()
356 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(1), 0x80, 0x80); in snd_opti9xx_configure()
358 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(2), 0x00, 0x20); in snd_opti9xx_configure()
360 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(3), 0xf0, 0xff); in snd_opti9xx_configure()
363 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(5), 0x02, 0x02); in snd_opti9xx_configure()
366 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(5), 0x00, 0x02); in snd_opti9xx_configure()
372 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(1), 0x80, 0x80); in snd_opti9xx_configure()
373 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(2), 0x00, 0x20); in snd_opti9xx_configure()
377 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(4), 0x00, 0x0c); in snd_opti9xx_configure()
379 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(5), 0x02, 0x02); in snd_opti9xx_configure()
381 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(5), 0x00, 0x02); in snd_opti9xx_configure()
388 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(20), 0x04, 0x0c); in snd_opti9xx_configure()
394 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(21), 0x82, 0xff); in snd_opti9xx_configure()
399 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(26), 0x01, 0x01); in snd_opti9xx_configure()
401 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(6), 0x02, 0x03); in snd_opti9xx_configure()
402 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(3), 0x00, 0xff); in snd_opti9xx_configure()
403 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(4), 0x10 | in snd_opti9xx_configure()
404 (chip->hardware == OPTi9XX_HW_82C930 ? 0x00 : 0x04), in snd_opti9xx_configure()
406 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(5), 0x20, 0xbf); in snd_opti9xx_configure()
411 snd_printk(KERN_ERR "chip %d not supported\n", chip->hardware); in snd_opti9xx_configure()
418 chip->wss_base = 0x530; in snd_opti9xx_configure()
422 chip->wss_base = 0x604; in snd_opti9xx_configure()
426 chip->wss_base = 0xe80; in snd_opti9xx_configure()
430 chip->wss_base = 0xf40; in snd_opti9xx_configure()
437 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(1), wss_base_bits << 4, 0x30); in snd_opti9xx_configure()
496 outb(irq_bits << 3 | dma_bits, chip->wss_base); in snd_opti9xx_configure()
498 snd_opti9xx_write(chip, OPTi9XX_MC_REG(3), (irq_bits << 3 | dma_bits)); in snd_opti9xx_configure()
502 if (chip->hardware > OPTi9XX_HW_82C928) { in snd_opti9xx_configure()
544 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(6), in snd_opti9xx_configure()
592 static int snd_opti93x_mixer(struct snd_wss *chip) in snd_opti93x_mixer() argument
599 if (snd_BUG_ON(!chip || !chip->pcm)) in snd_opti93x_mixer()
602 card = chip->card; in snd_opti93x_mixer()
604 strcpy(card->mixername, chip->pcm->name); in snd_opti93x_mixer()
636 snd_ctl_new1(&snd_opti93x_controls[idx], chip)); in snd_opti93x_mixer()
645 struct snd_opti9xx *chip = dev_id; in snd_opti93x_interrupt() local
646 struct snd_wss *codec = chip->codec; in snd_opti93x_interrupt()
652 status = snd_opti9xx_read(chip, OPTi9XX_MC_REG(11)); in snd_opti93x_interrupt()
665 static int snd_opti9xx_read_check(struct snd_opti9xx *chip) in snd_opti9xx_read_check() argument
672 chip->res_mc_base = request_region(chip->mc_base, chip->mc_base_size, in snd_opti9xx_read_check()
674 if (chip->res_mc_base == NULL) in snd_opti9xx_read_check()
677 value = snd_opti9xx_read(chip, OPTi9XX_MC_REG(1)); in snd_opti9xx_read_check()
678 if (value != 0xff && value != inb(chip->mc_base + OPTi9XX_MC_REG(1))) in snd_opti9xx_read_check()
679 if (value == snd_opti9xx_read(chip, OPTi9XX_MC_REG(1))) in snd_opti9xx_read_check()
682 chip->res_mc_indir = request_region(chip->mc_indir_index, 2, in snd_opti9xx_read_check()
684 if (chip->res_mc_indir == NULL) in snd_opti9xx_read_check()
687 spin_lock_irqsave(&chip->lock, flags); in snd_opti9xx_read_check()
688 outb(chip->password, chip->mc_base + chip->pwd_reg); in snd_opti9xx_read_check()
689 outb(((chip->mc_indir_index & 0x1f0) >> 4), chip->mc_base); in snd_opti9xx_read_check()
690 spin_unlock_irqrestore(&chip->lock, flags); in snd_opti9xx_read_check()
692 value = snd_opti9xx_read(chip, OPTi9XX_MC_REG(7)); in snd_opti9xx_read_check()
693 snd_opti9xx_write(chip, OPTi9XX_MC_REG(7), 0xff - value); in snd_opti9xx_read_check()
694 if (snd_opti9xx_read(chip, OPTi9XX_MC_REG(7)) == 0xff - value) in snd_opti9xx_read_check()
697 release_and_free_resource(chip->res_mc_indir); in snd_opti9xx_read_check()
698 chip->res_mc_indir = NULL; in snd_opti9xx_read_check()
700 release_and_free_resource(chip->res_mc_base); in snd_opti9xx_read_check()
701 chip->res_mc_base = NULL; in snd_opti9xx_read_check()
707 struct snd_opti9xx *chip) argument
716 err = snd_opti9xx_init(chip, i);
720 err = snd_opti9xx_read_check(chip);
724 chip->mc_indir_index = 0;
731 static int snd_card_opti9xx_pnp(struct snd_opti9xx *chip, argument
757 chip->mc_indir_index = (pnp_port_start(pdev, 3) & ~0xf) | 0xe;
775 chip->mc_base = pnp_port_start(devmc, 0) - 1;
776 chip->mc_base_size = pnp_port_len(devmc, 0) + 1;
802 struct snd_opti9xx *chip = card->private_data; local
804 if (chip) {
806 if (chip->irq > 0) {
807 disable_irq(chip->irq);
808 free_irq(chip->irq, chip);
810 release_and_free_resource(chip->res_mc_indir);
812 release_and_free_resource(chip->res_mc_base);
821 struct snd_opti9xx *chip = card->private_data; local
839 error = snd_opti9xx_configure(chip, port, irq, dma1, xdma2,
844 error = snd_wss_create(card, chip->wss_base + 4, -1, irq, dma1, xdma2,
853 chip->codec = codec;
872 0, DEV_NAME" - WSS", chip);
878 chip->irq = irq;
879 strcpy(card->driver, chip->name);
884 chip->wss_base + 4, irq, dma1, xdma2);
887 card->shortname, codec->pcm->name, chip->wss_base + 4, irq,
904 if (chip->hardware == OPTi9XX_HW_82C928 ||
905 chip->hardware == OPTi9XX_HW_82C929 ||
906 chip->hardware == OPTi9XX_HW_82C924) {
909 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(2),
914 snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(2),
1036 struct snd_opti9xx *chip = card->private_data; local
1039 chip->codec->suspend(chip->codec);
1045 struct snd_opti9xx *chip = card->private_data; local
1053 error = snd_opti9xx_configure(chip, port, irq, dma1, xdma2,
1057 chip->codec->resume(chip->codec);
1093 struct snd_opti9xx *chip; local
1102 chip = card->private_data;
1104 hw = snd_card_opti9xx_pnp(chip, pcard, pid);
1120 if ((error = snd_opti9xx_init(chip, hw))) {
1124 error = snd_opti9xx_read_check(chip);