#ifndef _IOI2CLM7x_H
#define _IOI2CLM7x_H
#include <IOI2C/IOI2CDevice.h>
#define kCfgRegSD 0x01
#define kCfgRegTM 0x02
#define kCfgRegPOL 0x04
#define kCfgRegF0 0x08
#define kCfgRegF1 0x10
#define kCfgRegR0 0x20
#define kCfgRegR1 0x40
#define kDTSensorParamsVersionKey "hwsensor-params-version"
#define kDTSensorIDKey "hwsensor-id"
#define kDTSensorZoneKey "hwsensor-zone"
#define kDTSensorTypeKey "hwsensor-type"
#define kDTSensorLocationKey "hwsensor-location"
#define kDTSensorPollingPeriodKey "hwsensor-polling-period"
#define kHWSensorNubName "temp-sensor"
#define kHWSensorParamsVersionKey "version"
#define kHWSensorIDKey "sensor-id"
#define kHWSensorZoneKey "zone"
#define kHWSensorTypeKey "type"
#define kHWSensorLocationKey "location"
#define kHWSensorPollingPeriodKey "polling-period"
#define kLM7xCompatibleString1 "ds1775"
#define kLM7xCompatibleString2 "lm75"
#define kTriesToAttempt 5
class IOI2CLM7x : public IOI2CDevice
{
OSDeclareDefaultStructors(IOI2CLM7x)
private:
enum {
kTemperatureReg = 0x00,
kConfigurationReg = 0x01,
kT_hystReg = 0x02,
kT_osReg = 0x03
};
struct savedRegisters_t
{
UInt16 Temperature;
UInt8 Configuration;
UInt16 Thyst;
UInt16 Tos;
} savedRegisters;
bool fRegistersAreSaved;
bool fInitHWFailed;
const OSSymbol *sGetSensorValueSym;
UInt32 fHWSensorIDMap[5];
OSArray *parseSensorParamsAndCreateNubs(IOService *nub);
IOReturn initHW(void); IOReturn saveRegisters(void);
IOReturn restoreRegisters(void);
IOReturn getTemperature(SInt32 *);
public:
virtual bool start(IOService *);
virtual void free ( void );
using IOService::callPlatformFunction;
virtual IOReturn callPlatformFunction(const OSSymbol *, bool, void *, void *, void *, void *);
virtual void processPowerEvent(UInt32 eventType);
};
#endif // _IOI2CLM7x_H