summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie/odevice.cpp90
-rw-r--r--libopie/odevice.h10
2 files changed, 88 insertions, 12 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index e24e043..bc09e92 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -142,2 +142,5 @@ public:
142 142
143 virtual bool hasHingeSensor() const;
144 virtual OHingeStatus readHingeSensor();
145
143 static bool isZaurus(); 146 static bool isZaurus();
@@ -825,3 +828,3 @@ bool ODevice::hasLightSensor ( ) const
825/** 828/**
826 * @return a value from the light senso 829 * @return a value from the light sensor
827 */ 830 */
@@ -833,3 +836,3 @@ int ODevice::readLightSensor ( )
833/** 836/**
834 * @return the light sensor resolution whatever that is ;) 837 * @return the light sensor resolution
835 */ 838 */
@@ -841,2 +844,18 @@ int ODevice::lightSensorResolution ( ) const
841/** 844/**
845 * @return if the device has a hinge sensor
846 */
847bool ODevice::hasHingeSensor ( ) const
848{
849 return false;
850}
851
852/**
853 * @return a value from the hinge sensor
854 */
855OHingeStatus ODevice::readHingeSensor ( )
856{
857 return CASE_UNKNOWN;
858}
859
860/**
842 * @return a list with CPU frequencies supported by the hardware 861 * @return a list with CPU frequencies supported by the hardware
@@ -1947,5 +1966,2 @@ bool Zaurus::setDisplayBrightness ( int bright )
1947{ 1966{
1948// FIXME The C7x0 have a proc-interface (/proc/drivers/corgi-bl) which
1949// is nice to use. Currently it exposes 16+1 levels. Implement this!
1950// (or wait for kergoth unifying the interfaces in the OpenZaurus kernel.)
1951 bool res = false; 1967 bool res = false;
@@ -1953,8 +1969,23 @@ bool Zaurus::setDisplayBrightness ( int bright )
1953 1969
1954 if ( bright > 255 ) 1970 if ( bright > 255 ) bright = 255;
1955 bright = 255; 1971 if ( bright < 0 ) bright = 0;
1956 if ( bright < 0 )
1957 bright = 0;
1958 1972
1959 if (m_embedix) { 1973 if ( m_embedix )
1974 {
1975 if ( d->m_model == Model_Zaurus_SLC7x0 )
1976 {
1977 // special treatment for devices with the corgi backlight interface
1978 if (( fd = ::open ( "/proc/driver/fl/corgi-bl", O_WRONLY )) >= 0 )
1979 {
1980 if ( bright > 0x11 ) bright = 0x11;
1981 char writeCommand[100];
1982 const int count = sprintf( writeCommand, "0x%x\n", bright );
1983 res = ( ::write ( fd, writeCommand, count ) != -1 );
1984 ::close ( fd );
1985 }
1986 return res;
1987 }
1988 else
1989 {
1990 // standard treatment for devices with the dumb embedix frontlight interface
1960 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) { 1991 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) {
@@ -1966,3 +1997,7 @@ bool Zaurus::setDisplayBrightness ( int bright )
1966 } 1997 }
1967 } else { 1998 }
1999 }
2000 else
2001 {
2002 // special treatment for the OpenZaurus unified interface
1968#define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */ 2003#define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */
@@ -2075,3 +2110,3 @@ int Zaurus::displayBrightnessResolution ( ) const
2075 if (m_embedix) 2110 if (m_embedix)
2076 return 5; 2111 return d->m_model == Model_Zaurus_SLC7x0 ? 18 : 5;
2077 else 2112 else
@@ -2080,2 +2115,33 @@ int Zaurus::displayBrightnessResolution ( ) const
2080 2115
2116bool Zaurus::hasHingeSensor() const
2117{
2118 return d->m_model == Model_Zaurus_SLC7x0;
2119}
2120
2121OHingeStatus Zaurus::readHingeSensor()
2122{
2123 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
2124 if (handle == -1)
2125 {
2126 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror
2127 return CASE_UNKNOWN;
2128 }
2129 else
2130 {
2131 int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
2132 ::close (handle);
2133 if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE )
2134 {
2135 qDebug( "Zaurus::readHingeSensor() - result = %d", retval );
2136 return static_cast<OHingeStatus>( retval );
2137 }
2138 else
2139 {
2140 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" );
2141 return CASE_UNKNOWN;
2142 }
2143 }
2144}
2145
2146
2081/************************************************** 2147/**************************************************
diff --git a/libopie/odevice.h b/libopie/odevice.h
index 8273761..ee0b0ec 100644
--- a/libopie/odevice.h
+++ b/libopie/odevice.h
@@ -145,2 +145,9 @@ enum ODirection {
145 145
146enum OHingeStatus {
147 CASE_CLOSED = 3,
148 CASE_PORTRAIT = 2,
149 CASE_LANDSCAPE = 0,
150 CASE_UNKNOWN = 1,
151};
152
146/** 153/**
@@ -224,2 +231,5 @@ public:
224 231
232 virtual bool hasHingeSensor ( ) const;
233 virtual OHingeStatus readHingeSensor ( );
234
225 const QStrList &allowedCpuFrequencies() const; 235 const QStrList &allowedCpuFrequencies() const;