1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Audio support for PS3 4*4882a593Smuzhiyun * Copyright (C) 2007 Sony Computer Entertainment Inc. 5*4882a593Smuzhiyun * All rights reserved. 6*4882a593Smuzhiyun * Copyright 2006, 2007 Sony Corporation 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #if !defined(_SND_PS3_H_) 10*4882a593Smuzhiyun #define _SND_PS3_H_ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <linux/irqreturn.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define SND_PS3_DRIVER_NAME "snd_ps3" 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun enum snd_ps3_out_channel { 17*4882a593Smuzhiyun SND_PS3_OUT_SPDIF_0, 18*4882a593Smuzhiyun SND_PS3_OUT_SPDIF_1, 19*4882a593Smuzhiyun SND_PS3_OUT_SERIAL_0, 20*4882a593Smuzhiyun SND_PS3_OUT_DEVS 21*4882a593Smuzhiyun }; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun enum snd_ps3_dma_filltype { 24*4882a593Smuzhiyun SND_PS3_DMA_FILLTYPE_FIRSTFILL, 25*4882a593Smuzhiyun SND_PS3_DMA_FILLTYPE_RUNNING, 26*4882a593Smuzhiyun SND_PS3_DMA_FILLTYPE_SILENT_FIRSTFILL, 27*4882a593Smuzhiyun SND_PS3_DMA_FILLTYPE_SILENT_RUNNING 28*4882a593Smuzhiyun }; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun enum snd_ps3_ch { 31*4882a593Smuzhiyun SND_PS3_CH_L = 0, 32*4882a593Smuzhiyun SND_PS3_CH_R = 1, 33*4882a593Smuzhiyun SND_PS3_CH_MAX = 2 34*4882a593Smuzhiyun }; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun struct snd_ps3_avsetting_info { 37*4882a593Smuzhiyun uint32_t avs_audio_ch; /* fixed */ 38*4882a593Smuzhiyun uint32_t avs_audio_rate; 39*4882a593Smuzhiyun uint32_t avs_audio_width; 40*4882a593Smuzhiyun uint32_t avs_audio_format; /* fixed */ 41*4882a593Smuzhiyun uint32_t avs_audio_source; /* fixed */ 42*4882a593Smuzhiyun unsigned char avs_cs_info[8]; 43*4882a593Smuzhiyun }; 44*4882a593Smuzhiyun /* 45*4882a593Smuzhiyun * PS3 audio 'card' instance 46*4882a593Smuzhiyun * there should be only ONE hardware. 47*4882a593Smuzhiyun */ 48*4882a593Smuzhiyun struct snd_ps3_card_info { 49*4882a593Smuzhiyun struct ps3_system_bus_device *ps3_dev; 50*4882a593Smuzhiyun struct snd_card *card; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun struct snd_pcm *pcm; 53*4882a593Smuzhiyun struct snd_pcm_substream *substream; 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun /* hvc info */ 56*4882a593Smuzhiyun u64 audio_lpar_addr; 57*4882a593Smuzhiyun u64 audio_lpar_size; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /* registers */ 60*4882a593Smuzhiyun void __iomem *mapped_mmio_vaddr; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun /* irq */ 63*4882a593Smuzhiyun u64 audio_irq_outlet; 64*4882a593Smuzhiyun unsigned int irq_no; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /* remember avsetting */ 67*4882a593Smuzhiyun struct snd_ps3_avsetting_info avs; 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /* dma buffer management */ 70*4882a593Smuzhiyun spinlock_t dma_lock; 71*4882a593Smuzhiyun /* dma_lock start */ 72*4882a593Smuzhiyun void * dma_start_vaddr[2]; /* 0 for L, 1 for R */ 73*4882a593Smuzhiyun dma_addr_t dma_start_bus_addr[2]; 74*4882a593Smuzhiyun size_t dma_buffer_size; 75*4882a593Smuzhiyun void * dma_last_transfer_vaddr[2]; 76*4882a593Smuzhiyun void * dma_next_transfer_vaddr[2]; 77*4882a593Smuzhiyun int silent; 78*4882a593Smuzhiyun /* dma_lock end */ 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun int running; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun /* null buffer */ 83*4882a593Smuzhiyun void *null_buffer_start_vaddr; 84*4882a593Smuzhiyun dma_addr_t null_buffer_start_dma_addr; 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun /* start delay */ 87*4882a593Smuzhiyun unsigned int start_delay; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun }; 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun /* PS3 audio DMAC block size in bytes */ 93*4882a593Smuzhiyun #define PS3_AUDIO_DMAC_BLOCK_SIZE (128) 94*4882a593Smuzhiyun /* one stage (stereo) of audio FIFO in bytes */ 95*4882a593Smuzhiyun #define PS3_AUDIO_FIFO_STAGE_SIZE (256) 96*4882a593Smuzhiyun /* how many stages the fifo have */ 97*4882a593Smuzhiyun #define PS3_AUDIO_FIFO_STAGE_COUNT (8) 98*4882a593Smuzhiyun /* fifo size 128 bytes * 8 stages * stereo (2ch) */ 99*4882a593Smuzhiyun #define PS3_AUDIO_FIFO_SIZE \ 100*4882a593Smuzhiyun (PS3_AUDIO_FIFO_STAGE_SIZE * PS3_AUDIO_FIFO_STAGE_COUNT) 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun /* PS3 audio DMAC max block count in one dma shot = 128 (0x80) blocks*/ 103*4882a593Smuzhiyun #define PS3_AUDIO_DMAC_MAX_BLOCKS (PS3_AUDIO_DMASIZE_BLOCKS_MASK + 1) 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun #define PS3_AUDIO_NORMAL_DMA_START_CH (0) 106*4882a593Smuzhiyun #define PS3_AUDIO_NORMAL_DMA_COUNT (8) 107*4882a593Smuzhiyun #define PS3_AUDIO_NULL_DMA_START_CH \ 108*4882a593Smuzhiyun (PS3_AUDIO_NORMAL_DMA_START_CH + PS3_AUDIO_NORMAL_DMA_COUNT) 109*4882a593Smuzhiyun #define PS3_AUDIO_NULL_DMA_COUNT (2) 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun #define SND_PS3_MAX_VOL (0x0F) 112*4882a593Smuzhiyun #define SND_PS3_MIN_VOL (0x00) 113*4882a593Smuzhiyun #define SND_PS3_MIN_ATT SND_PS3_MIN_VOL 114*4882a593Smuzhiyun #define SND_PS3_MAX_ATT SND_PS3_MAX_VOL 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun #define SND_PS3_PCM_PREALLOC_SIZE \ 117*4882a593Smuzhiyun (PS3_AUDIO_DMAC_BLOCK_SIZE * PS3_AUDIO_DMAC_MAX_BLOCKS * 4) 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun #define SND_PS3_DMA_REGION_SIZE \ 120*4882a593Smuzhiyun (SND_PS3_PCM_PREALLOC_SIZE + PAGE_SIZE) 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun #define PS3_AUDIO_IOID (1UL) 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun #endif /* _SND_PS3_H_ */ 125