Lines Matching refs:chip
251 static inline u8 igetbyte(struct intel8x0m *chip, u32 offset) in igetbyte() argument
253 return ioread8(chip->bmaddr + offset); in igetbyte()
256 static inline u16 igetword(struct intel8x0m *chip, u32 offset) in igetword() argument
258 return ioread16(chip->bmaddr + offset); in igetword()
261 static inline u32 igetdword(struct intel8x0m *chip, u32 offset) in igetdword() argument
263 return ioread32(chip->bmaddr + offset); in igetdword()
266 static inline void iputbyte(struct intel8x0m *chip, u32 offset, u8 val) in iputbyte() argument
268 iowrite8(val, chip->bmaddr + offset); in iputbyte()
271 static inline void iputword(struct intel8x0m *chip, u32 offset, u16 val) in iputword() argument
273 iowrite16(val, chip->bmaddr + offset); in iputword()
276 static inline void iputdword(struct intel8x0m *chip, u32 offset, u32 val) in iputdword() argument
278 iowrite32(val, chip->bmaddr + offset); in iputdword()
285 static inline u16 iagetword(struct intel8x0m *chip, u32 offset) in iagetword() argument
287 return ioread16(chip->addr + offset); in iagetword()
290 static inline void iaputword(struct intel8x0m *chip, u32 offset, u16 val) in iaputword() argument
292 iowrite16(val, chip->addr + offset); in iaputword()
304 static unsigned int get_ich_codec_bit(struct intel8x0m *chip, unsigned int codec) in get_ich_codec_bit() argument
314 static int snd_intel8x0m_codec_semaphore(struct intel8x0m *chip, unsigned int codec) in snd_intel8x0m_codec_semaphore() argument
320 codec = get_ich_codec_bit(chip, codec); in snd_intel8x0m_codec_semaphore()
323 if ((igetdword(chip, ICHREG(GLOB_STA)) & codec) == 0) in snd_intel8x0m_codec_semaphore()
329 if (!(igetbyte(chip, ICHREG(ACC_SEMA)) & ICH_CAS)) in snd_intel8x0m_codec_semaphore()
337 dev_err(chip->card->dev, in snd_intel8x0m_codec_semaphore()
339 igetbyte(chip, ICHREG(ACC_SEMA)), igetdword(chip, ICHREG(GLOB_STA))); in snd_intel8x0m_codec_semaphore()
340 iagetword(chip, 0); /* clear semaphore flag */ in snd_intel8x0m_codec_semaphore()
349 struct intel8x0m *chip = ac97->private_data; in snd_intel8x0m_codec_write() local
351 if (snd_intel8x0m_codec_semaphore(chip, ac97->num) < 0) { in snd_intel8x0m_codec_write()
352 if (! chip->in_ac97_init) in snd_intel8x0m_codec_write()
353 dev_err(chip->card->dev, in snd_intel8x0m_codec_write()
357 iaputword(chip, reg + ac97->num * 0x80, val); in snd_intel8x0m_codec_write()
363 struct intel8x0m *chip = ac97->private_data; in snd_intel8x0m_codec_read() local
367 if (snd_intel8x0m_codec_semaphore(chip, ac97->num) < 0) { in snd_intel8x0m_codec_read()
368 if (! chip->in_ac97_init) in snd_intel8x0m_codec_read()
369 dev_err(chip->card->dev, in snd_intel8x0m_codec_read()
374 res = iagetword(chip, reg + ac97->num * 0x80); in snd_intel8x0m_codec_read()
375 if ((tmp = igetdword(chip, ICHREG(GLOB_STA))) & ICH_RCS) { in snd_intel8x0m_codec_read()
377 iputdword(chip, ICHREG(GLOB_STA), in snd_intel8x0m_codec_read()
379 if (! chip->in_ac97_init) in snd_intel8x0m_codec_read()
380 dev_err(chip->card->dev, in snd_intel8x0m_codec_read()
387 iagetword(chip, 0); /* clear semaphore */ in snd_intel8x0m_codec_read()
395 static void snd_intel8x0m_setup_periods(struct intel8x0m *chip, struct ichdev *ichdev) in snd_intel8x0m_setup_periods() argument
401 iputdword(chip, port + ICH_REG_OFF_BDBAR, ichdev->bdbar_addr); in snd_intel8x0m_setup_periods()
408 ichdev->fragsize1 >> chip->pcm_pos_shift); in snd_intel8x0m_setup_periods()
411 ichdev->fragsize1 >> chip->pcm_pos_shift); in snd_intel8x0m_setup_periods()
420 ichdev->fragsize >> chip->pcm_pos_shift); in snd_intel8x0m_setup_periods()
428 iputbyte(chip, port + ICH_REG_OFF_LVI, ichdev->lvi = ICH_REG_LVI_MASK); in snd_intel8x0m_setup_periods()
430 iputbyte(chip, port + ICH_REG_OFF_CIV, 0); in snd_intel8x0m_setup_periods()
434 dev_dbg(chip->card->dev, in snd_intel8x0m_setup_periods()
440 iputbyte(chip, port + ichdev->roff_sr, ICH_FIFOE | ICH_BCIS | ICH_LVBCI); in snd_intel8x0m_setup_periods()
447 static inline void snd_intel8x0m_update(struct intel8x0m *chip, struct ichdev *ichdev) in snd_intel8x0m_update() argument
453 civ = igetbyte(chip, port + ICH_REG_OFF_CIV); in snd_intel8x0m_update()
472 iputbyte(chip, port + ICH_REG_OFF_LVI, ichdev->lvi); in snd_intel8x0m_update()
480 dev_dbg(chip->card->dev, in snd_intel8x0m_update()
492 spin_unlock(&chip->reg_lock); in snd_intel8x0m_update()
494 spin_lock(&chip->reg_lock); in snd_intel8x0m_update()
496 iputbyte(chip, port + ichdev->roff_sr, ICH_FIFOE | ICH_BCIS | ICH_LVBCI); in snd_intel8x0m_update()
501 struct intel8x0m *chip = dev_id; in snd_intel8x0m_interrupt() local
506 spin_lock(&chip->reg_lock); in snd_intel8x0m_interrupt()
507 status = igetdword(chip, chip->int_sta_reg); in snd_intel8x0m_interrupt()
509 spin_unlock(&chip->reg_lock); in snd_intel8x0m_interrupt()
512 if ((status & chip->int_sta_mask) == 0) { in snd_intel8x0m_interrupt()
514 iputdword(chip, chip->int_sta_reg, status); in snd_intel8x0m_interrupt()
515 spin_unlock(&chip->reg_lock); in snd_intel8x0m_interrupt()
519 for (i = 0; i < chip->bdbars_count; i++) { in snd_intel8x0m_interrupt()
520 ichdev = &chip->ichd[i]; in snd_intel8x0m_interrupt()
522 snd_intel8x0m_update(chip, ichdev); in snd_intel8x0m_interrupt()
526 iputdword(chip, chip->int_sta_reg, status & chip->int_sta_mask); in snd_intel8x0m_interrupt()
527 spin_unlock(&chip->reg_lock); in snd_intel8x0m_interrupt()
538 struct intel8x0m *chip = snd_pcm_substream_chip(substream); in snd_intel8x0m_pcm_trigger() local
561 iputbyte(chip, port + ICH_REG_OFF_CR, val); in snd_intel8x0m_pcm_trigger()
564 while (!(igetbyte(chip, port + ichdev->roff_sr) & ICH_DCH)) ; in snd_intel8x0m_pcm_trigger()
566 iputbyte(chip, port + ICH_REG_OFF_CR, ICH_RESETREGS); in snd_intel8x0m_pcm_trigger()
584 struct intel8x0m *chip = snd_pcm_substream_chip(substream); in snd_intel8x0m_pcm_pointer() local
588 ptr1 = igetword(chip, ichdev->reg_offset + ichdev->roff_picb) << chip->pcm_pos_shift; in snd_intel8x0m_pcm_pointer()
601 struct intel8x0m *chip = snd_pcm_substream_chip(substream); in snd_intel8x0m_pcm_prepare() local
610 snd_intel8x0m_setup_periods(chip, ichdev); in snd_intel8x0m_pcm_prepare()
659 struct intel8x0m *chip = snd_pcm_substream_chip(substream); in snd_intel8x0m_playback_open() local
661 return snd_intel8x0m_pcm_open(substream, &chip->ichd[ICHD_MDMOUT]); in snd_intel8x0m_playback_open()
666 struct intel8x0m *chip = snd_pcm_substream_chip(substream); in snd_intel8x0m_playback_close() local
668 chip->ichd[ICHD_MDMOUT].substream = NULL; in snd_intel8x0m_playback_close()
674 struct intel8x0m *chip = snd_pcm_substream_chip(substream); in snd_intel8x0m_capture_open() local
676 return snd_intel8x0m_pcm_open(substream, &chip->ichd[ICHD_MDMIN]); in snd_intel8x0m_capture_open()
681 struct intel8x0m *chip = snd_pcm_substream_chip(substream); in snd_intel8x0m_capture_close() local
683 chip->ichd[ICHD_MDMIN].substream = NULL; in snd_intel8x0m_capture_close()
720 static int snd_intel8x0m_pcm1(struct intel8x0m *chip, int device, in snd_intel8x0m_pcm1() argument
731 err = snd_pcm_new(chip->card, name, device, in snd_intel8x0m_pcm1()
742 pcm->private_data = chip; in snd_intel8x0m_pcm1()
746 sprintf(pcm->name, "%s - %s", chip->card->shortname, rec->suffix); in snd_intel8x0m_pcm1()
748 strcpy(pcm->name, chip->card->shortname); in snd_intel8x0m_pcm1()
749 chip->pcm[device] = pcm; in snd_intel8x0m_pcm1()
752 snd_dma_pci_data(chip->pci), in snd_intel8x0m_pcm1()
769 static int snd_intel8x0m_pcm(struct intel8x0m *chip) in snd_intel8x0m_pcm() argument
778 switch (chip->device_type) { in snd_intel8x0m_pcm()
798 if (! chip->ichd[rec->ac97_idx].ac97) in snd_intel8x0m_pcm()
801 err = snd_intel8x0m_pcm1(chip, device, rec); in snd_intel8x0m_pcm()
807 chip->pcm_devs = device; in snd_intel8x0m_pcm()
818 struct intel8x0m *chip = bus->private_data; in snd_intel8x0m_mixer_free_ac97_bus() local
819 chip->ac97_bus = NULL; in snd_intel8x0m_mixer_free_ac97_bus()
824 struct intel8x0m *chip = ac97->private_data; in snd_intel8x0m_mixer_free_ac97() local
825 chip->ac97 = NULL; in snd_intel8x0m_mixer_free_ac97()
829 static int snd_intel8x0m_mixer(struct intel8x0m *chip, int ac97_clock) in snd_intel8x0m_mixer() argument
841 chip->in_ac97_init = 1; in snd_intel8x0m_mixer()
844 ac97.private_data = chip; in snd_intel8x0m_mixer()
848 glob_sta = igetdword(chip, ICHREG(GLOB_STA)); in snd_intel8x0m_mixer()
850 if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0) in snd_intel8x0m_mixer()
855 chip->ac97_bus = pbus; in snd_intel8x0m_mixer()
857 ac97.pci = chip->pci; in snd_intel8x0m_mixer()
860 dev_err(chip->card->dev, in snd_intel8x0m_mixer()
866 chip->ac97 = x97; in snd_intel8x0m_mixer()
867 if(ac97_is_modem(x97) && !chip->ichd[ICHD_MDMIN].ac97) { in snd_intel8x0m_mixer()
868 chip->ichd[ICHD_MDMIN].ac97 = x97; in snd_intel8x0m_mixer()
869 chip->ichd[ICHD_MDMOUT].ac97 = x97; in snd_intel8x0m_mixer()
872 chip->in_ac97_init = 0; in snd_intel8x0m_mixer()
877 if (chip->device_type != DEVICE_ALI) in snd_intel8x0m_mixer()
878 iputdword(chip, ICHREG(GLOB_CNT), in snd_intel8x0m_mixer()
879 igetdword(chip, ICHREG(GLOB_CNT)) & ~ICH_AC97COLD); in snd_intel8x0m_mixer()
888 static int snd_intel8x0m_ich_chip_init(struct intel8x0m *chip, int probing) in snd_intel8x0m_ich_chip_init() argument
896 cnt = igetdword(chip, ICHREG(GLOB_STA)); in snd_intel8x0m_ich_chip_init()
897 iputdword(chip, ICHREG(GLOB_STA), cnt & status); in snd_intel8x0m_ich_chip_init()
900 cnt = igetdword(chip, ICHREG(GLOB_CNT)); in snd_intel8x0m_ich_chip_init()
904 iputdword(chip, ICHREG(GLOB_CNT), cnt); in snd_intel8x0m_ich_chip_init()
908 if ((igetdword(chip, ICHREG(GLOB_CNT)) & ICH_AC97WARM) == 0) in snd_intel8x0m_ich_chip_init()
912 dev_err(chip->card->dev, "AC'97 warm reset still in progress? [0x%x]\n", in snd_intel8x0m_ich_chip_init()
913 igetdword(chip, ICHREG(GLOB_CNT))); in snd_intel8x0m_ich_chip_init()
924 status = igetdword(chip, ICHREG(GLOB_STA)) & in snd_intel8x0m_ich_chip_init()
932 dev_err(chip->card->dev, in snd_intel8x0m_ich_chip_init()
934 igetdword(chip, ICHREG(GLOB_STA))); in snd_intel8x0m_ich_chip_init()
945 status |= igetdword(chip, ICHREG(GLOB_STA)) & nstatus; in snd_intel8x0m_ich_chip_init()
951 if (chip->ac97) in snd_intel8x0m_ich_chip_init()
952 status |= get_ich_codec_bit(chip, chip->ac97->num); in snd_intel8x0m_ich_chip_init()
956 nstatus = igetdword(chip, ICHREG(GLOB_STA)) & in snd_intel8x0m_ich_chip_init()
964 if (chip->device_type == DEVICE_SIS) { in snd_intel8x0m_ich_chip_init()
966 iputword(chip, 0x4c, igetword(chip, 0x4c) | 1); in snd_intel8x0m_ich_chip_init()
972 static int snd_intel8x0m_chip_init(struct intel8x0m *chip, int probing) in snd_intel8x0m_chip_init() argument
977 if ((err = snd_intel8x0m_ich_chip_init(chip, probing)) < 0) in snd_intel8x0m_chip_init()
979 iagetword(chip, 0); /* clear semaphore flag */ in snd_intel8x0m_chip_init()
982 for (i = 0; i < chip->bdbars_count; i++) in snd_intel8x0m_chip_init()
983 iputbyte(chip, ICH_REG_OFF_CR + chip->ichd[i].reg_offset, 0x00); in snd_intel8x0m_chip_init()
985 for (i = 0; i < chip->bdbars_count; i++) in snd_intel8x0m_chip_init()
986 iputbyte(chip, ICH_REG_OFF_CR + chip->ichd[i].reg_offset, ICH_RESETREGS); in snd_intel8x0m_chip_init()
988 for (i = 0; i < chip->bdbars_count; i++) in snd_intel8x0m_chip_init()
989 iputdword(chip, ICH_REG_OFF_BDBAR + chip->ichd[i].reg_offset, chip->ichd[i].bdbar_addr); in snd_intel8x0m_chip_init()
993 static int snd_intel8x0m_free(struct intel8x0m *chip) in snd_intel8x0m_free() argument
997 if (chip->irq < 0) in snd_intel8x0m_free()
1000 for (i = 0; i < chip->bdbars_count; i++) in snd_intel8x0m_free()
1001 iputbyte(chip, ICH_REG_OFF_CR + chip->ichd[i].reg_offset, 0x00); in snd_intel8x0m_free()
1003 for (i = 0; i < chip->bdbars_count; i++) in snd_intel8x0m_free()
1004 iputbyte(chip, ICH_REG_OFF_CR + chip->ichd[i].reg_offset, ICH_RESETREGS); in snd_intel8x0m_free()
1006 if (chip->irq >= 0) in snd_intel8x0m_free()
1007 free_irq(chip->irq, chip); in snd_intel8x0m_free()
1008 if (chip->bdbars.area) in snd_intel8x0m_free()
1009 snd_dma_free_pages(&chip->bdbars); in snd_intel8x0m_free()
1010 if (chip->addr) in snd_intel8x0m_free()
1011 pci_iounmap(chip->pci, chip->addr); in snd_intel8x0m_free()
1012 if (chip->bmaddr) in snd_intel8x0m_free()
1013 pci_iounmap(chip->pci, chip->bmaddr); in snd_intel8x0m_free()
1014 pci_release_regions(chip->pci); in snd_intel8x0m_free()
1015 pci_disable_device(chip->pci); in snd_intel8x0m_free()
1016 kfree(chip); in snd_intel8x0m_free()
1027 struct intel8x0m *chip = card->private_data; in intel8x0m_suspend() local
1031 for (i = 0; i < chip->pcm_devs; i++) in intel8x0m_suspend()
1032 snd_pcm_suspend_all(chip->pcm[i]); in intel8x0m_suspend()
1033 snd_ac97_suspend(chip->ac97); in intel8x0m_suspend()
1034 if (chip->irq >= 0) { in intel8x0m_suspend()
1035 free_irq(chip->irq, chip); in intel8x0m_suspend()
1036 chip->irq = -1; in intel8x0m_suspend()
1045 struct intel8x0m *chip = card->private_data; in intel8x0m_resume() local
1048 IRQF_SHARED, KBUILD_MODNAME, chip)) { in intel8x0m_resume()
1054 chip->irq = pci->irq; in intel8x0m_resume()
1055 snd_intel8x0m_chip_init(chip, 0); in intel8x0m_resume()
1056 snd_ac97_resume(chip->ac97); in intel8x0m_resume()
1072 struct intel8x0m *chip = entry->private_data; in snd_intel8x0m_proc_read() local
1076 if (chip->device_type == DEVICE_ALI) in snd_intel8x0m_proc_read()
1078 tmp = igetdword(chip, ICHREG(GLOB_STA)); in snd_intel8x0m_proc_read()
1080 igetdword(chip, ICHREG(GLOB_CNT))); in snd_intel8x0m_proc_read()
1089 static void snd_intel8x0m_proc_init(struct intel8x0m *chip) in snd_intel8x0m_proc_init() argument
1093 if (! snd_card_proc_new(chip->card, "intel8x0m", &entry)) in snd_intel8x0m_proc_init()
1094 snd_info_set_text_ops(entry, chip, snd_intel8x0m_proc_read); in snd_intel8x0m_proc_init()
1097 #define snd_intel8x0m_proc_init(chip) argument
1103 struct intel8x0m *chip = device->device_data; in snd_intel8x0m_dev_free() local
1104 return snd_intel8x0m_free(chip); in snd_intel8x0m_dev_free()
1117 struct intel8x0m *chip; in snd_intel8x0m_create() local
1136 chip = kzalloc(sizeof(*chip), GFP_KERNEL); in snd_intel8x0m_create()
1137 if (chip == NULL) { in snd_intel8x0m_create()
1141 spin_lock_init(&chip->reg_lock); in snd_intel8x0m_create()
1142 chip->device_type = device_type; in snd_intel8x0m_create()
1143 chip->card = card; in snd_intel8x0m_create()
1144 chip->pci = pci; in snd_intel8x0m_create()
1145 chip->irq = -1; in snd_intel8x0m_create()
1148 kfree(chip); in snd_intel8x0m_create()
1155 chip->bmaddr = pci_iomap(pci, 0, 0); in snd_intel8x0m_create()
1160 chip->addr = pci_iomap(pci, 2, 0); in snd_intel8x0m_create()
1162 chip->addr = pci_iomap(pci, 0, 0); in snd_intel8x0m_create()
1163 if (!chip->addr) { in snd_intel8x0m_create()
1165 snd_intel8x0m_free(chip); in snd_intel8x0m_create()
1169 chip->bmaddr = pci_iomap(pci, 3, 0); in snd_intel8x0m_create()
1171 chip->bmaddr = pci_iomap(pci, 1, 0); in snd_intel8x0m_create()
1172 if (!chip->bmaddr) { in snd_intel8x0m_create()
1174 snd_intel8x0m_free(chip); in snd_intel8x0m_create()
1180 KBUILD_MODNAME, chip)) { in snd_intel8x0m_create()
1182 snd_intel8x0m_free(chip); in snd_intel8x0m_create()
1185 chip->irq = pci->irq; in snd_intel8x0m_create()
1187 synchronize_irq(chip->irq); in snd_intel8x0m_create()
1190 chip->bdbars_count = 2; in snd_intel8x0m_create()
1193 for (i = 0; i < chip->bdbars_count; i++) { in snd_intel8x0m_create()
1194 ichdev = &chip->ichd[i]; in snd_intel8x0m_create()
1210 chip->pcm_pos_shift = (device_type == DEVICE_SIS) ? 0 : 1; in snd_intel8x0m_create()
1215 chip->bdbars_count * sizeof(u32) * ICH_MAX_FRAGS * 2, in snd_intel8x0m_create()
1216 &chip->bdbars) < 0) { in snd_intel8x0m_create()
1217 snd_intel8x0m_free(chip); in snd_intel8x0m_create()
1223 for (i = 0; i < chip->bdbars_count; i++) { in snd_intel8x0m_create()
1224 ichdev = &chip->ichd[i]; in snd_intel8x0m_create()
1225 ichdev->bdbar = ((u32 *)chip->bdbars.area) + (i * ICH_MAX_FRAGS * 2); in snd_intel8x0m_create()
1226 ichdev->bdbar_addr = chip->bdbars.addr + (i * sizeof(u32) * ICH_MAX_FRAGS * 2); in snd_intel8x0m_create()
1229 chip->int_sta_reg = ICH_REG_GLOB_STA; in snd_intel8x0m_create()
1230 chip->int_sta_mask = int_sta_masks; in snd_intel8x0m_create()
1232 if ((err = snd_intel8x0m_chip_init(chip, 1)) < 0) { in snd_intel8x0m_create()
1233 snd_intel8x0m_free(chip); in snd_intel8x0m_create()
1237 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { in snd_intel8x0m_create()
1238 snd_intel8x0m_free(chip); in snd_intel8x0m_create()
1242 *r_intel8x0m = chip; in snd_intel8x0m_create()
1276 struct intel8x0m *chip; in snd_intel8x0m_probe() local
1294 if ((err = snd_intel8x0m_create(card, pci, pci_id->driver_data, &chip)) < 0) { in snd_intel8x0m_probe()
1298 card->private_data = chip; in snd_intel8x0m_probe()
1300 if ((err = snd_intel8x0m_mixer(chip, ac97_clock)) < 0) { in snd_intel8x0m_probe()
1304 if ((err = snd_intel8x0m_pcm(chip)) < 0) { in snd_intel8x0m_probe()
1309 snd_intel8x0m_proc_init(chip); in snd_intel8x0m_probe()
1312 card->shortname, chip->irq); in snd_intel8x0m_probe()