diff --git a/firmware/target/arm/as3525/ata_sd_as3525.c b/firmware/target/arm/as3525/ata_sd_as3525.c index b61c49c..65fab56 100644 --- a/firmware/target/arm/as3525/ata_sd_as3525.c +++ b/firmware/target/arm/as3525/ata_sd_as3525.c @@ -825,11 +825,16 @@ long sd_last_disk_activity(void) void sd_enable(bool on) { - /* buttonlight AMSes need a bit of special handling for the buttonlight here, + /* buttonlight AMSes need a bit of special handling for the buttonlight here * due to the dual mapping of GPIOD and XPD */ #if defined(HAVE_BUTTON_LIGHT) && defined(HAVE_MULTIDRIVE) extern int buttonlight_is_on; #endif + +#ifdef HAVE_MULTIDRIVE + static bool cpu_boosted = false; +#endif + if (sd_enabled == on) return; /* nothing to do */ if(on) @@ -848,6 +853,14 @@ void sd_enable(bool on) CGU_IDE |= (1<<7) /* AHB interface enable */ | (1<<6) /* interface enable */; sd_enabled = true; + +#ifdef HAVE_MULTIDRIVE + if(card_detect_target()) /* If SD card present Boost cpu for voltage */ + { + cpu_boosted = true; + cpu_boost(true); + } +#endif } else { @@ -862,6 +875,14 @@ void sd_enable(bool on) #endif CGU_IDE &= ~((1<<7)|(1<<6)); sd_enabled = false; + +#ifdef HAVE_MULTIDRIVE + if(cpu_boosted) + { + cpu_boost(false); + cpu_boosted = false; + } +#endif } } diff --git a/firmware/target/arm/as3525/system-as3525.c b/firmware/target/arm/as3525/system-as3525.c index d68f2c4..ba817b4 100644 --- a/firmware/target/arm/as3525/system-as3525.c +++ b/firmware/target/arm/as3525/system-as3525.c @@ -335,14 +335,13 @@ void set_cpu_frequency(long frequency) { if(frequency == CPUFREQ_MAX) { -#ifdef HAVE_ADJUSTABLE_CPU_VOLTAGE /* Increasing frequency so boost voltage before change */ ascodec_write(AS3514_CVDD_DCDC3, (AS314_CP_DCDC3_SETTING | CVDD_1_20)); /* Wait for voltage to be at least 1.20v before making fclk > 200 MHz */ while(adc_read(ADC_CVDD) < 480) /* 480 * .0025 = 1.20V */ ; -#endif + asm volatile( "mrc p15, 0, r0, c1, c0 \n" @@ -365,10 +364,10 @@ void set_cpu_frequency(long frequency) "bic r0, r0, #3<<30 \n" /* fastbus clocking */ "mcr p15, 0, r0, c1, c0 \n" : : : "r0" ); -#ifdef HAVE_ADJUSTABLE_CPU_VOLTAGE + /* Decreasing frequency so reduce voltage after change */ ascodec_write(AS3514_CVDD_DCDC3, (AS314_CP_DCDC3_SETTING | CVDD_1_10)); -#endif + cpu_frequency = CPUFREQ_NORMAL; } }