mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-09 21:25:19 -05:00
FS#9611 - Sansa Clip radio code. Commit final part which enables the LINE2 input that carries the analog radio signal on ams sansas.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19927 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
d8662489dc
commit
ea7f143096
4 changed files with 95 additions and 33 deletions
|
|
@ -31,6 +31,14 @@
|
||||||
#include "i2s.h"
|
#include "i2s.h"
|
||||||
#include "ascodec.h"
|
#include "ascodec.h"
|
||||||
|
|
||||||
|
/* AMS Sansas based on the AS3525 use the LINE2 input for the analog radio
|
||||||
|
signal instead of LINE1 */
|
||||||
|
#if CONFIG_CPU == AS3525
|
||||||
|
#define LINE_INPUT 2
|
||||||
|
#else
|
||||||
|
#define LINE_INPUT 1
|
||||||
|
#endif
|
||||||
|
|
||||||
const struct sound_settings_info audiohw_settings[] = {
|
const struct sound_settings_info audiohw_settings[] = {
|
||||||
[SOUND_VOLUME] = {"dB", 0, 1, -74, 6, -25},
|
[SOUND_VOLUME] = {"dB", 0, 1, -74, 6, -25},
|
||||||
/* HAVE_SW_TONE_CONTROLS */
|
/* HAVE_SW_TONE_CONTROLS */
|
||||||
|
|
@ -227,9 +235,13 @@ void audiohw_set_master_vol(int vol_l, int vol_r)
|
||||||
|
|
||||||
as3514_write_masked(AS3514_DAC_R, mix_r, AS3514_VOL_MASK);
|
as3514_write_masked(AS3514_DAC_R, mix_r, AS3514_VOL_MASK);
|
||||||
as3514_write_masked(AS3514_DAC_L, mix_l, AS3514_VOL_MASK);
|
as3514_write_masked(AS3514_DAC_L, mix_l, AS3514_VOL_MASK);
|
||||||
#ifdef HAVE_RECORDING
|
#if defined(HAVE_RECORDING) || defined(HAVE_FMRADIO_IN)
|
||||||
as3514_write_masked(AS3514_LINE_IN1_R, mix_r, AS3514_VOL_MASK);
|
as3514_write_masked((LINE_INPUT == 1) ? AS3514_LINE_IN1_R :
|
||||||
as3514_write_masked(AS3514_LINE_IN1_L, mix_l, AS3514_VOL_MASK);
|
AS3514_LINE_IN2_R,
|
||||||
|
mix_r, AS3514_VOL_MASK);
|
||||||
|
as3514_write_masked((LINE_INPUT == 1) ? AS3514_LINE_IN1_L :
|
||||||
|
AS3514_LINE_IN2_L,
|
||||||
|
mix_l, AS3514_VOL_MASK);
|
||||||
#endif
|
#endif
|
||||||
as3514_write_masked(AS3514_HPH_OUT_R, hph_r, AS3514_VOL_MASK);
|
as3514_write_masked(AS3514_HPH_OUT_R, hph_r, AS3514_VOL_MASK);
|
||||||
as3514_write_masked(AS3514_HPH_OUT_L, hph_l, AS3514_VOL_MASK);
|
as3514_write_masked(AS3514_HPH_OUT_L, hph_l, AS3514_VOL_MASK);
|
||||||
|
|
@ -237,10 +249,8 @@ void audiohw_set_master_vol(int vol_l, int vol_r)
|
||||||
|
|
||||||
void audiohw_set_lineout_vol(int vol_l, int vol_r)
|
void audiohw_set_lineout_vol(int vol_l, int vol_r)
|
||||||
{
|
{
|
||||||
as3514_write_masked(AS3514_LINE_OUT_R, vol_r,
|
as3514_write_masked(AS3514_LINE_OUT_R, vol_r, AS3514_VOL_MASK);
|
||||||
AS3514_VOL_MASK);
|
as3514_write_masked(AS3514_LINE_OUT_L, vol_l, AS3514_VOL_MASK);
|
||||||
as3514_write_masked(AS3514_LINE_OUT_L, vol_l,
|
|
||||||
AS3514_VOL_MASK);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void audiohw_mute(bool mute)
|
void audiohw_mute(bool mute)
|
||||||
|
|
@ -286,19 +296,24 @@ void audiohw_enable_recording(bool source_mic)
|
||||||
as3514_write_masked(AS3514_ADC_R, ADC_R_ADCMUX_ST_MIC,
|
as3514_write_masked(AS3514_ADC_R, ADC_R_ADCMUX_ST_MIC,
|
||||||
ADC_R_ADCMUX);
|
ADC_R_ADCMUX);
|
||||||
|
|
||||||
/* MIC1_on, LIN1_off */
|
/* MIC1_on, others off */
|
||||||
as3514_write_masked(AS3514_AUDIOSET1, AUDIOSET1_MIC1_on,
|
as3514_write_masked(AS3514_AUDIOSET1, AUDIOSET1_MIC1_on,
|
||||||
AUDIOSET1_MIC1_on | AUDIOSET1_LIN1_on);
|
AUDIOSET1_INPUT_MASK);
|
||||||
|
|
||||||
/* M1_AGC_off */
|
/* M1_AGC_off */
|
||||||
as3514_clear(AS3514_MIC1_R, MIC1_R_M1_AGC_off);
|
as3514_clear(AS3514_MIC1_R, MIC1_R_M1_AGC_off);
|
||||||
} else {
|
} else {
|
||||||
/* ADCmux = Line_IN1 */
|
/* ADCmux = Line_IN1 or Line_IN2 */
|
||||||
as3514_write_masked(AS3514_ADC_R, ADC_R_ADCMUX_LINE_IN1,
|
as3514_write_masked(AS3514_ADC_R,
|
||||||
|
(LINE_INPUT == 1) ? ADC_R_ADCMUX_LINE_IN1 :
|
||||||
|
ADC_R_ADCMUX_LINE_IN2,
|
||||||
ADC_R_ADCMUX);
|
ADC_R_ADCMUX);
|
||||||
|
|
||||||
/* MIC1_off, LIN1_on */
|
/* LIN1_or LIN2 on, rest off */
|
||||||
as3514_write_masked(AS3514_AUDIOSET1, AUDIOSET1_LIN1_on,
|
as3514_write_masked(AS3514_AUDIOSET1,
|
||||||
AUDIOSET1_MIC1_on | AUDIOSET1_LIN1_on);
|
(LINE_INPUT == 1) ? AUDIOSET1_LIN1_on :
|
||||||
|
AUDIOSET1_LIN2_on,
|
||||||
|
AUDIOSET1_INPUT_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ADC_Mute_off */
|
/* ADC_Mute_off */
|
||||||
|
|
@ -312,10 +327,8 @@ void audiohw_disable_recording(void)
|
||||||
/* ADC_Mute_on */
|
/* ADC_Mute_on */
|
||||||
as3514_clear(AS3514_ADC_L, ADC_L_ADC_MUTE_off);
|
as3514_clear(AS3514_ADC_L, ADC_L_ADC_MUTE_off);
|
||||||
|
|
||||||
/* ADC_off, LIN1_off, MIC_off */
|
/* ADC_off, all input sources off */
|
||||||
as3514_clear(AS3514_AUDIOSET1,
|
as3514_clear(AS3514_AUDIOSET1, AUDIOSET1_ADC_on | AUDIOSET1_INPUT_MASK);
|
||||||
AUDIOSET1_ADC_on | AUDIOSET1_LIN1_on |
|
|
||||||
AUDIOSET1_MIC1_on);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -366,22 +379,35 @@ void audiohw_set_recvol(int left, int right, int type)
|
||||||
as3514_write_masked(AS3514_ADC_R, right, AS3514_VOL_MASK);
|
as3514_write_masked(AS3514_ADC_R, right, AS3514_VOL_MASK);
|
||||||
as3514_write_masked(AS3514_ADC_L, left, AS3514_VOL_MASK);
|
as3514_write_masked(AS3514_ADC_L, left, AS3514_VOL_MASK);
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_RECORDING */
|
||||||
|
|
||||||
|
#if defined(HAVE_RECORDING) || defined(HAVE_FMRADIO_IN)
|
||||||
/**
|
/**
|
||||||
* Enable line in 1 analog monitoring
|
* Enable line in analog monitoring
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void audiohw_set_monitor(bool enable)
|
void audiohw_set_monitor(bool enable)
|
||||||
{
|
{
|
||||||
if (enable) {
|
if (enable) {
|
||||||
as3514_set(AS3514_AUDIOSET1, AUDIOSET1_LIN1_on);
|
/* select either LIN1 or LIN2 */
|
||||||
as3514_set(AS3514_LINE_IN1_R, LINE_IN1_R_LI1R_MUTE_off);
|
as3514_write_masked(AS3514_AUDIOSET1,
|
||||||
as3514_set(AS3514_LINE_IN1_L, LINE_IN1_L_LI1L_MUTE_off);
|
(LINE_INPUT == 1) ?
|
||||||
|
AUDIOSET1_LIN1_on : AUDIOSET1_LIN2_on,
|
||||||
|
AUDIOSET1_LIN1_on | AUDIOSET1_LIN2_on);
|
||||||
|
as3514_set((LINE_INPUT == 1) ? AS3514_LINE_IN1_R : AS3514_LINE_IN2_R,
|
||||||
|
LINE_IN1_R_LI1R_MUTE_off);
|
||||||
|
as3514_set((LINE_INPUT == 1) ? AS3514_LINE_IN1_L : AS3514_LINE_IN2_L,
|
||||||
|
LINE_IN1_L_LI1L_MUTE_off);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
as3514_clear(AS3514_AUDIOSET1, AUDIOSET1_LIN1_on);
|
/* turn off both LIN1 and LIN2 */
|
||||||
as3514_clear(AS3514_LINE_IN1_R, LINE_IN1_R_LI1R_MUTE_off);
|
as3514_clear(AS3514_LINE_IN1_R, LINE_IN1_R_LI1R_MUTE_off);
|
||||||
as3514_clear(AS3514_LINE_IN1_L, LINE_IN1_L_LI1L_MUTE_off);
|
as3514_clear(AS3514_LINE_IN1_L, LINE_IN1_L_LI1L_MUTE_off);
|
||||||
|
as3514_clear(AS3514_LINE_IN2_R, LINE_IN2_R_LI2R_MUTE_off);
|
||||||
|
as3514_clear(AS3514_LINE_IN2_L, LINE_IN2_L_LI2L_MUTE_off);
|
||||||
|
as3514_clear(AS3514_AUDIOSET1, AUDIOSET1_LIN1_on | AUDIOSET1_LIN2_on);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* HAVE_RECORDING */
|
#endif /* HAVE_RECORDING || HAVE_FMRADIO_IN */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -202,6 +202,8 @@ extern void audiohw_set_lineout_vol(int vol_l, int vol_r);
|
||||||
#define AUDIOSET1_LIN1_on (0x1 << 2)
|
#define AUDIOSET1_LIN1_on (0x1 << 2)
|
||||||
#define AUDIOSET1_MIC2_on (0x1 << 1)
|
#define AUDIOSET1_MIC2_on (0x1 << 1)
|
||||||
#define AUDIOSET1_MIC1_on (0x1 << 0)
|
#define AUDIOSET1_MIC1_on (0x1 << 0)
|
||||||
|
#define AUDIOSET1_INPUT_MASK AUDIOSET1_MIC1_on | AUDIOSET1_MIC2_on | \
|
||||||
|
AUDIOSET1_LIN1_on | AUDIOSET1_LIN2_on
|
||||||
|
|
||||||
/* AUDIOSET2 (15h) */
|
/* AUDIOSET2 (15h) */
|
||||||
#define AUDIOSET2_BIAS_off (0x1 << 7)
|
#define AUDIOSET2_BIAS_off (0x1 << 7)
|
||||||
|
|
|
||||||
|
|
@ -272,14 +272,17 @@ void audiohw_disable_recording(void);
|
||||||
*/
|
*/
|
||||||
void audiohw_set_recvol(int left, int right, int type);
|
void audiohw_set_recvol(int left, int right, int type);
|
||||||
|
|
||||||
|
#endif /*HAVE_RECORDING*/
|
||||||
|
|
||||||
|
#if defined(HAVE_RECORDING) || defined(HAVE_FMRADIO_IN)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable or disable recording monitor.
|
* Enable or disable recording monitor.
|
||||||
* @param enable ture or false.
|
* @param enable ture or false.
|
||||||
*/
|
*/
|
||||||
void audiohw_set_monitor(bool enable);
|
void audiohw_set_monitor(bool enable);
|
||||||
|
|
||||||
#endif /*HAVE_RECORDING*/
|
#endif /* HAVE_RECORDING || HAVE_FMRADIO_IN */
|
||||||
|
|
||||||
|
|
||||||
#if CONFIG_CODEC != SWCODEC
|
#if CONFIG_CODEC != SWCODEC
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
* \/ \/ \/ \/ \/
|
* \/ \/ \/ \/ \/
|
||||||
* $Id$
|
* $Id$
|
||||||
*
|
*
|
||||||
* Copyright © 2008 Rafaël Carré
|
* Copyright (C) 2009 by Bertrik Sikken
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
|
@ -18,20 +18,51 @@
|
||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
#include "config.h"
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
|
#include "audiohw.h"
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
|
|
||||||
/* TODO */
|
int audio_channels = 2;
|
||||||
|
int audio_output_source = AUDIO_SRC_PLAYBACK;
|
||||||
|
|
||||||
void audio_set_output_source(int source)
|
void audio_set_output_source(int source)
|
||||||
{
|
{
|
||||||
(void)source;
|
if ((unsigned)source >= AUDIO_NUM_SOURCES)
|
||||||
}
|
source = AUDIO_SRC_PLAYBACK;
|
||||||
|
|
||||||
|
audio_output_source = source;
|
||||||
|
} /* audio_set_output_source */
|
||||||
|
|
||||||
void audio_input_mux(int source, unsigned flags)
|
void audio_input_mux(int source, unsigned flags)
|
||||||
{
|
{
|
||||||
(void)source;
|
static int last_source = AUDIO_SRC_PLAYBACK;
|
||||||
|
|
||||||
(void)flags;
|
(void)flags;
|
||||||
}
|
|
||||||
|
switch (source)
|
||||||
|
{
|
||||||
|
default: /* playback - no recording */
|
||||||
|
source = AUDIO_SRC_PLAYBACK;
|
||||||
|
case AUDIO_SRC_PLAYBACK:
|
||||||
|
audio_channels = 2;
|
||||||
|
if (source != last_source)
|
||||||
|
{
|
||||||
|
audiohw_set_monitor(false);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case AUDIO_SRC_FMRADIO: /* recording and playback */
|
||||||
|
audio_channels = 2;
|
||||||
|
if (source == last_source)
|
||||||
|
break;
|
||||||
|
|
||||||
|
audiohw_set_monitor(true);
|
||||||
|
break;
|
||||||
|
} /* end switch */
|
||||||
|
|
||||||
|
last_source = source;
|
||||||
|
} /* audio_input_mux */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue