root/dev/i2c/i2c_scan.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. iicprobeinit
  2. iicprobenc
  3. iicprobew
  4. iicprobe
  5. lm75probe
  6. adm1032cloneprobe
  7. iic_ignore_addr
  8. iic_dump
  9. iic_probe
  10. iic_scan

    1 /*      $OpenBSD: i2c_scan.c,v 1.97 2007/04/10 17:47:55 miod Exp $      */
    2 
    3 /*
    4  * Copyright (c) 2005 Theo de Raadt <deraadt@openbsd.org>
    5  *
    6  * Permission to use, copy, modify, and distribute this software for any
    7  * purpose with or without fee is hereby granted, provided that the above
    8  * copyright notice and this permission notice appear in all copies.
    9  *
   10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   17  */
   18 
   19 /*
   20  * I2C bus scanning.
   21  */
   22 
   23 #include <sys/param.h>
   24 #include <sys/systm.h>
   25 #include <sys/device.h>
   26 
   27 #define _I2C_PRIVATE
   28 #include <dev/i2c/i2cvar.h>
   29 
   30 #undef I2C_DEBUG
   31 #define I2C_VERBOSE
   32 
   33 void    iic_probe(struct device *, struct i2cbus_attach_args *, u_int8_t);
   34 
   35 /*
   36  * Addresses at which to probe for sensors.  Skip address 0x4f, since
   37  * probing it seems to crash at least one Sony VAIO laptop.  Only a
   38  * few chips can actually sit at that address, and vendors seem to
   39  * place those at other addresses, so this isn't a big loss.
   40  */
   41 struct {
   42         u_int8_t start, end;
   43 } probe_addrs[] = {
   44         { 0x18, 0x18 },
   45         { 0x1a, 0x1a },
   46         { 0x20, 0x2f },
   47         { 0x48, 0x4e }
   48 };
   49 
   50 #define MAX_IGNORE 8
   51 u_int8_t ignore_addrs[MAX_IGNORE];
   52 
   53 /*
   54  * Some Maxim 1617 clones MAY NOT even read cmd 0xfc!  When it is
   55  * read, they will power-on-reset.  Their default condition
   56  * (control register bit 0x80) therefore will be that they assert
   57  * /ALERT for the 5 potential errors that may occur.  One of those
   58  * errors is that the external temperature diode is missing.  This
   59  * is unfortunately a common choice of system designers, except
   60  * suddenly now we get a /ALERT, which may on some chipsets cause
   61  * us to receive an entirely unexpected SMI .. and then an NMI.
   62  *
   63  * As we probe each device, if we hit something which looks suspiciously
   64  * like it may potentially be a 1617 or clone, we immediately set this
   65  * variable to avoid reading that register offset.
   66  */
   67 int     skip_fc;
   68 
   69 static i2c_tag_t probe_ic;
   70 static u_int8_t probe_addr;
   71 static u_int8_t probe_val[256];
   72 
   73 void            iicprobeinit(struct i2cbus_attach_args *, u_int8_t);
   74 u_int8_t        iicprobenc(u_int8_t);
   75 u_int8_t        iicprobe(u_int8_t);
   76 u_int16_t       iicprobew(u_int8_t);
   77 char            *lm75probe(void);
   78 char            *adm1032cloneprobe(u_int8_t);
   79 void            iic_dump(struct device *, u_int8_t, char *);
   80 
   81 void
   82 iicprobeinit(struct i2cbus_attach_args *iba, u_int8_t addr)
   83 {
   84         probe_ic = iba->iba_tag;
   85         probe_addr = addr;
   86         memset(probe_val, 0xff, sizeof probe_val);
   87 }
   88 
   89 u_int8_t
   90 iicprobenc(u_int8_t cmd)
   91 {
   92         u_int8_t data;
   93 
   94         /*
   95          * If we think we are talking to an evil Maxim 1617 or clone,
   96          * avoid accessing this register because it is death.
   97          */
   98         if (skip_fc && cmd == 0xfc)
   99                 return (0xff);
  100         iic_acquire_bus(probe_ic, 0);
  101         if (iic_exec(probe_ic, I2C_OP_READ_WITH_STOP,
  102             probe_addr, &cmd, 1, &data, 1, 0) != 0)
  103                 data = 0xff;
  104         iic_release_bus(probe_ic, 0);
  105         return (data);
  106 }
  107 
  108 u_int16_t
  109 iicprobew(u_int8_t cmd)
  110 {
  111         u_int8_t data[2];
  112 
  113         /*
  114          * If we think we are talking to an evil Maxim 1617 or clone,
  115          * avoid accessing this register because it is death.
  116          */
  117         if (skip_fc && cmd == 0xfc)
  118                 return (0xffff);
  119         iic_acquire_bus(probe_ic, 0);
  120         if (iic_exec(probe_ic, I2C_OP_READ_WITH_STOP,
  121             probe_addr, &cmd, 1, &data, 2, 0) != 0)
  122                 data[0] = data[1] = 0xff;
  123         iic_release_bus(probe_ic, 0);
  124         return ((data[0] << 8) | data[1]);
  125 }
  126 
  127 u_int8_t
  128 iicprobe(u_int8_t cmd)
  129 {
  130         if (probe_val[cmd] != 0xff)
  131                 return probe_val[cmd];
  132         probe_val[cmd] = iicprobenc(cmd);
  133         return (probe_val[cmd]);
  134 }
  135 
  136 #define LM75TEMP        0x00
  137 #define LM75CONF        0x01
  138 #define LM75Thyst       0x02
  139 #define LM75Tos         0x03
  140 #define LM77Tlow        0x04
  141 #define LM77Thigh       0x05
  142 #define LM75TMASK       0xff80  /* 9 bits in temperature registers */
  143 #define LM77TMASK       0xfff8  /* 13 bits in temperature registers */
  144 
  145 /*
  146  * The LM75/LM75A/LM77 family are very hard to detect.  Thus, we check
  147  * for all other possible chips first.  These chips do not have an
  148  * ID register.  They do have a few quirks though:
  149  * -  on the LM75 and LM77, registers 0x06 and 0x07 return whatever
  150  *    value was read before
  151  * -  the LM75 lacks registers 0x04 and 0x05, so those act as above
  152  * -  the LM75A returns 0xffff for registers 0x04, 0x05, 0x06 and 0x07
  153  * -  the chip registers loop every 8 registers
  154  * The downside is that we must read almost every register to guess
  155  * if this is an LM75, LM75A or LM77.
  156  */
  157 char *
  158 lm75probe(void)
  159 {
  160         u_int16_t temp, thyst, tos, tlow, thigh, mask = LM75TMASK;
  161         u_int8_t conf;
  162         int i, echocount, ffffcount, score;
  163         int echoreg67, echoreg45, ffffreg67, ffffreg45;
  164 
  165         temp = iicprobew(LM75TEMP);
  166 
  167         /*
  168          * Sometimes the other probes can upset the chip, if we get 0xffff
  169          * the first time, try it once more.
  170          */
  171         if (temp == 0xffff)
  172                 temp = iicprobew(LM75TEMP);
  173 
  174         conf = iicprobenc(LM75CONF);
  175         thyst = iicprobew(LM75Thyst);
  176         tos = iicprobew(LM75Tos);
  177 
  178         /* totally bogus data */
  179         if (conf == 0xff && temp == 0xffff && thyst == 0xffff)
  180                 return (NULL);
  181 
  182         temp &= mask;
  183         thyst &= mask;
  184         tos &= mask;
  185 
  186         /* All values the same?  Very unlikely */
  187         if (temp == thyst && thyst == tos)
  188                 return (NULL);
  189 
  190 #if notsure
  191         /* more register aliasing effects that indicate not a lm75 */
  192         if ((temp >> 8) == conf)
  193                 return (NULL);
  194 #endif
  195 
  196         /*
  197          * LM77/LM75 registers 6, 7
  198          * echo whatever was read just before them from reg 0, 1, or 2
  199          *
  200          * LM75A doesn't appear to do this, but does appear to reliably
  201          * return 0xffff
  202          */
  203         for (i = 6, echocount = 2, ffffcount = 0; i <= 7; i++) {
  204                 if ((iicprobew(LM75TEMP) & mask) != (iicprobew(i) & mask) ||
  205                     (iicprobew(LM75Thyst) & mask) != (iicprobew(i) & mask) ||
  206                     (iicprobew(LM75Tos) & mask) != (iicprobew(i) & mask))
  207                         echocount--;
  208                 if (iicprobew(i) == 0xffff)
  209                         ffffcount++;
  210         }
  211 
  212         /* Make sure either both registers echo, or neither does */
  213         if (echocount == 1 || ffffcount == 1)
  214                 return (NULL);
  215 
  216         echoreg67 = (echocount == 0) ? 0 : 1;
  217         ffffreg67 = (ffffcount == 0) ? 0 : 1;
  218 
  219         /*
  220          * LM75 has no registers 4 or 5, and they will act as echos too
  221          *
  222          * LM75A doesn't appear to do this either, but does appear to
  223          * reliably return 0xffff
  224          */
  225         for (i = 4, echocount = 2, ffffcount = 0; i <= 5; i++) {
  226                 if ((iicprobew(LM75TEMP) & mask) != (iicprobew(i) & mask) ||
  227                     (iicprobew(LM75Thyst) & mask) != (iicprobew(i) & mask) ||
  228                     (iicprobew(LM75Tos) & mask) != (iicprobew(i) & mask))
  229                         echocount--;
  230                 if (iicprobew(i) == 0xffff)
  231                         ffffcount++;
  232         }
  233 
  234         /* Make sure either both registers echo, or neither does */
  235         if (echocount == 1 || ffffcount == 1)
  236                 return (NULL);
  237 
  238         echoreg45 = (echocount == 0) ? 0 : 1;
  239         ffffreg45 = (ffffcount == 0) ? 0 : 1;
  240 
  241         /*
  242          * If we find that 4 and 5 are not echos, and don't return 0xffff
  243          * then based on whether the echo test of registers 6 and 7
  244          * succeeded or not, we may have an LM77
  245          */
  246         if (echoreg45 == 0 && ffffreg45 == 0 && echoreg67 == 1) {
  247                 mask = LM77TMASK;
  248 
  249                 /* mask size changed, must re-read for the next checks */
  250                 thyst = iicprobew(LM75Thyst) & mask;
  251                 tos = iicprobew(LM75Tos) & mask;
  252                 tlow = iicprobew(LM77Tlow) & mask;
  253                 thigh = iicprobew(LM77Thigh) & mask;
  254         }
  255 
  256         /* a real LM75/LM75A/LM77 repeats its registers.... */
  257         for (i = 0x08; i <= 0xf8; i += 8) {
  258                 if (conf != iicprobenc(LM75CONF + i) ||
  259                     thyst != (iicprobew(LM75Thyst + i) & mask) ||
  260                     tos != (iicprobew(LM75Tos + i) & mask))
  261                         return (NULL);
  262 
  263                 /*
  264                  * Check that the repeated registers 0x06 and 0x07 still
  265                  * either echo or return 0xffff
  266                  */
  267                 if (echoreg67 == 1) {
  268                         tos = iicprobew(LM75Tos) & mask;
  269                         if (tos != (iicprobew(0x06 + i) & mask) ||
  270                             tos != (iicprobew(0x07 + i) & mask))
  271                                 return (NULL);
  272                 } else if (ffffreg67 == 1)
  273                         if (iicprobew(0x06 + i) != 0xffff ||
  274                             iicprobew(0x07 + i) != 0xffff)
  275                                 return (NULL);
  276 
  277                 /*
  278                  * Check that the repeated registers 0x04 and 0x05 still
  279                  * either echo or return 0xffff. If they do neither, and
  280                  * registers 0x06 and 0x07 echo, then we will be probing
  281                  * for an LM77, so make sure those still repeat
  282                  */
  283                 if (echoreg45 == 1) {
  284                         tos = iicprobew(LM75Tos) & mask;
  285                         if (tos != (iicprobew(LM77Tlow + i) & mask) ||
  286                             tos != (iicprobew(LM77Thigh + i) & mask))
  287                                 return (NULL);
  288                 } else if (ffffreg45 == 1) {
  289                         if (iicprobew(LM77Tlow + i) != 0xffff ||
  290                             iicprobew(LM77Thigh + i) != 0xffff)
  291                                 return (NULL);
  292                 } else if (echoreg67 == 1)
  293                         if (tlow != (iicprobew(LM77Tlow + i) & mask) ||
  294                             thigh != (iicprobew(LM77Thigh + i) & mask))
  295                                 return (NULL);
  296         }
  297 
  298         /*
  299          * Given that we now know how the first eight registers behave and
  300          * that this behaviour is consistently repeated, we can now use
  301          * the following table:
  302          *
  303          * echoreg67 | echoreg45 | ffffreg67 | ffffreg45 | chip
  304          * ----------+-----------+-----------+-----------+------
  305          *     1     |     1     |     0     |     0     | LM75
  306          *     1     |     0     |     0     |     0     | LM77
  307          *     0     |     0     |     1     |     1     | LM75A
  308          */
  309 
  310         /* Convert the various flags into a single score */
  311         score = (echoreg67 << 3) + (echoreg45 << 2) + (ffffreg67 << 1) +
  312             ffffreg45;
  313 
  314         switch (score) {
  315         case 12:
  316                 return ("lm75");
  317         case 8:
  318                 return ("lm77");
  319         case 3:
  320                 return ("lm75a");
  321         default:
  322 #if defined(I2C_DEBUG)
  323                 printf("lm75probe: unknown chip, scored %d\n", score);
  324 #endif /* defined(I2C_DEBUG) */
  325                 return (NULL);
  326         }
  327 }
  328 
  329 char *
  330 adm1032cloneprobe(u_int8_t addr)
  331 {
  332         if (addr == 0x18 || addr == 0x1a || addr == 0x29 ||
  333             addr == 0x2b || addr == 0x4c || addr == 0x4e) {
  334                 u_int8_t reg, val;
  335                 int zero = 0, copy = 0;
  336 
  337                 val = iicprobe(0x00);
  338                 for (reg = 0x00; reg < 0x09; reg++) {
  339                         if (iicprobe(reg) == 0xff)
  340                                 return (NULL);
  341                         if (iicprobe(reg) == 0x00)
  342                                 zero++;
  343                         if (val == iicprobe(reg))
  344                                 copy++;
  345                 }
  346                 if (zero > 6 || copy > 6)
  347                         return (NULL);
  348                 val = iicprobe(0x09);
  349                 for (reg = 0x0a; reg < 0xfc; reg++) {
  350                         if (iicprobe(reg) != val)
  351                                 return (NULL);
  352                 }
  353                 /* 0xfe may be Maxim, or some other vendor */
  354                 if (iicprobe(0xfe) == 0x4d)
  355                         return ("max1617");
  356                 /*
  357                  * "xeontemp" is the name we choose for clone chips
  358                  * which have all sorts of buggy bus interactions, such
  359                  * as those we just probed.  Why?
  360                  * Intel is partly to blame for this situation.
  361                  */
  362                 return ("xeontemp");
  363         }
  364         return (NULL);
  365 }
  366 
  367 void
  368 iic_ignore_addr(u_int8_t addr)
  369 {
  370         int i;
  371 
  372         for (i = 0; i < sizeof(ignore_addrs); i++)
  373                 if (ignore_addrs[i] == 0) {
  374                         ignore_addrs[i] = addr;
  375                         return;
  376                 }
  377 }
  378 
  379 #if defined(I2C_DEBUG) || defined(I2C_VERBOSE)
  380 void
  381 iic_dump(struct device *dv, u_int8_t addr, char *name)
  382 {
  383         static u_int8_t iicvalcnt[256];
  384         u_int8_t val, val2, max;
  385         int i, cnt = 0;
  386 
  387         /*
  388          * Don't bother printing the most often repeated register
  389          * value, since it is often weird devices that respond
  390          * incorrectly, busted controller driver, or in the worst
  391          * case, it in mosts cases, the value 0xff.
  392          */
  393         bzero(iicvalcnt, sizeof iicvalcnt);
  394         val = iicprobe(0);
  395         iicvalcnt[val]++;
  396         for (i = 1; i <= 0xff; i++) {
  397                 val2 = iicprobe(i);
  398                 iicvalcnt[val2]++;
  399                 if (val == val2)
  400                         cnt++;
  401         }
  402 
  403         for (val = max = i = 0; i <= 0xff; i++)
  404                 if (max < iicvalcnt[i]) {
  405                         max = iicvalcnt[i];
  406                         val = i;
  407                 }
  408 
  409         if (cnt <= 254) {
  410                 printf("%s: addr 0x%x", dv->dv_xname, addr);
  411                 for (i = 0; i <= 0xff; i++) {
  412                         if (iicprobe(i) != val)
  413                                 printf(" %02x=%02x", i, iicprobe(i));
  414                 }
  415                 if (name)
  416                         printf(": %s", name);
  417                 printf("\n");
  418         }
  419 }
  420 #endif /* defined(I2C_DEBUG) || defined(I2C_VERBOSE) */
  421 
  422 void
  423 iic_probe(struct device *self, struct i2cbus_attach_args *iba, u_int8_t addr)
  424 {
  425         struct i2c_attach_args ia;
  426         char *name = NULL;
  427         int i;
  428 
  429         for (i = 0; i < sizeof(ignore_addrs); i++)
  430                 if (ignore_addrs[i] == addr)
  431                         return;
  432 
  433         iicprobeinit(iba, addr);
  434         skip_fc = 0;
  435 
  436         /*
  437          * Many I2C/SMBus devices use register 0x3e as a vendor ID
  438          * register.
  439          */
  440         switch (iicprobe(0x3e)) {
  441         case 0x01:              /* National Semiconductor */
  442                 /*
  443                  * Some newer National products use a vendor code at
  444                  * 0x3e of 0x01, and then 0x3f contains a product code
  445                  * But some older products are missing a product code,
  446                  * and contain who knows what in that register.  We assume
  447                  * that some employee was smart enough to keep the numbers
  448                  * unique.
  449                  */
  450                 if ((addr == 0x2c || addr == 0x2d || addr == 0x2e) &&
  451                     iicprobe(0x3f) == 0x73)
  452                         name = "lm93";
  453                 else if ((addr == 0x2c || addr == 0x2d || addr == 0x2e) &&
  454                     iicprobe(0x3f) == 0x68)
  455                         name = "lm96000";       /* adt7460 compat? */
  456                 else if ((addr == 0x2c || addr == 0x2d || addr == 0x2e) &&
  457                     (iicprobe(0x3f) == 0x60 || iicprobe(0x3f) == 0x62))
  458                         name = "lm85";          /* lm85C/B == adt7460 compat */
  459                 else if ((addr & 0x7c) == 0x2c &&       /* addr 0b01011xx */
  460                     iicprobe(0x48) == addr &&
  461                     (iicprobe(0x3f) == 0x03 || iicprobe(0x3f) == 0x04) &&
  462                     (iicprobe(0x40) & 0x80) == 0x00)
  463                         name = "lm81";
  464                 break;
  465         case 0x02:              /* National Semiconductor? */
  466                 if ((iicprobe(0x3f) & 0xfc) == 0x04)
  467                         name = "lm87";          /* complete check */
  468                 break;
  469         case 0x23:              /* Analog Devices? */
  470                 if (iicprobe(0x48) == addr &&
  471                     (iicprobe(0x40) & 0x80) == 0x00 &&
  472                     (addr & 0x7c) == 0x2c)
  473                         name = "adm9240";       /* lm87 clone */
  474                 break;
  475         case 0x41:              /* Analog Devices */
  476                 /*
  477                  * Newer chips have a valid 0x3d product number, while
  478                  * older ones sometimes encoded the product into the
  479                  * upper half of the "step register" at 0x3f.
  480                  */
  481                 if ((addr == 0x2c || addr == 0x2e || addr == 0x2f) &&
  482                     iicprobe(0x3d) == 0x70)
  483                         name = "adt7470";
  484                 else if ((addr == 0x2c || addr == 0x2d || addr == 0x2e) &&
  485                     iicprobe(0x3d) == 0x76)
  486                         name = "adt7476";
  487                 else if (addr == 0x2e && iicprobe(0x3d) == 0x75)
  488                         name = "adt7475";
  489                 else if (iicprobe(0x3d) == 0x27 &&
  490                     (iicprobe(0x3f) == 0x60 || iicprobe(0x3f) == 0x6a))
  491                         name = "adm1027";       /* complete check */
  492                 else if (iicprobe(0x3d) == 0x27 &&
  493                     (iicprobe(0x3f) == 0x62 || iicprobe(0x3f) == 0x6a))
  494                         name = "adt7460";       /* complete check */
  495                 else if (addr == 0x2e &&
  496                     iicprobe(0x3d) == 0x68 && (iicprobe(0x3f) & 0xf0) == 0x70)
  497                         name = "adt7467";
  498                 else if (iicprobe(0x3d) == 0x33)
  499                         name = "adm1033";
  500                 else if ((addr == 0x2c || addr == 0x2d || addr == 0x2e) &&
  501                     iicprobe(0x3d) == 0x30 &&
  502                     (iicprobe(0x01) & 0x80) == 0x00 &&
  503                     (iicprobe(0x0d) & 0x70) == 0x00 &&
  504                     (iicprobe(0x0e) & 0x70) == 0x00)
  505                         /*
  506                          * Revision 3 seems to be an adm1031 with
  507                          * remote diode 2 shorted.  Therefore we
  508                          * cannot assume the reserved/unused bits of
  509                          * register 0x03 and 0x06 are set to zero.
  510                          */
  511                         name = "adm1030";       /* complete check */
  512                 else if ((addr == 0x2c || addr == 0x2d || addr == 0x2e) &&
  513                     iicprobe(0x3d) == 0x31 &&
  514                     (iicprobe(0x01) & 0x80) == 0x00 &&
  515                     (iicprobe(0x0d) & 0x70) == 0x00 &&
  516                     (iicprobe(0x0e) & 0x70) == 0x00 &&
  517                     (iicprobe(0x0f) & 0x70) == 0x00)
  518                         name = "adm1031";       /* complete check */
  519                 else if ((addr & 0x7c) == 0x2c &&       /* addr 0b01011xx */
  520                     (iicprobe(0x3f) & 0xf0) == 0x20 &&
  521                     (iicprobe(0x40) & 0x80) == 0x00 &&
  522                     (iicprobe(0x41) & 0xc0) == 0x00 &&
  523                     (iicprobe(0x42) & 0xbc) == 0x00)
  524                         name = "adm1025";       /* complete check */
  525                 else if ((addr & 0x7c) == 0x2c &&       /* addr 0b01011xx */
  526                     (iicprobe(0x3f) & 0xf0) == 0x10 &&
  527                     (iicprobe(0x40) & 0x80) == 0x00)
  528                         name = "adm1024";       /* complete check */
  529                 else if ((iicprobe(0xff) & 0xf0) == 0x30)
  530                         name = "adm1023";
  531                 else if (addr == 0x2e &&
  532                     (iicprobe(0x3f) & 0xf0) == 0xd0 &&
  533                     (iicprobe(0x40) & 0x80) == 0x00)
  534                         name = "adm1028";       /* adm1022 clone? */
  535                 else if ((addr == 0x2c || addr == 0x2e || addr == 0x2f) &&
  536                     (iicprobe(0x3f) & 0xf0) == 0xc0 &&
  537                     (iicprobe(0x40) & 0x80) == 0x00)
  538                         name = "adm1022";
  539                 break;
  540         case 0x49:              /* Texas Instruments */
  541                 if ((addr == 0x2c || addr == 0x2e || addr == 0x2f) &&
  542                     (iicprobe(0x3f) & 0xf0) == 0xc0 &&
  543                     (iicprobe(0x40) & 0x80) == 0x00)
  544                         name = "thmc50";        /* adm1022 clone */
  545                 break;
  546         case 0x55:              /* SMSC */
  547                 if ((addr & 0x7c) == 0x2c &&            /* addr 0b01011xx */
  548                     iicprobe(0x3f) == 0x20 &&
  549                     (iicprobe(0x47) & 0x70) == 0x00 &&
  550                     (iicprobe(0x49) & 0xfe) == 0x80)
  551                         name = "47m192";        /* adm1025 compat */
  552                 break;
  553         case 0x5c:              /* SMSC */
  554                 if ((addr == 0x2c || addr == 0x2d || addr == 0x2e) &&
  555                     (iicprobe(0x3f) & 0xf0) == 0x60)
  556                         name = "emc6d100";   /* emc6d101, emc6d102, emc6d103 */
  557                 else if ((addr == 0x2c || addr == 0x2d || addr == 0x2e) &&
  558                     (iicprobe(0x3f) & 0xf0) == 0x80)
  559                         name = "sch5017";
  560                 else if ((addr == 0x2c || addr == 0x2d || addr == 0x2e) &&
  561                     (iicprobe(0x3f) & 0xf0) == 0xb0)
  562                         name = "emc6w201";
  563                 break;
  564         case 0xa1:              /* Philips */
  565                 if ((iicprobe(0x3f) & 0xf0) == 0x20 &&
  566                     (iicprobe(0x40) & 0x80) == 0x00 &&
  567                     (iicprobe(0x41) & 0xc0) == 0x00 &&
  568                     (iicprobe(0x42) & 0xbc) == 0x00)
  569                         name = "ne1619";        /* adm1025 compat */
  570                 break;
  571         case 0xda:              /* Dallas Semiconductor */
  572                 if (iicprobe(0x3f) == 0x01 && iicprobe(0x48) == addr &&
  573                     (iicprobe(0x40) & 0x80) == 0x00)
  574                         name = "ds1780";        /* lm87 clones */
  575                 break;
  576         }
  577 
  578         switch (iicprobe(0x4e)) {
  579         case 0x41:              /* Analog Devices */
  580                 if ((addr == 0x48 || addr == 0x4a || addr == 0x4b) &&
  581                     (iicprobe(0x4d) == 0x03 || iicprobe(0x4d) == 0x08 ||
  582                     iicprobe(0x4d) == 0x07))
  583                         name = "adt7516";       /* adt7517, adt7519 */
  584                 break;
  585         }
  586 
  587         switch (iicprobe(0xfe)) {
  588         case 0x01:              /* National Semiconductor */
  589                 if (addr == 0x4c &&
  590                     iicprobe(0xff) == 0x41 && (iicprobe(0x03) & 0x18) == 0 &&
  591                     iicprobe(0x04) <= 0x0f && (iicprobe(0xbf) & 0xf8) == 0)
  592                         name = "lm63";
  593                 else if (addr == 0x4c &&
  594                     iicprobe(0xff) == 0x11 && (iicprobe(0x03) & 0x2a) == 0 &&
  595                     iicprobe(0x04) <= 0x09 && (iicprobe(0xbf) & 0xf8) == 0)
  596                         name = "lm86";
  597                 else if (addr == 0x4c &&
  598                     iicprobe(0xff) == 0x31 && (iicprobe(0x03) & 0x2a) == 0 &&
  599                     iicprobe(0x04) <= 0x09 && (iicprobe(0xbf) & 0xf8) == 0)
  600                         name = "lm89";          /* or lm99 */
  601                 else if (addr == 0x4d &&
  602                     iicprobe(0xff) == 0x34 && (iicprobe(0x03) & 0x2a) == 0 &&
  603                     iicprobe(0x04) <= 0x09 && (iicprobe(0xbf) & 0xf8) == 0)
  604                         name = "lm89-1";        /* or lm99-1 */
  605                 else if (addr == 0x4c &&
  606                     iicprobe(0xff) == 0x21 && (iicprobe(0x03) & 0x2a) == 0 &&
  607                     iicprobe(0x04) <= 0x09 && (iicprobe(0xbf) & 0xf8) == 0)
  608                         name = "lm90";
  609                 break;
  610         case 0x23:              /* Genesys Logic? */
  611                 if ((addr == 0x4c) &&
  612                     (iicprobe(0x03) & 0x3f) == 0x00 && iicprobe(0x04) <= 0x08)
  613                         /*
  614                          * Genesys Logic doesn't make the datasheet
  615                          * for the GL523SM publically available, so
  616                          * the checks above are nothing more than a
  617                          * (conservative) educated guess.
  618                          */
  619                         name = "gl523sm";
  620                 break;
  621         case 0x41:              /* Analog Devices */
  622                 if ((addr == 0x4c || addr == 0x4d) &&
  623                     iicprobe(0xff) == 0x51 &&
  624                     (iicprobe(0x03) & 0x1f) == 0x04 &&
  625                     iicprobe(0x04) <= 0x0a) {
  626                         /* If not in adm1032 compatibility mode. */
  627                         name = "adt7461";
  628                 } else if ((addr == 0x18 || addr == 0x19 || addr == 0x1a ||
  629                     addr == 0x29 || addr == 0x2a || addr == 0x2b ||
  630                     addr == 0x4c || addr == 0x4d || addr == 0x4e) &&
  631                     (iicprobe(0xff) & 0xf0) == 0x00 &&
  632                     (iicprobe(0x03) & 0x3f) == 0x00 &&
  633                     iicprobe(0x04) <= 0x07) {
  634                         name = "adm1021";
  635                         skip_fc = 1;
  636                 } else if ((addr == 0x18 || addr == 0x19 || addr == 0x1a ||
  637                     addr == 0x29 || addr == 0x2a || addr == 0x2b ||
  638                     addr == 0x4c || addr == 0x4d || addr == 0x4e) &&
  639                     (iicprobe(0xff) & 0xf0) == 0x30 &&
  640                     (iicprobe(0x03) & 0x3f) == 0x00 &&
  641                     iicprobe(0x04) <= 0x07) {
  642                         name = "adm1023";       /* or adm1021a */
  643                         skip_fc = 1;
  644                 } else if ((addr == 0x4c || addr == 0x4d || addr == 0x4e) &&
  645                     (iicprobe(0x03) & 0x3f) == 0x00 &&
  646                     iicprobe(0x04) <= 0x0a) {
  647                         name = "adm1032";       /* or adm1020 */
  648                         skip_fc = 1;
  649                 }
  650                 break;
  651         case 0x47:              /* Global Mixed-mode Technology */
  652                 if (addr == 0x4c && iicprobe(0xff) == 0x01 &&
  653                     (iicprobe(0x03) & 0x3f) == 0x00 && iicprobe(0x04) <= 0x08)
  654                         name = "g781";
  655                 if (addr == 0x4d && iicprobe(0xff) == 0x03 &&
  656                     (iicprobe(0x03) & 0x3f) == 0x00 && iicprobe(0x04) <= 0x08)
  657                         name = "g781-1";
  658                 break;
  659         case 0x4d:              /* Maxim */
  660                 if ((addr == 0x18 || addr == 0x19 || addr == 0x1a ||
  661                      addr == 0x29 || addr == 0x2a || addr == 0x2b ||
  662                      addr == 0x4c || addr == 0x4d || addr == 0x4e) &&
  663                     iicprobe(0xff) == 0x08 && (iicprobe(0x02) & 0x03) == 0 &&
  664                     (iicprobe(0x03) & 0x07) == 0 && iicprobe(0x04) <= 0x08)
  665                         name = "max6690";
  666                 else if ((addr == 0x4c || addr == 0x4d || addr == 0x4e) &&
  667                     iicprobe(0xff) == 0x59 && (iicprobe(0x03) & 0x1f) == 0 &&
  668                     iicprobe(0x04) <= 0x07)
  669                         name = "max6646";       /* max6647/8/9, max6692 */
  670                 else if ((addr == 0x4c || addr == 0x4d || addr == 0x4e) &&
  671                     (iicprobe(0x02) & 0x2b) == 0 &&
  672                     (iicprobe(0x03) & 0x0f) == 0 && iicprobe(0x04) <= 0x09) {
  673                         name = "max6657";       /* max6658, max6659 */
  674                         skip_fc = 1;
  675                 } else if ((addr >= 0x48 && addr <= 0x4f) &&
  676                     (iicprobe(0x02) & 0x2b) == 0 &&
  677                     (iicprobe(0x03) & 0x0f) == 0)
  678                         name = "max6642";
  679                 break;
  680         }
  681 
  682         if (addr == iicprobe(0x48) &&
  683             ((iicprobe(0x4f) == 0x5c && (iicprobe(0x4e) & 0x80)) ||
  684             (iicprobe(0x4f) == 0xa3 && !(iicprobe(0x4e) & 0x80)))) {
  685                 /*
  686                  * We could toggle 0x4e bit 0x80, then re-read 0x4f to
  687                  * see if the value changes to 0xa3 (indicating Winbond).
  688                  * But we are trying to avoid writes.
  689                  */
  690                 if ((iicprobe(0x4e) & 0x07) == 0) {
  691                         switch (iicprobe(0x58)) {
  692                         case 0x10:
  693                         case 0x11:                      /* rev 2? */
  694                                 name = "w83781d";
  695                                 break;
  696                         case 0x21:
  697                                 name = "w83627hf";
  698                                 break;
  699                         case 0x30:
  700                                 name = "w83782d";
  701                                 break;
  702                         case 0x31:
  703                                 name = "as99127f";      /* rev 2 */
  704                                 break;
  705                         case 0x40:
  706                                 name = "w83783s";
  707                                 break;
  708                         case 0x71:
  709                                 name = "w83791d";
  710                                 break;
  711                         case 0x72:
  712                                 name = "w83791sd";
  713                                 break;
  714                         case 0x7a:
  715                                 name = "w83792d";
  716                                 break;
  717                         }
  718                 } else {
  719                         /*
  720                          * The BIOS left the chip in a non-zero
  721                          * register bank.  Assume it's a W83781D and
  722                          * let lm(4) sort out the real model.
  723                          */
  724                         name = "w83781d";
  725                 }
  726         } else if (addr == iicprobe (0x4a) && iicprobe(0x4e) == 0x50 &&
  727             iicprobe(0x4c) == 0xa3 && iicprobe(0x4d) == 0x5c) {
  728                 name = "w83l784r";
  729         } else if (addr == 0x2d && iicprobe(0x4e) == 0x60 &&
  730             iicprobe(0x4c) == 0xa3 && iicprobe(0x4d) == 0x5c) {
  731                 name = "w83l785r";
  732         } else if (addr == 0x2e && iicprobe(0x4e) == 0x70 &&
  733             iicprobe(0x4c) == 0xa3 && iicprobe(0x4d) == 0x5c) {
  734                 name = "w83l785ts-l";
  735         } else if (addr >= 0x28 && addr <= 0x2f &&
  736             iicprobe(0x4f) == 0x12 && (iicprobe(0x4e) & 0x80)) {
  737                 /*
  738                  * We could toggle 0x4e bit 0x80, then re-read 0x4f to
  739                  * see if the value changes to 0xc3 (indicating ASUS).
  740                  * But we are trying to avoid writes.
  741                  */
  742                 if (iicprobe(0x58) == 0x31)
  743                         name = "as99127f";      /* rev 1 */
  744         } else if ((addr == 0x2d || addr == 0x2e) &&
  745             addr * 2 == iicprobe(0x04) &&
  746             iicprobe(0x5d) == 0x19 && iicprobe(0x5e) == 0x34 &&
  747             iicprobe(0x5a) == 0x03 && iicprobe(0x5b) == 0x06) {
  748                 name = "f75375";        /* Fintek */
  749         } else if (addr == 0x2d &&
  750             ((iicprobe(0x4f) == 0x06 && (iicprobe(0x4e) & 0x80)) ||
  751             (iicprobe(0x4f) == 0x94 && !(iicprobe(0x4e) & 0x80)))) {
  752                 /*
  753                  * We could toggle 0x4e bit 0x80, then re-read 0x4f to
  754                  * see if the value changes to 0x94 (indicating ASUS).
  755                  * But we are trying to avoid writes.
  756                  *
  757                  * NB. we won't match if the BIOS has selected a non-zero
  758                  * register bank (set via 0x4e). We could select bank 0 so
  759                  * we see the right registers, but that would require a
  760                  * write.  In general though, we bet no BIOS would leave us
  761                  * in the wrong state.
  762                  */
  763                 if ((iicprobe(0x58) & 0x7f) == 0x31 &&
  764                     (iicprobe(0x4e) & 0xf) == 0x00)
  765                         name = "asb100";
  766         } else if ((addr == 0x2c || addr == 0x2d) &&
  767             iicprobe(0x00) == 0x80 &&
  768             (iicprobe(0x01) == 0x00 || iicprobe(0x01) == 0x80) &&
  769             iicprobe(0x02) == 0x00 && (iicprobe(0x03) & 0x83) == 0x00 &&
  770             (iicprobe(0x0f) & 0x07) == 0x00 &&
  771             (iicprobe(0x11) & 0x80) == 0x00 &&
  772             (iicprobe(0x12) & 0x80) == 0x00) {
  773                 /*
  774                  * The GL518SM is really crappy.  It has both byte and
  775                  * word registers, and reading a word register with a
  776                  * byte read command will make the device crap out and
  777                  * hang the bus.  This has nasty consequences on some
  778                  * machines, like preventing warm reboots.  The word
  779                  * registers are 0x07 through 0x0c, so make sure the
  780                  * checks above don't access those registers.  We
  781                  * don't want to do this check right up front though
  782                  * since this chip is somewhat hard to detect (which
  783                  * is why we check for every single fixed bit it has).
  784                  */
  785                 name = "gl518sm";
  786         } else if ((addr == 0x2c || addr == 0x2d || addr == 0x2e) &&
  787               iicprobe(0x16) == 0x41 && ((iicprobe(0x17) & 0xf0) == 0x40)) {
  788                 name = "adm1026";
  789         } else if (name == NULL &&
  790             (addr & 0x78) == 0x48) {            /* addr 0b1001xxx */
  791                 name = lm75probe();
  792         }
  793 #if 0
  794         /*
  795          * XXX This probe needs to be improved; the driver does some
  796          * dangerous writes.
  797          */
  798         if (name == NULL && (addr & 0x7c) == 0x48 &&    /* addr 0b1001xxx */
  799             (iicprobew(0xaa) & 0x0007) == 0x0000 &&
  800             (iicprobew(0xa1) & 0x0007) == 0x0000 &&
  801             (iicprobew(0xa2) & 0x0007) == 0x0000 &&
  802             (iicprobe(0xac) & 0x10) == 0x00) {
  803                 if ((iicprobe(0xac) & 0x7e) == 0x0a &&
  804                     iicprobe(0xab) == 0x00 && iicprobe(0xa8) == 0x00)
  805                         name = "ds1624";
  806                 else if ((iicprobe(0xac) & 0x7e) == 0x0c)
  807                         name = "ds1631";        /* terrible probe */
  808                 else if ((iicprobe(0xac) & 0x2e) == 0x2e)
  809                         name = "ds1721";        /* terrible probe */
  810         }
  811 #endif
  812         if (name == NULL && (addr & 0xf8) == 0x28 && iicprobe(0x48) == addr &&
  813             (iicprobe(0x00) & 0x90) == 0x10 && iicprobe(0x58) == 0x90) {
  814                 if (iicprobe(0x5b) == 0x12)
  815                         name = "it8712";
  816                 else if (iicprobe(0x5b) == 0x00)
  817                         name = "it8712f-a";             /* sis950 too */
  818         }
  819 
  820         if (name == NULL && iicprobe(0x48) == addr &&
  821             (iicprobe(0x40) & 0x80) == 0x00 && iicprobe(0x58) == 0xac)
  822                 name = "mtp008";
  823 
  824         if (name == NULL) {
  825                 name = adm1032cloneprobe(addr);
  826                 if (name)
  827                         skip_fc = 1;
  828         }
  829 
  830 #ifdef I2C_DEBUG
  831         iic_dump(self, addr, name);
  832 #endif /* I2C_DEBUG */
  833 
  834 #if !defined(I2C_VERBOSE) && !defined(I2C_DEBUG)
  835         if (name == NULL)
  836                 name = "unknown";
  837 #endif
  838 
  839         if (name) {
  840                 memset(&ia, 0, sizeof(ia));
  841                 ia.ia_tag = iba->iba_tag;
  842                 ia.ia_addr = addr;
  843                 ia.ia_size = 1;
  844                 ia.ia_name = name;
  845                 if (config_found(self, &ia, iic_print))
  846                         return;
  847         }
  848 
  849 #if defined(I2C_VERBOSE) && !defined(I2C_DEBUG)
  850         iic_dump(self, addr, name);
  851 #endif /* defined(I2C_VERBOSE) && !defined(I2C_DEBUG) */
  852 }
  853 
  854 void
  855 iic_scan(struct device *self, struct i2cbus_attach_args *iba)
  856 {
  857         i2c_tag_t ic = iba->iba_tag;
  858         u_int8_t cmd = 0, addr;
  859         int i;
  860 
  861         bzero(ignore_addrs, sizeof(ignore_addrs));
  862         for (i = 0; i < sizeof(probe_addrs)/sizeof(probe_addrs[0]); i++) {
  863                 for (addr = probe_addrs[i].start; addr <= probe_addrs[i].end;
  864                     addr++) {
  865                         /* Perform RECEIVE BYTE command */
  866                         iic_acquire_bus(ic, 0);
  867                         if (iic_exec(ic, I2C_OP_READ_WITH_STOP, addr,
  868                             &cmd, 1, NULL, 0, 0) == 0) {
  869                                 iic_release_bus(ic, 0);
  870 
  871                                 /* Some device exists, so go scope it out */
  872                                 iic_probe(self, iba, addr);
  873 
  874                                 iic_acquire_bus(ic, 0);
  875 
  876                         }
  877                         iic_release_bus(ic, 0);
  878                 }
  879         }
  880 }

/* [<][>][^][v][top][bottom][index][help] */