Lines Matching refs:chip

466 static inline u8 igetbyte(struct intel8x0 *chip, u32 offset)  in igetbyte()  argument
468 return ioread8(chip->bmaddr + offset); in igetbyte()
471 static inline u16 igetword(struct intel8x0 *chip, u32 offset) in igetword() argument
473 return ioread16(chip->bmaddr + offset); in igetword()
476 static inline u32 igetdword(struct intel8x0 *chip, u32 offset) in igetdword() argument
478 return ioread32(chip->bmaddr + offset); in igetdword()
481 static inline void iputbyte(struct intel8x0 *chip, u32 offset, u8 val) in iputbyte() argument
483 iowrite8(val, chip->bmaddr + offset); in iputbyte()
486 static inline void iputword(struct intel8x0 *chip, u32 offset, u16 val) in iputword() argument
488 iowrite16(val, chip->bmaddr + offset); in iputword()
491 static inline void iputdword(struct intel8x0 *chip, u32 offset, u32 val) in iputdword() argument
493 iowrite32(val, chip->bmaddr + offset); in iputdword()
500 static inline u16 iagetword(struct intel8x0 *chip, u32 offset) in iagetword() argument
502 return ioread16(chip->addr + offset); in iagetword()
505 static inline void iaputword(struct intel8x0 *chip, u32 offset, u16 val) in iaputword() argument
507 iowrite16(val, chip->addr + offset); in iaputword()
518 static int snd_intel8x0_codec_semaphore(struct intel8x0 *chip, unsigned int codec) in snd_intel8x0_codec_semaphore() argument
524 if (chip->in_sdin_init) { in snd_intel8x0_codec_semaphore()
527 codec = chip->codec_isr_bits; in snd_intel8x0_codec_semaphore()
529 codec = chip->codec_bit[chip->ac97_sdin[codec]]; in snd_intel8x0_codec_semaphore()
533 if ((igetdword(chip, ICHREG(GLOB_STA)) & codec) == 0) in snd_intel8x0_codec_semaphore()
536 if (chip->buggy_semaphore) in snd_intel8x0_codec_semaphore()
542 if (!(igetbyte(chip, ICHREG(ACC_SEMA)) & ICH_CAS)) in snd_intel8x0_codec_semaphore()
550 dev_err(chip->card->dev, in snd_intel8x0_codec_semaphore()
552 igetbyte(chip, ICHREG(ACC_SEMA)), igetdword(chip, ICHREG(GLOB_STA))); in snd_intel8x0_codec_semaphore()
553 iagetword(chip, 0); /* clear semaphore flag */ in snd_intel8x0_codec_semaphore()
562 struct intel8x0 *chip = ac97->private_data; in snd_intel8x0_codec_write() local
564 if (snd_intel8x0_codec_semaphore(chip, ac97->num) < 0) { in snd_intel8x0_codec_write()
565 if (! chip->in_ac97_init) in snd_intel8x0_codec_write()
566 dev_err(chip->card->dev, in snd_intel8x0_codec_write()
570 iaputword(chip, reg + ac97->num * 0x80, val); in snd_intel8x0_codec_write()
576 struct intel8x0 *chip = ac97->private_data; in snd_intel8x0_codec_read() local
580 if (snd_intel8x0_codec_semaphore(chip, ac97->num) < 0) { in snd_intel8x0_codec_read()
581 if (! chip->in_ac97_init) in snd_intel8x0_codec_read()
582 dev_err(chip->card->dev, in snd_intel8x0_codec_read()
587 res = iagetword(chip, reg + ac97->num * 0x80); in snd_intel8x0_codec_read()
588 if ((tmp = igetdword(chip, ICHREG(GLOB_STA))) & ICH_RCS) { in snd_intel8x0_codec_read()
590 iputdword(chip, ICHREG(GLOB_STA), tmp & in snd_intel8x0_codec_read()
591 ~(chip->codec_ready_bits | ICH_GSCI)); in snd_intel8x0_codec_read()
592 if (! chip->in_ac97_init) in snd_intel8x0_codec_read()
593 dev_err(chip->card->dev, in snd_intel8x0_codec_read()
602 static void snd_intel8x0_codec_read_test(struct intel8x0 *chip, in snd_intel8x0_codec_read_test() argument
607 if (snd_intel8x0_codec_semaphore(chip, codec) >= 0) { in snd_intel8x0_codec_read_test()
608 iagetword(chip, codec * 0x80); in snd_intel8x0_codec_read_test()
609 if ((tmp = igetdword(chip, ICHREG(GLOB_STA))) & ICH_RCS) { in snd_intel8x0_codec_read_test()
611 iputdword(chip, ICHREG(GLOB_STA), tmp & in snd_intel8x0_codec_read_test()
612 ~(chip->codec_ready_bits | ICH_GSCI)); in snd_intel8x0_codec_read_test()
620 static int snd_intel8x0_ali_codec_ready(struct intel8x0 *chip, int mask) in snd_intel8x0_ali_codec_ready() argument
624 int val = igetbyte(chip, ICHREG(ALI_CSPSR)); in snd_intel8x0_ali_codec_ready()
628 if (! chip->in_ac97_init) in snd_intel8x0_ali_codec_ready()
629 dev_warn(chip->card->dev, "AC97 codec ready timeout.\n"); in snd_intel8x0_ali_codec_ready()
633 static int snd_intel8x0_ali_codec_semaphore(struct intel8x0 *chip) in snd_intel8x0_ali_codec_semaphore() argument
636 if (chip->buggy_semaphore) in snd_intel8x0_ali_codec_semaphore()
638 while (--time && (igetdword(chip, ICHREG(ALI_CAS)) & ALI_CAS_SEM_BUSY)) in snd_intel8x0_ali_codec_semaphore()
640 if (! time && ! chip->in_ac97_init) in snd_intel8x0_ali_codec_semaphore()
641 dev_warn(chip->card->dev, "ali_codec_semaphore timeout\n"); in snd_intel8x0_ali_codec_semaphore()
642 return snd_intel8x0_ali_codec_ready(chip, ALI_CSPSR_CODEC_READY); in snd_intel8x0_ali_codec_semaphore()
647 struct intel8x0 *chip = ac97->private_data; in snd_intel8x0_ali_codec_read() local
650 if (snd_intel8x0_ali_codec_semaphore(chip)) in snd_intel8x0_ali_codec_read()
655 iputword(chip, ICHREG(ALI_CPR_ADDR), reg); in snd_intel8x0_ali_codec_read()
656 if (snd_intel8x0_ali_codec_ready(chip, ALI_CSPSR_READ_OK)) in snd_intel8x0_ali_codec_read()
658 data = igetword(chip, ICHREG(ALI_SPR)); in snd_intel8x0_ali_codec_read()
666 struct intel8x0 *chip = ac97->private_data; in snd_intel8x0_ali_codec_write() local
668 if (snd_intel8x0_ali_codec_semaphore(chip)) in snd_intel8x0_ali_codec_write()
670 iputword(chip, ICHREG(ALI_CPR), val); in snd_intel8x0_ali_codec_write()
673 iputword(chip, ICHREG(ALI_CPR_ADDR), reg); in snd_intel8x0_ali_codec_write()
674 snd_intel8x0_ali_codec_ready(chip, ALI_CSPSR_WRITE_OK); in snd_intel8x0_ali_codec_write()
681 static void snd_intel8x0_setup_periods(struct intel8x0 *chip, struct ichdev *ichdev) in snd_intel8x0_setup_periods() argument
687 iputdword(chip, port + ICH_REG_OFF_BDBAR, ichdev->bdbar_addr); in snd_intel8x0_setup_periods()
710 dev_dbg(chip->card->dev, "bdbar[%i] = 0x%x [0x%x]\n", in snd_intel8x0_setup_periods()
716 iputbyte(chip, port + ICH_REG_OFF_LVI, ichdev->lvi = ICH_REG_LVI_MASK); in snd_intel8x0_setup_periods()
718 iputbyte(chip, port + ICH_REG_OFF_CIV, 0); in snd_intel8x0_setup_periods()
722 dev_dbg(chip->card->dev, in snd_intel8x0_setup_periods()
728 iputbyte(chip, port + ichdev->roff_sr, ICH_FIFOE | ICH_BCIS | ICH_LVBCI); in snd_intel8x0_setup_periods()
754 static inline void snd_intel8x0_update(struct intel8x0 *chip, struct ichdev *ichdev) in snd_intel8x0_update() argument
761 spin_lock_irqsave(&chip->reg_lock, flags); in snd_intel8x0_update()
762 status = igetbyte(chip, port + ichdev->roff_sr); in snd_intel8x0_update()
763 civ = igetbyte(chip, port + ICH_REG_OFF_CIV); in snd_intel8x0_update()
781 if (! chip->in_measurement) in snd_intel8x0_update()
785 iputbyte(chip, port + ICH_REG_OFF_LVI, ichdev->lvi); in snd_intel8x0_update()
791 dev_dbg(chip->card->dev, in snd_intel8x0_update()
802 spin_unlock_irqrestore(&chip->reg_lock, flags); in snd_intel8x0_update()
806 iputbyte(chip, port + ichdev->roff_sr, in snd_intel8x0_update()
812 struct intel8x0 *chip = dev_id; in snd_intel8x0_interrupt() local
817 status = igetdword(chip, chip->int_sta_reg); in snd_intel8x0_interrupt()
821 if ((status & chip->int_sta_mask) == 0) { in snd_intel8x0_interrupt()
824 iputdword(chip, chip->int_sta_reg, status); in snd_intel8x0_interrupt()
825 if (! chip->buggy_irq) in snd_intel8x0_interrupt()
831 for (i = 0; i < chip->bdbars_count; i++) { in snd_intel8x0_interrupt()
832 ichdev = &chip->ichd[i]; in snd_intel8x0_interrupt()
834 snd_intel8x0_update(chip, ichdev); in snd_intel8x0_interrupt()
838 iputdword(chip, chip->int_sta_reg, status & chip->int_sta_mask); in snd_intel8x0_interrupt()
849 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_pcm_trigger() local
875 iputbyte(chip, port + ICH_REG_OFF_CR, val); in snd_intel8x0_pcm_trigger()
878 while (!(igetbyte(chip, port + ichdev->roff_sr) & ICH_DCH)) ; in snd_intel8x0_pcm_trigger()
880 iputbyte(chip, port + ICH_REG_OFF_CR, ICH_RESETREGS); in snd_intel8x0_pcm_trigger()
887 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_ali_trigger() local
895 val = igetdword(chip, ICHREG(ALI_DMACR)); in snd_intel8x0_ali_trigger()
904 fifo = igetdword(chip, fiforeg[ichdev->ali_slot / 4]); in snd_intel8x0_ali_trigger()
907 iputdword(chip, fiforeg[ichdev->ali_slot / 4], fifo); in snd_intel8x0_ali_trigger()
909 iputbyte(chip, port + ICH_REG_OFF_CR, ICH_IOCE); in snd_intel8x0_ali_trigger()
912 iputdword(chip, ICHREG(ALI_DMACR), val | (1 << ichdev->ali_slot)); in snd_intel8x0_ali_trigger()
920 iputdword(chip, ICHREG(ALI_DMACR), val | (1 << (ichdev->ali_slot + 16))); in snd_intel8x0_ali_trigger()
921 iputbyte(chip, port + ICH_REG_OFF_CR, 0); in snd_intel8x0_ali_trigger()
922 while (igetbyte(chip, port + ICH_REG_OFF_CR)) in snd_intel8x0_ali_trigger()
927 iputbyte(chip, port + ICH_REG_OFF_CR, ICH_RESETREGS); in snd_intel8x0_ali_trigger()
929 iputbyte(chip, port + ICH_REG_OFF_SR, in snd_intel8x0_ali_trigger()
930 igetbyte(chip, port + ICH_REG_OFF_SR) | 0x1e); in snd_intel8x0_ali_trigger()
931 iputdword(chip, ICHREG(ALI_INTERRUPTSR), in snd_intel8x0_ali_trigger()
932 igetdword(chip, ICHREG(ALI_INTERRUPTSR)) & ichdev->int_sta_mask); in snd_intel8x0_ali_trigger()
943 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_hw_params() local
949 if (chip->fix_nocache && ichdev->page_attr_changed) { in snd_intel8x0_hw_params()
956 if (chip->fix_nocache) { in snd_intel8x0_hw_params()
972 if (ichdev->ichd == ICHD_PCMOUT && chip->spdif_idx < 0) in snd_intel8x0_hw_params()
981 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_hw_free() local
988 if (chip->fix_nocache && ichdev->page_attr_changed) { in snd_intel8x0_hw_free()
995 static void snd_intel8x0_setup_pcm_out(struct intel8x0 *chip, in snd_intel8x0_setup_pcm_out() argument
1001 spin_lock_irq(&chip->reg_lock); in snd_intel8x0_setup_pcm_out()
1002 switch (chip->device_type) { in snd_intel8x0_setup_pcm_out()
1004 cnt = igetdword(chip, ICHREG(ALI_SCR)); in snd_intel8x0_setup_pcm_out()
1010 iputdword(chip, ICHREG(ALI_SCR), cnt); in snd_intel8x0_setup_pcm_out()
1013 cnt = igetdword(chip, ICHREG(GLOB_CNT)); in snd_intel8x0_setup_pcm_out()
1019 iputdword(chip, ICHREG(GLOB_CNT), cnt); in snd_intel8x0_setup_pcm_out()
1022 cnt = igetdword(chip, ICHREG(GLOB_CNT)); in snd_intel8x0_setup_pcm_out()
1030 if (chip->device_type == DEVICE_NFORCE) { in snd_intel8x0_setup_pcm_out()
1035 iputdword(chip, ICHREG(GLOB_CNT), cnt & ~ICH_PCM_246_MASK); in snd_intel8x0_setup_pcm_out()
1036 spin_unlock_irq(&chip->reg_lock); in snd_intel8x0_setup_pcm_out()
1038 spin_lock_irq(&chip->reg_lock); in snd_intel8x0_setup_pcm_out()
1040 } else if (chip->device_type == DEVICE_INTEL_ICH4) { in snd_intel8x0_setup_pcm_out()
1044 iputdword(chip, ICHREG(GLOB_CNT), cnt); in snd_intel8x0_setup_pcm_out()
1047 spin_unlock_irq(&chip->reg_lock); in snd_intel8x0_setup_pcm_out()
1052 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_pcm_prepare() local
1060 snd_intel8x0_setup_pcm_out(chip, runtime); in snd_intel8x0_pcm_prepare()
1061 if (chip->device_type == DEVICE_INTEL_ICH4) in snd_intel8x0_pcm_prepare()
1064 snd_intel8x0_setup_periods(chip, ichdev); in snd_intel8x0_pcm_prepare()
1070 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_pcm_pointer() local
1076 spin_lock(&chip->reg_lock); in snd_intel8x0_pcm_pointer()
1078 civ = igetbyte(chip, ichdev->reg_offset + ICH_REG_OFF_CIV); in snd_intel8x0_pcm_pointer()
1079 ptr1 = igetword(chip, ichdev->reg_offset + ichdev->roff_picb); in snd_intel8x0_pcm_pointer()
1085 if (civ != igetbyte(chip, ichdev->reg_offset + ICH_REG_OFF_CIV)) in snd_intel8x0_pcm_pointer()
1094 if (chip->inside_vm) in snd_intel8x0_pcm_pointer()
1096 if (ptr1 == igetword(chip, ichdev->reg_offset + ichdev->roff_picb)) in snd_intel8x0_pcm_pointer()
1116 spin_unlock(&chip->reg_lock); in snd_intel8x0_pcm_pointer()
1175 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_pcm_open() local
1183 if (chip->device_type == DEVICE_SIS) { in snd_intel8x0_pcm_open()
1195 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_playback_open() local
1199 err = snd_intel8x0_pcm_open(substream, &chip->ichd[ICHD_PCMOUT]); in snd_intel8x0_playback_open()
1203 if (chip->multi8) { in snd_intel8x0_playback_open()
1208 } else if (chip->multi6) { in snd_intel8x0_playback_open()
1212 } else if (chip->multi4) { in snd_intel8x0_playback_open()
1217 if (chip->dra) { in snd_intel8x0_playback_open()
1220 if (chip->smp20bit) { in snd_intel8x0_playback_open()
1229 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_playback_close() local
1231 chip->ichd[ICHD_PCMOUT].substream = NULL; in snd_intel8x0_playback_close()
1237 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_capture_open() local
1239 return snd_intel8x0_pcm_open(substream, &chip->ichd[ICHD_PCMIN]); in snd_intel8x0_capture_open()
1244 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_capture_close() local
1246 chip->ichd[ICHD_PCMIN].substream = NULL; in snd_intel8x0_capture_close()
1252 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_mic_open() local
1254 return snd_intel8x0_pcm_open(substream, &chip->ichd[ICHD_MIC]); in snd_intel8x0_mic_open()
1259 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_mic_close() local
1261 chip->ichd[ICHD_MIC].substream = NULL; in snd_intel8x0_mic_close()
1267 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_mic2_open() local
1269 return snd_intel8x0_pcm_open(substream, &chip->ichd[ICHD_MIC2]); in snd_intel8x0_mic2_open()
1274 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_mic2_close() local
1276 chip->ichd[ICHD_MIC2].substream = NULL; in snd_intel8x0_mic2_close()
1282 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_capture2_open() local
1284 return snd_intel8x0_pcm_open(substream, &chip->ichd[ICHD_PCM2IN]); in snd_intel8x0_capture2_open()
1289 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_capture2_close() local
1291 chip->ichd[ICHD_PCM2IN].substream = NULL; in snd_intel8x0_capture2_close()
1297 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_spdif_open() local
1298 int idx = chip->device_type == DEVICE_NFORCE ? NVD_SPBAR : ICHD_SPBAR; in snd_intel8x0_spdif_open()
1300 return snd_intel8x0_pcm_open(substream, &chip->ichd[idx]); in snd_intel8x0_spdif_open()
1305 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_spdif_close() local
1306 int idx = chip->device_type == DEVICE_NFORCE ? NVD_SPBAR : ICHD_SPBAR; in snd_intel8x0_spdif_close()
1308 chip->ichd[idx].substream = NULL; in snd_intel8x0_spdif_close()
1314 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_ali_ac97spdifout_open() local
1317 spin_lock_irq(&chip->reg_lock); in snd_intel8x0_ali_ac97spdifout_open()
1318 val = igetdword(chip, ICHREG(ALI_INTERFACECR)); in snd_intel8x0_ali_ac97spdifout_open()
1320 iputdword(chip, ICHREG(ALI_INTERFACECR), val); in snd_intel8x0_ali_ac97spdifout_open()
1322 spin_unlock_irq(&chip->reg_lock); in snd_intel8x0_ali_ac97spdifout_open()
1324 return snd_intel8x0_pcm_open(substream, &chip->ichd[ALID_AC97SPDIFOUT]); in snd_intel8x0_ali_ac97spdifout_open()
1329 struct intel8x0 *chip = snd_pcm_substream_chip(substream); in snd_intel8x0_ali_ac97spdifout_close() local
1332 chip->ichd[ALID_AC97SPDIFOUT].substream = NULL; in snd_intel8x0_ali_ac97spdifout_close()
1333 spin_lock_irq(&chip->reg_lock); in snd_intel8x0_ali_ac97spdifout_close()
1334 val = igetdword(chip, ICHREG(ALI_INTERFACECR)); in snd_intel8x0_ali_ac97spdifout_close()
1336 iputdword(chip, ICHREG(ALI_INTERFACECR), val); in snd_intel8x0_ali_ac97spdifout_close()
1337 spin_unlock_irq(&chip->reg_lock); in snd_intel8x0_ali_ac97spdifout_close()
1345 struct intel8x0 *chip = snd_pcm_substream_chip(substream);
1347 return snd_intel8x0_pcm_open(substream, &chip->ichd[ALID_SPDIFIN]);
1352 struct intel8x0 *chip = snd_pcm_substream_chip(substream);
1354 chip->ichd[ALID_SPDIFIN].substream = NULL;
1360 struct intel8x0 *chip = snd_pcm_substream_chip(substream);
1362 return snd_intel8x0_pcm_open(substream, &chip->ichd[ALID_SPDIFOUT]);
1367 struct intel8x0 *chip = snd_pcm_substream_chip(substream);
1369 chip->ichd[ALID_SPDIFOUT].substream = NULL;
1517 static int snd_intel8x0_pcm1(struct intel8x0 *chip, int device, in snd_intel8x0_pcm1() argument
1528 err = snd_pcm_new(chip->card, name, device, in snd_intel8x0_pcm1()
1539 pcm->private_data = chip; in snd_intel8x0_pcm1()
1542 sprintf(pcm->name, "%s - %s", chip->card->shortname, rec->suffix); in snd_intel8x0_pcm1()
1544 strcpy(pcm->name, chip->card->shortname); in snd_intel8x0_pcm1()
1545 chip->pcm[device] = pcm; in snd_intel8x0_pcm1()
1548 snd_dma_pci_data(chip->pci), in snd_intel8x0_pcm1()
1555 if (chip->multi8) in snd_intel8x0_pcm1()
1557 else if (chip->multi6) in snd_intel8x0_pcm1()
1559 else if (chip->multi4) in snd_intel8x0_pcm1()
1567 chip->ac97[0]->chmaps[SNDRV_PCM_STREAM_PLAYBACK] = chmap; in snd_intel8x0_pcm1()
1665 static int snd_intel8x0_pcm(struct intel8x0 *chip) in snd_intel8x0_pcm() argument
1670 switch (chip->device_type) { in snd_intel8x0_pcm()
1698 if (! chip->ichd[rec->ac97_idx].pcm) in snd_intel8x0_pcm()
1701 err = snd_intel8x0_pcm1(chip, device, rec); in snd_intel8x0_pcm()
1707 chip->pcm_devs = device; in snd_intel8x0_pcm()
1718 struct intel8x0 *chip = bus->private_data; in snd_intel8x0_mixer_free_ac97_bus() local
1719 chip->ac97_bus = NULL; in snd_intel8x0_mixer_free_ac97_bus()
1724 struct intel8x0 *chip = ac97->private_data; in snd_intel8x0_mixer_free_ac97() local
1725 chip->ac97[ac97->num] = NULL; in snd_intel8x0_mixer_free_ac97()
2205 static int snd_intel8x0_mixer(struct intel8x0 *chip, int ac97_clock, in snd_intel8x0_mixer() argument
2223 chip->spdif_idx = -1; /* use PCMOUT (or disabled) */ in snd_intel8x0_mixer()
2225 switch (chip->device_type) { in snd_intel8x0_mixer()
2227 chip->spdif_idx = NVD_SPBAR; in snd_intel8x0_mixer()
2230 chip->spdif_idx = ALID_AC97SPDIFOUT; in snd_intel8x0_mixer()
2233 chip->spdif_idx = ICHD_SPBAR; in snd_intel8x0_mixer()
2238 chip->in_ac97_init = 1; in snd_intel8x0_mixer()
2241 ac97.private_data = chip; in snd_intel8x0_mixer()
2244 if (chip->xbox) in snd_intel8x0_mixer()
2246 if (chip->device_type != DEVICE_ALI) { in snd_intel8x0_mixer()
2247 glob_sta = igetdword(chip, ICHREG(GLOB_STA)); in snd_intel8x0_mixer()
2249 chip->in_sdin_init = 1; in snd_intel8x0_mixer()
2251 for (i = 0; i < chip->max_codecs; i++) { in snd_intel8x0_mixer()
2252 if (! (glob_sta & chip->codec_bit[i])) in snd_intel8x0_mixer()
2254 if (chip->device_type == DEVICE_INTEL_ICH4) { in snd_intel8x0_mixer()
2255 snd_intel8x0_codec_read_test(chip, codecs); in snd_intel8x0_mixer()
2256 chip->ac97_sdin[codecs] = in snd_intel8x0_mixer()
2257 igetbyte(chip, ICHREG(SDM)) & ICH_LDI_MASK; in snd_intel8x0_mixer()
2258 if (snd_BUG_ON(chip->ac97_sdin[codecs] >= 3)) in snd_intel8x0_mixer()
2259 chip->ac97_sdin[codecs] = 0; in snd_intel8x0_mixer()
2261 chip->ac97_sdin[codecs] = i; in snd_intel8x0_mixer()
2264 chip->in_sdin_init = 0; in snd_intel8x0_mixer()
2272 unsigned int reg = igetdword(chip, ICHREG(ALI_RTSR)); in snd_intel8x0_mixer()
2277 iputdword(chip, ICHREG(ALI_RTSR), reg | 0x40); in snd_intel8x0_mixer()
2281 if ((err = snd_ac97_bus(chip->card, 0, ops, chip, &pbus)) < 0) in snd_intel8x0_mixer()
2287 if (chip->device_type == DEVICE_ALI) in snd_intel8x0_mixer()
2291 chip->ac97_bus = pbus; in snd_intel8x0_mixer()
2292 chip->ncodecs = codecs; in snd_intel8x0_mixer()
2294 ac97.pci = chip->pci; in snd_intel8x0_mixer()
2297 if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97[i])) < 0) { in snd_intel8x0_mixer()
2299 dev_err(chip->card->dev, in snd_intel8x0_mixer()
2306 snd_ac97_tune_hardware(chip->ac97[0], ac97_quirks, quirk_override); in snd_intel8x0_mixer()
2308 if (chip->device_type == DEVICE_INTEL_ICH4) in snd_intel8x0_mixer()
2312 if (chip->device_type != DEVICE_INTEL_ICH4) in snd_intel8x0_mixer()
2314 if (chip->spdif_idx < 0) in snd_intel8x0_mixer()
2319 chip->ichd[ICHD_PCMOUT].pcm = &pbus->pcms[0]; in snd_intel8x0_mixer()
2320 chip->ichd[ICHD_PCMIN].pcm = &pbus->pcms[1]; in snd_intel8x0_mixer()
2321 chip->ichd[ICHD_MIC].pcm = &pbus->pcms[2]; in snd_intel8x0_mixer()
2322 if (chip->spdif_idx >= 0) in snd_intel8x0_mixer()
2323 chip->ichd[chip->spdif_idx].pcm = &pbus->pcms[3]; in snd_intel8x0_mixer()
2324 if (chip->device_type == DEVICE_INTEL_ICH4) { in snd_intel8x0_mixer()
2325 chip->ichd[ICHD_PCM2IN].pcm = &pbus->pcms[4]; in snd_intel8x0_mixer()
2326 chip->ichd[ICHD_MIC2].pcm = &pbus->pcms[5]; in snd_intel8x0_mixer()
2329 if (chip->device_type == DEVICE_INTEL_ICH4) { in snd_intel8x0_mixer()
2330 struct ac97_pcm *pcm = chip->ichd[ICHD_PCM2IN].pcm; in snd_intel8x0_mixer()
2331 u8 tmp = igetbyte(chip, ICHREG(SDM)); in snd_intel8x0_mixer()
2335 tmp |= chip->ac97_sdin[0] << ICH_DI1L_SHIFT; in snd_intel8x0_mixer()
2338 tmp |= chip->ac97_sdin[pcm->r[0].codec[1]->num] << ICH_DI2L_SHIFT; in snd_intel8x0_mixer()
2345 iputbyte(chip, ICHREG(SDM), tmp); in snd_intel8x0_mixer()
2348 chip->multi4 = 1; in snd_intel8x0_mixer()
2350 chip->multi6 = 1; in snd_intel8x0_mixer()
2351 if (chip->ac97[0]->flags & AC97_HAS_8CH) in snd_intel8x0_mixer()
2352 chip->multi8 = 1; in snd_intel8x0_mixer()
2356 chip->dra = 1; in snd_intel8x0_mixer()
2358 if (chip->device_type == DEVICE_INTEL_ICH4) { in snd_intel8x0_mixer()
2359 if ((igetdword(chip, ICHREG(GLOB_STA)) & ICH_SAMPLE_CAP) == ICH_SAMPLE_16_20) in snd_intel8x0_mixer()
2360 chip->smp20bit = 1; in snd_intel8x0_mixer()
2362 if (chip->device_type == DEVICE_NFORCE && !spdif_aclink) { in snd_intel8x0_mixer()
2364 chip->ichd[chip->spdif_idx].pcm->rates = SNDRV_PCM_RATE_48000; in snd_intel8x0_mixer()
2366 if (chip->device_type == DEVICE_INTEL_ICH4 && !spdif_aclink) { in snd_intel8x0_mixer()
2369 val = igetdword(chip, ICHREG(GLOB_CNT)) & ~ICH_PCM_SPDIF_MASK; in snd_intel8x0_mixer()
2371 iputdword(chip, ICHREG(GLOB_CNT), val); in snd_intel8x0_mixer()
2372 snd_ac97_update_bits(chip->ac97[0], AC97_EXTENDED_STATUS, 0x03 << 4, 0x03 << 4); in snd_intel8x0_mixer()
2374 chip->in_ac97_init = 0; in snd_intel8x0_mixer()
2379 if (chip->device_type != DEVICE_ALI) in snd_intel8x0_mixer()
2380 iputdword(chip, ICHREG(GLOB_CNT), in snd_intel8x0_mixer()
2381 igetdword(chip, ICHREG(GLOB_CNT)) & ~ICH_AC97COLD); in snd_intel8x0_mixer()
2390 static void do_ali_reset(struct intel8x0 *chip) in do_ali_reset() argument
2392 iputdword(chip, ICHREG(ALI_SCR), ICH_ALI_SC_RESET); in do_ali_reset()
2393 iputdword(chip, ICHREG(ALI_FIFOCR1), 0x83838383); in do_ali_reset()
2394 iputdword(chip, ICHREG(ALI_FIFOCR2), 0x83838383); in do_ali_reset()
2395 iputdword(chip, ICHREG(ALI_FIFOCR3), 0x83838383); in do_ali_reset()
2396 iputdword(chip, ICHREG(ALI_INTERFACECR), in do_ali_reset()
2398 iputdword(chip, ICHREG(ALI_INTERRUPTCR), 0x00000000); in do_ali_reset()
2399 iputdword(chip, ICHREG(ALI_INTERRUPTSR), 0x00000000); in do_ali_reset()
2408 static int snd_intel8x0_ich_chip_cold_reset(struct intel8x0 *chip) in snd_intel8x0_ich_chip_cold_reset() argument
2413 if (snd_pci_quirk_lookup(chip->pci, ich_chip_reset_mode)) in snd_intel8x0_ich_chip_cold_reset()
2416 cnt = igetdword(chip, ICHREG(GLOB_CNT)); in snd_intel8x0_ich_chip_cold_reset()
2422 iputdword(chip, ICHREG(GLOB_CNT), cnt & ~ICH_AC97COLD); in snd_intel8x0_ich_chip_cold_reset()
2423 cnt = igetdword(chip, ICHREG(GLOB_CNT)); in snd_intel8x0_ich_chip_cold_reset()
2425 iputdword(chip, ICHREG(GLOB_CNT), cnt | ICH_AC97COLD); in snd_intel8x0_ich_chip_cold_reset()
2429 #define snd_intel8x0_ich_chip_can_cold_reset(chip) \ argument
2430 (!snd_pci_quirk_lookup(chip->pci, ich_chip_reset_mode))
2432 #define snd_intel8x0_ich_chip_cold_reset(chip) 0 argument
2433 #define snd_intel8x0_ich_chip_can_cold_reset(chip) (0) argument
2436 static int snd_intel8x0_ich_chip_reset(struct intel8x0 *chip) in snd_intel8x0_ich_chip_reset() argument
2441 cnt = igetdword(chip, ICHREG(GLOB_CNT)); in snd_intel8x0_ich_chip_reset()
2445 iputdword(chip, ICHREG(GLOB_CNT), cnt); in snd_intel8x0_ich_chip_reset()
2448 if ((igetdword(chip, ICHREG(GLOB_CNT)) & ICH_AC97WARM) == 0) in snd_intel8x0_ich_chip_reset()
2452 dev_err(chip->card->dev, "AC'97 warm reset still in progress? [0x%x]\n", in snd_intel8x0_ich_chip_reset()
2453 igetdword(chip, ICHREG(GLOB_CNT))); in snd_intel8x0_ich_chip_reset()
2457 static int snd_intel8x0_ich_chip_init(struct intel8x0 *chip, int probing) in snd_intel8x0_ich_chip_init() argument
2467 if (chip->device_type == DEVICE_NFORCE) in snd_intel8x0_ich_chip_init()
2469 cnt = igetdword(chip, ICHREG(GLOB_STA)); in snd_intel8x0_ich_chip_init()
2470 iputdword(chip, ICHREG(GLOB_STA), cnt & status); in snd_intel8x0_ich_chip_init()
2472 if (snd_intel8x0_ich_chip_can_cold_reset(chip)) in snd_intel8x0_ich_chip_init()
2473 err = snd_intel8x0_ich_chip_cold_reset(chip); in snd_intel8x0_ich_chip_init()
2475 err = snd_intel8x0_ich_chip_reset(chip); in snd_intel8x0_ich_chip_init()
2486 status = igetdword(chip, ICHREG(GLOB_STA)) & in snd_intel8x0_ich_chip_init()
2487 chip->codec_isr_bits; in snd_intel8x0_ich_chip_init()
2494 dev_err(chip->card->dev, in snd_intel8x0_ich_chip_init()
2496 igetdword(chip, ICHREG(GLOB_STA))); in snd_intel8x0_ich_chip_init()
2502 while (status != chip->codec_isr_bits && in snd_intel8x0_ich_chip_init()
2505 status |= igetdword(chip, ICHREG(GLOB_STA)) & in snd_intel8x0_ich_chip_init()
2506 chip->codec_isr_bits; in snd_intel8x0_ich_chip_init()
2513 for (i = 0; i < chip->ncodecs; i++) in snd_intel8x0_ich_chip_init()
2514 if (chip->ac97[i]) in snd_intel8x0_ich_chip_init()
2515 status |= chip->codec_bit[chip->ac97_sdin[i]]; in snd_intel8x0_ich_chip_init()
2519 nstatus = igetdword(chip, ICHREG(GLOB_STA)) & in snd_intel8x0_ich_chip_init()
2520 chip->codec_isr_bits; in snd_intel8x0_ich_chip_init()
2527 if (chip->device_type == DEVICE_SIS) { in snd_intel8x0_ich_chip_init()
2529 iputword(chip, 0x4c, igetword(chip, 0x4c) | 1); in snd_intel8x0_ich_chip_init()
2531 if (chip->device_type == DEVICE_NFORCE && !spdif_aclink) { in snd_intel8x0_ich_chip_init()
2534 pci_read_config_dword(chip->pci, 0x4c, &val); in snd_intel8x0_ich_chip_init()
2536 pci_write_config_dword(chip->pci, 0x4c, val); in snd_intel8x0_ich_chip_init()
2541 static int snd_intel8x0_ali_chip_init(struct intel8x0 *chip, int probing) in snd_intel8x0_ali_chip_init() argument
2546 reg = igetdword(chip, ICHREG(ALI_SCR)); in snd_intel8x0_ali_chip_init()
2552 iputdword(chip, ICHREG(ALI_SCR), reg); in snd_intel8x0_ali_chip_init()
2555 if (! (igetdword(chip, ICHREG(ALI_INTERRUPTSR)) & ALI_INT_GPIO)) in snd_intel8x0_ali_chip_init()
2559 dev_err(chip->card->dev, "AC'97 reset failed.\n"); in snd_intel8x0_ali_chip_init()
2565 reg = igetdword(chip, ICHREG(ALI_RTSR)); in snd_intel8x0_ali_chip_init()
2568 iputdword(chip, ICHREG(ALI_RTSR), reg | 0x80); in snd_intel8x0_ali_chip_init()
2572 do_ali_reset(chip); in snd_intel8x0_ali_chip_init()
2576 static int snd_intel8x0_chip_init(struct intel8x0 *chip, int probing) in snd_intel8x0_chip_init() argument
2581 if (chip->device_type != DEVICE_ALI) { in snd_intel8x0_chip_init()
2582 if ((err = snd_intel8x0_ich_chip_init(chip, probing)) < 0) in snd_intel8x0_chip_init()
2584 iagetword(chip, 0); /* clear semaphore flag */ in snd_intel8x0_chip_init()
2586 if ((err = snd_intel8x0_ali_chip_init(chip, probing)) < 0) in snd_intel8x0_chip_init()
2591 for (i = 0; i < chip->bdbars_count; i++) in snd_intel8x0_chip_init()
2592 iputbyte(chip, ICH_REG_OFF_CR + chip->ichd[i].reg_offset, 0x00); in snd_intel8x0_chip_init()
2594 for (i = 0; i < chip->bdbars_count; i++) in snd_intel8x0_chip_init()
2595 iputbyte(chip, ICH_REG_OFF_CR + chip->ichd[i].reg_offset, ICH_RESETREGS); in snd_intel8x0_chip_init()
2596 for (i = 0; i < chip->bdbars_count; i++) { in snd_intel8x0_chip_init()
2599 if ((igetbyte(chip, ICH_REG_OFF_CR + chip->ichd[i].reg_offset) & ICH_RESETREGS) == 0) in snd_intel8x0_chip_init()
2603 dev_err(chip->card->dev, "reset of registers failed?\n"); in snd_intel8x0_chip_init()
2606 for (i = 0; i < chip->bdbars_count; i++) in snd_intel8x0_chip_init()
2607 iputdword(chip, ICH_REG_OFF_BDBAR + chip->ichd[i].reg_offset, in snd_intel8x0_chip_init()
2608 chip->ichd[i].bdbar_addr); in snd_intel8x0_chip_init()
2612 static int snd_intel8x0_free(struct intel8x0 *chip) in snd_intel8x0_free() argument
2616 if (chip->irq < 0) in snd_intel8x0_free()
2619 for (i = 0; i < chip->bdbars_count; i++) in snd_intel8x0_free()
2620 iputbyte(chip, ICH_REG_OFF_CR + chip->ichd[i].reg_offset, 0x00); in snd_intel8x0_free()
2622 for (i = 0; i < chip->bdbars_count; i++) in snd_intel8x0_free()
2623 iputbyte(chip, ICH_REG_OFF_CR + chip->ichd[i].reg_offset, ICH_RESETREGS); in snd_intel8x0_free()
2624 if (chip->device_type == DEVICE_NFORCE && !spdif_aclink) { in snd_intel8x0_free()
2627 pci_read_config_dword(chip->pci, 0x4c, &val); in snd_intel8x0_free()
2629 pci_write_config_dword(chip->pci, 0x4c, val); in snd_intel8x0_free()
2634 if (chip->irq >= 0) in snd_intel8x0_free()
2635 free_irq(chip->irq, chip); in snd_intel8x0_free()
2636 if (chip->bdbars.area) { in snd_intel8x0_free()
2637 if (chip->fix_nocache) in snd_intel8x0_free()
2638 fill_nocache(chip->bdbars.area, chip->bdbars.bytes, 0); in snd_intel8x0_free()
2639 snd_dma_free_pages(&chip->bdbars); in snd_intel8x0_free()
2641 if (chip->addr) in snd_intel8x0_free()
2642 pci_iounmap(chip->pci, chip->addr); in snd_intel8x0_free()
2643 if (chip->bmaddr) in snd_intel8x0_free()
2644 pci_iounmap(chip->pci, chip->bmaddr); in snd_intel8x0_free()
2645 pci_release_regions(chip->pci); in snd_intel8x0_free()
2646 pci_disable_device(chip->pci); in snd_intel8x0_free()
2647 kfree(chip); in snd_intel8x0_free()
2658 struct intel8x0 *chip = card->private_data; in intel8x0_suspend() local
2662 for (i = 0; i < chip->pcm_devs; i++) in intel8x0_suspend()
2663 snd_pcm_suspend_all(chip->pcm[i]); in intel8x0_suspend()
2665 if (chip->fix_nocache) { in intel8x0_suspend()
2666 for (i = 0; i < chip->bdbars_count; i++) { in intel8x0_suspend()
2667 struct ichdev *ichdev = &chip->ichd[i]; in intel8x0_suspend()
2675 for (i = 0; i < chip->ncodecs; i++) in intel8x0_suspend()
2676 snd_ac97_suspend(chip->ac97[i]); in intel8x0_suspend()
2677 if (chip->device_type == DEVICE_INTEL_ICH4) in intel8x0_suspend()
2678 chip->sdm_saved = igetbyte(chip, ICHREG(SDM)); in intel8x0_suspend()
2680 if (chip->irq >= 0) { in intel8x0_suspend()
2681 free_irq(chip->irq, chip); in intel8x0_suspend()
2682 chip->irq = -1; in intel8x0_suspend()
2691 struct intel8x0 *chip = card->private_data; in intel8x0_resume() local
2694 snd_intel8x0_chip_init(chip, 0); in intel8x0_resume()
2696 IRQF_SHARED, KBUILD_MODNAME, chip)) { in intel8x0_resume()
2702 chip->irq = pci->irq; in intel8x0_resume()
2703 synchronize_irq(chip->irq); in intel8x0_resume()
2706 if (chip->device_type == DEVICE_INTEL_ICH4 && !spdif_aclink) { in intel8x0_resume()
2708 iputbyte(chip, ICHREG(SDM), chip->sdm_saved); in intel8x0_resume()
2710 iputdword(chip, ICHREG(GLOB_CNT), in intel8x0_resume()
2711 (igetdword(chip, ICHREG(GLOB_CNT)) & ~ICH_PCM_SPDIF_MASK) | in intel8x0_resume()
2716 if (chip->fix_nocache) in intel8x0_resume()
2717 fill_nocache(chip->bdbars.area, chip->bdbars.bytes, 1); in intel8x0_resume()
2719 for (i = 0; i < chip->ncodecs; i++) in intel8x0_resume()
2720 snd_ac97_resume(chip->ac97[i]); in intel8x0_resume()
2723 if (chip->fix_nocache) { in intel8x0_resume()
2724 for (i = 0; i < chip->bdbars_count; i++) { in intel8x0_resume()
2725 struct ichdev *ichdev = &chip->ichd[i]; in intel8x0_resume()
2735 for (i = 0; i < chip->bdbars_count; i++) { in intel8x0_resume()
2736 struct ichdev *ichdev = &chip->ichd[i]; in intel8x0_resume()
2741 snd_intel8x0_setup_pcm_out(chip, ichdev->substream->runtime); in intel8x0_resume()
2742 iputdword(chip, port + ICH_REG_OFF_BDBAR, ichdev->bdbar_addr); in intel8x0_resume()
2743 iputbyte(chip, port + ICH_REG_OFF_LVI, ichdev->lvi); in intel8x0_resume()
2744 iputbyte(chip, port + ICH_REG_OFF_CIV, ichdev->civ); in intel8x0_resume()
2745 iputbyte(chip, port + ichdev->roff_sr, ICH_FIFOE | ICH_BCIS | ICH_LVBCI); in intel8x0_resume()
2760 static void intel8x0_measure_ac97_clock(struct intel8x0 *chip) in intel8x0_measure_ac97_clock() argument
2769 if (chip->ac97_bus->clock != 48000) in intel8x0_measure_ac97_clock()
2773 subs = chip->pcm[0]->streams[0].substream; in intel8x0_measure_ac97_clock()
2775 dev_warn(chip->card->dev, in intel8x0_measure_ac97_clock()
2779 ichdev = &chip->ichd[ICHD_PCMOUT]; in intel8x0_measure_ac97_clock()
2785 if (snd_ac97_set_rate(chip->ac97[0], AC97_PCM_FRONT_DAC_RATE, 48000) < 0) { in intel8x0_measure_ac97_clock()
2786 dev_err(chip->card->dev, "cannot set ac97 rate: clock = %d\n", in intel8x0_measure_ac97_clock()
2787 chip->ac97_bus->clock); in intel8x0_measure_ac97_clock()
2790 snd_intel8x0_setup_periods(chip, ichdev); in intel8x0_measure_ac97_clock()
2792 spin_lock_irq(&chip->reg_lock); in intel8x0_measure_ac97_clock()
2793 chip->in_measurement = 1; in intel8x0_measure_ac97_clock()
2795 if (chip->device_type != DEVICE_ALI) in intel8x0_measure_ac97_clock()
2796 iputbyte(chip, port + ICH_REG_OFF_CR, ICH_IOCE | ICH_STARTBM); in intel8x0_measure_ac97_clock()
2798 iputbyte(chip, port + ICH_REG_OFF_CR, ICH_IOCE); in intel8x0_measure_ac97_clock()
2799 iputdword(chip, ICHREG(ALI_DMACR), 1 << ichdev->ali_slot); in intel8x0_measure_ac97_clock()
2802 spin_unlock_irq(&chip->reg_lock); in intel8x0_measure_ac97_clock()
2804 spin_lock_irq(&chip->reg_lock); in intel8x0_measure_ac97_clock()
2807 civ = igetbyte(chip, ichdev->reg_offset + ICH_REG_OFF_CIV); in intel8x0_measure_ac97_clock()
2808 pos1 = igetword(chip, ichdev->reg_offset + ichdev->roff_picb); in intel8x0_measure_ac97_clock()
2813 if (civ == igetbyte(chip, ichdev->reg_offset + ICH_REG_OFF_CIV) && in intel8x0_measure_ac97_clock()
2814 pos1 == igetword(chip, ichdev->reg_offset + ichdev->roff_picb)) in intel8x0_measure_ac97_clock()
2824 chip->in_measurement = 0; in intel8x0_measure_ac97_clock()
2827 if (chip->device_type == DEVICE_ALI) { in intel8x0_measure_ac97_clock()
2828 iputdword(chip, ICHREG(ALI_DMACR), 1 << (ichdev->ali_slot + 16)); in intel8x0_measure_ac97_clock()
2829 iputbyte(chip, port + ICH_REG_OFF_CR, 0); in intel8x0_measure_ac97_clock()
2830 while (igetbyte(chip, port + ICH_REG_OFF_CR)) in intel8x0_measure_ac97_clock()
2833 iputbyte(chip, port + ICH_REG_OFF_CR, 0); in intel8x0_measure_ac97_clock()
2834 while (!(igetbyte(chip, port + ichdev->roff_sr) & ICH_DCH)) in intel8x0_measure_ac97_clock()
2837 iputbyte(chip, port + ICH_REG_OFF_CR, ICH_RESETREGS); in intel8x0_measure_ac97_clock()
2838 spin_unlock_irq(&chip->reg_lock); in intel8x0_measure_ac97_clock()
2841 dev_err(chip->card->dev, in intel8x0_measure_ac97_clock()
2854 dev_info(chip->card->dev, in intel8x0_measure_ac97_clock()
2857 dev_err(chip->card->dev, "?? calculation error..\n"); in intel8x0_measure_ac97_clock()
2864 dev_info(chip->card->dev, "measured clock %ld rejected\n", pos); in intel8x0_measure_ac97_clock()
2868 chip->ac97_bus->clock = 41000; in intel8x0_measure_ac97_clock()
2871 chip->ac97_bus->clock = 44100; in intel8x0_measure_ac97_clock()
2874 chip->ac97_bus->clock = (chip->ac97_bus->clock * 48000) / pos; in intel8x0_measure_ac97_clock()
2876 dev_info(chip->card->dev, "clocking to %d\n", chip->ac97_bus->clock); in intel8x0_measure_ac97_clock()
2877 snd_ac97_update_power(chip->ac97[0], AC97_PCM_FRONT_DAC_RATE, 0); in intel8x0_measure_ac97_clock()
2890 static int intel8x0_in_clock_list(struct intel8x0 *chip) in intel8x0_in_clock_list() argument
2892 struct pci_dev *pci = chip->pci; in intel8x0_in_clock_list()
2898 dev_info(chip->card->dev, "white list rate for %04x:%04x is %i\n", in intel8x0_in_clock_list()
2900 chip->ac97_bus->clock = wl->value; in intel8x0_in_clock_list()
2908 struct intel8x0 *chip = entry->private_data; in snd_intel8x0_proc_read() local
2912 if (chip->device_type == DEVICE_ALI) in snd_intel8x0_proc_read()
2914 tmp = igetdword(chip, ICHREG(GLOB_STA)); in snd_intel8x0_proc_read()
2915 snd_iprintf(buffer, "Global control : 0x%08x\n", igetdword(chip, ICHREG(GLOB_CNT))); in snd_intel8x0_proc_read()
2917 if (chip->device_type == DEVICE_INTEL_ICH4) in snd_intel8x0_proc_read()
2918 snd_iprintf(buffer, "SDM : 0x%08x\n", igetdword(chip, ICHREG(SDM))); in snd_intel8x0_proc_read()
2920 if (tmp & chip->codec_isr_bits) { in snd_intel8x0_proc_read()
2925 for (i = 0; i < chip->max_codecs; i++) in snd_intel8x0_proc_read()
2926 if (tmp & chip->codec_bit[i]) in snd_intel8x0_proc_read()
2931 if (chip->device_type == DEVICE_INTEL_ICH4 || in snd_intel8x0_proc_read()
2932 chip->device_type == DEVICE_SIS) in snd_intel8x0_proc_read()
2934 chip->ac97_sdin[0], in snd_intel8x0_proc_read()
2935 chip->ac97_sdin[1], in snd_intel8x0_proc_read()
2936 chip->ac97_sdin[2]); in snd_intel8x0_proc_read()
2939 static void snd_intel8x0_proc_init(struct intel8x0 *chip) in snd_intel8x0_proc_init() argument
2943 if (! snd_card_proc_new(chip->card, "intel8x0", &entry)) in snd_intel8x0_proc_init()
2944 snd_info_set_text_ops(entry, chip, snd_intel8x0_proc_read); in snd_intel8x0_proc_init()
2952 struct intel8x0 *chip = device->device_data; in snd_intel8x0_dev_free() local
2953 return snd_intel8x0_free(chip); in snd_intel8x0_dev_free()
3012 struct intel8x0 *chip; in snd_intel8x0_create() local
3057 chip = kzalloc(sizeof(*chip), GFP_KERNEL); in snd_intel8x0_create()
3058 if (chip == NULL) { in snd_intel8x0_create()
3062 spin_lock_init(&chip->reg_lock); in snd_intel8x0_create()
3063 chip->device_type = device_type; in snd_intel8x0_create()
3064 chip->card = card; in snd_intel8x0_create()
3065 chip->pci = pci; in snd_intel8x0_create()
3066 chip->irq = -1; in snd_intel8x0_create()
3069 chip->buggy_irq = buggy_irq; in snd_intel8x0_create()
3070 chip->buggy_semaphore = buggy_semaphore; in snd_intel8x0_create()
3072 chip->xbox = 1; in snd_intel8x0_create()
3074 chip->inside_vm = snd_intel8x0_inside_vm(pci); in snd_intel8x0_create()
3078 chip->fix_nocache = 1; /* enable workaround */ in snd_intel8x0_create()
3081 kfree(chip); in snd_intel8x0_create()
3088 chip->bmaddr = pci_iomap(pci, 0, 0); in snd_intel8x0_create()
3093 chip->addr = pci_iomap(pci, 2, 0); in snd_intel8x0_create()
3095 chip->addr = pci_iomap(pci, 0, 0); in snd_intel8x0_create()
3096 if (!chip->addr) { in snd_intel8x0_create()
3098 snd_intel8x0_free(chip); in snd_intel8x0_create()
3102 chip->bmaddr = pci_iomap(pci, 3, 0); in snd_intel8x0_create()
3104 chip->bmaddr = pci_iomap(pci, 1, 0); in snd_intel8x0_create()
3107 if (!chip->bmaddr) { in snd_intel8x0_create()
3109 snd_intel8x0_free(chip); in snd_intel8x0_create()
3112 chip->bdbars_count = bdbars[device_type]; in snd_intel8x0_create()
3126 for (i = 0; i < chip->bdbars_count; i++) { in snd_intel8x0_create()
3127 ichdev = &chip->ichd[i]; in snd_intel8x0_create()
3148 chip->bdbars_count * sizeof(u32) * ICH_MAX_FRAGS * 2, in snd_intel8x0_create()
3149 &chip->bdbars) < 0) { in snd_intel8x0_create()
3150 snd_intel8x0_free(chip); in snd_intel8x0_create()
3157 if (chip->fix_nocache) in snd_intel8x0_create()
3158 fill_nocache(chip->bdbars.area, chip->bdbars.bytes, 1); in snd_intel8x0_create()
3160 for (i = 0; i < chip->bdbars_count; i++) { in snd_intel8x0_create()
3161 ichdev = &chip->ichd[i]; in snd_intel8x0_create()
3162 ichdev->bdbar = ((u32 *)chip->bdbars.area) + in snd_intel8x0_create()
3164 ichdev->bdbar_addr = chip->bdbars.addr + in snd_intel8x0_create()
3168 chip->int_sta_reg = device_type == DEVICE_ALI ? in snd_intel8x0_create()
3170 chip->int_sta_mask = int_sta_masks; in snd_intel8x0_create()
3174 switch(chip->device_type) { in snd_intel8x0_create()
3177 chip->max_codecs = 3; in snd_intel8x0_create()
3178 chip->codec_bit = ich_codec_bits; in snd_intel8x0_create()
3179 chip->codec_ready_bits = ICH_PRI | ICH_SRI | ICH_TRI; in snd_intel8x0_create()
3183 chip->max_codecs = 3; in snd_intel8x0_create()
3184 chip->codec_bit = sis_codec_bits; in snd_intel8x0_create()
3185 chip->codec_ready_bits = ICH_PRI | ICH_SRI | ICH_SIS_TRI; in snd_intel8x0_create()
3189 chip->max_codecs = 2; in snd_intel8x0_create()
3190 chip->codec_bit = ich_codec_bits; in snd_intel8x0_create()
3191 chip->codec_ready_bits = ICH_PRI | ICH_SRI; in snd_intel8x0_create()
3194 for (i = 0; i < chip->max_codecs; i++) in snd_intel8x0_create()
3195 chip->codec_isr_bits |= chip->codec_bit[i]; in snd_intel8x0_create()
3197 if ((err = snd_intel8x0_chip_init(chip, 1)) < 0) { in snd_intel8x0_create()
3198 snd_intel8x0_free(chip); in snd_intel8x0_create()
3204 IRQF_SHARED, KBUILD_MODNAME, chip)) { in snd_intel8x0_create()
3206 snd_intel8x0_free(chip); in snd_intel8x0_create()
3209 chip->irq = pci->irq; in snd_intel8x0_create()
3211 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { in snd_intel8x0_create()
3212 snd_intel8x0_free(chip); in snd_intel8x0_create()
3216 *r_intel8x0 = chip; in snd_intel8x0_create()
3278 struct intel8x0 *chip; in snd_intel8x0_probe() local
3319 &chip)) < 0) { in snd_intel8x0_probe()
3323 card->private_data = chip; in snd_intel8x0_probe()
3325 if ((err = snd_intel8x0_mixer(chip, ac97_clock, ac97_quirk)) < 0) { in snd_intel8x0_probe()
3329 if ((err = snd_intel8x0_pcm(chip)) < 0) { in snd_intel8x0_probe()
3334 snd_intel8x0_proc_init(chip); in snd_intel8x0_probe()
3338 snd_ac97_get_short_name(chip->ac97[0]), chip->irq); in snd_intel8x0_probe()
3342 if (intel8x0_in_clock_list(chip) == 0) in snd_intel8x0_probe()
3343 intel8x0_measure_ac97_clock(chip); in snd_intel8x0_probe()
3345 intel8x0_measure_ac97_clock(chip); in snd_intel8x0_probe()