AppleOWScreamerAudio.h [plain text]
#ifndef _APPLEOWSCREAMERAUDIO_H
#define _APPLEOWSCREAMERAUDIO_H
#include <IOKit/audio/IOAudioDevice.h>
class IOAudioControl;
struct awacsOW_regmap_t;
struct IODBDMAChannelRegisters;
struct IODBDMADescriptor;
class IOAudioLevelControl;
enum
{
kMaximumVolume = 32,
kMinimumVolume = 0,
kInitialVolume = 32
};
enum {
kOutMute = 0,
kOutVolLeft = 1,
kOutVolRight = 2,
kPassThruToggle = 3,
kInGainLeft = 4,
kInGainRight = 5,
kHeadphoneInsert = 6,
kInputInsert = 7,
kNumControls
};
class AppleOWScreamerAudio : public IOAudioDevice
{
OSDeclareDefaultStructors(AppleOWScreamerAudio);
protected:
volatile awacsOW_regmap_t * ioBase;
UInt32 soundControlRegister;
UInt32 codecControlRegister[8];
UInt32 codecStatus;
bool iicAudioDevicePresent;
bool updateStatus;
IOAudioToggleControl * outMute;
IOAudioToggleControl * playthruToggle;
IOAudioToggleControl * headphoneConnection;
IOAudioToggleControl * inputConnection;
IOAudioLevelControl * outVolLeft;
IOAudioLevelControl * outVolRight;
IOAudioLevelControl * inGainLeft;
IOAudioLevelControl * inGainRight;
IOAudioSelectorControl * outputSelector;
UInt32 gVolLeft, gVolRight;
UInt32 numDetects;
UInt32 numOutputs;
UInt32 awacsVersion;
short curActiveSpkr;
bool duringInitialization;
public:
virtual bool init(OSDictionary *properties);
virtual void free();
virtual void retain() const;
virtual void release() const;
virtual bool start(IOService *provider);
virtual void stop(IOService *provider);
virtual IOService* probe(IOService *provider, SInt32* score);
virtual void initHardware();
virtual void recalibrate();
virtual IOReturn performPowerStateChange(IOAudioDevicePowerState oldPowerState,
IOAudioDevicePowerState newPowerState,
UInt32 *microsecondsUntilComplete);
virtual IOReturn performDeviceWake();
virtual IOReturn performDeviceSleep();
static IOReturn volumeLeftChangeHandler(IOService *target, IOAudioControl *volumeControl, SInt32 oldValue, SInt32 newValue);
virtual IOReturn volumeLeftChanged(IOAudioControl *volumeControl, SInt32 oldValue, SInt32 newValue);
static IOReturn volumeRightChangeHandler(IOService *target, IOAudioControl *volumeControl, SInt32 oldValue, SInt32 newValue);
virtual IOReturn volumeRightChanged(IOAudioControl *volumeControl, SInt32 oldValue, SInt32 newValue);
static IOReturn outputMuteChangeHandler(IOService *target, IOAudioControl *muteControl, SInt32 oldValue, SInt32 newValue);
virtual IOReturn outputMuteChanged(IOAudioControl *muteControl, SInt32 oldValue, SInt32 newValue);
static IOReturn gainLeftChangeHandler(IOService *target, IOAudioControl *gainControl, SInt32 oldValue, SInt32 newValue);
virtual IOReturn gainLeftChanged(IOAudioControl *gainControl, SInt32 oldValue, SInt32 newValue);
static IOReturn gainRightChangeHandler(IOService *target, IOAudioControl *gainControl, SInt32 oldValue, SInt32 newValue);
virtual IOReturn gainRightChanged(IOAudioControl *gainControl, SInt32 oldValue, SInt32 newValue);
static IOReturn passThruChangeHandler(IOService *target, IOAudioControl *passThruControl, SInt32 oldValue, SInt32 newValue);
virtual IOReturn passThruChanged(IOAudioControl *passThruControl, SInt32 oldValue, SInt32 newValue);
IOReturn setModemSound(bool state);
virtual IOReturn callPlatformFunction( const OSSymbol * functionName,bool waitForFunction,
void *param1, void *param2, void *param3, void *param4 );
IOReturn setToneHardwareMuteRear(bool mute); IOReturn setToneHardwareMuteFront(bool mute); IOReturn setToneHardwareMuteBoomer(bool mute);
IOReturn setToneHardwareVolume(UInt32 volLeft, UInt32 volRight);
IOReturn setToneHardwareBalance(UInt32 volLeft, UInt32 volRight);
UInt8 VolumeToPRAMValue( UInt32 volLeft , UInt32 volRight);
void WritePRAMVol( UInt32 volLeft , UInt32 volRight);
protected:
virtual bool createPorts(IOAudioEngine *driverDMAEngine);
virtual void checkStatus(bool force);
static void timerCallback(OSObject *target, IOAudioDevice *device);
IOReturn writesgs7433(UInt8 RegIndex, unsigned char RegValue );
IOReturn readsgs7433( UInt8 RegIndex, unsigned char *RegValue);
UInt32 sndHWGetProgOutput(void );
IOReturn sndHWSetProgOutput(UInt32 outputBits);
UInt32 sndHWGetActiveInputExclusive(void);
IOReturn sndHWSetActiveInputExclusive(UInt32 input );
UInt32 sndHWGetRegister(UInt32 regNum);
IOReturn sndHWSetRegister(UInt32 regNum, UInt32 value);
};
#endif