diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2008-08-08 12:33:47 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-08-08 14:18:18 -0400 |
commit | 097d9eb537ff4d88b74c3fe67392e27c478ca3c5 (patch) | |
tree | 9034d676d9096857a380aab9d99e3e88fccb6bfe /drivers/media/video/pxa_camera.c | |
parent | c41107c2d4fd31924533f4dbc4c3428acc2b5894 (diff) | |
parent | aeee90dfa01844168cd7f8051d0a0f969c573067 (diff) |
Merge Linus' latest into master
Conflicts:
drivers/watchdog/at91rm9200_wdt.c
drivers/watchdog/davinci_wdt.c
drivers/watchdog/ep93xx_wdt.c
drivers/watchdog/ixp2000_wdt.c
drivers/watchdog/ixp4xx_wdt.c
drivers/watchdog/ks8695_wdt.c
drivers/watchdog/omap_wdt.c
drivers/watchdog/pnx4008_wdt.c
drivers/watchdog/sa1100_wdt.c
drivers/watchdog/wdt285.c
Diffstat (limited to 'drivers/media/video/pxa_camera.c')
-rw-r--r-- | drivers/media/video/pxa_camera.c | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/drivers/media/video/pxa_camera.c b/drivers/media/video/pxa_camera.c index 5e7ebca1968e..388cf94055d3 100644 --- a/drivers/media/video/pxa_camera.c +++ b/drivers/media/video/pxa_camera.c | |||
@@ -128,6 +128,8 @@ struct pxa_camera_dev { | |||
128 | 128 | ||
129 | struct pxa_buffer *active; | 129 | struct pxa_buffer *active; |
130 | struct pxa_dma_desc *sg_tail[3]; | 130 | struct pxa_dma_desc *sg_tail[3]; |
131 | |||
132 | u32 save_cicr[5]; | ||
131 | }; | 133 | }; |
132 | 134 | ||
133 | static const char *pxa_cam_driver_description = "PXA_Camera"; | 135 | static const char *pxa_cam_driver_description = "PXA_Camera"; |
@@ -997,10 +999,64 @@ static int pxa_camera_querycap(struct soc_camera_host *ici, | |||
997 | return 0; | 999 | return 0; |
998 | } | 1000 | } |
999 | 1001 | ||
1002 | static int pxa_camera_suspend(struct soc_camera_device *icd, pm_message_t state) | ||
1003 | { | ||
1004 | struct soc_camera_host *ici = | ||
1005 | to_soc_camera_host(icd->dev.parent); | ||
1006 | struct pxa_camera_dev *pcdev = ici->priv; | ||
1007 | int i = 0, ret = 0; | ||
1008 | |||
1009 | pcdev->save_cicr[i++] = CICR0; | ||
1010 | pcdev->save_cicr[i++] = CICR1; | ||
1011 | pcdev->save_cicr[i++] = CICR2; | ||
1012 | pcdev->save_cicr[i++] = CICR3; | ||
1013 | pcdev->save_cicr[i++] = CICR4; | ||
1014 | |||
1015 | if ((pcdev->icd) && (pcdev->icd->ops->suspend)) | ||
1016 | ret = pcdev->icd->ops->suspend(pcdev->icd, state); | ||
1017 | |||
1018 | return ret; | ||
1019 | } | ||
1020 | |||
1021 | static int pxa_camera_resume(struct soc_camera_device *icd) | ||
1022 | { | ||
1023 | struct soc_camera_host *ici = | ||
1024 | to_soc_camera_host(icd->dev.parent); | ||
1025 | struct pxa_camera_dev *pcdev = ici->priv; | ||
1026 | int i = 0, ret = 0; | ||
1027 | |||
1028 | DRCMR68 = pcdev->dma_chans[0] | DRCMR_MAPVLD; | ||
1029 | DRCMR69 = pcdev->dma_chans[1] | DRCMR_MAPVLD; | ||
1030 | DRCMR70 = pcdev->dma_chans[2] | DRCMR_MAPVLD; | ||
1031 | |||
1032 | CICR0 = pcdev->save_cicr[i++] & ~CICR0_ENB; | ||
1033 | CICR1 = pcdev->save_cicr[i++]; | ||
1034 | CICR2 = pcdev->save_cicr[i++]; | ||
1035 | CICR3 = pcdev->save_cicr[i++]; | ||
1036 | CICR4 = pcdev->save_cicr[i++]; | ||
1037 | |||
1038 | if ((pcdev->icd) && (pcdev->icd->ops->resume)) | ||
1039 | ret = pcdev->icd->ops->resume(pcdev->icd); | ||
1040 | |||
1041 | /* Restart frame capture if active buffer exists */ | ||
1042 | if (!ret && pcdev->active) { | ||
1043 | /* Reset the FIFOs */ | ||
1044 | CIFR |= CIFR_RESET_F; | ||
1045 | /* Enable End-Of-Frame Interrupt */ | ||
1046 | CICR0 &= ~CICR0_EOFM; | ||
1047 | /* Restart the Capture Interface */ | ||
1048 | CICR0 |= CICR0_ENB; | ||
1049 | } | ||
1050 | |||
1051 | return ret; | ||
1052 | } | ||
1053 | |||
1000 | static struct soc_camera_host_ops pxa_soc_camera_host_ops = { | 1054 | static struct soc_camera_host_ops pxa_soc_camera_host_ops = { |
1001 | .owner = THIS_MODULE, | 1055 | .owner = THIS_MODULE, |
1002 | .add = pxa_camera_add_device, | 1056 | .add = pxa_camera_add_device, |
1003 | .remove = pxa_camera_remove_device, | 1057 | .remove = pxa_camera_remove_device, |
1058 | .suspend = pxa_camera_suspend, | ||
1059 | .resume = pxa_camera_resume, | ||
1004 | .set_fmt_cap = pxa_camera_set_fmt_cap, | 1060 | .set_fmt_cap = pxa_camera_set_fmt_cap, |
1005 | .try_fmt_cap = pxa_camera_try_fmt_cap, | 1061 | .try_fmt_cap = pxa_camera_try_fmt_cap, |
1006 | .init_videobuf = pxa_camera_init_videobuf, | 1062 | .init_videobuf = pxa_camera_init_videobuf, |
@@ -1198,7 +1254,7 @@ static int __devinit pxa_camera_init(void) | |||
1198 | 1254 | ||
1199 | static void __exit pxa_camera_exit(void) | 1255 | static void __exit pxa_camera_exit(void) |
1200 | { | 1256 | { |
1201 | return platform_driver_unregister(&pxa_camera_driver); | 1257 | platform_driver_unregister(&pxa_camera_driver); |
1202 | } | 1258 | } |
1203 | 1259 | ||
1204 | module_init(pxa_camera_init); | 1260 | module_init(pxa_camera_init); |