OSDN Git Service

[UI][AKC6955] Fix correct AM<->FM changing.
[openi2cradio/OpenI2CRadio.git] / akc6955.c
index d16dd61..04139e8 100644 (file)
--- a/akc6955.c
+++ b/akc6955.c
@@ -121,7 +121,7 @@ unsigned char akc6955_readcmd(unsigned char reg)
     return c;
 }
 
-void akc6955_chg_fm(unsigned char f)
+void akc6955_chg_fm(unsigned char f, unsigned int freq)
 {
     __bitops_t b;
     b.byte = akc6955_readcmd(AKC6955_POWER);
@@ -131,6 +131,7 @@ void akc6955_chg_fm(unsigned char f)
     }
     akc6955_writecmd(AKC6955_POWER, b.byte);
     akc6955_do_tune();
+    akc6955_set_freq(freq);
 }
 
 unsigned char akc6955_get_fm(void)
@@ -151,6 +152,7 @@ void akc6955_set_amband(unsigned char band)
     b &= 0x07; // extract FM
     b = b | ((band & 0x1f) << 3);
     akc6955_writecmd(AKC6955_BAND, b);
+    akc6955_do_tune();
 }
 
 void akc6955_set_fmband(unsigned char band)
@@ -160,6 +162,7 @@ void akc6955_set_fmband(unsigned char band)
     b &= 0xf8; // extract AM
     b = b | (band & 0x07);
     akc6955_writecmd(AKC6955_BAND, b);
+    akc6955_do_tune();
 }
 
 unsigned char akc6955_get_amband(void)
@@ -178,19 +181,16 @@ unsigned char akc6955_get_fmband(void)
     return b;
 }
 
-#if 1
 void akc6955_set_power(unsigned char on)
 {
     __bitops_t b;
     b.byte = akc6955_readcmd(AKC6955_POWER);
+    b.b7 = 0;
     if(on != 0){
         b.b7 = 1;
-    } else {
-        b.b7 = 0;
     }
     akc6955_writecmd(AKC6955_POWER, b.byte);
 }
-#endif
 
 void akc6955_do_tune(void)
 {
@@ -207,7 +207,6 @@ void akc6955_do_tune(void)
     b.b5 = 0;
     akc6955_writecmd(AKC6955_POWER, b.byte);
     idle_time_ms(8);
-
 }
 
 unsigned char akc6955_tune(void)
@@ -225,10 +224,9 @@ void akc6955_mode3k(unsigned char flag)
 {
     __bitops_t b;
     b.byte = akc6955_readcmd(AKC6955_CH_HI);
+    b.b5 = 0;
     if(flag != 0){
         b.b5 = 1;
-    } else {
-        b.b5 = 1;
     }
     akc6955_writecmd(AKC6955_CH_HI, b.byte);
     akc6955_do_tune();
@@ -248,10 +246,8 @@ void akc6955_set_tune(unsigned char mode_3k, unsigned int ch)
         idle_time_35ms();
     } while(comp = 0x00);
     f.byte = akc6955_readcmd(AKC6955_POWER);
-    if(f.b6){
-        band = 0;
-        // AM
-    } else {
+    band = 0;
+    if(f.b6 == 0){
         band = akc6955_get_amband();
     }