diff options
Diffstat (limited to 'drivers/media/dvb/ttpci/ttpci-eeprom.c')
-rw-r--r-- | drivers/media/dvb/ttpci/ttpci-eeprom.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/media/dvb/ttpci/ttpci-eeprom.c b/drivers/media/dvb/ttpci/ttpci-eeprom.c index 7dd54b3026a2..32d43156c548 100644 --- a/drivers/media/dvb/ttpci/ttpci-eeprom.c +++ b/drivers/media/dvb/ttpci/ttpci-eeprom.c | |||
@@ -85,6 +85,35 @@ static int getmac_tt(u8 * decodedMAC, u8 * encodedMAC) | |||
85 | return 0; | 85 | return 0; |
86 | } | 86 | } |
87 | 87 | ||
88 | int ttpci_eeprom_decode_mac(u8 *decodedMAC, u8 *encodedMAC) | ||
89 | { | ||
90 | u8 xor[20] = { 0x72, 0x23, 0x68, 0x19, 0x5c, 0xa8, 0x71, 0x2c, | ||
91 | 0x54, 0xd3, 0x7b, 0xf1, 0x9E, 0x23, 0x16, 0xf6, | ||
92 | 0x1d, 0x36, 0x64, 0x78}; | ||
93 | u8 data[20]; | ||
94 | int i; | ||
95 | |||
96 | memcpy(data, encodedMAC, 20); | ||
97 | |||
98 | for (i = 0; i < 20; i++) | ||
99 | data[i] ^= xor[i]; | ||
100 | for (i = 0; i < 10; i++) | ||
101 | data[i] = ((data[2 * i + 1] << 8) | data[2 * i]) | ||
102 | >> ((data[2 * i + 1] >> 6) & 3); | ||
103 | |||
104 | if (check_mac_tt(data)) | ||
105 | return -ENODEV; | ||
106 | |||
107 | decodedMAC[0] = data[2]; | ||
108 | decodedMAC[1] = data[1]; | ||
109 | decodedMAC[2] = data[0]; | ||
110 | decodedMAC[3] = data[6]; | ||
111 | decodedMAC[4] = data[5]; | ||
112 | decodedMAC[5] = data[4]; | ||
113 | return 0; | ||
114 | } | ||
115 | EXPORT_SYMBOL(ttpci_eeprom_decode_mac); | ||
116 | |||
88 | static int ttpci_eeprom_read_encodedMAC(struct i2c_adapter *adapter, u8 * encodedMAC) | 117 | static int ttpci_eeprom_read_encodedMAC(struct i2c_adapter *adapter, u8 * encodedMAC) |
89 | { | 118 | { |
90 | int ret; | 119 | int ret; |