Changeset 798

Show
Ignore:
Timestamp:
05/06/00 19:49:53 (9 years ago)
Author:
mds
Message:

(mds) added Winbond-style bank selection.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • lm-sensors/trunk/CHANGES

    r797 r798  
    1919  Module via686a: Enable sensors if not enabled by BIOS 
    2020  Module w83781d: Improve w83783s support, w83627hf always has 2 pwm 
     21  Program isadump: Add Winbond-style bank selection 
    2122  Program sensors-detect: Fix i801 detection 
    2223 
  • lm-sensors/trunk/prog/dump/isadump.c

    r505 r798  
    11/* 
    22    isadump.c - Part of isadump, a user-space program to dump ISA registers 
    3     Copyright (c) 1999  Frodo Looijaard <frodol@dds.nl> 
     3    Copyright (c) 2000  Frodo Looijaard <frodol@dds.nl>, and 
     4                        Mark D. Studebaker <mdsxyz123@yahoo.com> 
    45 
    56    This program is free software; you can redistribute it and/or modify 
     
    4546void help(void) 
    4647{ 
    47   fprintf(stderr,"Syntax: isadump ADDRREG DATAREG\n"); 
     48  fprintf(stderr,"Syntax: isadump ADDRREG DATAREG [BANK [BANKREG]]\n"); 
    4849} 
    4950 
    5051int main(int argc, char *argv[]) 
    5152{ 
    52   int addrreg, datareg
     53  int addrreg, datareg, bank = 0, bankreg = 0x4E
    5354  char *end; 
    5455  int i,j,res; 
    5556 
    5657  if (argc < 2) { 
    57     fprintf(stderr,"Error: No address register specified!\n"); 
     58    fprintf(stderr,"Error: No registers specified!\n"); 
    5859    help(); 
    5960    exit(1); 
     
    6970    fprintf(stderr,"Error: Address register out of range!\n"); 
    7071    help(); 
     72    exit(1); 
    7173  } 
    7274 
     
    7678    exit(1); 
    7779  } 
     80 
    7881  datareg = strtol(argv[2],&end,0); 
    7982  if (*end) { 
     
    8588    fprintf(stderr,"Error: Data register out of range!\n"); 
    8689    help(); 
     90    exit(1); 
     91  } 
     92 
     93  if(argc > 3) { 
     94    bank = strtol(argv[3],&end,0); 
     95    if (*end) { 
     96      fprintf(stderr,"Error: Invalid bank number!\n"); 
     97      help(); 
     98      exit(1); 
     99    } 
     100    if ((bank < 0) || (bank > 15)) { 
     101      fprintf(stderr,"Error: bank out of range (0-15)!\n"); 
     102      help(); 
     103      exit(1); 
     104    } 
     105 
     106    if(argc > 4) { 
     107      bankreg = strtol(argv[4],&end,0); 
     108      if (*end) { 
     109        fprintf(stderr,"Error: Invalid bank register number!\n"); 
     110        help(); 
     111        exit(1); 
     112      } 
     113      if ((bankreg < 0) || (bankreg > 0xff)) { 
     114        fprintf(stderr,"Error: bank out of range (0-0xff)!\n"); 
     115        help(); 
     116        exit(1); 
     117      } 
     118    } 
    87119  } 
    88120 
     
    96128  fprintf(stderr,"  I will probe address register 0x%04x and " 
    97129                 "data register 0x%04x.\n",addrreg,datareg); 
     130  if(bank)       
     131    fprintf(stderr,"  Probing bank %d using bank register 0x%02x.\n", 
     132            bank, bankreg); 
    98133  fprintf(stderr,"  You have five seconds to reconsider and press CTRL-C!\n\n"); 
    99134  sleep(5); 
     
    117152#endif 
    118153 
     154  /* See Winbond w83781d data sheet for bank details */ 
     155  if(bank) { 
     156    outb(bankreg,addrreg); 
     157    outb(bank | 0x80,datareg); /* OR in high byte flag */ 
     158  } 
     159 
    119160  printf("     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f\n"); 
    120161  for (i = 0; i < 256; i+=16) { 
     
    127168    printf("\n"); 
    128169  } 
     170  if(bank) { 
     171    outb(bankreg,addrreg); 
     172    outb(0x80,datareg); /* put back in bank 0 high byte */ 
     173  } 
    129174  exit(0); 
    130175}