| 5779 | | # The max6650 has no device ID register. However, a few registers have |
| 5780 | | # spare bits, which are documented as being always zero on read. We read |
| 5781 | | # all of these registers check the spare bits. Any non-zero means this |
| 5782 | | # is not a max6650/1. |
| 5783 | | # |
| 5784 | | # The always zero bits are: |
| 5785 | | # configuration byte register (0x02) - top 2 bits |
| 5786 | | # gpio status register (0x14) - top 3 bits |
| 5787 | | # alarm enable register (0x08) - top 3 bits |
| 5788 | | # alarm status register (0x0A) - top 3 bits |
| 5789 | | # tachometer count time register (0x16) - top 6 bits |
| 5790 | | # Additionally, not all values are possible for lower 3 bits of |
| 5791 | | # the configuration register. |
| 5792 | | sub max6650_detect |
| 5793 | | { |
| 5794 | | my ($file, $addr) = @_; |
| 5795 | | |
| 5796 | | my $conf = i2c_smbus_read_byte_data($file, 0x02); |
| 5797 | | |
| 5798 | | return if i2c_smbus_read_byte_data($file, 0x16) & 0xFC; |
| 5799 | | return if i2c_smbus_read_byte_data($file, 0x0A) & 0xE0; |
| 5800 | | return if i2c_smbus_read_byte_data($file, 0x08) & 0xE0; |
| 5801 | | return if i2c_smbus_read_byte_data($file, 0x14) & 0xE0; |
| 5802 | | return if ($conf & 0xC0) or ($conf & 0x07) > 4; |
| 5803 | | |
| 5804 | | return 2; |
| 5805 | | } |
| 5806 | | |