diff options
-rw-r--r-- | firmware/tuner.c | 99 |
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 | ||
27 | int (*tuner_set)(int setting, int value); | ||
28 | int (*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 */ | ||
43 | const 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 */ | ||
55 | const 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) | ||
65 | const 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 | |||
74 | void 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 | } | ||