summaryrefslogtreecommitdiff
path: root/firmware/tuner.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/tuner.c')
-rw-r--r--firmware/tuner.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/firmware/tuner.c b/firmware/tuner.c
new file mode 100644
index 0000000000..85f56b8976
--- /dev/null
+++ b/firmware/tuner.c
@@ -0,0 +1,99 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 * General tuner functions
10 *
11 * Copyright (C) 2007 by Michael Sevakis
12 *
13 * All files in this archive are subject to the GNU General Public License.
14 * See the file COPYING in the source tree root for full license agreement.
15 *
16 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
17 * KIND, either express or implied.
18 *
19 ****************************************************************************/
20#include <stdlib.h>
21#include "config.h"
22#include "kernel.h"
23#include "tuner.h"
24#include "fmradio.h"
25
26#ifdef CONFIG_TUNER_MULTI
27int (*tuner_set)(int setting, int value);
28int (*tuner_get)(int setting);
29
30#define TUNER_TYPE_CASE(type, set, get, region_data) \
31 case type: \
32 tuner_set = set; \
33 tuner_get = get; \
34 break;
35
36#else
37
38#define TUNER_TYPE_CASE(type, set, get, region_data)
39
40#endif /* CONFIG_TUNER_MULTI */
41
42/* General region information */
43const struct fm_region_data fm_region_data[TUNER_NUM_REGIONS] =
44{
45 [REGION_EUROPE] = { 87500000, 108000000, 50000 },
46 [REGION_US_CANADA] = { 87900000, 107900000, 200000 },
47 [REGION_JAPAN] = { 76000000, 90000000, 100000 },
48 [REGION_KOREA] = { 87500000, 108000000, 100000 }
49};
50
51/* Tuner-specific region information */
52
53#if (CONFIG_TUNER & LV24020LP)
54/* deemphasis setting for region */
55const unsigned char lv24020lp_region_data[TUNER_NUM_REGIONS] =
56{
57 [REGION_EUROPE] = 0, /* 50uS */
58 [REGION_US_CANADA] = 1, /* 75uS */
59 [REGION_JAPAN] = 0, /* 50uS */
60 [REGION_KOREA] = 0, /* 50uS */
61};
62#endif /* (CONFIG_TUNER & LV24020LP) */
63
64#if (CONFIG_TUNER & TEA5767)
65const struct tea5767_region_data tea5767_region_data[TUNER_NUM_REGIONS] =
66{
67 [REGION_EUROPE] = { 0, 0 }, /* 50uS, US/Europe band */
68 [REGION_US_CANADA] = { 1, 0 }, /* 75uS, US/Europe band */
69 [REGION_JAPAN] = { 0, 1 }, /* 50uS, Japanese band */
70 [REGION_KOREA] = { 0, 0 }, /* 50uS, US/Europe band */
71};
72#endif /* (CONFIG_TUNER & TEA5767) */
73
74void tuner_init(void)
75{
76#ifdef CONFIG_TUNER_MULTI
77 switch (tuner_detect_type())
78#endif
79 {
80 #if (CONFIG_TUNER & LV24020LP)
81 TUNER_TYPE_CASE(LV24020LP,
82 lv24020lp_set,
83 lv24020lp_get,
84 lv24020lp_region_data)
85 #endif
86 #if (CONFIG_TUNER & TEA5767)
87 TUNER_TYPE_CASE(TEA5767,
88 tea5767_set,
89 tea5767_get,
90 tea5767_region_data)
91 #endif
92 #if (CONFIG_TUNER & S1A0903X01)
93 TUNER_TYPE_CASE(S1A0903X01,
94 s1a0903x01_set,
95 s1a0903x01_get,
96 NULL)
97 #endif
98 }
99}