1
0
Fork 0
forked from len0rd/rockbox

Do some planned radio interface cleanup since adding in the LV24020LP.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13880 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michael Sevakis 2007-07-14 11:20:31 +00:00
parent b51a20fb9b
commit 7d759f6b9c
23 changed files with 563 additions and 402 deletions

View file

@ -245,6 +245,11 @@
#define CONFIG_REMOTE_DEFAULT_ICON_WIDTH 6
#endif
#if (CONFIG_TUNER & (CONFIG_TUNER - 1)) != 0
/* Multiple possible tuners */
#define CONFIG_TUNER_MULTI
#endif
/* Enable the directory cache and tagcache in RAM if we have
* plenty of RAM. Both features can be enabled independently. */
#if ((defined(MEMORYSIZE) && (MEMORYSIZE > 8)) || MEM > 8) && \

View file

@ -46,4 +46,11 @@
bool is_new_player(void);
#endif
#ifdef CONFIG_TUNER_MULTI
static inline int tuner_detect_type(void)
{
return (HW_MASK & TUNER_MODEL) ? TEA5767 : S1A0903X01;
}
#endif
#endif /* HWCOMPAT_H */

View file

@ -0,0 +1,51 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
* Tuner header for the Sanyo LV24020LP
*
* Copyright (C) 2007 Michael Sevakis
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#ifndef _LV24020LP_H_
#define _LV24020LP_H_
/* Define additional tuner messages here */
#define HAVE_RADIO_REGION
#define LV24020LP_CTRL_STAT (RADIO_GET_CHIP_FIRST+0)
#define LV24020LP_REG_STAT (RADIO_GET_CHIP_FIRST+1)
#define LV24020LP_MSS_FM (RADIO_GET_CHIP_FIRST+2)
#define LV24020LP_MSS_IF (RADIO_GET_CHIP_FIRST+3)
#define LV24020LP_MSS_SD (RADIO_GET_CHIP_FIRST+4)
#define LV24020LP_IF_SET (RADIO_GET_CHIP_FIRST+5)
#define LV24020LP_SD_SET (RADIO_GET_CHIP_FIRST+6)
struct lv24020lp_region_data
{
unsigned char deemphasis;
} __attribute__((packed));
const unsigned char lv24020lp_region_data[TUNER_NUM_REGIONS];
int lv24020lp_set(int setting, int value);
int lv24020lp_get(int setting);
void lv24020lp_power(bool status);
#ifndef CONFIG_TUNER_MULTI
#define tuner_set lv24020lp_set
#define tuner_get lv24020lp_get
#endif
#endif /* _LV24020LP_H_ */

View file

@ -48,8 +48,8 @@ bool spdif_powered(void);
#endif
#if CONFIG_TUNER
extern bool radio_power(bool status);
extern bool radio_powered(void);
extern bool tuner_power(bool status);
extern bool tuner_powered(void);
#endif
#endif

View file

@ -0,0 +1,40 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
* Tuner header for the Samsung S1A0903X01
*
* Copyright (C) 2007 Michael Sevakis
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#ifndef _S1A0903X01_H_
#define _S1A0903X01_H_
/* Define additional tuner messages here */
#define HAVE_RADIO_MUTE_TIMEOUT
#if 0
#define S1A0903X01_IF_MEASUREMENT (RADIO_SET_CHIP_FIRST+0)
#define S1A0903X01_SENSITIVITY (RADIO_SET_CHIP_FIRST+1)
#endif
int s1a0903x01_set(int setting, int value);
int s1a0903x01_get(int setting);
#ifndef CONFIG_TUNER_MULTI
#define tuner_set s1a0903x01_get
#define tuner_get s1a0903x01_set
#endif
#endif /* _S1A0903X01_H_ */

50
firmware/export/tea5767.h Normal file
View file

@ -0,0 +1,50 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
* Tuner header for the Philips TEA5767
*
* Copyright (C) 2007 Michael Sevakis
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#ifndef _TEA5767_H_
#define _TEA5767_H_
#define HAVE_RADIO_REGION
#define HAVE_RADIO_MUTE_TIMEOUT
struct tea5767_region_data
{
unsigned char deemphasis; /* 0: 50us, 1: 75us */
unsigned char band; /* 0: europe, 1: japan (BL in TEA spec)*/
} __attribute__((packed));
const struct tea5767_region_data tea5767_region_data[TUNER_NUM_REGIONS];
struct tea5767_dbg_info
{
unsigned char read_regs[5];
unsigned char write_regs[5];
};
int tea5767_set(int setting, int value);
int tea5767_get(int setting);
void tea5767_dbg_info(struct tea5767_dbg_info *info);
#ifndef CONFIG_TUNER_MULTI
#define tuner_set tea5767_set
#define tuner_get tea5767_get
#endif
#endif /* _TEA5767_H_ */

View file

@ -22,101 +22,112 @@
#include "hwcompat.h"
/* settings to the tuner layer */
#define RADIO_ALL -1 /* debug */
#define RADIO_SLEEP 0
#define RADIO_FREQUENCY 1
#define RADIO_MUTE 2
#define RADIO_IF_MEASUREMENT 3
#define RADIO_SENSITIVITY 4
#define RADIO_FORCE_MONO 5
#define RADIO_SCAN_FREQUENCY 6
#if (CONFIG_TUNER & TEA5767)
#define RADIO_SET_DEEMPHASIS 7
#define RADIO_SET_BAND 8
#endif
#if (CONFIG_TUNER & LV24020LP)
#define RADIO_REGION 9 /* to be used for all tuners */
#define RADIO_REG_STAT 100
#define RADIO_MSS_FM 101
#define RADIO_MSS_IF 102
#define RADIO_MSS_SD 103
#define RADIO_IF_SET 104
#define RADIO_SD_SET 105
#endif
/* readback from the tuner layer */
#define RADIO_PRESENT 0
#define RADIO_TUNED 1
#define RADIO_STEREO 2
/** Settings to the tuner layer **/
enum
{
RADIO_ALL = -1, /* debug */
RADIO_SLEEP,
RADIO_FREQUENCY,
RADIO_MUTE,
RADIO_FORCE_MONO,
RADIO_SCAN_FREQUENCY,
#define REGION_EUROPE 0
#define REGION_US_CANADA 1
#define REGION_JAPAN 2
#define REGION_KOREA 3
/* Put new general-purpose settings above this line */
__RADIO_SET_STANDARD_LAST
};
/** Readback from the tuner layer **/
enum
{
RADIO_PRESENT = 0,
RADIO_TUNED,
RADIO_STEREO,
/* Put new general-purpose readback values above this line */
__RADIO_GET_STANDARD_LAST
};
/** Tuner regions **/
/* Basic region information */
enum
{
REGION_EUROPE = 0,
REGION_US_CANADA,
REGION_JAPAN,
REGION_KOREA,
/* Add new regions above this line */
TUNER_NUM_REGIONS
};
struct fm_region_data
{
int freq_min;
int freq_max;
int freq_step;
};
extern const struct fm_region_data fm_region_data[TUNER_NUM_REGIONS];
#if CONFIG_TUNER
#ifdef SIMULATOR
int radio_set(int setting, int value);
int radio_get(int setting);
int tuner_set(int setting, int value);
int tuner_get(int setting);
#else
#if CONFIG_TUNER == S1A0903X01 /* FM recorder */
#define radio_set samsung_set
#define radio_get samsung_get
#elif CONFIG_TUNER == LV24020LP /* Sansa */
#define radio_set sanyo_set
#define radio_get sanyo_get
#elif CONFIG_TUNER == TEA5767 /* iRiver, iAudio */
#define radio_set philips_set
#define radio_get philips_get
#elif CONFIG_TUNER == (S1A0903X01 | TEA5767) /* OndioFM */
#define radio_set _radio_set
#define radio_get _radio_get
int (*_radio_set)(int setting, int value);
int (*_radio_get)(int setting);
#endif /* CONFIG_TUNER == */
#ifdef CONFIG_TUNER_MULTI
extern int (*tuner_set)(int setting, int value);
extern int (*tuner_get)(int setting);
#endif /* CONFIG_TUNER_MULTI */
/** Sanyo LV24020LP **/
#if (CONFIG_TUNER & LV24020LP)
/* Sansa e200 Series */
#include "lv24020lp.h"
#endif
/** Samsung S1A0903X01 **/
#if (CONFIG_TUNER & S1A0903X01)
/* Ondio FM, FM Recorder */
#include "s1a0903x01.h"
#endif
/** Philips TEA5767 **/
#if (CONFIG_TUNER & TEA5767)
/* Ondio FM, FM Recorder, Recorder V2, iRiver h100/h300, iAudio x5 */
#include "tea5767.h"
#endif
#endif /* SIMULATOR */
#if (CONFIG_TUNER & S1A0903X01)
int samsung_set(int setting, int value);
int samsung_get(int setting);
#endif /* CONFIG_TUNER & S1A0903X01 */
/* Additional messages that get enumerated after tuner driver headers */
#if (CONFIG_TUNER & LV24020LP)
int sanyo_set(int setting, int value);
int sanyo_get(int setting);
#endif /* CONFIG_TUNER & LV24020LP */
#if (CONFIG_TUNER & TEA5767)
struct philips_dbg_info
/* for tuner_set */
enum
{
unsigned char read_regs[5];
unsigned char write_regs[5];
__RADIO_SET_ADDITIONAL_START = __RADIO_SET_STANDARD_LAST-1,
#ifdef HAVE_RADIO_REGION
RADIO_REGION,
#endif
RADIO_SET_CHIP_FIRST
};
int philips_set(int setting, int value);
int philips_get(int setting);
void philips_dbg_info(struct philips_dbg_info *info);
#endif /* CONFIG_TUNER & TEA5767 */
/* Just inline here since only radio screen needs this atm and
there's no tuner.c. */
static inline void tuner_init(void)
/* for tuner_get */
enum
{
#ifndef SIMULATOR
#if CONFIG_TUNER == (S1A0903X01 | TEA5767)
if (HW_MASK & TUNER_MODEL)
{
_radio_set = philips_set;
_radio_get = philips_get;
}
else
{
_radio_set = samsung_set;
_radio_get = samsung_get;
}
#endif
#endif
}
__RADIO_GET_ADDITIONAL_START = __RADIO_SET_STANDARD_LAST-1,
RADIO_GET_CHIP_FIRST
};
/** **/
void tuner_init(void);
bool tuner_power(bool power);
bool tuner_powered(void);
#endif /* #if CONFIG_TUNER */