Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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