1
0
Fork 0
forked from len0rd/rockbox

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:
Jens Arnold 2009-06-12 18:53:44 +00:00
parent 94823c65ac
commit 81b87fe13d
10 changed files with 74 additions and 327 deletions

View file

@ -588,22 +588,22 @@ target/coldfire/ata-as-coldfire.S
target/coldfire/pcf50606-coldfire.c
target/coldfire/iaudio/adc-iaudio.c
target/coldfire/iaudio/ata-iaudio.c
target/coldfire/iaudio/fmradio_i2c-iaudio.c
target/coldfire/iaudio/lcd-remote-as-iaudio.S
target/coldfire/iaudio/lcd-remote-iaudio.c
target/coldfire/iaudio/pcf50606-iaudio.c
target/coldfire/iaudio/power-x5m5.c
target/coldfire/iaudio/powermgmt-iaudio.c
target/coldfire/iaudio/system-iaudio.c
target/coldfire/iaudio/usb-iaudio.c
target/coldfire/iaudio/x5/backlight-x5.c
target/coldfire/iaudio/x5/button-x5.c
target/coldfire/iaudio/x5/ds2411-x5.c
target/coldfire/iaudio/x5/fmradio_i2c-x5.c
target/coldfire/iaudio/x5/lcd-as-x5.S
target/coldfire/iaudio/x5/lcd-x5.c
target/coldfire/iaudio/x5/m5636-x5.c
target/coldfire/iaudio/x5/power-x5.c
#ifndef BOOTLOADER
target/coldfire/iaudio/x5/audio-x5.c
target/coldfire/iaudio/audio-iaudio.c
#endif
#endif /* SIMULATOR */
#endif /* IAUDIO_X5 */
@ -614,19 +614,22 @@ target/coldfire/ata-as-coldfire.S
target/coldfire/pcf50606-coldfire.c
target/coldfire/iaudio/adc-iaudio.c
target/coldfire/iaudio/ata-iaudio.c
#ifdef HAVE_FMRADIO_IN /* FM radio mod */
target/coldfire/iaudio/fmradio_i2c-iaudio.c
#endif
target/coldfire/iaudio/lcd-remote-as-iaudio.S
target/coldfire/iaudio/lcd-remote-iaudio.c
target/coldfire/iaudio/m5/backlight-m5.c
target/coldfire/iaudio/m5/button-m5.c
target/coldfire/iaudio/m5/lcd-as-m5.S
target/coldfire/iaudio/m5/lcd-m5.c
target/coldfire/iaudio/m5/power-m5.c
target/coldfire/iaudio/pcf50606-iaudio.c
target/coldfire/iaudio/power-x5m5.c
target/coldfire/iaudio/powermgmt-iaudio.c
target/coldfire/iaudio/system-iaudio.c
target/coldfire/iaudio/usb-iaudio.c
#ifndef BOOTLOADER
target/coldfire/iaudio/m5/audio-m5.c
target/coldfire/iaudio/audio-iaudio.c
#endif
#endif /* SIMULATOR */
#endif /* IAUDIO_M5 */
@ -634,11 +637,11 @@ target/coldfire/iaudio/m5/audio-m5.c
#ifdef IAUDIO_M3
#ifndef SIMULATOR
target/coldfire/ata-as-coldfire.S
target/coldfire/iaudio/fmradio_i2c-iaudio.c
target/coldfire/iaudio/m3/adc-m3.c
target/coldfire/iaudio/m3/ata-m3.c
target/coldfire/iaudio/m3/backlight-m3.c
target/coldfire/iaudio/m3/button-m3.c
target/coldfire/iaudio/m3/fmradio_i2c-m3.c
target/coldfire/iaudio/m3/lcd-m3.c
target/coldfire/iaudio/m3/lcd-as-m3.S
target/coldfire/iaudio/m3/power-m3.c
@ -646,7 +649,7 @@ target/coldfire/iaudio/m3/powermgmt-m3.c
target/coldfire/iaudio/m3/system-m3.c
target/coldfire/iaudio/m3/usb-m3.c
#ifndef BOOTLOADER
target/coldfire/iaudio/m3/audio-m3.c
target/coldfire/iaudio/audio-iaudio.c
#endif
#endif /* SIMULATOR */
#endif /* IAUDIO_M3 */

View file

@ -16,7 +16,11 @@
/* Define bitmask of input sources - recordable bitmask can be defined
explicitly if different */
#ifdef HAVE_FMRADIO_IN /* FM modded M5 */
#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN | SRC_CAP_FMRADIO)
#else /* stock M5 */
#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN)
#endif
/* define the bitmask of hardware sample rates */
#define HW_SAMPR_CAPS (SAMPR_CAP_88 | SAMPR_CAP_44 | SAMPR_CAP_22 | SAMPR_CAP_11)
@ -109,6 +113,12 @@
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000
#ifdef HAVE_FMRADIO_IN /* FM modded M5 */
/* FM Tuner */
#define CONFIG_TUNER TEA5767
#define CONFIG_TUNER_XTAL 32768
#endif
#define HAVE_TLV320
/* TLV320 has no tone controls, so we use the software ones */

View file

@ -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 */

View file

@ -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 */

View file

@ -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 */

View file

@ -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");
}

View file

@ -66,8 +66,10 @@ void power_off(void)
asm("halt");
}
#if (CONFIG_TUNER & TEA5767)
bool tuner_power(bool status)
{
(void)status;
return true;
}
#endif

View file

@ -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

43
tools/configure vendored
View file

@ -321,12 +321,15 @@ whichadvanced () {
if [ "$memory" = "2" ]; then
printf ", (8)MB MOD"
fi
if [ "$modelname" = "h120" ]; then
printf ", (R)TC MOD"
fi
if [ "$t_model" = "ondio" ]; then
printf ", (B)acklight MOD"
fi
if [ "$modelname" = "m5" ]; then
printf ", (F)M radio MOD"
fi
if [ "$modelname" = "h120" ]; then
printf ", (R)TC MOD"
fi
echo ""
cont=1
@ -372,6 +375,22 @@ whichadvanced () {
cont=0
fi
;;
[Bb])
if [ "$t_model" = "ondio" ]; then
have_backlight="#define HAVE_BACKLIGHT"
echo "Backlight functions enabled"
else
cont=0
fi
;;
[Ff])
if [ "$modelname" = "m5" ]; then
have_fmradio_in="#define HAVE_FMRADIO_IN"
echo "FM radio functions enabled"
else
cont=0
fi
;;
[Rr])
if [ "$modelname" = "h120" ]; then
config_rtc="#define CONFIG_RTC RTC_DS1339_DS3231"
@ -381,14 +400,6 @@ whichadvanced () {
cont=0
fi
;;
[Bb])
if [ "$t_model" = "ondio" ]; then
have_backlight="#define HAVE_BACKLIGHT"
echo "Backlight functions enabled"
else
cont=0
fi
;;
*)
cont=0
;;
@ -2516,6 +2527,7 @@ sed > autoconf.h \
-e "s,@have_rtc_alarm@,$have_rtc_alarm,g" \
-e "s,@RBDIR@,${rbdir},g" \
-e "s,@have_backlight@,$have_backlight,g" \
-e "s,@have_fmradio_in@,$have_fmradio_in,g" \
<<EOF
/* This header was made by configure */
#ifndef __BUILD_AUTOCONF_H
@ -2527,13 +2539,16 @@ sed > autoconf.h \
/* Define this if you build rockbox to support the logf logging and display */
#undef ROCKBOX_HAS_LOGF
/* optional define for a backlight modded Ondio */
@have_backlight@
/* optional define for FM radio mod for iAudio M5 */
@have_fmradio_in@
/* optional defines for RTC mod for h1x0 */
@config_rtc@
@have_rtc_alarm@
/* optional define for a backlight modded Ondio */
@have_backlight@
/* root of Rockbox */
#define ROCKBOX_DIR "/@RBDIR@"