64 EC_SYSFS_READ_ATTR(ring_position); |
64 EC_SYSFS_READ_ATTR(ring_position); |
65 EC_SYSFS_READ_ATTR(coupler_address); |
65 EC_SYSFS_READ_ATTR(coupler_address); |
66 EC_SYSFS_READ_ATTR(vendor_name); |
66 EC_SYSFS_READ_ATTR(vendor_name); |
67 EC_SYSFS_READ_ATTR(product_name); |
67 EC_SYSFS_READ_ATTR(product_name); |
68 EC_SYSFS_READ_ATTR(product_desc); |
68 EC_SYSFS_READ_ATTR(product_desc); |
69 EC_SYSFS_READ_ATTR(sii_desc); |
69 EC_SYSFS_READ_ATTR(sii_name); |
70 EC_SYSFS_READ_ATTR(type); |
70 EC_SYSFS_READ_ATTR(type); |
71 EC_SYSFS_READ_WRITE_ATTR(state); |
71 EC_SYSFS_READ_WRITE_ATTR(state); |
72 |
72 |
73 static struct attribute *def_attrs[] = { |
73 static struct attribute *def_attrs[] = { |
74 &attr_ring_position, |
74 &attr_ring_position, |
75 &attr_coupler_address, |
75 &attr_coupler_address, |
76 &attr_vendor_name, |
76 &attr_vendor_name, |
77 &attr_product_name, |
77 &attr_product_name, |
78 &attr_product_desc, |
78 &attr_product_desc, |
79 &attr_sii_desc, |
79 &attr_sii_name, |
80 &attr_type, |
80 &attr_type, |
81 &attr_state, |
81 &attr_state, |
82 NULL, |
82 NULL, |
83 }; |
83 }; |
84 |
84 |
143 slave->sii_tx_mailbox_size = 0; |
143 slave->sii_tx_mailbox_size = 0; |
144 slave->sii_mailbox_protocols = 0; |
144 slave->sii_mailbox_protocols = 0; |
145 slave->type = NULL; |
145 slave->type = NULL; |
146 slave->registered = 0; |
146 slave->registered = 0; |
147 slave->fmmu_count = 0; |
147 slave->fmmu_count = 0; |
|
148 slave->eeprom_group = NULL; |
|
149 slave->eeprom_image = NULL; |
|
150 slave->eeprom_order = NULL; |
148 slave->eeprom_name = NULL; |
151 slave->eeprom_name = NULL; |
149 slave->eeprom_group = NULL; |
|
150 slave->eeprom_desc = NULL; |
|
151 slave->requested_state = EC_SLAVE_STATE_UNKNOWN; |
152 slave->requested_state = EC_SLAVE_STATE_UNKNOWN; |
152 slave->current_state = EC_SLAVE_STATE_UNKNOWN; |
153 slave->current_state = EC_SLAVE_STATE_UNKNOWN; |
153 slave->state_error = 0; |
154 slave->state_error = 0; |
154 slave->online = 1; |
155 slave->online = 1; |
155 |
156 |
213 } |
214 } |
214 |
215 |
215 kfree(pdo); |
216 kfree(pdo); |
216 } |
217 } |
217 |
218 |
|
219 if (slave->eeprom_group) kfree(slave->eeprom_group); |
|
220 if (slave->eeprom_image) kfree(slave->eeprom_image); |
|
221 if (slave->eeprom_order) kfree(slave->eeprom_order); |
218 if (slave->eeprom_name) kfree(slave->eeprom_name); |
222 if (slave->eeprom_name) kfree(slave->eeprom_name); |
219 if (slave->eeprom_group) kfree(slave->eeprom_group); |
|
220 if (slave->eeprom_desc) kfree(slave->eeprom_desc); |
|
221 |
223 |
222 // free all SDOs |
224 // free all SDOs |
223 list_for_each_entry_safe(sdo, next_sdo, &slave->sdo_dictionary, list) { |
225 list_for_each_entry_safe(sdo, next_sdo, &slave->sdo_dictionary, list) { |
224 list_del(&sdo->list); |
226 list_del(&sdo->list); |
225 if (sdo->name) kfree(sdo->name); |
227 if (sdo->name) kfree(sdo->name); |
646 { |
648 { |
647 unsigned int i; |
649 unsigned int i; |
648 |
650 |
649 if (ec_slave_locate_string(slave, data[0], &slave->eeprom_group)) |
651 if (ec_slave_locate_string(slave, data[0], &slave->eeprom_group)) |
650 return -1; |
652 return -1; |
651 if (ec_slave_locate_string(slave, data[1], &slave->eeprom_name)) |
653 if (ec_slave_locate_string(slave, data[1], &slave->eeprom_image)) |
652 return -1; |
654 return -1; |
653 if (ec_slave_locate_string(slave, data[3], &slave->eeprom_desc)) |
655 if (ec_slave_locate_string(slave, data[2], &slave->eeprom_order)) |
|
656 return -1; |
|
657 if (ec_slave_locate_string(slave, data[3], &slave->eeprom_name)) |
654 return -1; |
658 return -1; |
655 |
659 |
656 for (i = 0; i < 4; i++) |
660 for (i = 0; i < 4; i++) |
657 slave->sii_physical_layer[i] = |
661 slave->sii_physical_layer[i] = |
658 (data[4] & (0x03 << (i * 2))) >> (i * 2); |
662 (data[4] & (0x03 << (i * 2))) >> (i * 2); |
1124 EC_INFO(" Vendor-ID: 0x%08X, Product code: 0x%08X\n", |
1128 EC_INFO(" Vendor-ID: 0x%08X, Product code: 0x%08X\n", |
1125 slave->sii_vendor_id, slave->sii_product_code); |
1129 slave->sii_vendor_id, slave->sii_product_code); |
1126 EC_INFO(" Revision number: 0x%08X, Serial number: 0x%08X\n", |
1130 EC_INFO(" Revision number: 0x%08X, Serial number: 0x%08X\n", |
1127 slave->sii_revision_number, slave->sii_serial_number); |
1131 slave->sii_revision_number, slave->sii_serial_number); |
1128 |
1132 |
|
1133 if (slave->eeprom_group) |
|
1134 EC_INFO(" Group: %s\n", slave->eeprom_group); |
|
1135 if (slave->eeprom_image) |
|
1136 EC_INFO(" Image: %s\n", slave->eeprom_image); |
|
1137 if (slave->eeprom_order) |
|
1138 EC_INFO(" Order#: %s\n", slave->eeprom_order); |
1129 if (slave->eeprom_name) |
1139 if (slave->eeprom_name) |
1130 EC_INFO(" Name: %s\n", slave->eeprom_name); |
1140 EC_INFO(" Name: %s\n", slave->eeprom_name); |
1131 if (slave->eeprom_group) |
|
1132 EC_INFO(" Group: %s\n", slave->eeprom_group); |
|
1133 if (slave->eeprom_desc) |
|
1134 EC_INFO(" Description: %s\n", slave->eeprom_desc); |
|
1135 |
1141 |
1136 if (!list_empty(&slave->eeprom_syncs)) { |
1142 if (!list_empty(&slave->eeprom_syncs)) { |
1137 EC_INFO(" Sync-Managers:\n"); |
1143 EC_INFO(" Sync-Managers:\n"); |
1138 list_for_each_entry(sync, &slave->eeprom_syncs, list) { |
1144 list_for_each_entry(sync, &slave->eeprom_syncs, list) { |
1139 EC_INFO(" %i: 0x%04X, length %i, control 0x%02X, %s\n", |
1145 EC_INFO(" %i: 0x%04X, length %i, control 0x%02X, %s\n", |
1261 } |
1267 } |
1262 else if (attr == &attr_product_desc) { |
1268 else if (attr == &attr_product_desc) { |
1263 if (slave->type) |
1269 if (slave->type) |
1264 return sprintf(buffer, "%s\n", slave->type->description); |
1270 return sprintf(buffer, "%s\n", slave->type->description); |
1265 } |
1271 } |
1266 else if (attr == &attr_sii_desc) { |
1272 else if (attr == &attr_sii_name) { |
1267 if (slave->eeprom_desc) |
1273 if (slave->eeprom_name) |
1268 return sprintf(buffer, "%s\n", slave->eeprom_desc); |
1274 return sprintf(buffer, "%s\n", slave->eeprom_name); |
1269 } |
1275 } |
1270 else if (attr == &attr_type) { |
1276 else if (attr == &attr_type) { |
1271 if (slave->type) { |
1277 if (slave->type) { |
1272 if (slave->type->special == EC_TYPE_BUS_COUPLER) |
1278 if (slave->type->special == EC_TYPE_BUS_COUPLER) |
1273 return sprintf(buffer, "coupler\n"); |
1279 return sprintf(buffer, "coupler\n"); |