|
@@ -7,6 +7,7 @@
|
|
|
#include <linux/mutex.h>
|
|
|
#include <linux/ide.h>
|
|
|
#include <linux/hdreg.h>
|
|
|
+#include <linux/dmi.h>
|
|
|
|
|
|
#if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
|
|
|
#define IDE_DISK_MINORS (1 << PARTN_BITS)
|
|
@@ -99,6 +100,19 @@ static void ide_gd_resume(ide_drive_t *drive)
|
|
|
(void)drive->disk_ops->get_capacity(drive);
|
|
|
}
|
|
|
|
|
|
+static const struct dmi_system_id ide_coldreboot_table[] = {
|
|
|
+ {
|
|
|
+ /* Acer TravelMate 66x cuts power during reboot */
|
|
|
+ .ident = "Acer TravelMate 660",
|
|
|
+ .matches = {
|
|
|
+ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
|
|
+ DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"),
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+ { } /* terminate list */
|
|
|
+};
|
|
|
+
|
|
|
static void ide_gd_shutdown(ide_drive_t *drive)
|
|
|
{
|
|
|
#ifdef CONFIG_ALPHA
|
|
@@ -115,7 +129,8 @@ static void ide_gd_shutdown(ide_drive_t *drive)
|
|
|
the disk to expire its write cache. */
|
|
|
if (system_state != SYSTEM_POWER_OFF) {
|
|
|
#else
|
|
|
- if (system_state == SYSTEM_RESTART) {
|
|
|
+ if (system_state == SYSTEM_RESTART &&
|
|
|
+ !dmi_check_system(ide_coldreboot_table)) {
|
|
|
#endif
|
|
|
drive->disk_ops->flush(drive);
|
|
|
return;
|