#ifndef _APPLEADT746x_H
#define _APPLEADT746x_H
#include <IOKit/IOService.h>
#include <IOKit/i2c/PPCI2CInterface.h>
#include <IOKit/pwr_mgt/RootDomain.h>
#include "ADT746x.h"
#ifdef DLOG
#undef DLOG
#endif
#ifdef APPLEADT746x_DEBUG
#define DLOG(fmt, args...) IOLog(fmt, ## args)
#else
#define DLOG(fmt, args...) do {} while(0)
#endif
#define kNumRetries 10 // I2C transactions are retried before failing
#define kGetTempSymbol "platform-getTemp"
#define kGetSensorValueSymbol "getSensorValue"
enum {
kADT746xProbeFailureScore = 0,
kADT746xProbeSuccessScore = 11000
};
#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 kDTTemperatureSensorType "temperature"
#define kDTVoltageSensorType "voltage"
#define kDTFanSpeedSensorType "fanspeed"
#define kHWSensorTemperatureNubName "temp-sensor"
#define kHWSensorVoltageNubName "voltage-sensor"
#define kHWSensorFanSpeedNubName "fanspeed-sensor"
#define kHWSensorParamsVersionKey "version"
#define kHWSensorIDKey "sensor-id"
#define kHWSensorZoneKey "zone"
#define kHWSensorTypeKey "type"
#define kHWSensorLocationKey "location"
#define kHWSensorPollingPeriodKey "polling-period"
#define kFanTachOne 1
#define kFanTachTwo 2
enum {
kHWSensorPollingPeriodNULL = 0xFFFFFFFF
};
#define kADT7460Compatible "adt7460"
#define kADT7467Compatible "adt7467"
class AppleADT746x : public IOService
{
OSDeclareDefaultStructors(AppleADT746x)
private:
PPCI2CInterface *fI2CInterface;
UInt8 fI2CBus; UInt8 fI2CAddr;
UInt8 fDeviceID;
bool fClearSMBAlertStatus;
UInt32 fHWSensorIDMap[3];
const OSSymbol *getSensorValueSymbol;
unsigned parseSensorParamsAndCreateNubs(IOService *provider);
bool doI2COpen(void);
void doI2CClose(void);
bool doI2CRead(UInt8 sub, UInt8 *bytes, UInt16 len);
bool doI2CWrite(UInt8 sub, UInt8 *bytes, UInt16 len);
IOReturn AppleADT746x::getLocalTemp(SInt32 *temperature);
IOReturn AppleADT746x::getRemote1Temp(SInt32 *temperature);
IOReturn AppleADT746x::getRemote2Temp(SInt32 *temperature);
IOReturn AppleADT746x::getVoltage(SInt32 *voltage);
IOReturn AppleADT746x::getFanTach(SInt32 *fanSpeed, SInt16 whichFan);
public:
virtual IOService *probe(IOService *provider, SInt32 *score);
virtual bool init(OSDictionary *dict);
virtual void free(void);
virtual bool start(IOService *provider);
virtual void stop(IOService *provider);
virtual IOReturn callPlatformFunction(const OSSymbol *functionName,
bool waitForFunction, void *param1, void *param2,
void *param3, void *param4);
virtual IOReturn powerStateWillChangeTo(IOPMPowerFlags, unsigned long, IOService*);
virtual IOReturn powerStateDidChangeTo(IOPMPowerFlags, unsigned long, IOService*);
};
#endif // _APPLEADT746x_H