#ifndef _APPLELM7X_H
#define _APPLELM7X_H
#include <IOKit/IOTypes.h>
#include <IOKit/IOLib.h>
#include <IOKit/IODeviceTreeSupport.h>
#include <IOKit/IOService.h>
#include <IOKit/IOWorkLoop.h>
#include <IOKit/IOInterruptEventSource.h>
#include <IOKit/IOTimerEventSource.h>
#include <IOKit/IORegistryEntry.h>
#include <IOKit/pwr_mgt/RootDomain.h>
#include <IOKit/pwr_mgt/IOPMPrivate.h>
#include <IOKit/IOMessage.h>
#ifdef DLOG
#undef DLOG
#endif
#ifdef LM7X_DEBUG
#define DLOG(fmt, args...) kprintf(fmt, ## args)
#else
#define DLOG(fmt, args...)
#endif
#define kWriteI2Cbus "writeI2CBus"
#define kReadI2Cbus "readI2CBus"
#define kOpenI2Cbus "openI2CBus"
#define kCloseI2Cbus "closeI2CBus"
#define kSetPollingMode "setPollingMode"
#define kSetStandardMode "setStandardMode"
#define kSetStandardSubMode "setStandardSubMode"
#define kSetCombinedMode "setCombinedMode"
#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
enum
{
kLM7xOffState = 0,
kLM7xSleepState = 1,
kLM7xOnState = 2,
kLM7xNumStates = 3
};
class AppleLM7x : public IOService
{
OSDeclareDefaultStructors(AppleLM7x)
private:
enum {
kTemperatureReg = 0x00,
kConfigurationReg = 0x01,
kT_hystReg = 0x02,
kT_osReg = 0x03
};
struct savedRegisters_t
{
UInt16 Temperature;
UInt8 Configuration;
UInt16 Thyst;
UInt16 Tos;
} savedRegisters;
UInt8 kLM7xAddr, kLM7xBus;
IOService *interface;
const OSSymbol *callPlatformFunction_getTempForIOHWSensorSymbol,
*sOpenI2Cbus,
*sCloseI2Cbus,
*sSetPollingMode,
*sSetStandardSubMode,
*sSetCombinedMode,
*sWriteI2Cbus,
*sReadI2Cbus,
*sGetSensorValueSym;
IOPMrootDomain *pmRootDomain;
UInt32 fHWSensorIDMap[5];
OSArray *parseSensorParamsAndCreateNubs(IOService *nub);
IOReturn initHW(IOService *provider); IOReturn openI2C(UInt8 id);
IOReturn closeI2C();
IOReturn writeI2C(UInt8 subAddr, UInt8 *data, UInt16 size);
IOReturn readI2C(UInt8 subAddr, UInt8 *data, UInt16 size);
IOReturn saveRegisters();
IOReturn restoreRegisters();
public:
static bool systemIsRestarting;
virtual bool start(IOService *);
IOService *processNewNub(IOService *provider);
virtual void stop(IOService *);
IOReturn getTemperature(SInt32 *);
virtual IOReturn callPlatformFunction(const OSSymbol *, bool, void *, void *, void *, void *);
virtual IOReturn setPowerState(unsigned long, IOService *);
static IOReturn sysPowerDownHandler(void *, void *, UInt32, IOService *, void *, vm_size_t);
};
#endif _APPLELM7X_H