mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-11-09 13:12:37 -05:00
Add iAudio M5 FM radio mod to the advanced build options. * Unify iAudio audio driver, fmradio i2c driver, and power driver (M5 + X5 only).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21264 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
94823c65ac
commit
81b87fe13d
10 changed files with 74 additions and 327 deletions
|
|
@ -18,6 +18,7 @@
|
|||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
#include "config.h"
|
||||
#include "system.h"
|
||||
#include "cpu.h"
|
||||
#include "audio.h"
|
||||
|
|
@ -41,9 +42,13 @@ void audio_input_mux(int source, unsigned flags)
|
|||
{
|
||||
/* Prevent pops from unneeded switching */
|
||||
static int last_source = AUDIO_SRC_PLAYBACK;
|
||||
#ifdef HAVE_FMRADIO_IN
|
||||
static bool last_recording = false;
|
||||
|
||||
bool recording = flags & SRCF_RECORDING;
|
||||
#else
|
||||
(void)flags;
|
||||
#endif
|
||||
|
||||
switch (source)
|
||||
{
|
||||
|
|
@ -76,6 +81,7 @@ void audio_input_mux(int source, unsigned flags)
|
|||
}
|
||||
break;
|
||||
|
||||
#ifdef HAVE_FMRADIO_IN
|
||||
case AUDIO_SRC_FMRADIO: /* recording and playback */
|
||||
if (!recording)
|
||||
audiohw_set_recvol(23, 23, AUDIO_GAIN_LINEIN);
|
||||
|
|
@ -99,17 +105,34 @@ void audio_input_mux(int source, unsigned flags)
|
|||
coldfire_set_dataincontrol(0);
|
||||
}
|
||||
break;
|
||||
#endif /* HAVE_FMRADIO_IN */
|
||||
} /* end switch */
|
||||
|
||||
/* set line multiplexer */
|
||||
#ifdef IAUDIO_M3
|
||||
#ifdef HAVE_FMRADIO_IN
|
||||
if (source == AUDIO_SRC_FMRADIO)
|
||||
and_l(~(1 << 25), &GPIO1_OUT); /* FM radio */
|
||||
else
|
||||
#endif
|
||||
or_l((1 << 25), &GPIO1_OUT); /* Line In */
|
||||
|
||||
or_l((1 << 25), &GPIO1_ENABLE);
|
||||
or_l((1 << 25), &GPIO1_FUNCTION);
|
||||
|
||||
#else /* iAudio M5, X5 */
|
||||
#ifdef HAVE_FMRADIO_IN
|
||||
if (source == AUDIO_SRC_FMRADIO)
|
||||
and_l(~(1 << 29), &GPIO_OUT); /* FM radio */
|
||||
else
|
||||
#endif
|
||||
or_l((1 << 29), &GPIO_OUT); /* Line In */
|
||||
|
||||
or_l((1 << 29), &GPIO_ENABLE);
|
||||
or_l((1 << 29), &GPIO_FUNCTION);
|
||||
|
||||
#endif /* iAudio M5, X5 */
|
||||
|
||||
last_source = source;
|
||||
} /* audio_input_mux */
|
||||
|
||||
|
|
@ -1,116 +0,0 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2006 by Michael Sevakis
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#include "system.h"
|
||||
#include "cpu.h"
|
||||
#include "audio.h"
|
||||
#include "sound.h"
|
||||
|
||||
void audio_set_output_source(int source)
|
||||
{
|
||||
int level = set_irq_level(DMA_IRQ_LEVEL);
|
||||
unsigned long txsrc;
|
||||
|
||||
if ((unsigned)source >= AUDIO_NUM_SOURCES)
|
||||
txsrc = (3 << 8); /* playback, PDOR3 */
|
||||
else
|
||||
txsrc = (4 << 8); /* recording, iis1RcvData */
|
||||
|
||||
IIS1CONFIG = (IIS1CONFIG & ~(7 << 8)) | txsrc;
|
||||
restore_irq(level);
|
||||
} /* audio_set_output_source */
|
||||
|
||||
void audio_input_mux(int source, unsigned flags)
|
||||
{
|
||||
/* Prevent pops from unneeded switching */
|
||||
static int last_source = AUDIO_SRC_PLAYBACK;
|
||||
static bool last_recording = false;
|
||||
|
||||
bool recording = flags & SRCF_RECORDING;
|
||||
|
||||
switch (source)
|
||||
{
|
||||
default: /* playback - no recording */
|
||||
source = AUDIO_SRC_PLAYBACK;
|
||||
case AUDIO_SRC_PLAYBACK:
|
||||
if (source != last_source)
|
||||
{
|
||||
audiohw_disable_recording();
|
||||
audiohw_set_monitor(false);
|
||||
coldfire_set_dataincontrol(0);
|
||||
}
|
||||
break;
|
||||
|
||||
case AUDIO_SRC_MIC: /* recording only */
|
||||
if (source != last_source)
|
||||
{
|
||||
audiohw_enable_recording(true); /* source mic */
|
||||
/* Int. when 6 samples in FIFO, PDIR2 src = iis1RcvData */
|
||||
coldfire_set_dataincontrol((3 << 14) | (4 << 3));
|
||||
}
|
||||
break;
|
||||
|
||||
case AUDIO_SRC_LINEIN: /* recording only */
|
||||
if (source != last_source)
|
||||
{
|
||||
audiohw_enable_recording(false); /* source line */
|
||||
/* Int. when 6 samples in FIFO, PDIR2 src = iis1RcvData */
|
||||
coldfire_set_dataincontrol((3 << 14) | (4 << 3));
|
||||
}
|
||||
break;
|
||||
|
||||
case AUDIO_SRC_FMRADIO: /* recording and playback */
|
||||
if (!recording)
|
||||
audiohw_set_recvol(23, 23, AUDIO_GAIN_LINEIN);
|
||||
|
||||
/* I2S recording and analog playback */
|
||||
if (source == last_source && recording == last_recording)
|
||||
break;
|
||||
|
||||
last_recording = recording;
|
||||
|
||||
if (recording)
|
||||
{
|
||||
/* Int. when 6 samples in FIFO, PDIR2 src = iis1RcvData */
|
||||
coldfire_set_dataincontrol((3 << 14) | (4 << 3));
|
||||
audiohw_enable_recording(false); /* source line */
|
||||
}
|
||||
else
|
||||
{
|
||||
audiohw_disable_recording();
|
||||
audiohw_set_monitor(true); /* analog bypass */
|
||||
coldfire_set_dataincontrol(0);
|
||||
}
|
||||
break;
|
||||
} /* end switch */
|
||||
|
||||
/* set line multiplexer */
|
||||
if (source == AUDIO_SRC_FMRADIO)
|
||||
and_l(~(1 << 25), &GPIO1_OUT); /* FM radio */
|
||||
else
|
||||
or_l((1 << 25), &GPIO1_OUT); /* Line In */
|
||||
|
||||
or_l((1 << 25), &GPIO1_ENABLE);
|
||||
or_l((1 << 25), &GPIO1_FUNCTION);
|
||||
|
||||
last_source = source;
|
||||
} /* audio_input_mux */
|
||||
|
||||
|
|
@ -1,84 +0,0 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2006 by Michael Sevakis
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
#include "system.h"
|
||||
#include "cpu.h"
|
||||
#include "audio.h"
|
||||
#include "sound.h"
|
||||
|
||||
void audio_set_output_source(int source)
|
||||
{
|
||||
int level = set_irq_level(DMA_IRQ_LEVEL);
|
||||
unsigned long txsrc;
|
||||
|
||||
if ((unsigned)source >= AUDIO_NUM_SOURCES)
|
||||
txsrc = (3 << 8); /* playback, PDOR3 */
|
||||
else
|
||||
txsrc = (4 << 8); /* recording, iis1RcvData */
|
||||
|
||||
IIS1CONFIG = (IIS1CONFIG & ~(7 << 8)) | txsrc;
|
||||
restore_irq(level);
|
||||
} /* audio_set_output_source */
|
||||
|
||||
void audio_input_mux(int source, unsigned flags)
|
||||
{
|
||||
/* Prevent pops from unneeded switching */
|
||||
static int last_source = AUDIO_SRC_PLAYBACK;
|
||||
|
||||
(void)flags;
|
||||
|
||||
switch (source)
|
||||
{
|
||||
default: /* playback - no recording */
|
||||
source = AUDIO_SRC_PLAYBACK;
|
||||
case AUDIO_SRC_PLAYBACK:
|
||||
if (source != last_source)
|
||||
{
|
||||
audiohw_disable_recording();
|
||||
audiohw_set_monitor(false);
|
||||
coldfire_set_dataincontrol(0);
|
||||
}
|
||||
break;
|
||||
|
||||
case AUDIO_SRC_MIC: /* recording only */
|
||||
if (source != last_source)
|
||||
{
|
||||
audiohw_enable_recording(true); /* source mic */
|
||||
/* Int. when 6 samples in FIFO, PDIR2 src = iis1RcvData */
|
||||
coldfire_set_dataincontrol((3 << 14) | (4 << 3));
|
||||
}
|
||||
break;
|
||||
|
||||
case AUDIO_SRC_LINEIN: /* recording only */
|
||||
if (source != last_source)
|
||||
{
|
||||
audiohw_enable_recording(false); /* source line */
|
||||
/* Int. when 6 samples in FIFO, PDIR2 src = iis1RcvData */
|
||||
coldfire_set_dataincontrol((3 << 14) | (4 << 3));
|
||||
}
|
||||
break;
|
||||
} /* end switch */
|
||||
|
||||
or_l((1 << 29), &GPIO_OUT); /* Line In */
|
||||
or_l((1 << 29), &GPIO_ENABLE);
|
||||
or_l((1 << 29), &GPIO_FUNCTION);
|
||||
|
||||
last_source = source;
|
||||
} /* audio_input_mux */
|
||||
|
|
@ -1,67 +0,0 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2006 by Linus Nielsen Feltzing
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
#include "config.h"
|
||||
#include "cpu.h"
|
||||
#include <stdbool.h>
|
||||
#include "kernel.h"
|
||||
#include "system.h"
|
||||
#include "power.h"
|
||||
#include "pcf50606.h"
|
||||
#include "lcd-remote-target.h"
|
||||
|
||||
void power_init(void)
|
||||
{
|
||||
/* Charger detect */
|
||||
and_l(~0x01000000, &GPIO1_ENABLE);
|
||||
or_l(0x01000000, &GPIO1_FUNCTION);
|
||||
|
||||
pcf50606_init();
|
||||
}
|
||||
|
||||
unsigned int power_input_status(void)
|
||||
{
|
||||
return (GPIO1_READ & 0x01000000) ?
|
||||
POWER_INPUT_MAIN_CHARGER : POWER_INPUT_NONE;
|
||||
}
|
||||
|
||||
void ide_power_enable(bool on)
|
||||
{
|
||||
/* GPOOD3 */
|
||||
int level = disable_irq_save();
|
||||
pcf50606_write(0x3c, on ? 0x07 : 0x00);
|
||||
restore_irq(level);
|
||||
}
|
||||
|
||||
bool ide_powered(void)
|
||||
{
|
||||
int level = disable_irq_save();
|
||||
int value = pcf50606_read(0x3c);
|
||||
restore_irq(level);
|
||||
return (value & 0x07) != 0;
|
||||
}
|
||||
|
||||
void power_off(void)
|
||||
{
|
||||
lcd_remote_poweroff();
|
||||
set_irq_level(DISABLE_INTERRUPTS);
|
||||
and_l(~0x00000008, &GPIO_OUT); /* Set KEEPACT low */
|
||||
asm("halt");
|
||||
}
|
||||
|
|
@ -66,8 +66,10 @@ void power_off(void)
|
|||
asm("halt");
|
||||
}
|
||||
|
||||
#if (CONFIG_TUNER & TEA5767)
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
(void)status;
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
* Physical interface of the Philips TEA5767 in iAudio x5
|
||||
*
|
||||
* Copyright (C) 2002 by Linus Nielsen Feltzing
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
#include "config.h"
|
||||
|
||||
#if (CONFIG_TUNER & TEA5767)
|
||||
|
||||
#include "i2c-coldfire.h"
|
||||
|
||||
int fmradio_i2c_write(unsigned char address, const unsigned char* buf,
|
||||
int count)
|
||||
{
|
||||
return i2c_write(I2C_IFACE_0, address, buf, count);
|
||||
}
|
||||
|
||||
int fmradio_i2c_read(unsigned char address, unsigned char* buf, int count)
|
||||
{
|
||||
return i2c_read(I2C_IFACE_0, address, buf, count);
|
||||
}
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue