master/slave.c
changeset 484 9fde4a17b820
parent 482 fbaaaf2a6234
child 499 fb005e975181
equal deleted inserted replaced
483:1a507e9ab735 484:9fde4a17b820
   106     unsigned int i;
   106     unsigned int i;
   107 
   107 
   108     slave->ring_position = ring_position;
   108     slave->ring_position = ring_position;
   109     slave->station_address = station_address;
   109     slave->station_address = station_address;
   110 
   110 
   111     // init kobject and add it to the hierarchy
       
   112     memset(&slave->kobj, 0x00, sizeof(struct kobject));
       
   113     kobject_init(&slave->kobj);
       
   114     slave->kobj.ktype = &ktype_ec_slave;
       
   115     slave->kobj.parent = &master->kobj;
       
   116     if (kobject_set_name(&slave->kobj, "slave%03i", slave->ring_position)) {
       
   117         EC_ERR("Failed to set kobject name.\n");
       
   118         kobject_put(&slave->kobj);
       
   119         return -1;
       
   120     }
       
   121 
       
   122     // init SDO kobject and add it to the hierarchy
       
   123     memset(&slave->sdo_kobj, 0x00, sizeof(struct kobject));
       
   124     kobject_init(&slave->sdo_kobj);
       
   125     slave->sdo_kobj.ktype = &ktype_ec_slave_sdos;
       
   126     slave->sdo_kobj.parent = &slave->kobj;
       
   127     if (kobject_set_name(&slave->sdo_kobj, "sdos")) {
       
   128         EC_ERR("Failed to set kobject name.\n");
       
   129         kobject_put(&slave->sdo_kobj);
       
   130         kobject_put(&slave->kobj);
       
   131         return -1;
       
   132     }
       
   133 
       
   134     slave->master = master;
   111     slave->master = master;
   135 
   112 
   136     slave->requested_state = EC_SLAVE_STATE_UNKNOWN;
   113     slave->requested_state = EC_SLAVE_STATE_UNKNOWN;
   137     slave->current_state = EC_SLAVE_STATE_UNKNOWN;
   114     slave->current_state = EC_SLAVE_STATE_UNKNOWN;
   138     slave->configured = 0;
   115     slave->configured = 0;
   183         slave->dl_loop[i] = 0;
   160         slave->dl_loop[i] = 0;
   184         slave->dl_signal[i] = 0;
   161         slave->dl_signal[i] = 0;
   185         slave->sii_physical_layer[i] = 0xFF;
   162         slave->sii_physical_layer[i] = 0xFF;
   186     }
   163     }
   187 
   164 
       
   165     // init kobject and add it to the hierarchy
       
   166     memset(&slave->kobj, 0x00, sizeof(struct kobject));
       
   167     kobject_init(&slave->kobj);
       
   168     slave->kobj.ktype = &ktype_ec_slave;
       
   169     slave->kobj.parent = &master->kobj;
       
   170     if (kobject_set_name(&slave->kobj, "slave%03i", slave->ring_position)) {
       
   171         EC_ERR("Failed to set kobject name.\n");
       
   172         goto out_slave_put;
       
   173     }
       
   174     if (kobject_add(&slave->kobj)) {
       
   175         EC_ERR("Failed to add slave's kobject.\n");
       
   176         goto out_slave_put;
       
   177     }
       
   178 
       
   179     // init SDO kobject and add it to the hierarchy
       
   180     memset(&slave->sdo_kobj, 0x00, sizeof(struct kobject));
       
   181     kobject_init(&slave->sdo_kobj);
       
   182     slave->sdo_kobj.ktype = &ktype_ec_slave_sdos;
       
   183     slave->sdo_kobj.parent = &slave->kobj;
       
   184     if (kobject_set_name(&slave->sdo_kobj, "sdos")) {
       
   185         EC_ERR("Failed to set kobject name.\n");
       
   186         goto out_sdo_put;
       
   187     }
       
   188     if (kobject_add(&slave->sdo_kobj)) {
       
   189         EC_ERR("Failed to add SDOs kobject.\n");
       
   190         goto out_sdo_put;
       
   191     }
       
   192 
   188     return 0;
   193     return 0;
       
   194 
       
   195  out_sdo_put:
       
   196     kobject_put(&slave->sdo_kobj);
       
   197     kobject_del(&slave->kobj);
       
   198  out_slave_put:
       
   199     kobject_put(&slave->kobj);
       
   200     return -1;
   189 }
   201 }
   190 
   202 
   191 /*****************************************************************************/
   203 /*****************************************************************************/
   192 
   204 
   193 /**
   205 /**
   204         list_del(&sdo->list);
   216         list_del(&sdo->list);
   205         ec_sdo_destroy(sdo);
   217         ec_sdo_destroy(sdo);
   206     }
   218     }
   207 
   219 
   208     // free SDO kobject
   220     // free SDO kobject
   209     if (slave->sdo_dictionary_fetched) kobject_del(&slave->sdo_kobj);
   221     kobject_del(&slave->sdo_kobj);
   210     kobject_put(&slave->sdo_kobj);
   222     kobject_put(&slave->sdo_kobj);
   211 
   223 
   212     // destroy self
   224     // destroy self
   213     kobject_del(&slave->kobj);
   225     kobject_del(&slave->kobj);
   214     kobject_put(&slave->kobj);
   226     kobject_put(&slave->kobj);