Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

FS#12094 - RDA5802 tuner: clean up register 0x4 handling, drop implicitly enabled soft-mute by Stephan Grossklass and me

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29959 a1c6a512-1295-4272-9138-f99709370657

+23 -19
+23 -19
firmware/drivers/tuner/rda5802.c
··· 44 44 #define SYSCONFIG1 0x4 45 45 #define SYSCONFIG2 0x5 46 46 #define SYSCONFIG3 0x6 47 - 47 + #define SYSCONFIG4 0x7 /* undocumented */ 48 + #define SYSCONFIG5 0x8 /* undocumented */ 49 + #define SYSCONFIG6 0x9 /* undocumented */ 48 50 #define READCHAN 0xA 49 51 #define STATUSRSSI 0xB 50 52 #define IDENT 0xC ··· 76 78 77 79 /* SYSCONFIG1 (0x4) */ 78 80 #define SYSCONFIG1_DE (0x1 << 11) 79 - #define SYSCONFIG1_SMUTE (0x1 << 9) 81 + #define SYSCONFIG1_SOFTMUTE_EN (0x1 << 9) 80 82 81 83 /* SYSCONFIG2 (0x5) */ 82 84 #define SYSCONFIG2_VOLUME (0xF << 0) ··· 92 94 #define STATUSRSSI_RSSIr(x) (((x) & STATUSRSSI_RSSI) >> 9) 93 95 #define STATUSRSSI_FM_TRUE (0x1 << 8) 94 96 95 - static const uint16_t initvals[16] = { 96 - 0x0000, 0x0000, 0xC401, 0x1B80, 97 - 0x0400, 0x866F, 0x8000, 0x4712, 98 - 0x5EC6, 0x0000, 0x406E, 0x2D80, 99 - 0x5803, 0x5804, 0x5804, 0x5804 100 - }; 101 - 102 97 static bool tuner_present = false; 103 - static uint16_t cache[16]; 98 + 99 + static uint16_t cache[16] = { 100 + [POWERCFG] = 0xC401, /* DHIZ, DMUTE, CLK_DIRECT_MODE, ENABLE */ 101 + [CHANNEL] = 0x0000, /* - */ 102 + [SYSCONFIG1] = 0x0200, /* SYSCONFIG1_SOFTMUTE_EN */ 103 + [SYSCONFIG2] = 0x867F, /* INT_MODE (def), SEEKTH=1100b, LNA_PORT_SEL=LNAN, 104 + LNA_ICSEL=3.0mA, VOLUME=max */ 105 + [SYSCONFIG3] = 0x8000, /* I2S slave mode */ 106 + [SYSCONFIG4] = 0x4712, /* undocumented, affects stereo blend */ 107 + [SYSCONFIG5] = 0x5EC6, /* undocumented */ 108 + [SYSCONFIG6] = 0x0000 /* undocumented */ 109 + }; 104 110 105 111 /* reads <len> registers from radio at offset 0x0A into cache */ 106 112 static void rda5802_read(int len) 107 113 { 108 114 int i; 109 - unsigned char buf[128]; 115 + unsigned char buf[sizeof(cache)]; 110 116 unsigned char *ptr = buf; 111 117 uint16_t data; 112 118 ··· 122 128 static void rda5802_write(int len) 123 129 { 124 130 int i; 125 - unsigned char buf[64]; 131 + unsigned char buf[sizeof(cache)]; 126 132 unsigned char *ptr = buf; 127 133 uint16_t data; 128 134 ··· 186 192 if (rda5802_detect()) { 187 193 tuner_present = true; 188 194 189 - // soft-reset 190 - rda5802_write_reg(POWERCFG, POWERCFG_SOFT_RESET); 195 + /* soft-reset */ 196 + rda5802_write_set(POWERCFG, POWERCFG_SOFT_RESET); 191 197 rda5802_write(1); 198 + rda5802_write_clear(POWERCFG, POWERCFG_SOFT_RESET); 192 199 sleep(HZ * 10 / 1000); 193 200 194 - // write initialisation values 195 - memcpy(cache, initvals, sizeof(cache)); 196 - rda5802_write(14); 201 + /* write initialisation values */ 202 + rda5802_write(8); 197 203 sleep(HZ * 70 / 1000); 198 204 } 199 205 } ··· 284 290 case RADIO_MUTE: 285 291 rda5802_write_masked(POWERCFG, value ? 0 : POWERCFG_DMUTE, 286 292 POWERCFG_DMUTE); 287 - rda5802_write_masked(SYSCONFIG1, (3 << 9), (3 << 9)); 288 - rda5802_write_set(SYSCONFIG2, SYSCONFIG2_VOLUME); 289 293 rda5802_write_cache(); 290 294 break; 291 295