diff options
author | Szymon Dziok <b0hoon@o2.pl> | 2014-06-17 23:13:15 +0000 |
---|---|---|
committer | Szymon Dziok <b0hoon@o2.pl> | 2014-06-18 18:06:17 +0000 |
commit | eacd76cb80db12adcce74980e69d116911a8cde7 (patch) | |
tree | 239344e3f9053a75eeab4253f39f6b1dae749aa6 /firmware/drivers/tuner | |
parent | 0c3dca1f33596cb10345601de32d681ed6ece972 (diff) | |
download | rockbox-eacd76cb80db12adcce74980e69d116911a8cde7.tar.gz rockbox-eacd76cb80db12adcce74980e69d116911a8cde7.zip |
Radio and radio recording for Samsung YH-920.
There is no simple method to detect radio through the 3-wire interface, so it's
not implemented for the YH-925 for now. YH-920 always has a radio.
Change-Id: Iea484d752915fcd40dbbbd7dbbf13e81aaf548db
Diffstat (limited to 'firmware/drivers/tuner')
-rw-r--r-- | firmware/drivers/tuner/tea5767.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/firmware/drivers/tuner/tea5767.c b/firmware/drivers/tuner/tea5767.c index d0041f9ce1..74adb54997 100644 --- a/firmware/drivers/tuner/tea5767.c +++ b/firmware/drivers/tuner/tea5767.c | |||
@@ -27,7 +27,9 @@ | |||
27 | #include "power.h" | 27 | #include "power.h" |
28 | #include "tuner.h" /* tuner abstraction interface */ | 28 | #include "tuner.h" /* tuner abstraction interface */ |
29 | #include "fmradio.h" | 29 | #include "fmradio.h" |
30 | #include "fmradio_i2c.h" /* physical interface driver */ | 30 | #include "fmradio_i2c.h" /* physical interface driver - i2c */ |
31 | #include "fmradio_3wire.h" /* physical interface driver - 3-wire bus */ | ||
32 | |||
31 | 33 | ||
32 | #if defined(PHILIPS_HDD1630) || defined(ONDA_VX747) || defined(ONDA_VX777) || defined(PHILIPS_HDD6330) | 34 | #if defined(PHILIPS_HDD1630) || defined(ONDA_VX747) || defined(ONDA_VX777) || defined(PHILIPS_HDD6330) |
33 | #define I2C_ADR 0x60 | 35 | #define I2C_ADR 0x60 |
@@ -109,7 +111,11 @@ int tea5767_set(int setting, int value) | |||
109 | 111 | ||
110 | if(setting == RADIO_SLEEP && !value) | 112 | if(setting == RADIO_SLEEP && !value) |
111 | tuner_power(true); /* wakeup */ | 113 | tuner_power(true); /* wakeup */ |
114 | #if defined(CONFIG_TUNER_3WIRE) | ||
115 | fmradio_3wire_write(write_bytes); | ||
116 | #else | ||
112 | fmradio_i2c_write(I2C_ADR, write_bytes, sizeof(write_bytes)); | 117 | fmradio_i2c_write(I2C_ADR, write_bytes, sizeof(write_bytes)); |
118 | #endif | ||
113 | if(setting == RADIO_SLEEP && value) | 119 | if(setting == RADIO_SLEEP && value) |
114 | tuner_power(false); /* sleep */ | 120 | tuner_power(false); /* sleep */ |
115 | return 1; | 121 | return 1; |
@@ -121,7 +127,11 @@ int tea5767_get(int setting) | |||
121 | unsigned char read_bytes[5]; | 127 | unsigned char read_bytes[5]; |
122 | int val = -1; /* default for unsupported query */ | 128 | int val = -1; /* default for unsupported query */ |
123 | 129 | ||
130 | #if defined(CONFIG_TUNER_3WIRE) | ||
131 | fmradio_3wire_read(read_bytes); | ||
132 | #else | ||
124 | fmradio_i2c_read(I2C_ADR, read_bytes, sizeof(read_bytes)); | 133 | fmradio_i2c_read(I2C_ADR, read_bytes, sizeof(read_bytes)); |
134 | #endif | ||
125 | 135 | ||
126 | switch(setting) | 136 | switch(setting) |
127 | { | 137 | { |
@@ -141,7 +151,7 @@ int tea5767_get(int setting) | |||
141 | case RADIO_STEREO: | 151 | case RADIO_STEREO: |
142 | val = read_bytes[2] >> 7; | 152 | val = read_bytes[2] >> 7; |
143 | break; | 153 | break; |
144 | 154 | ||
145 | case RADIO_RSSI: | 155 | case RADIO_RSSI: |
146 | val = 10 + 3*(read_bytes[3] >> 4); | 156 | val = 10 + 3*(read_bytes[3] >> 4); |
147 | break; | 157 | break; |
@@ -161,15 +171,22 @@ int tea5767_get(int setting) | |||
161 | void tea5767_init(void) | 171 | void tea5767_init(void) |
162 | { | 172 | { |
163 | /* save binsize by only detecting presence for targets where it may be absent */ | 173 | /* save binsize by only detecting presence for targets where it may be absent */ |
164 | #if defined(PHILIPS_HDD1630) || defined(PHILIPS_HDD6330) | 174 | #if defined(PHILIPS_HDD1630) || defined(PHILIPS_HDD6330) || defined(SAMSUNG_YH920) |
165 | unsigned char buf[5]; | 175 | unsigned char buf[5]; |
166 | unsigned char chipid; | 176 | unsigned char chipid; |
167 | 177 | ||
168 | /* init chipid register with 0xFF in case fmradio_i2c_read fails silently */ | 178 | /* init chipid register with 0xFF in case fmradio_i2c_read fails silently */ |
169 | buf[3] = 0xFF; | 179 | buf[3] = 0xFF; |
170 | tuner_power(true); | 180 | tuner_power(true); |
171 | if (fmradio_i2c_read(I2C_ADR, buf, sizeof(buf)) < 0) { | 181 | |
172 | /* no i2c device detected */ | 182 | #if defined(CONFIG_TUNER_3WIRE) |
183 | int res = fmradio_3wire_read(buf); | ||
184 | #else | ||
185 | int res = fmradio_i2c_read(I2C_ADR, buf, sizeof(buf)); | ||
186 | #endif | ||
187 | |||
188 | if (res < 0) { | ||
189 | /* no device detected on bus */ | ||
173 | tuner_present = false; | 190 | tuner_present = false; |
174 | } else { | 191 | } else { |
175 | /* check chip id */ | 192 | /* check chip id */ |
@@ -182,6 +199,10 @@ void tea5767_init(void) | |||
182 | 199 | ||
183 | void tea5767_dbg_info(struct tea5767_dbg_info *info) | 200 | void tea5767_dbg_info(struct tea5767_dbg_info *info) |
184 | { | 201 | { |
202 | #if defined(CONFIG_TUNER_3WIRE) | ||
203 | fmradio_3wire_read(info->read_regs); | ||
204 | #else | ||
185 | fmradio_i2c_read(I2C_ADR, info->read_regs, 5); | 205 | fmradio_i2c_read(I2C_ADR, info->read_regs, 5); |
206 | #endif | ||
186 | memcpy(info->write_regs, write_bytes, 5); | 207 | memcpy(info->write_regs, write_bytes, 5); |
187 | } | 208 | } |