Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b0aedb04 authored by Bruno Prémont's avatar Bruno Prémont Committed by Bartlomiej Zolnierkiewicz
Browse files

ide: Stop disks on reboot for laptop which cuts power



My laptop (Acer Travelmate 660) always cuts the power when rebooting
which causes the disk to emergency-park it's head.

Add a dmi check to stop disk as for shutdown on this laptop.

Signed-off-by: default avatarBruno Prémont <bonbons@linux-vserver.org>
Cc: Jeff Garzik <jeff@garzik.org>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent a1f9a89c
Loading
Loading
Loading
Loading
+16 −1
Original line number Original line Diff line number Diff line
@@ -7,6 +7,7 @@
#include <linux/mutex.h>
#include <linux/mutex.h>
#include <linux/ide.h>
#include <linux/ide.h>
#include <linux/hdreg.h>
#include <linux/hdreg.h>
#include <linux/dmi.h>


#if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
#if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
#define IDE_DISK_MINORS		(1 << PARTN_BITS)
#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);
		(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)
static void ide_gd_shutdown(ide_drive_t *drive)
{
{
#ifdef	CONFIG_ALPHA
#ifdef	CONFIG_ALPHA
@@ -115,7 +129,8 @@ static void ide_gd_shutdown(ide_drive_t *drive)
	   the disk to expire its write cache. */
	   the disk to expire its write cache. */
	if (system_state != SYSTEM_POWER_OFF) {
	if (system_state != SYSTEM_POWER_OFF) {
#else
#else
	if (system_state == SYSTEM_RESTART) {
	if (system_state == SYSTEM_RESTART &&
		!dmi_check_system(ide_coldreboot_table)) {
#endif
#endif
		drive->disk_ops->flush(drive);
		drive->disk_ops->flush(drive);
		return;
		return;