#define PROC_INTERFACE_VERSION 1
 
 #include <linux/compiler.h>
+#include <linux/dmi.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 MODULE_DESCRIPTION("Toshiba Laptop ACPI Extras Driver");
 MODULE_LICENSE("GPL");
 
+int turn_on_panel_on_resume = -1;
+module_param(turn_on_panel_on_resume, int, 0644);
+MODULE_PARM_DESC(turn_on_panel_on_resume,
+       "Call HCI_PANEL_POWER_ON on resume (-1 = auto, 0 = no, 1 = yes");
+
 #define TOSHIBA_WMI_EVENT_GUID "59142400-C6A3-40FA-BADB-8A2652834100"
 
 /* Scan code for Fn key on TOS1900 models */
 #define TOS_NOT_INSTALLED              0x8e00
 
 /* Registers */
+#define HCI_PANEL_POWER_ON             0x0002
 #define HCI_FAN                                0x0004
 #define HCI_TR_BACKLIGHT               0x0005
 #define HCI_SYSTEM_EVENT               0x0016
        return NULL;
 }
 
+/*
+ * Some Toshibas have a broken acpi-video interface for brightness control,
+ * these are quirked in drivers/acpi/video_detect.c to use the GPU native
+ * (/sys/class/backlight/intel_backlight) instead.
+ * But these need a HCI_SET call to actually turn the panel back on at resume,
+ * without this call the screen stays black at resume.
+ * Either HCI_LCD_BRIGHTNESS (used by acpi_video's _BCM) or HCI_PANEL_POWER_ON
+ * works. toshiba_acpi_resume() uses HCI_PANEL_POWER_ON to avoid changing
+ * the configured brightness level.
+ */
+static const struct dmi_system_id turn_on_panel_on_resume_dmi_ids[] = {
+       {
+        /* Toshiba Portégé R700 */
+        /* https://bugzilla.kernel.org/show_bug.cgi?id=21012 */
+        .matches = {
+               DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
+               DMI_MATCH(DMI_PRODUCT_NAME, "PORTEGE R700"),
+               },
+       },
+       {
+        /* Toshiba Satellite/Portégé R830 */
+        /* Portégé: https://bugs.freedesktop.org/show_bug.cgi?id=82634 */
+        /* Satellite: https://bugzilla.kernel.org/show_bug.cgi?id=21012 */
+        .matches = {
+               DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
+               DMI_MATCH(DMI_PRODUCT_NAME, "R830"),
+               },
+       },
+       {
+        /* Toshiba Satellite/Portégé Z830 */
+        .matches = {
+               DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
+               DMI_MATCH(DMI_PRODUCT_NAME, "Z830"),
+               },
+       },
+};
+
 static int toshiba_acpi_add(struct acpi_device *acpi_dev)
 {
        struct toshiba_acpi_dev *dev;
        }
 #endif
 
+       if (turn_on_panel_on_resume == -1)
+               turn_on_panel_on_resume = dmi_check_system(turn_on_panel_on_resume_dmi_ids);
+
        toshiba_wwan_available(dev);
        if (dev->wwan_supported)
                toshiba_acpi_setup_wwan_rfkill(dev);
                        rfkill_set_hw_state(dev->wwan_rfk, !dev->killswitch);
        }
 
+       if (turn_on_panel_on_resume)
+               hci_write(dev, HCI_PANEL_POWER_ON, 1);
+
        return 0;
 }
 #endif