equal
deleted
inserted
replaced
84 ec_domain_t *domain, *next_d; |
84 ec_domain_t *domain, *next_d; |
85 ec_eoe_t *eoe, *next_eoe; |
85 ec_eoe_t *eoe, *next_eoe; |
86 |
86 |
87 // Alle Slaves entfernen |
87 // Alle Slaves entfernen |
88 if (master->slaves) { |
88 if (master->slaves) { |
89 for (i = 0; i < master->slave_count; i++) { |
89 for (i = 0; i < master->slave_count; i++) |
90 ec_slave_clear(master->slaves + i); |
90 ec_slave_clear(master->slaves + i); |
91 } |
|
92 kfree(master->slaves); |
91 kfree(master->slaves); |
93 master->slaves = NULL; |
92 master->slaves = NULL; |
94 } |
93 } |
95 master->slave_count = 0; |
94 master->slave_count = 0; |
96 |
95 |
106 ec_domain_clear(domain); |
105 ec_domain_clear(domain); |
107 kfree(domain); |
106 kfree(domain); |
108 } |
107 } |
109 |
108 |
110 // EOE-Liste leeren |
109 // EOE-Liste leeren |
111 list_for_each_entry_safe(eoe, next_eoe, &master->domains, list) { |
110 list_for_each_entry_safe(eoe, next_eoe, &master->eoe_slaves, list) { |
112 list_del(&eoe->list); |
111 list_del(&eoe->list); |
113 ec_eoe_clear(eoe); |
112 ec_eoe_clear(eoe); |
114 kfree(eoe); |
113 kfree(eoe); |
115 } |
114 } |
116 |
115 |
409 master->slave_count = command->working_counter; |
408 master->slave_count = command->working_counter; |
410 EC_INFO("Found %i slaves on bus.\n", master->slave_count); |
409 EC_INFO("Found %i slaves on bus.\n", master->slave_count); |
411 |
410 |
412 if (!master->slave_count) return 0; |
411 if (!master->slave_count) return 0; |
413 |
412 |
414 if (!(master->slaves = (ec_slave_t *) kmalloc(master->slave_count |
413 if (!(master->slaves = (ec_slave_t *) |
415 * sizeof(ec_slave_t), |
414 kmalloc(master->slave_count * sizeof(ec_slave_t), GFP_KERNEL))) { |
416 GFP_KERNEL))) { |
415 EC_ERR("Failed to allocate slaves!\n"); |
417 EC_ERR("Could not allocate memory for slaves!\n"); |
|
418 return -1; |
416 return -1; |
419 } |
417 } |
420 |
418 |
421 // Init slaves |
419 // Init slaves |
422 for (i = 0; i < master->slave_count; i++) { |
420 for (i = 0; i < master->slave_count; i++) { |
424 ec_slave_init(slave, master); |
422 ec_slave_init(slave, master); |
425 slave->ring_position = i; |
423 slave->ring_position = i; |
426 slave->station_address = i + 1; |
424 slave->station_address = i + 1; |
427 } |
425 } |
428 |
426 |
429 // For every slave in the list |
427 // For every slave on the bus |
430 for (i = 0; i < master->slave_count; i++) |
428 for (i = 0; i < master->slave_count; i++) { |
431 { |
|
432 slave = master->slaves + i; |
429 slave = master->slaves + i; |
433 |
430 |
434 // Write station address |
431 // Write station address |
435 if (ec_command_apwr(command, slave->ring_position, |
432 if (ec_command_apwr(command, slave->ring_position, |
436 0x0010, sizeof(uint16_t))) return -1; |
433 0x0010, sizeof(uint16_t))) return -1; |
459 " position %i.\n", slave->sii_vendor_id, |
456 " position %i.\n", slave->sii_vendor_id, |
460 slave->sii_product_code, i); |
457 slave->sii_product_code, i); |
461 |
458 |
462 // Does the slave support EoE? |
459 // Does the slave support EoE? |
463 if (slave->sii_mailbox_protocols & EC_MBOX_EOE) { |
460 if (slave->sii_mailbox_protocols & EC_MBOX_EOE) { |
464 if (!(eoe = kmalloc(sizeof(ec_eoe_t), GFP_KERNEL))) { |
461 if (!(eoe = (ec_eoe_t *) kmalloc(sizeof(ec_eoe_t), GFP_KERNEL))) { |
465 EC_ERR("Failed to allocate memory for EoE-Object.\n"); |
462 EC_ERR("Failed to allocate EoE-Object.\n"); |
466 return -1; |
463 return -1; |
467 } |
464 } |
468 |
465 |
469 ec_eoe_init(eoe, slave); |
466 ec_eoe_init(eoe, slave); |
470 list_add_tail(&eoe->list, &master->eoe_slaves); |
467 list_add_tail(&eoe->list, &master->eoe_slaves); |