e61e9c61d0
* SOUND_x enum can be generated by audiohw_settings.h along with settings entries and sound_val2phys. * VOLUME_MIN and VOLUME_MAX are no longer necessary within sound.c. If you need them, they are for target-defined purposes. * Fix up SDL volume implementation in sdl.c. Move sim volume calculation code to pcm-sdl.c. * Min trigger tresholds were based upon VOLUME_MIN for some reason. These setting have nothing to do with playback volume. Since it is no longer present, set these at -89dB which is the minimum peak meter sensitivity setting. * Fix an oversight in wm8758.c. I forgot to add the dB->register conversion to audiohw_set_volume. Change-Id: Ie1df33f1793eee75e6793f16bc7bddd16edb7f75
170 lines
5.4 KiB
C
170 lines
5.4 KiB
C
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
* $Id$
|
|
*
|
|
* Driver for internal Rockchip rk27xx audio codec
|
|
* (shCODlp-100.01-HD IP core from Dolphin)
|
|
*
|
|
* Copyright (c) 2011 Marcin Bukat
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
****************************************************************************/
|
|
#ifndef _RK27XX_CODEC_H_
|
|
#define _RK27XX_CODEC_H_
|
|
|
|
#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | LIN_GAIN_CAP | MIC_GAIN_CAP)
|
|
|
|
AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -34, 4, -25)
|
|
#ifdef HAVE_RECORDING /* disabled for now */
|
|
AUDIOHW_SETTING(LEFT_GAIN, "dB", 2, 75, -1725, 3000, 0)
|
|
AUDIOHW_SETTING(RIGHT_GAIN, "dB", 2, 75, -1725, 3000, 0)
|
|
AUDIOHW_SETTING(MIC_GAIN, "dB", 0, 1, 0, 20, 20)
|
|
#endif /* HAVE_RECORDING */
|
|
|
|
#define CODEC_I2C_ADDR 0x4e
|
|
|
|
/* registers */
|
|
#define AICR 0x00 /* Audio Interface Control */
|
|
#define DAC_SERIAL (1<<3)
|
|
#define ADC_SERIAL (1<<2)
|
|
#define DAC_I2S (1<<1)
|
|
#define ADC_I2S (1<<0)
|
|
|
|
#define CR1 0x02 /* Control Register 1 */
|
|
#define SB_MICBIAS (1<<7)
|
|
#define CR1_MONO (1<<6)
|
|
#define DAC_MUTE (1<<5)
|
|
#define HP_DIS (1<<4)
|
|
#define DACSEL (1<<3)
|
|
#define BYPASS1 (1<<2)
|
|
#define BYPASS2 (1<<1)
|
|
#define SIDETONE (1<<0)
|
|
|
|
#define CR2 0x04 /* Control Register 2 */
|
|
#define DAC_DEEMP (1<<7)
|
|
#define ADC_HPF (1<<2)
|
|
#define INSEL_MIX (3<<0)
|
|
#define INSEL_MIC (2<<0)
|
|
#define INSEL_LINE2 (1<<0)
|
|
#define INSEL_LINE1 (0<<0)
|
|
|
|
#define CCR1 0x06 /* Control Clock Register 1 */
|
|
#define CRYSTAL_16M (1<<0)
|
|
#define CRYSTAL_12M (0<<0)
|
|
|
|
#define CCR2 0x08 /* Control Clock Register 2 */
|
|
#define FREQ8000 0x0a
|
|
#define FREQ9600 0x09
|
|
#define FREQ11025 0x08
|
|
#define FREQ12000 0x07
|
|
#define FREQ16000 0x06
|
|
#define FREQ22050 0x05
|
|
#define FREQ24000 0x04
|
|
#define FREQ32000 0x03
|
|
#define FREQ44100 0x02
|
|
#define FREQ48000 0x01
|
|
#define FREQ96000 0x00
|
|
|
|
#define PMR1 0x0a /* Power Mode Register 1 */
|
|
#define SB_DAC (1<<7)
|
|
#define SB_OUT (1<<6)
|
|
#define SB_MIX (1<<5)
|
|
#define SB_ADC (1<<4)
|
|
#define SB_IN1 (1<<3)
|
|
#define SB_IN2 (1<<2)
|
|
#define SB_MIC (1<<1)
|
|
#define SB_IND (1<<0)
|
|
|
|
#define PMR2 0x0c /* Power Mode Register 1 */
|
|
#define LRGI (1<<7)
|
|
#define RLGI (1<<6)
|
|
#define LRGOD (1<<5)
|
|
#define RLGOD (1<<4)
|
|
#define GIM (1<<3)
|
|
#define SB_MC (1<<2)
|
|
#define SB (1<<1)
|
|
#define SB_SLEEP (1<<0)
|
|
|
|
#define CRR 0x0e /* Control Ramp Register */
|
|
#define RATIO_8 (3<<5)
|
|
#define RATIO_4 (2<<5)
|
|
#define RATIO_2 (1<<5)
|
|
#define RATIO_1 (0<<5)
|
|
#define KFAST_32 (5<<2)
|
|
#define KFAST_16 (4<<2)
|
|
#define KFAST_8 (3<<2)
|
|
#define KFAST_4 (2<<2)
|
|
#define KFAST_2 (1<<2)
|
|
#define KFAST_1 (0<<2)
|
|
#define THRESHOLD_128 (3<<0)
|
|
#define THRESHOLD_64 (2<<0)
|
|
#define THRESHOLD_32 (1<<0)
|
|
#define THRESHOLD_0 (0<<0)
|
|
|
|
#define ICR 0x10 /* Interrupt Control Register */
|
|
#define IRQ_LOW_PULSE (3<<6)
|
|
#define IRQ_HIGH_PULSE (2<<6)
|
|
#define IRQ_LOW (1<<6)
|
|
#define IRQ_HIGH (0<<6)
|
|
#define JACK_MASK (1<<5)
|
|
#define CCMC_MASK (1<<4)
|
|
#define RUD_MASK (1<<3)
|
|
#define RDD_MASK (1<<2)
|
|
#define GUD_MASK (1<<1)
|
|
#define GDD_MASK (1<<0)
|
|
|
|
#define IFR 0x12 /* Interrupt Flag Register */
|
|
#define JACK (1<<6)
|
|
#define JACK_EVENT (1<<5)
|
|
#define CCMC (1<<4)
|
|
#define RAMP_UP_DONE (1<<3)
|
|
#define RAMP_DOWN_DONE (1<<2)
|
|
#define GAIN_UP_DONE (1<<1)
|
|
#define GAIN_DOWN_DONE (1<<0)
|
|
|
|
#define CGR1 0x14 /* Control Gain Register 1 (DAC mixing) */
|
|
|
|
#define CGR2 0x16 /* Control Gain Register 2 (LINE1 mixing) */
|
|
#define LRGOB1 (1<<7)
|
|
#define RLGOB1 (1<<6)
|
|
|
|
#define CGR3 0x18 /* Control Gain Register 3 (LINE1 mixing) */
|
|
|
|
#define CGR4 0x1a /* Control Gain Register 4 (LINE2 mixing) */
|
|
#define LRGOB2 (1<<7)
|
|
#define RLGOB2 (1<<6)
|
|
|
|
#define CGR5 0x1c /* Control Gain Register 5 (LINE2 mixing) */
|
|
|
|
#define CGR6 0x1e /* Control Gain Register 6 (MIC mixing) */
|
|
#define LRGOS (1<<7)
|
|
#define RLGOS (1<<6)
|
|
|
|
#define CGR7 0x20 /* Control Gain Register 7 (MIC mixing) */
|
|
|
|
#define CGR8 0x22 /* Control Gain Register 8 (OUT STAGE gain) */
|
|
#define LRGO (1<<7)
|
|
#define RLGO (1<<6)
|
|
|
|
#define CGR9 0x24 /* Control Gain Register 9 (OUT STAGE gain) */
|
|
|
|
#define CGR10 0x26 /* Control Gain Register 10 (ADC input gain) */
|
|
|
|
#define TR1 0x28 /* undocumented */
|
|
#define NOSC (1<<1)
|
|
|
|
#define TR2 0x2a /* undocumented */
|
|
|
|
#endif /* _RK27XX_CODEC_H_ */
|