From 89f906b75be3e7d21cb34f8e9b811a798af26688 Mon Sep 17 00:00:00 2001 From: Daniel Klaffenbach Date: Sat, 25 Sep 2010 15:30:23 +0200 Subject: [PATCH] Fixed minimum frequency on power kernels. getMinFreq() not checks if the minimum frequency is in avoid_frequencies. For performance reason the minimum frequency is now stored in memory. --- src/mainwindow.cpp | 79 ++++++++++++++++++++++++++++++++++------------------ src/mainwindow.h | 1 + 2 files changed, 53 insertions(+), 27 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 15d56fa..e069c52 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -27,7 +27,6 @@ #include #endif - #define APPNAME "QCPUFreq" #define APPVERSION "0.3.2" @@ -38,6 +37,8 @@ MainWindow::MainWindow(QWidget *parent) : helperProcess( this ), //create a new, stackable help window helpWindow( this ), + //set minFreq to 0 + minFreq(0), //create UI refresh timer refreshTimer( this ), //create a QGraphicsScene for the little chip icon @@ -47,7 +48,7 @@ MainWindow::MainWindow(QWidget *parent) : { //this is a stacked window on Maemo 5 #if defined(Q_WS_MAEMO_5) - setAttribute(Qt::WA_Maemo5StackedWindow); + setAttribute(Qt::WA_Maemo5StackedWindow); #endif ui->setupUi(this); @@ -65,7 +66,7 @@ MainWindow::MainWindow(QWidget *parent) : // initialize stackable help window #if defined(Q_WS_MAEMO_5) - helpWindow.setAttribute(Qt::WA_Maemo5StackedWindow); + helpWindow.setAttribute(Qt::WA_Maemo5StackedWindow); #endif helpWindow.setWindowFlags( windowFlags() | Qt::Window ); @@ -158,24 +159,24 @@ QString MainWindow::getCPUTemp() //check if we can read a more accurate temperature (only for power kernel) if (file.exists()) - return QString( readSysFile( "class/power_supply/bq27200-0/temp" ) + " " + QString::fromUtf8("\302\260") + "C" ); + return QString( readSysFile( "class/power_supply/bq27200-0/temp" ) + " " + QString::fromUtf8("\302\260") + "C" ); else { - /* - We actually only need to read the raw temperature, but it appears that by also reading temp1_input - the raw temperature (temp1_input_raw) is being updated more frequently. - */ - readSysFile( "devices/platform/omap34xx_temp/temp1_input" ); - - //read the current system temperature - QString tstring = readSysFile( "devices/platform/omap34xx_temp/temp1_input_raw" ); - if (tstring == "0") - return tr( "Unknown" ); - - //convert it to an integer and calculate the approx. temperature from the raw value - int tint = tstring.toInt(); - tint = ( 0.65 * tint ); - tstring.setNum(tint); - return QString( tstring + " " + QString::fromUtf8("\302\260") + "C" ); + /* + We actually only need to read the raw temperature, but it appears that by also reading temp1_input + the raw temperature (temp1_input_raw) is being updated more frequently. + */ + readSysFile( "devices/platform/omap34xx_temp/temp1_input" ); + + //read the current system temperature + QString tstring = readSysFile( "devices/platform/omap34xx_temp/temp1_input_raw" ); + if (tstring == "0") + return tr( "Unknown" ); + + //convert it to an integer and calculate the approx. temperature from the raw value + int tint = tstring.toInt(); + tint = ( 0.65 * tint ); + tstring.setNum(tint); + return QString( tstring + " " + QString::fromUtf8("\302\260") + "C" ); } #endif return tr( "Unknown" ); @@ -197,8 +198,32 @@ int MainWindow::getMaxFreq() */ int MainWindow::getMinFreq() { - QString tmp = readSysFile( "devices/system/cpu/cpu0/cpufreq/scaling_min_freq" ); - return tmp.toInt(); + if (this->minFreq == 0) { + QString min = readSysFile( "devices/system/cpu/cpu0/cpufreq/scaling_min_freq" ); + //check if avoid file exists (only on power kernel) + QFile file( "/sys/devices/system/cpu/cpu0/cpufreq/ondemand/avoid_frequencies" ); + if (file.exists()) { + QString avoid = readSysFile( "devices/system/cpu/cpu0/cpufreq/ondemand/avoid_frequencies" ); + QStringList avoidList = avoid.split( " " ); + + //check if min is in avoid_frequencies + for (int i = getScalingStep( min.toInt() ); i>0; --i) { + if (!avoidList.contains(min.setNum( getScalingFreq(i) ))) { + this->minFreq = min.toInt(); + return this->minFreq; + } + } + + //should not happen at all + this->minFreq = 125000; + return this->minFreq; + } else { + this->minFreq = min.toInt(); + return this->minFreq; + } + } else { + return this->minFreq; + } } @@ -396,10 +421,10 @@ void MainWindow::setSmartReflex() //SmartReflex is only supported on Maemo5 #if defined(Q_WS_MAEMO_5) if ( getSmartReflexState() == 1 ) - callHelper( "set_sr", "off"); + callHelper( "set_sr", "off"); else { - QMaemo5InformationBox::information(this, tr( "SmartReflex support is known to be unstable on some devices and may cause random reboots." ), QMaemo5InformationBox::DefaultTimeout); - callHelper( "set_sr", "on"); + QMaemo5InformationBox::information(this, tr( "SmartReflex support is known to be unstable on some devices and may cause random reboots." ), QMaemo5InformationBox::DefaultTimeout); + callHelper( "set_sr", "on"); } #endif @@ -424,7 +449,7 @@ bool MainWindow::usePortrait() { QRect screenGeometry = QApplication::desktop()->screenGeometry(); if (screenGeometry.width() > screenGeometry.height()) - return false; + return false; else - return true; + return true; } diff --git a/src/mainwindow.h b/src/mainwindow.h index 7f10e82..a2c3042 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -63,6 +63,7 @@ private: QProcess helperProcess; //! The help window HelpWindow helpWindow; + int minFreq; QString readSysFile( QString sys_file ); //! the timer for refreshing the UI QTimer refreshTimer; -- 1.7.9.5