#ifndef _IOI2CMaxim1989_H
#define _IOI2CMaxim1989_H
#include <IOKit/IOLib.h>
#include <IOKit/IOService.h>
#include <IOKit/IODeviceTreeSupport.h>
#include <IOKit/IOPlatformExpert.h>
#include <IOKit/pwr_mgt/RootDomain.h>
#include "IOPlatformFunction.h"
#include <IOI2C/IOI2CDevice.h>
#ifdef DLOG
#undef DLOG
#endif
#ifdef MAX1989_DEBUG
#define DLOG(fmt, args...) kprintf(fmt, ## args)
#else
#define DLOG(fmt, args...)
#endif
#define kNumRetries 10
#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"
enum {
kHWSensorPollingPeriodNULL = 0xFFFFFFFF
};
class IOI2CMaxim1989 : public IOI2CDevice
{
OSDeclareDefaultStructors(IOI2CMaxim1989)
private:
enum {
kReadLocalTemp = 0x00,
kReadRemoteDX1Temp = 0x01,
kReadRemoteDX2Temp = 0x02,
kReadRemoteDX3Temp = 0x03,
kReadRemoteDX4Temp = 0x04,
kReadStatusByte1 = 0x05,
kReadStatusByte2 = 0x06,
kReadConfigurationByte = 0x07,
kReadLocalHighLimit = 0x08,
kReadLocalLowLimit = 0x09,
kReadRemoteDX1HighLimit = 0x0A,
kReadRemoteDX1LowLimit = 0x0B,
kReadRemoteDX2HighLimit = 0x0C,
kReadRemoteDX2LowLimit = 0x0D,
kReadRemoteDX3HighLimit = 0x0E,
kReadRemoteDX3LowLimit = 0x0F,
kReadRemoteDX4HighLimit = 0x10,
kReadRemoteDX4LowLimit = 0x11,
kWriteConfigurationByte = 0x12,
kWriteLocalHighLimit = 0x13,
kWriteLocalLowLimit = 0x14,
kWriteRemoteDX1HighLimit = 0x15,
kWriteRemoteDX1LowLimit = 0x16,
kWriteRemoteDX2HighLimit = 0x17,
kWriteRemoteDX2LowLimit = 0x18,
kWriteRemoteDX3HighLimit = 0x19,
kWriteRemoteDX3LowLimit = 0x1A,
kWriteRemoteDX4HighLimit = 0x1B,
kWriteRemoteDX4LowLimit = 0x1C,
kReadManufactureID = 0xFE,
kReadDeviceID = 0xFF
};
const OSSymbol * fGetSensorValueSym;
IOReturn publishChildren(IOService *);
IOReturn getTemp( UInt32 Reg, SInt32 * temp );
public:
virtual bool start( IOService * nub );
virtual void stop( IOService * nub );
virtual bool init( OSDictionary * dict );
virtual void free( void );
using IOService::callPlatformFunction;
virtual IOReturn callPlatformFunction(const OSSymbol *functionName,
bool waitForFunction,
void *param1, void *param2,
void *param3, void *param4);
};
#endif // _IOI2CMaxim1989_H