diff options
Diffstat (limited to 'drivers/char/ipmi/ipmi_ssif.c')
-rw-r--r-- | drivers/char/ipmi/ipmi_ssif.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c index 8b5aec5430f1..cf8156d6bc07 100644 --- a/drivers/char/ipmi/ipmi_ssif.c +++ b/drivers/char/ipmi/ipmi_ssif.c @@ -727,12 +727,16 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result, /* End of read */ len = ssif_info->multi_len; data = ssif_info->data; - } else if (blocknum != ssif_info->multi_pos) { + } else if (blocknum + 1 != ssif_info->multi_pos) { /* * Out of sequence block, just abort. Block * numbers start at zero for the second block, * but multi_pos starts at one, so the +1. */ + if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) + dev_dbg(&ssif_info->client->dev, + "Received message out of sequence, expected %u, got %u\n", + ssif_info->multi_pos - 1, blocknum); result = -EIO; } else { ssif_inc_stat(ssif_info, received_message_parts); @@ -1991,7 +1995,7 @@ static int dmi_ipmi_probe(struct platform_device *pdev) rv = device_property_read_u8(&pdev->dev, "slave-addr", &slave_addr); if (rv) - dev_warn(&pdev->dev, "device has no slave-addr property"); + slave_addr = 0x20; return new_ssif_client(i2c_addr, NULL, 0, slave_addr, SI_SMBIOS, &pdev->dev); @@ -2107,7 +2111,8 @@ static void cleanup_ipmi_ssif(void) kfree(ssif_i2c_driver.address_list); - platform_driver_unregister(&ipmi_driver); + if (ssif_trydmi) + platform_driver_unregister(&ipmi_driver); free_ssif_clients(); } |