[CVS] ati.4.4.0 uda1380.c,NONE,1.1.2.1 uda1380.h,NONE,1.1.2.1 uda1380_module.c,NONE,1.1.2.1
Status: Beta
Brought to you by:
volodya
From: <gat...@li...> - 2005-01-13 14:13:54
|
Update of /cvsroot/gatos/ati.4.4.0 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4924 Added Files: Tag: r200_branch uda1380.c uda1380.h uda1380_module.c Log Message: This adds support for UDA1380 sound coder-decoder used for ATI AIW cards featuring RT200 --- NEW FILE: uda1380.c --- /************************************************************************************* * $Id: uda1380.c,v 1.1.2.1 2005/01/13 14:13:45 bogdand Exp $ * * Created by Bogdan D. bo...@us... * License: GPL * * $Log: uda1380.c,v $ * Revision 1.1.2.1 2005/01/13 14:13:45 bogdand * This adds support for UDA1380 sound coder-decoder used for ATI AIW cards featuring RT200 * * ************************************************************************************/ #include "xf86.h" #include "xf86i2c.h" #include "uda1380.h" #include "i2c_def.h" UDA1380Ptr Detect_uda1380(I2CBusPtr b, I2CSlaveAddr addr) { UDA1380Ptr t; I2CByte a; t = xcalloc(1, sizeof(UDA1380Rec)); if(t == NULL) return NULL; switch(addr) { case UDA1380_ADDR_1: case UDA1380_ADDR_2: t->d.DevName = "UDA1380 Stereo audion coder-decoder"; break; default: t->d.DevName = "Generic UDAxxxx"; break; } t->d.SlaveAddr = addr; t->d.pI2CBus = b; t->d.NextDev = NULL; t->d.StartTimeout = b->StartTimeout; t->d.BitTimeout = b->BitTimeout; t->d.AcknTimeout = b->AcknTimeout; t->d.ByteTimeout = b->ByteTimeout; if(!I2C_WriteRead(&(t->d), NULL, 0, &a, 1)) { xfree(t); return NULL; } /* set default parameters */ if(!I2CDevInit(&(t->d))) { xfree(t); return NULL; } xf86DrvMsg(t->d.pI2CBus->scrnIndex,X_INFO,"UDA1380 stereo coder-decoder detected\n"); return t; } Bool uda1380_init(UDA1380Ptr t) { CARD8 data[3]; CARD16 tmp; Bool ret; /* Power control */ data[0] = 0x02; tmp = (1 << 13) | (1 << 10) | ( 1 << 8) | (1 << 7) | (1 << 6) | (1 << 3) | (1 << 1); data[1] = (CARD8)((tmp >> 8) & 0xff); data[2] = (CARD8)(tmp & 0xff); ret = I2C_WriteRead(&(t->d), data, 3, NULL, 0); if (ret == FALSE) { xf86DrvMsg(t->d.pI2CBus->scrnIndex,X_INFO,"UDA1380 failed to initialize\n"); return FALSE; } /* Analog mixer (AVC) */ data[0] = 0x03; /* the analog mixer is muted initially */ data[1] = 0x3f; data[2] = 0x3f; ret = I2C_WriteRead(&(t->d), data, 3, NULL, 0); if (ret == FALSE) { xf86DrvMsg(t->d.pI2CBus->scrnIndex,X_INFO,"UDA1380 failed to initialize\n"); return FALSE; } xf86DrvMsg(t->d.pI2CBus->scrnIndex,X_INFO,"UDA1380 initialized\n"); return TRUE; } void uda1380_shutdown(UDA1380Ptr t) { CARD8 data[3]; Bool ret; /* Power control */ data[0] = 0x02; data[1] = 0; data[2] = 0; ret = I2C_WriteRead(&(t->d), data, 3, NULL, 0); if (ret == FALSE) xf86DrvMsg(t->d.pI2CBus->scrnIndex,X_INFO,"UDA1380 failed to shutdown\n"); } void uda1380_setvolume(UDA1380Ptr t, INT32 value) { CARD8 data[3]; /* * We have to scale the value ranging from -1000 to 1000 to 0x2c to 0 */ CARD8 volume = 47 - (CARD8)((value + 1000) * 47 / 2000); Bool ret; t->analog_mixer_settings = ((volume << 8) & 0x3f00) | (volume & 0x3f); /* Analog mixer (AVC) */ data[0] = 0x03; data[1] = volume & 0x3f; data[2] = volume & 0x3f; ret = I2C_WriteRead(&(t->d), data, 3, NULL, 0); if (ret == FALSE) xf86DrvMsg(t->d.pI2CBus->scrnIndex,X_INFO,"UDA1380 failed to set volume\n"); } void uda1380_mute(UDA1380Ptr t, Bool mute) { CARD8 data[3]; Bool ret; if (mute == TRUE) { /* Analog mixer (AVC) */ data[0] = 0x03; data[1] = 0xff; data[2] = 0xff; ret = I2C_WriteRead(&(t->d), data, 3, NULL, 0); if (ret == FALSE) xf86DrvMsg(t->d.pI2CBus->scrnIndex,X_INFO,"UDA1380 failed to mute\n"); } else { /* Analog mixer (AVC) */ data[0] = 0x03; data[1] = (CARD8)((t->analog_mixer_settings >> 8) & 0x3f); data[2] = (CARD8)(t->analog_mixer_settings & 0x3f); ret = I2C_WriteRead(&(t->d), data, 3, NULL, 0); if (ret == FALSE) xf86DrvMsg(t->d.pI2CBus->scrnIndex,X_INFO,"UDA1380 failed to unmute\n"); } } void uda1380_getstatus(UDA1380Ptr t) { } void uda1380_setparameters(UDA1380Ptr t) { } void uda1380_dumpstatus(UDA1380Ptr t) { } --- NEW FILE: uda1380_module.c --- #include "xf86Module.h" static MODULESETUPPROTO(uda1380Setup); static XF86ModuleVersionInfo uda1380VersRec = { "uda1380", MODULEVENDORSTRING, MODINFOSTRING1, MODINFOSTRING2, XF86_VERSION_CURRENT, 1, 0, 0, ABI_CLASS_VIDEODRV, /* This needs the video driver ABI */ ABI_VIDEODRV_VERSION, MOD_CLASS_NONE, {0,0,0,0} }; XF86ModuleData uda1380ModuleData = { &uda1380VersRec, uda1380Setup, NULL }; static pointer uda1380Setup(pointer module, pointer opts, int *errmaj, int *errmin) { return (pointer)1; } --- NEW FILE: uda1380.h --- /************************************************************************************* * $Id: uda1380.h,v 1.1.2.1 2005/01/13 14:13:45 bogdand Exp $ * * Created by Bogdan D. bo...@us... * License: GPL * * $Log: uda1380.h,v $ * Revision 1.1.2.1 2005/01/13 14:13:45 bogdand * This adds support for UDA1380 sound coder-decoder used for ATI AIW cards featuring RT200 * * ************************************************************************************/ #ifndef __UDA1380_H__ #define __UDA1380_H__ #include "xf86i2c.h" typedef struct { I2CDevRec d; CARD16 analog_mixer_settings; /* register 0x03 */ } UDA1380Rec, *UDA1380Ptr; #define UDA1380_ADDR_1 0x30 #define UDA1380_ADDR_2 0x34 UDA1380Ptr Detect_uda1380(I2CBusPtr b, I2CSlaveAddr addr); Bool uda1380_init(UDA1380Ptr t); void uda1380_shutdown(UDA1380Ptr t); void uda1380_setvolume(UDA1380Ptr t, INT32); void uda1380_mute(UDA1380Ptr t, Bool); void uda1380_setparameters(UDA1380Ptr t); void uda1380_getstatus(UDA1380Ptr t); void uda1380_dumpstatus(UDA1380Ptr t); #define UDA1380SymbolsList \ "Detect_uda1380", \ "uda1380_init", \ "uda1380_shutdown", \ "uda1380_setvolume", \ "uda1380_mute", \ "uda1380_setparameters", \ "uda1380_getstatus", \ "uda1380_dumpstatus" #ifdef XFree86LOADER #define xf86_Detect_uda1380 ((TDA9885Ptr (*)(I2CBusPtr, I2CSlaveAddr))LoaderSymbol("Detect_uda1380")) #define xf86_uda1380_init ((Bool (*)(TDA9885Ptr))LoaderSymbol("uda1380_init")) #define xf86_uda1380_shutdown ((void (*)(TDA9885Ptr))LoaderSymbol("uda1380_shutdown")) #define xf86_uda1380_setvolume ((void (*)(TDA9885Ptr, CARD16))LoaderSymbol("uda1380_setvolume")) #define xf86_uda1380_mute ((void (*)(TDA9885Ptr, Bool))LoaderSymbol("uda1380_mute")) #define xf86_uda1380_setparameters ((void (*)(TDA9885Ptr))LoaderSymbol("uda1380_setparameters")) #define xf86_uda1380_getstatus ((void (*)(TDA9885Ptr))LoaderSymbol("uda1380_getstatus")) #define xf86_uda1380_dumpstatus ((void (*)(TDA9885Ptr))LoaderSymbol("uda1380_dumpstatus")) #else #define xf86_Detect_uda1380 Detect_uda1380 #define xf86_uda1380_init uda1380_init #define xf86_uda1380_shutdown uda1380_shutdown #define xf86_uda1380_setvolume uda1380_setvolume #define xf86_uda1380_mute uda1380_mute #define xf86_uda1380_setparameters uda1380_setparameters #define xf86_uda1380_getstatus uda1380_getstatus #define xf86_uda1380_dumpstatus uda1380_dumpstatus #endif #endif |