diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2013-03-31 21:57:53 +0200 |
---|---|---|
committer | Marcin Bukat <marcin.bukat@gmail.com> | 2013-04-11 11:18:23 +0200 |
commit | a924df8d6ddfa4372ce6b49c312e1da1ffceb2ad (patch) | |
tree | c5d977120d5dc629d9778c4ee7ab84284458503e /firmware | |
parent | f49e75053198cc24aff92e9045795e011fa25083 (diff) | |
download | rockbox-a924df8d6ddfa4372ce6b49c312e1da1ffceb2ad.tar.gz rockbox-a924df8d6ddfa4372ce6b49c312e1da1ffceb2ad.zip |
rk27xx: implement radio support
Change-Id: I59d3905e9b2a3df8aa235e424c7a6e0eff6d73e9
Reviewed-on: http://gerrit.rockbox.org/427
Reviewed-by: Marcin Bukat <marcin.bukat@gmail.com>
Tested-by: Marcin Bukat <marcin.bukat@gmail.com>
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/SOURCES | 2 | ||||
-rw-r--r-- | firmware/drivers/audio/rk27xx_codec.c | 18 | ||||
-rw-r--r-- | firmware/export/config/rk27generic.h | 4 | ||||
-rw-r--r-- | firmware/target/arm/rk27xx/audio-rk27xx.c | 52 | ||||
-rw-r--r-- | firmware/target/arm/rk27xx/rk27generic/fmradio-i2c-rk27generic.c | 39 | ||||
-rw-r--r-- | firmware/target/arm/rk27xx/rk27generic/power-rk27generic.c | 6 |
6 files changed, 118 insertions, 3 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES index 8ba45af533..92b2f5f87b 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES | |||
@@ -1509,6 +1509,7 @@ target/arm/s5l8702/ipod6g/piezo-ipod6g.c | |||
1509 | #endif | 1509 | #endif |
1510 | 1510 | ||
1511 | #if CONFIG_CPU == RK27XX | 1511 | #if CONFIG_CPU == RK27XX |
1512 | target/arm/rk27xx/audio-rk27xx.c | ||
1512 | target/arm/rk27xx/kernel-rk27xx.c | 1513 | target/arm/rk27xx/kernel-rk27xx.c |
1513 | target/arm/rk27xx/system-rk27xx.c | 1514 | target/arm/rk27xx/system-rk27xx.c |
1514 | target/arm/rk27xx/backlight-rk27xx.c | 1515 | target/arm/rk27xx/backlight-rk27xx.c |
@@ -1532,6 +1533,7 @@ target/arm/rk27xx/rk27generic/button-rk27generic.c | |||
1532 | target/arm/rk27xx/rk27generic/powermgmt-rk27generic.c | 1533 | target/arm/rk27xx/rk27generic/powermgmt-rk27generic.c |
1533 | target/arm/rk27xx/rk27generic/power-rk27generic.c | 1534 | target/arm/rk27xx/rk27generic/power-rk27generic.c |
1534 | target/arm/rk27xx/rk27generic/lcd-rk27generic.c | 1535 | target/arm/rk27xx/rk27generic/lcd-rk27generic.c |
1536 | target/arm/rk27xx/rk27generic/fmradio-i2c-rk27generic.c | ||
1535 | #endif | 1537 | #endif |
1536 | 1538 | ||
1537 | #if CONFIG_CPU == JZ4732 | 1539 | #if CONFIG_CPU == JZ4732 |
diff --git a/firmware/drivers/audio/rk27xx_codec.c b/firmware/drivers/audio/rk27xx_codec.c index cfb98a9227..462565e8aa 100644 --- a/firmware/drivers/audio/rk27xx_codec.c +++ b/firmware/drivers/audio/rk27xx_codec.c | |||
@@ -55,12 +55,14 @@ static int codec_read(uint8_t reg, uint8_t *val) | |||
55 | } | 55 | } |
56 | #endif | 56 | #endif |
57 | 57 | ||
58 | static uint8_t cr1_sel = DACSEL; | ||
59 | |||
58 | static void audiohw_mute(bool mute) | 60 | static void audiohw_mute(bool mute) |
59 | { | 61 | { |
60 | if (mute) | 62 | if (mute) |
61 | codec_write(CR1, SB_MICBIAS|DAC_MUTE|DACSEL); | 63 | codec_write(CR1, SB_MICBIAS|DAC_MUTE|cr1_sel); |
62 | else | 64 | else |
63 | codec_write(CR1, SB_MICBIAS|DACSEL); | 65 | codec_write(CR1, SB_MICBIAS|cr1_sel); |
64 | } | 66 | } |
65 | 67 | ||
66 | /* public functions */ | 68 | /* public functions */ |
@@ -109,7 +111,7 @@ void audiohw_postinit(void) | |||
109 | udelay(1000); | 111 | udelay(1000); |
110 | 112 | ||
111 | /* power up output stage */ | 113 | /* power up output stage */ |
112 | codec_write(PMR1, SB_ADC|SB_IN1|SB_IN2|SB_MIC|SB_IND); | 114 | codec_write(PMR1, SB_ADC|SB_MIC|SB_IND); |
113 | 115 | ||
114 | sleep(HZ/10); | 116 | sleep(HZ/10); |
115 | GPIO_PDDR |= (1<<7); /* PD7 high */ | 117 | GPIO_PDDR |= (1<<7); /* PD7 high */ |
@@ -159,5 +161,15 @@ void audiohw_set_master_vol(int vol_l, int vol_r) | |||
159 | 161 | ||
160 | codec_write(CGR9, vol_r); | 162 | codec_write(CGR9, vol_r); |
161 | codec_write(CGR8, vol_l); | 163 | codec_write(CGR8, vol_l); |
164 | codec_write(CGR5, vol_r); | ||
165 | codec_write(CGR4, vol_l); | ||
166 | codec_write(CGR3, vol_r); | ||
167 | codec_write(CGR2, vol_l); | ||
162 | } | 168 | } |
163 | } | 169 | } |
170 | |||
171 | void audiohw_set_monitor(bool enable) | ||
172 | { | ||
173 | cr1_sel = enable ? BYPASS1|BYPASS2 : DACSEL; | ||
174 | codec_write(CR1, cr1_sel|SB_MICBIAS); | ||
175 | } | ||
diff --git a/firmware/export/config/rk27generic.h b/firmware/export/config/rk27generic.h index 10fbd451e4..9a4326358f 100644 --- a/firmware/export/config/rk27generic.h +++ b/firmware/export/config/rk27generic.h | |||
@@ -13,6 +13,7 @@ | |||
13 | /* Define bitmask of input sources - recordable bitmask can be defined | 13 | /* Define bitmask of input sources - recordable bitmask can be defined |
14 | explicitly if different */ | 14 | explicitly if different */ |
15 | /* #define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_FM) */ | 15 | /* #define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_FM) */ |
16 | #define INPUT_SRC_CAPS SRC_CAP_FMRADIO | ||
16 | 17 | ||
17 | /* define the bitmask of hardware sample rates */ | 18 | /* define the bitmask of hardware sample rates */ |
18 | #define HW_SAMPR_CAPS (SAMPR_CAP_44 | SAMPR_CAP_22 | SAMPR_CAP_11 \ | 19 | #define HW_SAMPR_CAPS (SAMPR_CAP_44 | SAMPR_CAP_22 | SAMPR_CAP_11 \ |
@@ -106,6 +107,9 @@ | |||
106 | /* Define the type of audio codec */ | 107 | /* Define the type of audio codec */ |
107 | #define HAVE_RK27XX_CODEC | 108 | #define HAVE_RK27XX_CODEC |
108 | 109 | ||
110 | #define CONFIG_TUNER TEA5767 | ||
111 | #define CONFIG_TUNER_XTAL 32768 | ||
112 | |||
109 | /* #define HAVE_PCM_DMA_ADDRESS */ | 113 | /* #define HAVE_PCM_DMA_ADDRESS */ |
110 | 114 | ||
111 | /* Define this for LCD backlight available */ | 115 | /* Define this for LCD backlight available */ |
diff --git a/firmware/target/arm/rk27xx/audio-rk27xx.c b/firmware/target/arm/rk27xx/audio-rk27xx.c new file mode 100644 index 0000000000..76be4a907a --- /dev/null +++ b/firmware/target/arm/rk27xx/audio-rk27xx.c | |||
@@ -0,0 +1,52 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2013 by Amaury Pouly | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | #include "config.h" | ||
22 | #include "system.h" | ||
23 | #include "audiohw.h" | ||
24 | #include "audio.h" | ||
25 | |||
26 | static int input_source = AUDIO_SRC_PLAYBACK; | ||
27 | static unsigned input_flags = 0; | ||
28 | static int output_source = AUDIO_SRC_PLAYBACK; | ||
29 | |||
30 | static void select_audio_path(void) | ||
31 | { | ||
32 | if(input_source == AUDIO_SRC_PLAYBACK) | ||
33 | audiohw_set_monitor(false); | ||
34 | else | ||
35 | audiohw_set_monitor(true); | ||
36 | } | ||
37 | |||
38 | void audio_input_mux(int source, unsigned flags) | ||
39 | { | ||
40 | (void) source; | ||
41 | (void) flags; | ||
42 | input_source = source; | ||
43 | input_flags = flags; | ||
44 | select_audio_path(); | ||
45 | } | ||
46 | |||
47 | void audio_set_output_source(int source) | ||
48 | { | ||
49 | (void) source; | ||
50 | output_source = source; | ||
51 | select_audio_path(); | ||
52 | } | ||
diff --git a/firmware/target/arm/rk27xx/rk27generic/fmradio-i2c-rk27generic.c b/firmware/target/arm/rk27xx/rk27generic/fmradio-i2c-rk27generic.c new file mode 100644 index 0000000000..4ab171cd5a --- /dev/null +++ b/firmware/target/arm/rk27xx/rk27generic/fmradio-i2c-rk27generic.c | |||
@@ -0,0 +1,39 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2013 by Amaury Pouly | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include "config.h" | ||
23 | #include "system.h" | ||
24 | #include "fmradio_i2c.h" | ||
25 | #include "i2c-rk27xx.h" | ||
26 | |||
27 | void fmradio_i2c_init(void) | ||
28 | { | ||
29 | } | ||
30 | |||
31 | int fmradio_i2c_write(unsigned char address, const unsigned char* buf, int count) | ||
32 | { | ||
33 | return i2c_write(address, -1, count, buf); | ||
34 | } | ||
35 | |||
36 | int fmradio_i2c_read(unsigned char address, unsigned char* buf, int count) | ||
37 | { | ||
38 | return i2c_read(address, -1, count, buf); | ||
39 | } | ||
diff --git a/firmware/target/arm/rk27xx/rk27generic/power-rk27generic.c b/firmware/target/arm/rk27xx/rk27generic/power-rk27generic.c index 68594d0f0e..d3feb41597 100644 --- a/firmware/target/arm/rk27xx/rk27generic/power-rk27generic.c +++ b/firmware/target/arm/rk27xx/rk27generic/power-rk27generic.c | |||
@@ -38,6 +38,12 @@ void power_init(void) | |||
38 | GPIO_PCCON |= (1<<0); | 38 | GPIO_PCCON |= (1<<0); |
39 | } | 39 | } |
40 | 40 | ||
41 | bool tuner_power(bool status) | ||
42 | { | ||
43 | (void) status; | ||
44 | return true; | ||
45 | } | ||
46 | |||
41 | unsigned int power_input_status(void) | 47 | unsigned int power_input_status(void) |
42 | { | 48 | { |
43 | return (usb_detect() == USB_INSERTED) ? POWER_INPUT_MAIN_CHARGER : POWER_INPUT_NONE; | 49 | return (usb_detect() == USB_INSERTED) ? POWER_INPUT_MAIN_CHARGER : POWER_INPUT_NONE; |