es1968.c (d2f6409584e2c62ffad81690562330ff3bf4a458) | es1968.c (77933d7276ee8fa0e2947641941a6f7a100a327b) |
---|---|
1/* 2 * Driver for ESS Maestro 1/2/2E Sound Card (started 21.8.99) 3 * Copyright (c) by Matze Braun <MatzeBraun@gmx.de>. 4 * Takashi Iwai <tiwai@suse.de> 5 * 6 * Most of the driver code comes from Zach Brown(zab@redhat.com) 7 * Alan Cox OSS Driver 8 * Rewritted from card-es1938.c source. --- 622 unchanged lines hidden (view full) --- 631/* no spinlock */ 632static void __maestro_write(es1968_t *chip, u16 reg, u16 data) 633{ 634 outw(reg, chip->io_port + ESM_INDEX); 635 outw(data, chip->io_port + ESM_DATA); 636 chip->maestro_map[reg] = data; 637} 638 | 1/* 2 * Driver for ESS Maestro 1/2/2E Sound Card (started 21.8.99) 3 * Copyright (c) by Matze Braun <MatzeBraun@gmx.de>. 4 * Takashi Iwai <tiwai@suse.de> 5 * 6 * Most of the driver code comes from Zach Brown(zab@redhat.com) 7 * Alan Cox OSS Driver 8 * Rewritted from card-es1938.c source. --- 622 unchanged lines hidden (view full) --- 631/* no spinlock */ 632static void __maestro_write(es1968_t *chip, u16 reg, u16 data) 633{ 634 outw(reg, chip->io_port + ESM_INDEX); 635 outw(data, chip->io_port + ESM_DATA); 636 chip->maestro_map[reg] = data; 637} 638 |
639inline static void maestro_write(es1968_t *chip, u16 reg, u16 data) | 639static inline void maestro_write(es1968_t *chip, u16 reg, u16 data) |
640{ 641 unsigned long flags; 642 spin_lock_irqsave(&chip->reg_lock, flags); 643 __maestro_write(chip, reg, data); 644 spin_unlock_irqrestore(&chip->reg_lock, flags); 645} 646 647/* no spinlock */ 648static u16 __maestro_read(es1968_t *chip, u16 reg) 649{ 650 if (READABLE_MAP & (1 << reg)) { 651 outw(reg, chip->io_port + ESM_INDEX); 652 chip->maestro_map[reg] = inw(chip->io_port + ESM_DATA); 653 } 654 return chip->maestro_map[reg]; 655} 656 | 640{ 641 unsigned long flags; 642 spin_lock_irqsave(&chip->reg_lock, flags); 643 __maestro_write(chip, reg, data); 644 spin_unlock_irqrestore(&chip->reg_lock, flags); 645} 646 647/* no spinlock */ 648static u16 __maestro_read(es1968_t *chip, u16 reg) 649{ 650 if (READABLE_MAP & (1 << reg)) { 651 outw(reg, chip->io_port + ESM_INDEX); 652 chip->maestro_map[reg] = inw(chip->io_port + ESM_DATA); 653 } 654 return chip->maestro_map[reg]; 655} 656 |
657inline static u16 maestro_read(es1968_t *chip, u16 reg) | 657static inline u16 maestro_read(es1968_t *chip, u16 reg) |
658{ 659 unsigned long flags; 660 u16 result; 661 spin_lock_irqsave(&chip->reg_lock, flags); 662 result = __maestro_read(chip, reg); 663 spin_unlock_irqrestore(&chip->reg_lock, flags); 664 return result; 665} --- 84 unchanged lines hidden (view full) --- 750#ifdef CONFIG_PM 751 chip->apu_map[channel][reg] = data; 752#endif 753 reg |= (channel << 4); 754 apu_index_set(chip, reg); 755 apu_data_set(chip, data); 756} 757 | 658{ 659 unsigned long flags; 660 u16 result; 661 spin_lock_irqsave(&chip->reg_lock, flags); 662 result = __maestro_read(chip, reg); 663 spin_unlock_irqrestore(&chip->reg_lock, flags); 664 return result; 665} --- 84 unchanged lines hidden (view full) --- 750#ifdef CONFIG_PM 751 chip->apu_map[channel][reg] = data; 752#endif 753 reg |= (channel << 4); 754 apu_index_set(chip, reg); 755 apu_data_set(chip, data); 756} 757 |
758inline static void apu_set_register(es1968_t *chip, u16 channel, u8 reg, u16 data) | 758static inline void apu_set_register(es1968_t *chip, u16 channel, u8 reg, u16 data) |
759{ 760 unsigned long flags; 761 spin_lock_irqsave(&chip->reg_lock, flags); 762 __apu_set_register(chip, channel, reg, data); 763 spin_unlock_irqrestore(&chip->reg_lock, flags); 764} 765 766static u16 __apu_get_register(es1968_t *chip, u16 channel, u8 reg) 767{ 768 snd_assert(channel < NR_APUS, return 0); 769 reg |= (channel << 4); 770 apu_index_set(chip, reg); 771 return __maestro_read(chip, IDR0_DATA_PORT); 772} 773 | 759{ 760 unsigned long flags; 761 spin_lock_irqsave(&chip->reg_lock, flags); 762 __apu_set_register(chip, channel, reg, data); 763 spin_unlock_irqrestore(&chip->reg_lock, flags); 764} 765 766static u16 __apu_get_register(es1968_t *chip, u16 channel, u8 reg) 767{ 768 snd_assert(channel < NR_APUS, return 0); 769 reg |= (channel << 4); 770 apu_index_set(chip, reg); 771 return __maestro_read(chip, IDR0_DATA_PORT); 772} 773 |
774inline static u16 apu_get_register(es1968_t *chip, u16 channel, u8 reg) | 774static inline u16 apu_get_register(es1968_t *chip, u16 channel, u8 reg) |
775{ 776 unsigned long flags; 777 u16 v; 778 spin_lock_irqsave(&chip->reg_lock, flags); 779 v = __apu_get_register(chip, channel, reg); 780 spin_unlock_irqrestore(&chip->reg_lock, flags); 781 return v; 782} --- 169 unchanged lines hidden (view full) --- 952#if 0 /* XXX: do we need this? */ 953 if (rate > 0x10000) 954 rate = 0x10000; 955#endif 956 return rate; 957} 958 959/* get current pointer */ | 775{ 776 unsigned long flags; 777 u16 v; 778 spin_lock_irqsave(&chip->reg_lock, flags); 779 v = __apu_get_register(chip, channel, reg); 780 spin_unlock_irqrestore(&chip->reg_lock, flags); 781 return v; 782} --- 169 unchanged lines hidden (view full) --- 952#if 0 /* XXX: do we need this? */ 953 if (rate > 0x10000) 954 rate = 0x10000; 955#endif 956 return rate; 957} 958 959/* get current pointer */ |
960inline static unsigned int | 960static inline unsigned int |
961snd_es1968_get_dma_ptr(es1968_t *chip, esschan_t *es) 962{ 963 unsigned int offset; 964 965 offset = apu_get_register(chip, es->apu[0], 5); 966 967 offset -= es->base[0]; 968 --- 4 unchanged lines hidden (view full) --- 973{ 974 apu_set_register(chip, apu, 2, 975 (apu_get_register(chip, apu, 2) & 0x00FF) | 976 ((freq & 0xff) << 8) | 0x10); 977 apu_set_register(chip, apu, 3, freq >> 8); 978} 979 980/* spin lock held */ | 961snd_es1968_get_dma_ptr(es1968_t *chip, esschan_t *es) 962{ 963 unsigned int offset; 964 965 offset = apu_get_register(chip, es->apu[0], 5); 966 967 offset -= es->base[0]; 968 --- 4 unchanged lines hidden (view full) --- 973{ 974 apu_set_register(chip, apu, 2, 975 (apu_get_register(chip, apu, 2) & 0x00FF) | 976 ((freq & 0xff) << 8) | 0x10); 977 apu_set_register(chip, apu, 3, freq >> 8); 978} 979 980/* spin lock held */ |
981inline static void snd_es1968_trigger_apu(es1968_t *esm, int apu, int mode) | 981static inline void snd_es1968_trigger_apu(es1968_t *esm, int apu, int mode) |
982{ 983 /* set the APU mode */ 984 __apu_set_register(esm, apu, 0, 985 (__apu_get_register(esm, apu, 0) & 0xff0f) | 986 (mode << 4)); 987} 988 989static void snd_es1968_pcm_start(es1968_t *chip, esschan_t *es) --- 1819 unchanged lines hidden --- | 982{ 983 /* set the APU mode */ 984 __apu_set_register(esm, apu, 0, 985 (__apu_get_register(esm, apu, 0) & 0xff0f) | 986 (mode << 4)); 987} 988 989static void snd_es1968_pcm_start(es1968_t *chip, esschan_t *es) --- 1819 unchanged lines hidden --- |