diff options
-rw-r--r-- | drivers/staging/comedi/drivers/addi-data/addi_eeprom.c | 79 |
1 files changed, 34 insertions, 45 deletions
diff --git a/drivers/staging/comedi/drivers/addi-data/addi_eeprom.c b/drivers/staging/comedi/drivers/addi-data/addi_eeprom.c index 306edc82fc08..935da6401887 100644 --- a/drivers/staging/comedi/drivers/addi-data/addi_eeprom.c +++ b/drivers/staging/comedi/drivers/addi-data/addi_eeprom.c @@ -208,7 +208,7 @@ static void v_EepromWaitBusy(unsigned long iobase) } static unsigned short w_EepromReadWord(unsigned long iobase, - char *pc_PCIChipInformation, + char *type, unsigned short w_EepromStartAddress) { unsigned char b_Counter = 0; @@ -220,9 +220,7 @@ static unsigned short w_EepromReadWord(unsigned long iobase, unsigned short w_ReadWord = 0; /* Test the PCI chip type */ - if ((!strcmp(pc_PCIChipInformation, "S5920")) || - (!strcmp(pc_PCIChipInformation, "S5933"))) - { + if (!strcmp(type, "S5920") || !strcmp(type, "S5933")) { for (b_Counter = 0; b_Counter < 2; b_Counter++) { b_SelectedAddressLow = (w_EepromStartAddress + b_Counter) % 256; /* Read the low 8 bit part */ @@ -276,10 +274,9 @@ static unsigned short w_EepromReadWord(unsigned long iobase, } /* for (b_Counter=0; b_Counter<2; b_Counter++) */ w_ReadWord = (b_ReadLowByte | (((unsigned short) b_ReadHighByte) * 256)); - } /* end of if ((!strcmp(pc_PCIChipInformation, "S5920")) || (!strcmp(pc_PCIChipInformation, "S5933"))) */ + } - if (!strcmp(pc_PCIChipInformation, "93C76")) - { + if (!strcmp(type, "93C76")) { /* Read 16 bit from the EEPROM 93C76 */ v_EepromCs76Read(iobase, w_EepromStartAddress, &w_ReadWord); } @@ -288,43 +285,42 @@ static unsigned short w_EepromReadWord(unsigned long iobase, } static int i_EepromReadDigitalInputHeader(unsigned long iobase, - char *pc_PCIChipInformation, + char *type, unsigned short w_Address, struct str_DigitalInputHeader *s_Header) { unsigned short w_Temp; /* read nbr of channels */ - s_Header->w_Nchannel = w_EepromReadWord(iobase, pc_PCIChipInformation, + s_Header->w_Nchannel = w_EepromReadWord(iobase, type, 0x100 + w_Address + 6); /* interruptible or not */ - w_Temp = w_EepromReadWord(iobase, pc_PCIChipInformation, + w_Temp = w_EepromReadWord(iobase, type, 0x100 + w_Address + 8); s_Header->b_Interruptible = (unsigned char) (w_Temp >> 7) & 0x01; /* How many interruptible logic */ - s_Header->w_NinterruptLogic = w_EepromReadWord(iobase, - pc_PCIChipInformation, + s_Header->w_NinterruptLogic = w_EepromReadWord(iobase, type, 0x100 + w_Address + 10); return 0; } static int i_EepromReadDigitalOutputHeader(unsigned long iobase, - char *pc_PCIChipInformation, + char *type, unsigned short w_Address, struct str_DigitalOutputHeader *s_Header) { /* Read Nbr channels */ - s_Header->w_Nchannel = w_EepromReadWord(iobase, pc_PCIChipInformation, + s_Header->w_Nchannel = w_EepromReadWord(iobase, type, 0x100 + w_Address + 6); return 0; } #if 0 static int i_EepromReadTimerHeader(unsigned long iobase, - char *pc_PCIChipInformation, + char *type, unsigned short w_Address, struct str_TimerMainHeader *s_Header) { @@ -332,14 +328,14 @@ static int i_EepromReadTimerHeader(unsigned long iobase, unsigned short i, w_Size = 0, w_Temp; /* Read No of Timer */ - s_Header->w_Ntimer = w_EepromReadWord(iobase, pc_PCIChipInformation, + s_Header->w_Ntimer = w_EepromReadWord(iobase, type, 0x100 + w_Address + 6); /* Read header size */ for (i = 0; i < s_Header->w_Ntimer; i++) { s_Header->s_TimerDetails[i].w_HeaderSize = - w_EepromReadWord(iobase, pc_PCIChipInformation, + w_EepromReadWord(iobase, type, 0x100 + w_Address + 8 + w_Size + 0); - w_Temp = w_EepromReadWord(iobase, pc_PCIChipInformation, + w_Temp = w_EepromReadWord(iobase, type, 0x100 + w_Address + 8 + w_Size + 2); /* Read Resolution */ @@ -350,7 +346,7 @@ static int i_EepromReadTimerHeader(unsigned long iobase, s_Header->s_TimerDetails[i].b_Mode = (unsigned char) (w_Temp >> 4) & 0x3F; - w_Temp = w_EepromReadWord(iobase, pc_PCIChipInformation, + w_Temp = w_EepromReadWord(iobase, type, 0x100 + w_Address + 8 + w_Size + 4); /* Read MinTiming */ @@ -366,18 +362,18 @@ static int i_EepromReadTimerHeader(unsigned long iobase, #endif static int i_EepromReadAnlogOutputHeader(unsigned long iobase, - char *pc_PCIChipInformation, + char *type, unsigned short w_Address, struct str_AnalogOutputHeader *s_Header) { unsigned short w_Temp; /* No of channels for 1st hard component */ - w_Temp = w_EepromReadWord(iobase, pc_PCIChipInformation, + w_Temp = w_EepromReadWord(iobase, type, 0x100 + w_Address + 10); s_Header->w_Nchannel = (w_Temp >> 4) & 0x03FF; /* Resolution for 1st hard component */ - w_Temp = w_EepromReadWord(iobase, pc_PCIChipInformation, + w_Temp = w_EepromReadWord(iobase, type, 0x100 + w_Address + 16); s_Header->b_Resolution = (unsigned char) (w_Temp >> 8) & 0xFF; return 0; @@ -385,25 +381,23 @@ static int i_EepromReadAnlogOutputHeader(unsigned long iobase, /* Reads only for ONE hardware component */ static int i_EepromReadAnlogInputHeader(unsigned long iobase, - char *pc_PCIChipInformation, + char *type, unsigned short w_Address, struct str_AnalogInputHeader *s_Header) { unsigned short w_Temp, w_Offset; - w_Temp = w_EepromReadWord(iobase, pc_PCIChipInformation, + w_Temp = w_EepromReadWord(iobase, type, 0x100 + w_Address + 10); s_Header->w_Nchannel = (w_Temp >> 4) & 0x03FF; - s_Header->w_MinConvertTiming = w_EepromReadWord(iobase, - pc_PCIChipInformation, + s_Header->w_MinConvertTiming = w_EepromReadWord(iobase, type, 0x100 + w_Address + 16); - s_Header->w_MinDelayTiming = w_EepromReadWord(iobase, - pc_PCIChipInformation, + s_Header->w_MinDelayTiming = w_EepromReadWord(iobase, type, 0x100 + w_Address + 30); - w_Temp = w_EepromReadWord(iobase, pc_PCIChipInformation, + w_Temp = w_EepromReadWord(iobase, type, 0x100 + w_Address + 20); s_Header->b_HasDma = (w_Temp >> 13) & 0x01; /* whether dma present or not */ - w_Temp = w_EepromReadWord(iobase, pc_PCIChipInformation, + w_Temp = w_EepromReadWord(iobase, type, 0x100 + w_Address + 72); /* reading Y */ w_Temp = w_Temp & 0x00FF; if (w_Temp) /* Y>0 */ @@ -417,7 +411,7 @@ static int i_EepromReadAnlogInputHeader(unsigned long iobase, } /* read Resolution */ - w_Temp = w_EepromReadWord(iobase, pc_PCIChipInformation, + w_Temp = w_EepromReadWord(iobase, type, 0x100 + w_Address + w_Offset); s_Header->b_Resolution = w_Temp & 0x001F; /* last 5 bits */ @@ -425,7 +419,7 @@ static int i_EepromReadAnlogInputHeader(unsigned long iobase, } static int i_EepromReadMainHeader(unsigned long iobase, - char *pc_PCIChipInformation, + char *type, struct comedi_device *dev) { const struct addi_board *this_board = comedi_board(dev); @@ -440,25 +434,24 @@ static int i_EepromReadMainHeader(unsigned long iobase, struct str_AnalogInputHeader s_AnalogInputHeader; /* Read size */ - s_MainHeader.w_HeaderSize = w_EepromReadWord(iobase, - pc_PCIChipInformation, + s_MainHeader.w_HeaderSize = w_EepromReadWord(iobase, type, 0x100 + 8); /* Read nbr of functionality */ - w_Temp = w_EepromReadWord(iobase, pc_PCIChipInformation, + w_Temp = w_EepromReadWord(iobase, type, 0x100 + 10); s_MainHeader.b_Nfunctions = (unsigned char) w_Temp & 0x00FF; /* Read functionality details */ for (i = 0; i < s_MainHeader.b_Nfunctions; i++) { /* Read Type */ - w_Temp = w_EepromReadWord(iobase, pc_PCIChipInformation, + w_Temp = w_EepromReadWord(iobase, type, 0x100 + 12 + w_Count); s_MainHeader.s_Functions[i].b_Type = (unsigned char) w_Temp & 0x3F; w_Count = w_Count + 2; /* Read Address */ s_MainHeader.s_Functions[i].w_Address = - w_EepromReadWord(iobase, pc_PCIChipInformation, + w_EepromReadWord(iobase, type, 0x100 + 12 + w_Count); w_Count = w_Count + 2; } @@ -468,8 +461,7 @@ static int i_EepromReadMainHeader(unsigned long iobase, switch (s_MainHeader.s_Functions[i].b_Type) { case EEPROM_DIGITALINPUT: - i_EepromReadDigitalInputHeader(iobase, - pc_PCIChipInformation, + i_EepromReadDigitalInputHeader(iobase, type, s_MainHeader.s_Functions[i].w_Address, &s_DigitalInputHeader); devpriv->s_EeParameters.i_NbrDiChannel = @@ -477,8 +469,7 @@ static int i_EepromReadMainHeader(unsigned long iobase, break; case EEPROM_DIGITALOUTPUT: - i_EepromReadDigitalOutputHeader(iobase, - pc_PCIChipInformation, + i_EepromReadDigitalOutputHeader(iobase, type, s_MainHeader.s_Functions[i].w_Address, &s_DigitalOutputHeader); devpriv->s_EeParameters.i_NbrDoChannel = @@ -490,8 +481,7 @@ static int i_EepromReadMainHeader(unsigned long iobase, break; case EEPROM_ANALOGINPUT: - i_EepromReadAnlogInputHeader(iobase, - pc_PCIChipInformation, + i_EepromReadAnlogInputHeader(iobase, type, s_MainHeader.s_Functions[i].w_Address, &s_AnalogInputHeader); if (!(strcmp(this_board->pc_DriverName, "apci3200"))) @@ -515,8 +505,7 @@ static int i_EepromReadMainHeader(unsigned long iobase, break; case EEPROM_ANALOGOUTPUT: - i_EepromReadAnlogOutputHeader(iobase, - pc_PCIChipInformation, + i_EepromReadAnlogOutputHeader(iobase, type, s_MainHeader.s_Functions[i].w_Address, &s_AnalogOutputHeader); devpriv->s_EeParameters.i_NbrAoChannel = |