Commit 0e4da5cb authored by Jonathan Brett's avatar Jonathan Brett Committed by Greg Kroah-Hartman
Browse files

Staging: asus_oled: Add suspend/resume callbacks



- Add simple suspend/resume PM callbacks to disable oled display on
  suspend and return to previous state on resume

Signed-off-by: default avatarJonathan Brett <jonbrett.dev@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 411c076a
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -137,6 +137,7 @@ struct asus_oled_dev {
	size_t			buf_size;
	char			*buf;
	uint8_t			enabled;
	uint8_t			enabled_post_resume;
	struct device		*dev;
};

@@ -765,11 +766,45 @@ static void asus_oled_disconnect(struct usb_interface *interface)
	dev_info(&interface->dev, "Disconnected Asus OLED device\n");
}

#ifdef CONFIG_PM
static int asus_oled_suspend(struct usb_interface *intf, pm_message_t message)
{
	struct asus_oled_dev *odev;

	odev = usb_get_intfdata(intf);
	if (!odev)
		return -ENODEV;

	odev->enabled_post_resume = odev->enabled;
	enable_oled(odev, 0);

	return 0;
}

static int asus_oled_resume(struct usb_interface *intf)
{
	struct asus_oled_dev *odev;

	odev = usb_get_intfdata(intf);
	if (!odev)
		return -ENODEV;

	enable_oled(odev, odev->enabled_post_resume);

	return 0;
}
#else
#define asus_oled_suspend NULL
#define asus_oled_resume NULL
#endif

static struct usb_driver oled_driver = {
	.name =		ASUS_OLED_NAME,
	.probe =	asus_oled_probe,
	.disconnect =	asus_oled_disconnect,
	.id_table =	id_table,
	.suspend =	asus_oled_suspend,
	.resume =	asus_oled_resume,
};

static CLASS_ATTR_STRING(version, S_IRUGO,