master/slave.c
changeset 264 76cba93ba122
parent 260 5fe7df7f2433
child 266 0234b0c26c52
equal deleted inserted replaced
263:aa6623e5d958 264:76cba93ba122
    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");