aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/ttpci/ttpci-eeprom.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb/ttpci/ttpci-eeprom.c')
-rw-r--r--drivers/media/dvb/ttpci/ttpci-eeprom.c29
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
88int 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}
115EXPORT_SYMBOL(ttpci_eeprom_decode_mac);
116
88static int ttpci_eeprom_read_encodedMAC(struct i2c_adapter *adapter, u8 * encodedMAC) 117static int ttpci_eeprom_read_encodedMAC(struct i2c_adapter *adapter, u8 * encodedMAC)
89{ 118{
90 int ret; 119 int ret;