Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * kirkwood.h
0004  *
0005  * (c) 2010 Arnaud Patard <apatard@mandriva.com>
0006  */
0007 
0008 #ifndef _KIRKWOOD_AUDIO_H
0009 #define _KIRKWOOD_AUDIO_H
0010 
0011 #define DRV_NAME    "mvebu-audio"
0012 
0013 #define KIRKWOOD_RECORD_WIN         0
0014 #define KIRKWOOD_PLAYBACK_WIN           1
0015 #define KIRKWOOD_MAX_AUDIO_WIN          2
0016 
0017 #define KIRKWOOD_AUDIO_WIN_BASE_REG(win)    (0xA00 + ((win)<<3))
0018 #define KIRKWOOD_AUDIO_WIN_CTRL_REG(win)    (0xA04 + ((win)<<3))
0019 
0020 
0021 #define KIRKWOOD_RECCTL         0x1000
0022 #define KIRKWOOD_RECCTL_SPDIF_EN        (1<<11)
0023 #define KIRKWOOD_RECCTL_I2S_EN          (1<<10)
0024 #define KIRKWOOD_RECCTL_PAUSE           (1<<9)
0025 #define KIRKWOOD_RECCTL_MUTE            (1<<8)
0026 #define KIRKWOOD_RECCTL_BURST_MASK      (3<<5)
0027 #define KIRKWOOD_RECCTL_BURST_128       (2<<5)
0028 #define KIRKWOOD_RECCTL_BURST_32        (1<<5)
0029 #define KIRKWOOD_RECCTL_MONO            (1<<4)
0030 #define KIRKWOOD_RECCTL_MONO_CHAN_RIGHT (1<<3)
0031 #define KIRKWOOD_RECCTL_MONO_CHAN_LEFT      (0<<3)
0032 #define KIRKWOOD_RECCTL_SIZE_MASK       (7<<0)
0033 #define KIRKWOOD_RECCTL_SIZE_16     (7<<0)
0034 #define KIRKWOOD_RECCTL_SIZE_16_C       (3<<0)
0035 #define KIRKWOOD_RECCTL_SIZE_20     (2<<0)
0036 #define KIRKWOOD_RECCTL_SIZE_24     (1<<0)
0037 #define KIRKWOOD_RECCTL_SIZE_32     (0<<0)
0038 
0039 #define KIRKWOOD_RECCTL_ENABLE_MASK     (KIRKWOOD_RECCTL_SPDIF_EN | \
0040                          KIRKWOOD_RECCTL_I2S_EN)
0041 
0042 #define KIRKWOOD_REC_BUF_ADDR           0x1004
0043 #define KIRKWOOD_REC_BUF_SIZE           0x1008
0044 #define KIRKWOOD_REC_BYTE_COUNT         0x100C
0045 
0046 #define KIRKWOOD_PLAYCTL            0x1100
0047 #define KIRKWOOD_PLAYCTL_PLAY_BUSY      (1<<16)
0048 #define KIRKWOOD_PLAYCTL_BURST_MASK     (3<<11)
0049 #define KIRKWOOD_PLAYCTL_BURST_128      (2<<11)
0050 #define KIRKWOOD_PLAYCTL_BURST_32       (1<<11)
0051 #define KIRKWOOD_PLAYCTL_PAUSE          (1<<9)
0052 #define KIRKWOOD_PLAYCTL_SPDIF_MUTE     (1<<8)
0053 #define KIRKWOOD_PLAYCTL_MONO_MASK      (3<<5)
0054 #define KIRKWOOD_PLAYCTL_MONO_BOTH      (3<<5)
0055 #define KIRKWOOD_PLAYCTL_MONO_OFF       (0<<5)
0056 #define KIRKWOOD_PLAYCTL_I2S_MUTE       (1<<7)
0057 #define KIRKWOOD_PLAYCTL_SPDIF_EN       (1<<4)
0058 #define KIRKWOOD_PLAYCTL_I2S_EN         (1<<3)
0059 #define KIRKWOOD_PLAYCTL_SIZE_MASK      (7<<0)
0060 #define KIRKWOOD_PLAYCTL_SIZE_16        (7<<0)
0061 #define KIRKWOOD_PLAYCTL_SIZE_16_C      (3<<0)
0062 #define KIRKWOOD_PLAYCTL_SIZE_20        (2<<0)
0063 #define KIRKWOOD_PLAYCTL_SIZE_24        (1<<0)
0064 #define KIRKWOOD_PLAYCTL_SIZE_32        (0<<0)
0065 
0066 #define KIRKWOOD_PLAYCTL_ENABLE_MASK        (KIRKWOOD_PLAYCTL_SPDIF_EN | \
0067                          KIRKWOOD_PLAYCTL_I2S_EN)
0068 
0069 #define KIRKWOOD_PLAY_BUF_ADDR          0x1104
0070 #define KIRKWOOD_PLAY_BUF_SIZE          0x1108
0071 #define KIRKWOOD_PLAY_BYTE_COUNT        0x110C
0072 
0073 #define KIRKWOOD_DCO_CTL            0x1204
0074 #define KIRKWOOD_DCO_CTL_OFFSET_MASK        (0xFFF<<2)
0075 #define KIRKWOOD_DCO_CTL_OFFSET_0       (0x800<<2)
0076 #define KIRKWOOD_DCO_CTL_FREQ_MASK      (3<<0)
0077 #define KIRKWOOD_DCO_CTL_FREQ_11        (0<<0)
0078 #define KIRKWOOD_DCO_CTL_FREQ_12        (1<<0)
0079 #define KIRKWOOD_DCO_CTL_FREQ_24        (2<<0)
0080 
0081 #define KIRKWOOD_DCO_SPCR_STATUS        0x120c
0082 #define KIRKWOOD_DCO_SPCR_STATUS_DCO_LOCK   (1<<16)
0083 
0084 #define KIRKWOOD_CLOCKS_CTRL            0x1230
0085 #define KIRKWOOD_MCLK_SOURCE_MASK       (3<<0)
0086 #define KIRKWOOD_MCLK_SOURCE_DCO        (0<<0)
0087 #define KIRKWOOD_MCLK_SOURCE_EXTCLK     (3<<0)
0088 
0089 #define KIRKWOOD_ERR_CAUSE          0x1300
0090 #define KIRKWOOD_ERR_MASK           0x1304
0091 
0092 #define KIRKWOOD_INT_CAUSE          0x1308
0093 #define KIRKWOOD_INT_MASK           0x130C
0094 #define KIRKWOOD_INT_CAUSE_PLAY_BYTES       (1<<14)
0095 #define KIRKWOOD_INT_CAUSE_REC_BYTES        (1<<13)
0096 #define KIRKWOOD_INT_CAUSE_DMA_PLAY_END (1<<7)
0097 #define KIRKWOOD_INT_CAUSE_DMA_PLAY_3Q      (1<<6)
0098 #define KIRKWOOD_INT_CAUSE_DMA_PLAY_HALF    (1<<5)
0099 #define KIRKWOOD_INT_CAUSE_DMA_PLAY_1Q      (1<<4)
0100 #define KIRKWOOD_INT_CAUSE_DMA_REC_END      (1<<3)
0101 #define KIRKWOOD_INT_CAUSE_DMA_REC_3Q       (1<<2)
0102 #define KIRKWOOD_INT_CAUSE_DMA_REC_HALF (1<<1)
0103 #define KIRKWOOD_INT_CAUSE_DMA_REC_1Q       (1<<0)
0104 
0105 #define KIRKWOOD_REC_BYTE_INT_COUNT     0x1310
0106 #define KIRKWOOD_PLAY_BYTE_INT_COUNT        0x1314
0107 #define KIRKWOOD_BYTE_INT_COUNT_MASK        0xffffff
0108 
0109 #define KIRKWOOD_I2S_PLAYCTL            0x2508
0110 #define KIRKWOOD_I2S_RECCTL         0x2408
0111 #define KIRKWOOD_I2S_CTL_JUST_MASK      (0xf<<26)
0112 #define KIRKWOOD_I2S_CTL_LJ         (0<<26)
0113 #define KIRKWOOD_I2S_CTL_I2S            (5<<26)
0114 #define KIRKWOOD_I2S_CTL_RJ         (8<<26)
0115 #define KIRKWOOD_I2S_CTL_SIZE_MASK      (3<<30)
0116 #define KIRKWOOD_I2S_CTL_SIZE_16        (3<<30)
0117 #define KIRKWOOD_I2S_CTL_SIZE_20        (2<<30)
0118 #define KIRKWOOD_I2S_CTL_SIZE_24        (1<<30)
0119 #define KIRKWOOD_I2S_CTL_SIZE_32        (0<<30)
0120 
0121 #define KIRKWOOD_AUDIO_BUF_MAX          (16*1024*1024)
0122 
0123 /* Theses values come from the marvell alsa driver */
0124 /* need to find where they come from               */
0125 #define KIRKWOOD_SND_MIN_PERIODS        2
0126 #define KIRKWOOD_SND_MAX_PERIODS        16
0127 #define KIRKWOOD_SND_MIN_PERIOD_BYTES       256
0128 #define KIRKWOOD_SND_MAX_PERIOD_BYTES       0x8000
0129 #define KIRKWOOD_SND_MAX_BUFFER_BYTES       (KIRKWOOD_SND_MAX_PERIOD_BYTES \
0130                          * KIRKWOOD_SND_MAX_PERIODS)
0131 
0132 struct kirkwood_dma_data {
0133     void __iomem *io;
0134     struct clk *clk;
0135     struct clk *extclk;
0136     uint32_t ctl_play;
0137     uint32_t ctl_rec;
0138     struct snd_pcm_substream *substream_play;
0139     struct snd_pcm_substream *substream_rec;
0140     int irq;
0141     int burst;
0142 };
0143 
0144 extern const struct snd_soc_component_driver kirkwood_soc_component;
0145 
0146 #endif