summaryrefslogtreecommitdiff
path: root/firmware/drivers/tuner/tea5767.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/tuner/tea5767.c')
-rw-r--r--firmware/drivers/tuner/tea5767.c31
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)
161void tea5767_init(void) 171void 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
183void tea5767_dbg_info(struct tea5767_dbg_info *info) 200void 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}