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 ---