From f7a3b4dfa32f008ba25a84e332eeace8d35cff42 Mon Sep 17 00:00:00 2001 From: Szymon Dziok Date: Tue, 12 Jan 2016 00:03:22 +0100 Subject: Radio support and detection for Samsung YH92X [FOR TESTING]. Status: - tested on: Samsung YH920 - it uses this detection too, it always should have the radio. Samsung YH925 with the radio. - untested on: Samsung YH925 without the radio. Change-Id: I68b39c09d6b7e26a4c373fbd8bf9401a97e86123 --- firmware/SOURCES | 1 + firmware/drivers/tuner/tea5767.c | 15 ++++++++++++--- firmware/export/config/samsungyh925.h | 9 ++++++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/firmware/SOURCES b/firmware/SOURCES index 87cadfd55f..e827f964f5 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -1799,6 +1799,7 @@ target/arm/samsung/yh925/backlight-yh925.c target/arm/samsung/yh925/lcd-yh925.c target/arm/samsung/yh925/lcd-as-yh925.S target/arm/samsung/yh925/powermgmt-yh925.c +target/arm/samsung/fmradio-yh92x.c #endif /* SAMSUNG_YH925 */ #ifdef SAMSUNG_YPS3 diff --git a/firmware/drivers/tuner/tea5767.c b/firmware/drivers/tuner/tea5767.c index a502e79802..143cb0576b 100644 --- a/firmware/drivers/tuner/tea5767.c +++ b/firmware/drivers/tuner/tea5767.c @@ -171,17 +171,26 @@ 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) || defined(SAMSUNG_YH925) 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 defined(CONFIG_TUNER_3WIRE) + /* We don't have any control over the bus protocol, the only way to detect + presence of the tuner is to write something to it and then read bytes */ + tea5767_set(RADIO_MUTE, 1); int res = fmradio_3wire_read(buf); + res = ((buf[0] == 0) && (buf[1] == 0) && (buf[2] == 0) && (buf[3] == 0) + && (buf[4] == 0) && (buf[5] == 0)) ? -1 : 1; + /* clear chipid byte - we don't use it here for detection, so it should be */ + /* set to zero, to fulfill the condition in "else" block */ + buf[3] = 0; #else + /* init chipid register with 0xFF in case fmradio_i2c_read fails silently */ + buf[3] = 0xFF; int res = fmradio_i2c_read(I2C_ADR, buf, sizeof(buf)); #endif diff --git a/firmware/export/config/samsungyh925.h b/firmware/export/config/samsungyh925.h index cb6f185014..45bae720f1 100644 --- a/firmware/export/config/samsungyh925.h +++ b/firmware/export/config/samsungyh925.h @@ -11,7 +11,8 @@ /* Define bitmask of input sources - recordable bitmask can be defined explicitly if different */ -#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN ) +#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN | SRC_CAP_FMRADIO) + /* define the bitmask of hardware sample rates */ #define HW_SAMPR_CAPS (SAMPR_CAP_48 | SAMPR_CAP_44 | SAMPR_CAP_32 | \ @@ -133,6 +134,12 @@ /* AK4537 has no tone controls, so we use the software ones */ #define HAVE_SW_TONE_CONTROLS +/* FM Tuner */ +#define CONFIG_TUNER TEA5767 +#define CONFIG_TUNER_XTAL 32768 +/* Define this if the tuner uses 3-wire bus instead of classic i2c */ +#define CONFIG_TUNER_3WIRE + #define AB_REPEAT_ENABLE #define BATTERY_CAPACITY_DEFAULT 900 /* default battery capacity */ -- cgit v1.2.3