1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 21da177e4SLinus Torvalds /* Hewlett-Packard Harmony audio driver 31da177e4SLinus Torvalds * Copyright (C) 2004, Kyle McMartin <kyle@parisc-linux.org> 41da177e4SLinus Torvalds */ 51da177e4SLinus Torvalds 61da177e4SLinus Torvalds #ifndef __HARMONY_H__ 71da177e4SLinus Torvalds #define __HARMONY_H__ 81da177e4SLinus Torvalds 91da177e4SLinus Torvalds struct harmony_buffer { 101da177e4SLinus Torvalds unsigned long addr; 111da177e4SLinus Torvalds int buf; 121da177e4SLinus Torvalds int count; 131da177e4SLinus Torvalds int size; 141da177e4SLinus Torvalds int coherent; 151da177e4SLinus Torvalds }; 161da177e4SLinus Torvalds 1767b1020dSTakashi Iwai struct snd_harmony { 181da177e4SLinus Torvalds int irq; 191da177e4SLinus Torvalds 201da177e4SLinus Torvalds unsigned long hpa; /* hard physical address */ 211da177e4SLinus Torvalds void __iomem *iobase; /* remapped io address */ 221da177e4SLinus Torvalds 231da177e4SLinus Torvalds struct parisc_device *dev; 241da177e4SLinus Torvalds 251da177e4SLinus Torvalds struct { 261da177e4SLinus Torvalds u32 gain; 271da177e4SLinus Torvalds u32 rate; 281da177e4SLinus Torvalds u32 format; 291da177e4SLinus Torvalds u32 stereo; 301da177e4SLinus Torvalds int playing; 311da177e4SLinus Torvalds int capturing; 321da177e4SLinus Torvalds } st; 331da177e4SLinus Torvalds 341da177e4SLinus Torvalds struct snd_dma_device dma; /* playback/capture */ 351da177e4SLinus Torvalds struct harmony_buffer pbuf; 361da177e4SLinus Torvalds struct harmony_buffer cbuf; 371da177e4SLinus Torvalds 381da177e4SLinus Torvalds struct snd_dma_buffer gdma; /* graveyard */ 391da177e4SLinus Torvalds struct snd_dma_buffer sdma; /* silence */ 401da177e4SLinus Torvalds 411da177e4SLinus Torvalds struct { 421da177e4SLinus Torvalds unsigned long play_intr; 431da177e4SLinus Torvalds unsigned long rec_intr; 441da177e4SLinus Torvalds unsigned long graveyard_intr; 451da177e4SLinus Torvalds unsigned long silence_intr; 461da177e4SLinus Torvalds } stats; 471da177e4SLinus Torvalds 4867b1020dSTakashi Iwai struct snd_pcm *pcm; 4967b1020dSTakashi Iwai struct snd_card *card; 5067b1020dSTakashi Iwai struct snd_pcm_substream *psubs; 5167b1020dSTakashi Iwai struct snd_pcm_substream *csubs; 5267b1020dSTakashi Iwai struct snd_info_entry *proc; 531da177e4SLinus Torvalds 541da177e4SLinus Torvalds spinlock_t lock; 551da177e4SLinus Torvalds spinlock_t mixer_lock; 5667b1020dSTakashi Iwai }; 571da177e4SLinus Torvalds 581da177e4SLinus Torvalds #define MAX_PCM_DEVICES 1 591da177e4SLinus Torvalds #define MAX_PCM_SUBSTREAMS 4 601da177e4SLinus Torvalds #define MAX_MIDI_DEVICES 0 611da177e4SLinus Torvalds 621da177e4SLinus Torvalds #define HARMONY_SIZE 64 631da177e4SLinus Torvalds 641da177e4SLinus Torvalds #define BUF_SIZE PAGE_SIZE 653a165680SStuart Brady #define MAX_BUFS 16 661da177e4SLinus Torvalds #define MAX_BUF_SIZE (MAX_BUFS * BUF_SIZE) 671da177e4SLinus Torvalds 681da177e4SLinus Torvalds #define PLAYBACK_BUFS MAX_BUFS 691da177e4SLinus Torvalds #define RECORD_BUFS MAX_BUFS 701da177e4SLinus Torvalds #define GRAVEYARD_BUFS 1 711da177e4SLinus Torvalds #define GRAVEYARD_BUFSZ (GRAVEYARD_BUFS*BUF_SIZE) 721da177e4SLinus Torvalds #define SILENCE_BUFS 1 731da177e4SLinus Torvalds #define SILENCE_BUFSZ (SILENCE_BUFS*BUF_SIZE) 741da177e4SLinus Torvalds 751da177e4SLinus Torvalds #define HARMONY_ID 0x000 761da177e4SLinus Torvalds #define HARMONY_RESET 0x004 771da177e4SLinus Torvalds #define HARMONY_CNTL 0x008 781da177e4SLinus Torvalds #define HARMONY_GAINCTL 0x00c 791da177e4SLinus Torvalds #define HARMONY_PNXTADD 0x010 801da177e4SLinus Torvalds #define HARMONY_PCURADD 0x014 811da177e4SLinus Torvalds #define HARMONY_RNXTADD 0x018 821da177e4SLinus Torvalds #define HARMONY_RCURADD 0x01c 831da177e4SLinus Torvalds #define HARMONY_DSTATUS 0x020 841da177e4SLinus Torvalds #define HARMONY_OV 0x024 851da177e4SLinus Torvalds #define HARMONY_PIO 0x028 861da177e4SLinus Torvalds #define HARMONY_DIAG 0x03c 871da177e4SLinus Torvalds 881da177e4SLinus Torvalds #define HARMONY_CNTL_C 0x80000000 891da177e4SLinus Torvalds #define HARMONY_CNTL_ST 0x00000020 901da177e4SLinus Torvalds #define HARMONY_CNTL_44100 0x00000015 /* HARMONY_SR_44KHZ */ 911da177e4SLinus Torvalds #define HARMONY_CNTL_8000 0x00000008 /* HARMONY_SR_8KHZ */ 921da177e4SLinus Torvalds 931da177e4SLinus Torvalds #define HARMONY_DSTATUS_ID 0x00000000 /* interrupts off */ 941da177e4SLinus Torvalds #define HARMONY_DSTATUS_PN 0x00000200 /* playback fill */ 951da177e4SLinus Torvalds #define HARMONY_DSTATUS_RN 0x00000002 /* record fill */ 961da177e4SLinus Torvalds #define HARMONY_DSTATUS_IE 0x80000000 /* interrupts on */ 971da177e4SLinus Torvalds 981da177e4SLinus Torvalds #define HARMONY_DF_16BIT_LINEAR 0x00000000 991da177e4SLinus Torvalds #define HARMONY_DF_8BIT_ULAW 0x00000001 1001da177e4SLinus Torvalds #define HARMONY_DF_8BIT_ALAW 0x00000002 1011da177e4SLinus Torvalds 1021da177e4SLinus Torvalds #define HARMONY_SS_MONO 0x00000000 1031da177e4SLinus Torvalds #define HARMONY_SS_STEREO 0x00000001 1041da177e4SLinus Torvalds 1053a165680SStuart Brady #define HARMONY_GAIN_SILENCE 0x01F00FFF 1063a165680SStuart Brady #define HARMONY_GAIN_DEFAULT 0x01F00FFF 1071da177e4SLinus Torvalds 1083a165680SStuart Brady #define HARMONY_GAIN_HE_SHIFT 27 /* headphones enabled */ 1091da177e4SLinus Torvalds #define HARMONY_GAIN_HE_MASK (1 << HARMONY_GAIN_HE_SHIFT) 1103a165680SStuart Brady #define HARMONY_GAIN_LE_SHIFT 26 /* line-out enabled */ 1111da177e4SLinus Torvalds #define HARMONY_GAIN_LE_MASK (1 << HARMONY_GAIN_LE_SHIFT) 1123a165680SStuart Brady #define HARMONY_GAIN_SE_SHIFT 25 /* internal-speaker enabled */ 1131da177e4SLinus Torvalds #define HARMONY_GAIN_SE_MASK (1 << HARMONY_GAIN_SE_SHIFT) 1143a165680SStuart Brady #define HARMONY_GAIN_IS_SHIFT 24 /* input select - 0 for line, 1 for mic */ 1151da177e4SLinus Torvalds #define HARMONY_GAIN_IS_MASK (1 << HARMONY_GAIN_IS_SHIFT) 1161da177e4SLinus Torvalds 1173a165680SStuart Brady /* monitor attenuation */ 1181da177e4SLinus Torvalds #define HARMONY_GAIN_MA 0x0f 1191da177e4SLinus Torvalds #define HARMONY_GAIN_MA_SHIFT 20 1201da177e4SLinus Torvalds #define HARMONY_GAIN_MA_MASK (HARMONY_GAIN_MA << HARMONY_GAIN_MA_SHIFT) 1211da177e4SLinus Torvalds 1223a165680SStuart Brady /* input gain */ 1231da177e4SLinus Torvalds #define HARMONY_GAIN_IN 0x0f 1241da177e4SLinus Torvalds #define HARMONY_GAIN_LI_SHIFT 16 1251da177e4SLinus Torvalds #define HARMONY_GAIN_LI_MASK (HARMONY_GAIN_IN << HARMONY_GAIN_LI_SHIFT) 1261da177e4SLinus Torvalds #define HARMONY_GAIN_RI_SHIFT 12 1271da177e4SLinus Torvalds #define HARMONY_GAIN_RI_MASK (HARMONY_GAIN_IN << HARMONY_GAIN_RI_SHIFT) 1281da177e4SLinus Torvalds 1293a165680SStuart Brady /* output gain (master volume) */ 1301da177e4SLinus Torvalds #define HARMONY_GAIN_OUT 0x3f 1311da177e4SLinus Torvalds #define HARMONY_GAIN_LO_SHIFT 6 1321da177e4SLinus Torvalds #define HARMONY_GAIN_LO_MASK (HARMONY_GAIN_OUT << HARMONY_GAIN_LO_SHIFT) 1331da177e4SLinus Torvalds #define HARMONY_GAIN_RO_SHIFT 0 1341da177e4SLinus Torvalds #define HARMONY_GAIN_RO_MASK (HARMONY_GAIN_OUT << HARMONY_GAIN_RO_SHIFT) 1351da177e4SLinus Torvalds 1361da177e4SLinus Torvalds #define HARMONY_MAX_OUT (HARMONY_GAIN_RO_MASK >> HARMONY_GAIN_RO_SHIFT) 1371da177e4SLinus Torvalds #define HARMONY_MAX_IN (HARMONY_GAIN_RI_MASK >> HARMONY_GAIN_RI_SHIFT) 1381da177e4SLinus Torvalds #define HARMONY_MAX_MON (HARMONY_GAIN_MA_MASK >> HARMONY_GAIN_MA_SHIFT) 1391da177e4SLinus Torvalds 1401da177e4SLinus Torvalds #define HARMONY_SR_8KHZ 0x08 1411da177e4SLinus Torvalds #define HARMONY_SR_16KHZ 0x09 1421da177e4SLinus Torvalds #define HARMONY_SR_27KHZ 0x0A 1431da177e4SLinus Torvalds #define HARMONY_SR_32KHZ 0x0B 1441da177e4SLinus Torvalds #define HARMONY_SR_48KHZ 0x0E 1451da177e4SLinus Torvalds #define HARMONY_SR_9KHZ 0x0F 1461da177e4SLinus Torvalds #define HARMONY_SR_5KHZ 0x10 1471da177e4SLinus Torvalds #define HARMONY_SR_11KHZ 0x11 1481da177e4SLinus Torvalds #define HARMONY_SR_18KHZ 0x12 1491da177e4SLinus Torvalds #define HARMONY_SR_22KHZ 0x13 1501da177e4SLinus Torvalds #define HARMONY_SR_37KHZ 0x14 1511da177e4SLinus Torvalds #define HARMONY_SR_44KHZ 0x15 1521da177e4SLinus Torvalds #define HARMONY_SR_33KHZ 0x16 1531da177e4SLinus Torvalds #define HARMONY_SR_6KHZ 0x17 1541da177e4SLinus Torvalds 1551da177e4SLinus Torvalds #endif /* __HARMONY_H__ */ 156