162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* Hewlett-Packard Harmony audio driver 362306a36Sopenharmony_ci * Copyright (C) 2004, Kyle McMartin <kyle@parisc-linux.org> 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef __HARMONY_H__ 762306a36Sopenharmony_ci#define __HARMONY_H__ 862306a36Sopenharmony_ci 962306a36Sopenharmony_cistruct harmony_buffer { 1062306a36Sopenharmony_ci unsigned long addr; 1162306a36Sopenharmony_ci int buf; 1262306a36Sopenharmony_ci int count; 1362306a36Sopenharmony_ci int size; 1462306a36Sopenharmony_ci int coherent; 1562306a36Sopenharmony_ci}; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cistruct snd_harmony { 1862306a36Sopenharmony_ci int irq; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci unsigned long hpa; /* hard physical address */ 2162306a36Sopenharmony_ci void __iomem *iobase; /* remapped io address */ 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci struct parisc_device *dev; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci struct { 2662306a36Sopenharmony_ci u32 gain; 2762306a36Sopenharmony_ci u32 rate; 2862306a36Sopenharmony_ci u32 format; 2962306a36Sopenharmony_ci u32 stereo; 3062306a36Sopenharmony_ci int playing; 3162306a36Sopenharmony_ci int capturing; 3262306a36Sopenharmony_ci } st; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci struct snd_dma_device dma; /* playback/capture */ 3562306a36Sopenharmony_ci struct harmony_buffer pbuf; 3662306a36Sopenharmony_ci struct harmony_buffer cbuf; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci struct snd_dma_buffer gdma; /* graveyard */ 3962306a36Sopenharmony_ci struct snd_dma_buffer sdma; /* silence */ 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci struct { 4262306a36Sopenharmony_ci unsigned long play_intr; 4362306a36Sopenharmony_ci unsigned long rec_intr; 4462306a36Sopenharmony_ci unsigned long graveyard_intr; 4562306a36Sopenharmony_ci unsigned long silence_intr; 4662306a36Sopenharmony_ci } stats; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci struct snd_pcm *pcm; 4962306a36Sopenharmony_ci struct snd_card *card; 5062306a36Sopenharmony_ci struct snd_pcm_substream *psubs; 5162306a36Sopenharmony_ci struct snd_pcm_substream *csubs; 5262306a36Sopenharmony_ci struct snd_info_entry *proc; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci spinlock_t lock; 5562306a36Sopenharmony_ci spinlock_t mixer_lock; 5662306a36Sopenharmony_ci}; 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci#define MAX_PCM_DEVICES 1 5962306a36Sopenharmony_ci#define MAX_PCM_SUBSTREAMS 4 6062306a36Sopenharmony_ci#define MAX_MIDI_DEVICES 0 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#define HARMONY_SIZE 64 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci#define BUF_SIZE PAGE_SIZE 6562306a36Sopenharmony_ci#define MAX_BUFS 16 6662306a36Sopenharmony_ci#define MAX_BUF_SIZE (MAX_BUFS * BUF_SIZE) 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci#define PLAYBACK_BUFS MAX_BUFS 6962306a36Sopenharmony_ci#define RECORD_BUFS MAX_BUFS 7062306a36Sopenharmony_ci#define GRAVEYARD_BUFS 1 7162306a36Sopenharmony_ci#define GRAVEYARD_BUFSZ (GRAVEYARD_BUFS*BUF_SIZE) 7262306a36Sopenharmony_ci#define SILENCE_BUFS 1 7362306a36Sopenharmony_ci#define SILENCE_BUFSZ (SILENCE_BUFS*BUF_SIZE) 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci#define HARMONY_ID 0x000 7662306a36Sopenharmony_ci#define HARMONY_RESET 0x004 7762306a36Sopenharmony_ci#define HARMONY_CNTL 0x008 7862306a36Sopenharmony_ci#define HARMONY_GAINCTL 0x00c 7962306a36Sopenharmony_ci#define HARMONY_PNXTADD 0x010 8062306a36Sopenharmony_ci#define HARMONY_PCURADD 0x014 8162306a36Sopenharmony_ci#define HARMONY_RNXTADD 0x018 8262306a36Sopenharmony_ci#define HARMONY_RCURADD 0x01c 8362306a36Sopenharmony_ci#define HARMONY_DSTATUS 0x020 8462306a36Sopenharmony_ci#define HARMONY_OV 0x024 8562306a36Sopenharmony_ci#define HARMONY_PIO 0x028 8662306a36Sopenharmony_ci#define HARMONY_DIAG 0x03c 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci#define HARMONY_CNTL_C 0x80000000 8962306a36Sopenharmony_ci#define HARMONY_CNTL_ST 0x00000020 9062306a36Sopenharmony_ci#define HARMONY_CNTL_44100 0x00000015 /* HARMONY_SR_44KHZ */ 9162306a36Sopenharmony_ci#define HARMONY_CNTL_8000 0x00000008 /* HARMONY_SR_8KHZ */ 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci#define HARMONY_DSTATUS_ID 0x00000000 /* interrupts off */ 9462306a36Sopenharmony_ci#define HARMONY_DSTATUS_PN 0x00000200 /* playback fill */ 9562306a36Sopenharmony_ci#define HARMONY_DSTATUS_RN 0x00000002 /* record fill */ 9662306a36Sopenharmony_ci#define HARMONY_DSTATUS_IE 0x80000000 /* interrupts on */ 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci#define HARMONY_DF_16BIT_LINEAR 0x00000000 9962306a36Sopenharmony_ci#define HARMONY_DF_8BIT_ULAW 0x00000001 10062306a36Sopenharmony_ci#define HARMONY_DF_8BIT_ALAW 0x00000002 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci#define HARMONY_SS_MONO 0x00000000 10362306a36Sopenharmony_ci#define HARMONY_SS_STEREO 0x00000001 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci#define HARMONY_GAIN_SILENCE 0x01F00FFF 10662306a36Sopenharmony_ci#define HARMONY_GAIN_DEFAULT 0x01F00FFF 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci#define HARMONY_GAIN_HE_SHIFT 27 /* headphones enabled */ 10962306a36Sopenharmony_ci#define HARMONY_GAIN_HE_MASK (1 << HARMONY_GAIN_HE_SHIFT) 11062306a36Sopenharmony_ci#define HARMONY_GAIN_LE_SHIFT 26 /* line-out enabled */ 11162306a36Sopenharmony_ci#define HARMONY_GAIN_LE_MASK (1 << HARMONY_GAIN_LE_SHIFT) 11262306a36Sopenharmony_ci#define HARMONY_GAIN_SE_SHIFT 25 /* internal-speaker enabled */ 11362306a36Sopenharmony_ci#define HARMONY_GAIN_SE_MASK (1 << HARMONY_GAIN_SE_SHIFT) 11462306a36Sopenharmony_ci#define HARMONY_GAIN_IS_SHIFT 24 /* input select - 0 for line, 1 for mic */ 11562306a36Sopenharmony_ci#define HARMONY_GAIN_IS_MASK (1 << HARMONY_GAIN_IS_SHIFT) 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci/* monitor attenuation */ 11862306a36Sopenharmony_ci#define HARMONY_GAIN_MA 0x0f 11962306a36Sopenharmony_ci#define HARMONY_GAIN_MA_SHIFT 20 12062306a36Sopenharmony_ci#define HARMONY_GAIN_MA_MASK (HARMONY_GAIN_MA << HARMONY_GAIN_MA_SHIFT) 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci/* input gain */ 12362306a36Sopenharmony_ci#define HARMONY_GAIN_IN 0x0f 12462306a36Sopenharmony_ci#define HARMONY_GAIN_LI_SHIFT 16 12562306a36Sopenharmony_ci#define HARMONY_GAIN_LI_MASK (HARMONY_GAIN_IN << HARMONY_GAIN_LI_SHIFT) 12662306a36Sopenharmony_ci#define HARMONY_GAIN_RI_SHIFT 12 12762306a36Sopenharmony_ci#define HARMONY_GAIN_RI_MASK (HARMONY_GAIN_IN << HARMONY_GAIN_RI_SHIFT) 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci/* output gain (master volume) */ 13062306a36Sopenharmony_ci#define HARMONY_GAIN_OUT 0x3f 13162306a36Sopenharmony_ci#define HARMONY_GAIN_LO_SHIFT 6 13262306a36Sopenharmony_ci#define HARMONY_GAIN_LO_MASK (HARMONY_GAIN_OUT << HARMONY_GAIN_LO_SHIFT) 13362306a36Sopenharmony_ci#define HARMONY_GAIN_RO_SHIFT 0 13462306a36Sopenharmony_ci#define HARMONY_GAIN_RO_MASK (HARMONY_GAIN_OUT << HARMONY_GAIN_RO_SHIFT) 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci#define HARMONY_MAX_OUT (HARMONY_GAIN_RO_MASK >> HARMONY_GAIN_RO_SHIFT) 13762306a36Sopenharmony_ci#define HARMONY_MAX_IN (HARMONY_GAIN_RI_MASK >> HARMONY_GAIN_RI_SHIFT) 13862306a36Sopenharmony_ci#define HARMONY_MAX_MON (HARMONY_GAIN_MA_MASK >> HARMONY_GAIN_MA_SHIFT) 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci#define HARMONY_SR_8KHZ 0x08 14162306a36Sopenharmony_ci#define HARMONY_SR_16KHZ 0x09 14262306a36Sopenharmony_ci#define HARMONY_SR_27KHZ 0x0A 14362306a36Sopenharmony_ci#define HARMONY_SR_32KHZ 0x0B 14462306a36Sopenharmony_ci#define HARMONY_SR_48KHZ 0x0E 14562306a36Sopenharmony_ci#define HARMONY_SR_9KHZ 0x0F 14662306a36Sopenharmony_ci#define HARMONY_SR_5KHZ 0x10 14762306a36Sopenharmony_ci#define HARMONY_SR_11KHZ 0x11 14862306a36Sopenharmony_ci#define HARMONY_SR_18KHZ 0x12 14962306a36Sopenharmony_ci#define HARMONY_SR_22KHZ 0x13 15062306a36Sopenharmony_ci#define HARMONY_SR_37KHZ 0x14 15162306a36Sopenharmony_ci#define HARMONY_SR_44KHZ 0x15 15262306a36Sopenharmony_ci#define HARMONY_SR_33KHZ 0x16 15362306a36Sopenharmony_ci#define HARMONY_SR_6KHZ 0x17 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci#endif /* __HARMONY_H__ */ 156