diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-10-04 01:18:27 -0500 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-10-04 01:18:27 -0500 |
commit | 10070eb92e8247688779852d7214771b9dcdda13 (patch) | |
tree | 88a2dfe4153ea7e9f64762a855d38e85605b1d4c /tdecore | |
parent | 7fd6a1177d23500eabdf1ea077b2b29b8e9c85bc (diff) | |
download | tdelibs-10070eb92e8247688779852d7214771b9dcdda13.tar.gz tdelibs-10070eb92e8247688779852d7214771b9dcdda13.zip |
Detect CPU information when cpufreq only partially implemented
Classify additional SPI devices
Diffstat (limited to 'tdecore')
-rw-r--r-- | tdecore/tdehardwaredevices.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/tdecore/tdehardwaredevices.cpp b/tdecore/tdehardwaredevices.cpp index bfb6b694d..2e6ebf68d 100644 --- a/tdecore/tdehardwaredevices.cpp +++ b/tdecore/tdehardwaredevices.cpp @@ -2059,6 +2059,7 @@ void TDEHardwareDevices::processModifiedCPUs() { TDECPUDevice *cdevice; cdevice = 0; bool modified = false; + bool have_frequency = false; TQString curline; int processorNumber = 0; @@ -2091,6 +2092,7 @@ void TDEHardwareDevices::processModifiedCPUs() { if (cdevice) { if (cdevice->frequency() != curline.toDouble()) modified = true; cdevice->internalSetFrequency(curline.toDouble()); + have_frequency = true; } } if (curline.startsWith("vendor_id")) { @@ -2234,6 +2236,43 @@ void TDEHardwareDevices::processModifiedCPUs() { governorlist = TQStringList::split(" ", stream.readLine()); availgvrnsfile.close(); } + + if (!have_frequency) { + nodename = cpufreq_dir.path(); + nodename.append("/cpuinfo_cur_freq"); + TQFile cpufreqfile(nodename); + if (cpufreqfile.open(IO_ReadOnly)) { + TQTextStream stream( &cpufreqfile ); + if (cdevice) cdevice->internalSetFrequency(stream.readLine().toDouble()/1000.0); + cpufreqfile.close(); + have_frequency = true; + } + } + + bool frequencyFound; + TQStringList::Iterator freqit; + frequencyFound = false; + for ( freqit = frequencylist.begin(); freqit != frequencylist.end(); ++freqit ) { + double thisfrequency = (*freqit).toDouble()/1000.0; + if (thisfrequency == minfrequency) { + frequencyFound = true; + } + } + if (!frequencyFound) { + int minFrequencyInt = (minfrequency*1000.0); + frequencylist.prepend(TQString("%1").arg(minFrequencyInt)); + } + frequencyFound = false; + for ( freqit = frequencylist.begin(); freqit != frequencylist.end(); ++freqit ) { + double thisfrequency = (*freqit).toDouble()/1000.0; + if (thisfrequency == maxfrequency) { + frequencyFound = true; + } + } + if (!frequencyFound) { + int maxfrequencyInt = (maxfrequency*1000.0); + frequencylist.append(TQString("%1").arg(maxfrequencyInt)); + } } // Update CPU information structure @@ -3196,6 +3235,9 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD || (devicesubsystem == "spidev")) { if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::Serial); } + else if (devicesubsystem == "spi") { + if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::Platform); + } else if (devicesubsystem == "thermal") { // FIXME // Figure out a way to differentiate between ThermalControl (fans and coolers) and ThermalSensor types |