| | 1168 | name => "SMSC EMC1403", |
| | 1169 | driver => "emc1403", |
| | 1170 | i2c_addrs => [0x18, 0x2a, 0x4c, 0x4d], |
| | 1171 | i2c_detect => sub { emc1403_detect(@_, 0); }, |
| | 1172 | }, { |
| | 1173 | name => "SMSC EMC1404", |
| | 1174 | driver => "to-be-written", # emc1403 |
| | 1175 | i2c_addrs => [0x18, 0x2a, 0x4c, 0x4d], |
| | 1176 | i2c_detect => sub { emc1403_detect(@_, 1); }, |
| | 1177 | }, { |
| | 5144 | } |
| | 5145 | |
| | 5146 | # Chip to detect: 0 = EMC1403, 1 = EMC1404 |
| | 5147 | # Registers used: |
| | 5148 | # 0xfd: Device ID register |
| | 5149 | # 0xfe: Vendor ID register |
| | 5150 | # 0xff: Revision register |
| | 5151 | sub emc1403_detect |
| | 5152 | { |
| | 5153 | my ($file, $addr, $chip) = @_; |
| | 5154 | my $dev_id = i2c_smbus_read_byte_data($file, 0xfd); |
| | 5155 | my $man_id = i2c_smbus_read_byte_data($file, 0xfe); |
| | 5156 | my $rev = i2c_smbus_read_byte_data($file, 0xff); |
| | 5157 | |
| | 5158 | return unless $man_id == 0x5d; # SMSC |
| | 5159 | |
| | 5160 | if ($chip == 0) { |
| | 5161 | return unless $dev_id == 0x21; |
| | 5162 | return unless $rev == 0x01; |
| | 5163 | } elsif ($chip == 1) { |
| | 5164 | return unless $dev_id == 0x25; |
| | 5165 | return unless $rev == 0x01; |
| | 5166 | } |
| | 5167 | |
| | 5168 | return 6; |