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

Commit ff68defa authored by Jonathan Corbet's avatar Jonathan Corbet Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (5467): Add suspend/resume support to the Cafe CCIC



Add suspend/resume support to the Cafe CCIC driver.

Signed-off-by: default avatarJonathan Corbet <corbet@lwn.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 5b50ed7c
Loading
Loading
Loading
Loading
+44 −1
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@

#include "cafe_ccic-regs.h"

#define CAFE_VERSION 0x000001
#define CAFE_VERSION 0x000002


/*
@@ -2188,6 +2188,45 @@ static void cafe_pci_remove(struct pci_dev *pdev)
}


#ifdef CONFIG_PM
/*
 * Basic power management.
 */
static int cafe_pci_suspend(struct pci_dev *pdev, pm_message_t state)
{
	struct cafe_camera *cam = cafe_find_by_pdev(pdev);
	int ret;

	ret = pci_save_state(pdev);
	if (ret)
		return ret;
	cafe_ctlr_stop_dma(cam);
	cafe_ctlr_power_down(cam);
	pci_disable_device(pdev);
	return 0;
}


static int cafe_pci_resume(struct pci_dev *pdev)
{
	struct cafe_camera *cam = cafe_find_by_pdev(pdev);
	int ret = 0;

	ret = pci_restore_state(pdev);
	if (ret)
		return ret;
	pci_enable_device(pdev);
	cafe_ctlr_init(cam);
	cafe_ctlr_power_up(cam);
	set_bit(CF_CONFIG_NEEDED, &cam->flags);
	if (cam->state == S_SPECREAD)
		cam->state = S_IDLE;  /* Don't bother restarting */
	else if (cam->state == S_SINGLEREAD || cam->state == S_STREAMING)
		ret = cafe_read_setup(cam, cam->state);
	return ret;
}

#endif  /* CONFIG_PM */


static struct pci_device_id cafe_ids[] = {
@@ -2203,6 +2242,10 @@ static struct pci_driver cafe_pci_driver = {
	.id_table = cafe_ids,
	.probe = cafe_pci_probe,
	.remove = cafe_pci_remove,
#ifdef CONFIG_PM
	.suspend = cafe_pci_suspend,
	.resume = cafe_pci_resume,
#endif
};