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

Commit 859cb7f2 authored by Richard Purdie's avatar Richard Purdie
Browse files

leds: Add suspend/resume to the core class

Add suspend/resume to the core class and remove all the now unneeded
code from various drivers. Originally the class code couldn't support
suspend/resume but since class_device can there is no reason for
each driver doing its own suspend/resume anymore.
parent 0081e802
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -91,6 +91,26 @@ void led_classdev_resume(struct led_classdev *led_cdev)
}
EXPORT_SYMBOL_GPL(led_classdev_resume);

static int led_suspend(struct device *dev, pm_message_t state)
{
	struct led_classdev *led_cdev = dev_get_drvdata(dev);

	if (led_cdev->flags & LED_CORE_SUSPENDRESUME)
		led_classdev_suspend(led_cdev);

	return 0;
}

static int led_resume(struct device *dev)
{
	struct led_classdev *led_cdev = dev_get_drvdata(dev);

	if (led_cdev->flags & LED_CORE_SUSPENDRESUME)
		led_classdev_resume(led_cdev);

	return 0;
}

/**
 * led_classdev_register - register a new object of led_classdev class.
 * @parent: The device to register.
@@ -174,6 +194,8 @@ static int __init leds_init(void)
	leds_class = class_create(THIS_MODULE, "leds");
	if (IS_ERR(leds_class))
		return PTR_ERR(leds_class);
	leds_class->suspend = led_suspend;
	leds_class->resume = led_resume;
	return 0;
}

+1 −29
Original line number Diff line number Diff line
@@ -65,39 +65,13 @@ static struct alix_led alix_leds[] = {
	},
};

#ifdef CONFIG_PM

static int alix_led_suspend(struct platform_device *dev, pm_message_t state)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(alix_leds); i++)
		led_classdev_suspend(&alix_leds[i].cdev);
	return 0;
}

static int alix_led_resume(struct platform_device *dev)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(alix_leds); i++)
		led_classdev_resume(&alix_leds[i].cdev);
	return 0;
}

#else

#define alix_led_suspend NULL
#define alix_led_resume NULL

#endif

static int __init alix_led_probe(struct platform_device *pdev)
{
	int i;
	int ret;

	for (i = 0; i < ARRAY_SIZE(alix_leds); i++) {
		alix_leds[i].cdev.flags |= LED_CORE_SUSPENDRESUME;
		ret = led_classdev_register(&pdev->dev, &alix_leds[i].cdev);
		if (ret < 0)
			goto fail;
@@ -121,8 +95,6 @@ static int alix_led_remove(struct platform_device *pdev)

static struct platform_driver alix_led_driver = {
	.remove = alix_led_remove,
	.suspend = alix_led_suspend,
	.resume = alix_led_resume,
	.driver = {
		.name = KBUILD_MODNAME,
		.owner = THIS_MODULE,
+1 −28
Original line number Diff line number Diff line
@@ -79,37 +79,12 @@ static struct ams_delta_led ams_delta_leds[] = {
	},
};

#ifdef CONFIG_PM
static int ams_delta_led_suspend(struct platform_device *dev,
		pm_message_t state)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(ams_delta_leds); i++)
		led_classdev_suspend(&ams_delta_leds[i].cdev);

	return 0;
}

static int ams_delta_led_resume(struct platform_device *dev)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(ams_delta_leds); i++)
		led_classdev_resume(&ams_delta_leds[i].cdev);

	return 0;
}
#else
#define ams_delta_led_suspend NULL
#define ams_delta_led_resume NULL
#endif

static int ams_delta_led_probe(struct platform_device *pdev)
{
	int i, ret;

	for (i = 0; i < ARRAY_SIZE(ams_delta_leds); i++) {
		ams_delta_leds[i].cdev.flags |= LED_CORE_SUSPENDRESUME;
		ret = led_classdev_register(&pdev->dev,
				&ams_delta_leds[i].cdev);
		if (ret < 0)
@@ -136,8 +111,6 @@ static int ams_delta_led_remove(struct platform_device *pdev)
static struct platform_driver ams_delta_led_driver = {
	.probe		= ams_delta_led_probe,
	.remove		= ams_delta_led_remove,
	.suspend	= ams_delta_led_suspend,
	.resume		= ams_delta_led_resume,
	.driver		= {
		.name = "ams-delta-led",
		.owner = THIS_MODULE,
+1 −20
Original line number Diff line number Diff line
@@ -142,6 +142,7 @@ static struct led_classdev clevo_mail_led = {
	.name			= "clevo::mail",
	.brightness_set		= clevo_mail_led_set,
	.blink_set		= clevo_mail_led_blink,
	.flags			= LED_CORE_SUSPENDRESUME,
};

static int __init clevo_mail_led_probe(struct platform_device *pdev)
@@ -155,29 +156,9 @@ static int clevo_mail_led_remove(struct platform_device *pdev)
	return 0;
}

#ifdef CONFIG_PM
static int clevo_mail_led_suspend(struct platform_device *dev,
				  pm_message_t state)
{
	led_classdev_suspend(&clevo_mail_led);
	return 0;
}

static int clevo_mail_led_resume(struct platform_device *dev)
{
	led_classdev_resume(&clevo_mail_led);
	return 0;
}
#else
#define clevo_mail_led_suspend    NULL
#define clevo_mail_led_resume     NULL
#endif

static struct platform_driver clevo_mail_led_driver = {
	.probe		= clevo_mail_led_probe,
	.remove		= clevo_mail_led_remove,
	.suspend	= clevo_mail_led_suspend,
	.resume		= clevo_mail_led_resume,
	.driver		= {
		.name		= KBUILD_MODNAME,
		.owner		= THIS_MODULE,
+6 −31
Original line number Diff line number Diff line
@@ -99,64 +99,43 @@ static void fsg_led_ring_set(struct led_classdev *led_cdev,
}



static struct led_classdev fsg_wlan_led = {
	.name			= "fsg:blue:wlan",
	.brightness_set		= fsg_led_wlan_set,
	.flags			= LED_CORE_SUSPENDRESUME,
};

static struct led_classdev fsg_wan_led = {
	.name			= "fsg:blue:wan",
	.brightness_set		= fsg_led_wan_set,
	.flags			= LED_CORE_SUSPENDRESUME,
};

static struct led_classdev fsg_sata_led = {
	.name			= "fsg:blue:sata",
	.brightness_set		= fsg_led_sata_set,
	.flags			= LED_CORE_SUSPENDRESUME,
};

static struct led_classdev fsg_usb_led = {
	.name			= "fsg:blue:usb",
	.brightness_set		= fsg_led_usb_set,
	.flags			= LED_CORE_SUSPENDRESUME,
};

static struct led_classdev fsg_sync_led = {
	.name			= "fsg:blue:sync",
	.brightness_set		= fsg_led_sync_set,
	.flags			= LED_CORE_SUSPENDRESUME,
};

static struct led_classdev fsg_ring_led = {
	.name			= "fsg:blue:ring",
	.brightness_set		= fsg_led_ring_set,
	.flags			= LED_CORE_SUSPENDRESUME,
};



#ifdef CONFIG_PM
static int fsg_led_suspend(struct platform_device *dev, pm_message_t state)
{
	led_classdev_suspend(&fsg_wlan_led);
	led_classdev_suspend(&fsg_wan_led);
	led_classdev_suspend(&fsg_sata_led);
	led_classdev_suspend(&fsg_usb_led);
	led_classdev_suspend(&fsg_sync_led);
	led_classdev_suspend(&fsg_ring_led);
	return 0;
}

static int fsg_led_resume(struct platform_device *dev)
{
	led_classdev_resume(&fsg_wlan_led);
	led_classdev_resume(&fsg_wan_led);
	led_classdev_resume(&fsg_sata_led);
	led_classdev_resume(&fsg_usb_led);
	led_classdev_resume(&fsg_sync_led);
	led_classdev_resume(&fsg_ring_led);
	return 0;
}
#endif


static int fsg_led_probe(struct platform_device *pdev)
{
	int ret;
@@ -232,10 +211,6 @@ static int fsg_led_remove(struct platform_device *pdev)
static struct platform_driver fsg_led_driver = {
	.probe		= fsg_led_probe,
	.remove		= fsg_led_remove,
#ifdef CONFIG_PM
	.suspend	= fsg_led_suspend,
	.resume		= fsg_led_resume,
#endif
	.driver		= {
		.name		= "fsg-led",
	},
Loading