summaryrefslogtreecommitdiff
path: root/firmware/drivers/tuner
diff options
context:
space:
mode:
authorSzymon Dziok <b0hoon@o2.pl>2014-06-17 23:13:15 +0000
committerSzymon Dziok <b0hoon@o2.pl>2014-06-18 18:06:17 +0000
commiteacd76cb80db12adcce74980e69d116911a8cde7 (patch)
tree239344e3f9053a75eeab4253f39f6b1dae749aa6 /firmware/drivers/tuner
parent0c3dca1f33596cb10345601de32d681ed6ece972 (diff)
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.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 @@
#include "power.h"
#include "tuner.h" /* tuner abstraction interface */
#include "fmradio.h"
-#include "fmradio_i2c.h" /* physical interface driver */
+#include "fmradio_i2c.h" /* physical interface driver - i2c */
+#include "fmradio_3wire.h" /* physical interface driver - 3-wire bus */
+
#if defined(PHILIPS_HDD1630) || defined(ONDA_VX747) || defined(ONDA_VX777) || defined(PHILIPS_HDD6330)
#define I2C_ADR 0x60
@@ -109,7 +111,11 @@ int tea5767_set(int setting, int value)
if(setting == RADIO_SLEEP && !value)
tuner_power(true); /* wakeup */
+#if defined(CONFIG_TUNER_3WIRE)
+ fmradio_3wire_write(write_bytes);
+#else
fmradio_i2c_write(I2C_ADR, write_bytes, sizeof(write_bytes));
+#endif
if(setting == RADIO_SLEEP && value)
tuner_power(false); /* sleep */
return 1;
@@ -121,7 +127,11 @@ int tea5767_get(int setting)
unsigned char read_bytes[5];
int val = -1; /* default for unsupported query */
+#if defined(CONFIG_TUNER_3WIRE)
+ fmradio_3wire_read(read_bytes);
+#else
fmradio_i2c_read(I2C_ADR, read_bytes, sizeof(read_bytes));
+#endif
switch(setting)
{
@@ -141,7 +151,7 @@ int tea5767_get(int setting)
case RADIO_STEREO:
val = read_bytes[2] >> 7;
break;
-
+
case RADIO_RSSI:
val = 10 + 3*(read_bytes[3] >> 4);
break;
@@ -161,15 +171,22 @@ int tea5767_get(int setting)
void tea5767_init(void)
{
/* save binsize by only detecting presence for targets where it may be absent */
-#if defined(PHILIPS_HDD1630) || defined(PHILIPS_HDD6330)
+#if defined(PHILIPS_HDD1630) || defined(PHILIPS_HDD6330) || defined(SAMSUNG_YH920)
unsigned char buf[5];
unsigned char chipid;
/* init chipid register with 0xFF in case fmradio_i2c_read fails silently */
buf[3] = 0xFF;
tuner_power(true);
- if (fmradio_i2c_read(I2C_ADR, buf, sizeof(buf)) < 0) {
- /* no i2c device detected */
+
+#if defined(CONFIG_TUNER_3WIRE)
+ int res = fmradio_3wire_read(buf);
+#else
+ int res = fmradio_i2c_read(I2C_ADR, buf, sizeof(buf));
+#endif
+
+ if (res < 0) {
+ /* no device detected on bus */
tuner_present = false;
} else {
/* check chip id */
@@ -182,6 +199,10 @@ void tea5767_init(void)
void tea5767_dbg_info(struct tea5767_dbg_info *info)
{
+#if defined(CONFIG_TUNER_3WIRE)
+ fmradio_3wire_read(info->read_regs);
+#else
fmradio_i2c_read(I2C_ADR, info->read_regs, 5);
+#endif
memcpy(info->write_regs, write_bytes, 5);
}