Re: [PATCH v9] ARM: omap: edma: add suspend resume hook
On Friday 14 November 2014 10:37 PM, Daniel Mack wrote: Hi Sekhar, On 11/14/2014 06:03 PM, Sekhar Nori wrote: I think I have asked this before, and I am still not sure why this call to pm_runtime_get_sync() is needed here. From my testing today, this does seem to be a a no-op and this call returns from rpm_resume() because of this check: else if (dev-power.disable_depth == 1 dev-power.is_suspended dev-power.runtime_status == RPM_ACTIVE) retval = 1; Yes. IIRC, it was in fact not needed. So, AFAICS, the net effect is an increment of dev-power.usage_count (which is already greater than 0) and its subsequent decrement at the end of the function. After removing this call I did not see any EDMA malfunction as well (can access MMC/SD just fine after suspend/resume cycle). So, any objections to merging this patch with the attached hunk applied? Looks good to me, we can still add it back later if it turns out to be needed. Okay, thanks for the confirmation. Regards, Sekhar -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v9] ARM: omap: edma: add suspend resume hook
On Tuesday 26 August 2014 02:22 PM, Daniel Mack wrote: This patch makes the edma driver resume correctly after suspend. Tested on an AM33xx platform with cyclic audio streams and omap_hsmmc. All information can be reconstructed by already known runtime information. As we now use some functions that were previously only used from __init context, annotations had to be dropped. [n...@ti.com: added error handling for runtime + suspend_late/early_resume] Signed-off-by: Nishanth Menon n...@ti.com Signed-off-by: Daniel Mack zon...@gmail.com Tested-by: Joel Fernandes jo...@ti.com Acked-by: Joel Fernandes jo...@ti.com --- Changes from v8: * Drop the edma_suspend hook altogether. Even though back then when I wrote the code I was sure disabling the interrupts during suspend is necessary, tests now show it in fact isn't. My test setup still works if that code is omitted. * Use SET_LATE_SYSTEM_SLEEP_PM_OPS in the dev_pm_ops declaration. Thanks to Sekhar for pointing out the above. arch/arm/common/edma.c | 60 -- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c index 485be42..c623dd0 100644 --- a/arch/arm/common/edma.c +++ b/arch/arm/common/edma.c @@ -244,6 +244,8 @@ struct edma { /* list of channels with no even trigger; terminated by -1 */ const s8*noevent; + struct edma_soc_info *info; + /* The edma_inuse bit for each PaRAM slot is clear unless the * channel is in use ... by ARM or DSP, for QDMA, or whatever. */ @@ -295,7 +297,7 @@ static void map_dmach_queue(unsigned ctlr, unsigned ch_no, ~(0x7 bit), queue_no bit); } -static void __init assign_priority_to_queue(unsigned ctlr, int queue_no, +static void assign_priority_to_queue(unsigned ctlr, int queue_no, int priority) { int bit = queue_no * 4; @@ -314,7 +316,7 @@ static void __init assign_priority_to_queue(unsigned ctlr, int queue_no, * included in that particular EDMA variant (Eg : dm646x) * */ -static void __init map_dmach_param(unsigned ctlr) +static void map_dmach_param(unsigned ctlr) { int i; for (i = 0; i EDMA_MAX_DMACH; i++) @@ -1762,15 +1764,69 @@ static int edma_probe(struct platform_device *pdev) edma_write_array2(j, EDMA_DRAE, i, 1, 0x0); edma_write_array(j, EDMA_QRAE, i, 0x0); } + edma_cc[j]-info = info[j]; arch_num_cc++; } return 0; } +static int edma_pm_resume(struct device *dev) +{ + int i, j, r; + + r = pm_runtime_get_sync(dev); I think I have asked this before, and I am still not sure why this call to pm_runtime_get_sync() is needed here. From my testing today, this does seem to be a a no-op and this call returns from rpm_resume() because of this check: else if (dev-power.disable_depth == 1 dev-power.is_suspended dev-power.runtime_status == RPM_ACTIVE) retval = 1; So, AFAICS, the net effect is an increment of dev-power.usage_count (which is already greater than 0) and its subsequent decrement at the end of the function. After removing this call I did not see any EDMA malfunction as well (can access MMC/SD just fine after suspend/resume cycle). So, any objections to merging this patch with the attached hunk applied? Thanks, Sekhar ---8--- diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c index 1f492d5be9c0..79de6a23047b 100644 --- a/arch/arm/common/edma.c +++ b/arch/arm/common/edma.c @@ -1803,13 +1803,7 @@ static int edma_probe(struct platform_device *pdev) static int edma_pm_resume(struct device *dev) { - int i, j, r; - - r = pm_runtime_get_sync(dev); - if (r 0) { - dev_err(dev, %s: get_sync returned %d\n, __func__, r); - return r; - } + int i, j; for (j = 0; j arch_num_cc; j++) { struct edma *cc = edma_cc[j]; @@ -1844,8 +1838,6 @@ static int edma_pm_resume(struct device *dev) } } - pm_runtime_put_sync(dev); - return 0; } -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v9] ARM: omap: edma: add suspend resume hook
Hi Sekhar, On 11/14/2014 06:03 PM, Sekhar Nori wrote: I think I have asked this before, and I am still not sure why this call to pm_runtime_get_sync() is needed here. From my testing today, this does seem to be a a no-op and this call returns from rpm_resume() because of this check: else if (dev-power.disable_depth == 1 dev-power.is_suspended dev-power.runtime_status == RPM_ACTIVE) retval = 1; Yes. IIRC, it was in fact not needed. So, AFAICS, the net effect is an increment of dev-power.usage_count (which is already greater than 0) and its subsequent decrement at the end of the function. After removing this call I did not see any EDMA malfunction as well (can access MMC/SD just fine after suspend/resume cycle). So, any objections to merging this patch with the attached hunk applied? Looks good to me, we can still add it back later if it turns out to be needed. Thanks, Daniel Thanks, Sekhar ---8--- diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c index 1f492d5be9c0..79de6a23047b 100644 --- a/arch/arm/common/edma.c +++ b/arch/arm/common/edma.c @@ -1803,13 +1803,7 @@ static int edma_probe(struct platform_device *pdev) static int edma_pm_resume(struct device *dev) { - int i, j, r; - - r = pm_runtime_get_sync(dev); - if (r 0) { - dev_err(dev, %s: get_sync returned %d\n, __func__, r); - return r; - } + int i, j; for (j = 0; j arch_num_cc; j++) { struct edma *cc = edma_cc[j]; @@ -1844,8 +1838,6 @@ static int edma_pm_resume(struct device *dev) } } - pm_runtime_put_sync(dev); - return 0; } -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v9] ARM: omap: edma: add suspend resume hook
On Wednesday 05 November 2014 11:40 PM, Dave Gerlach wrote: Sekhar, On 11/05/2014 10:04 AM, Sekhar Nori wrote: On Wednesday 05 November 2014 09:27 PM, Dave Gerlach wrote: On 08/26/2014 03:52 AM, Daniel Mack wrote: This patch makes the edma driver resume correctly after suspend. Tested on an AM33xx platform with cyclic audio streams and omap_hsmmc. All information can be reconstructed by already known runtime information. As we now use some functions that were previously only used from __init context, annotations had to be dropped. [n...@ti.com: added error handling for runtime + suspend_late/early_resume] Signed-off-by: Nishanth Menon n...@ti.com Signed-off-by: Daniel Mack zon...@gmail.com Tested-by: Joel Fernandes jo...@ti.com Acked-by: Joel Fernandes jo...@ti.com --- Changes from v8: * Drop the edma_suspend hook altogether. Even though back then when I wrote the code I was sure disabling the interrupts during suspend is necessary, tests now show it in fact isn't. My test setup still works if that code is omitted. * Use SET_LATE_SYSTEM_SLEEP_PM_OPS in the dev_pm_ops declaration. Thanks to Sekhar for pointing out the above. arch/arm/common/edma.c | 60 -- 1 file changed, 58 insertions(+), 2 deletions(-) Doesn't seem to be any comments here, any chance this can be picked up? This patch always seems to get missed but will be needed for suspend/resume on both AM335x and AM437x. Dave, do you have a branch against mainline with suspend working on any of these SoCs using which I can test this patch? Yes, here is WIP of next version with all required patches + this one. https://github.com/dgerlach/linux-pm/tree/pm-ds0-v3.18-rc3-WIP For suspend to work you need to select: CONFIG_WKUP_M3_IPC=y CONFIG_WKUP_M3_RPROC=y I get this: arch/arm/mach-omap2/pm33xx.c:28:31: fatal error: linux/wkup_m3_ipc.h: No such file or directory #include linux/wkup_m3_ipc.h ^ compilation terminated. make[1]: *** [arch/arm/mach-omap2/pm33xx.o] Error 1 Forgot to commit wkup_m3_ipc.h? Thanks, Sekhar -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v9] ARM: omap: edma: add suspend resume hook
Sekhar, On 11/06/2014 02:33 AM, Sekhar Nori wrote: On Wednesday 05 November 2014 11:40 PM, Dave Gerlach wrote: Sekhar, On 11/05/2014 10:04 AM, Sekhar Nori wrote: On Wednesday 05 November 2014 09:27 PM, Dave Gerlach wrote: On 08/26/2014 03:52 AM, Daniel Mack wrote: This patch makes the edma driver resume correctly after suspend. Tested on an AM33xx platform with cyclic audio streams and omap_hsmmc. All information can be reconstructed by already known runtime information. As we now use some functions that were previously only used from __init context, annotations had to be dropped. [n...@ti.com: added error handling for runtime + suspend_late/early_resume] Signed-off-by: Nishanth Menon n...@ti.com Signed-off-by: Daniel Mack zon...@gmail.com Tested-by: Joel Fernandes jo...@ti.com Acked-by: Joel Fernandes jo...@ti.com --- Changes from v8: * Drop the edma_suspend hook altogether. Even though back then when I wrote the code I was sure disabling the interrupts during suspend is necessary, tests now show it in fact isn't. My test setup still works if that code is omitted. * Use SET_LATE_SYSTEM_SLEEP_PM_OPS in the dev_pm_ops declaration. Thanks to Sekhar for pointing out the above. arch/arm/common/edma.c | 60 -- 1 file changed, 58 insertions(+), 2 deletions(-) Doesn't seem to be any comments here, any chance this can be picked up? This patch always seems to get missed but will be needed for suspend/resume on both AM335x and AM437x. Dave, do you have a branch against mainline with suspend working on any of these SoCs using which I can test this patch? Yes, here is WIP of next version with all required patches + this one. https://github.com/dgerlach/linux-pm/tree/pm-ds0-v3.18-rc3-WIP For suspend to work you need to select: CONFIG_WKUP_M3_IPC=y CONFIG_WKUP_M3_RPROC=y I get this: arch/arm/mach-omap2/pm33xx.c:28:31: fatal error: linux/wkup_m3_ipc.h: No such file or directory #include linux/wkup_m3_ipc.h ^ compilation terminated. make[1]: *** [arch/arm/mach-omap2/pm33xx.o] Error 1 Forgot to commit wkup_m3_ipc.h? Ahhh sorry about that, looks like I dropped it during a rebase. Added it in a patch and pushed that on top of the tree from yesterday. Sorry again!. Regards, Dave Thanks, Sekhar -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v9] ARM: omap: edma: add suspend resume hook
On 08/26/2014 03:52 AM, Daniel Mack wrote: This patch makes the edma driver resume correctly after suspend. Tested on an AM33xx platform with cyclic audio streams and omap_hsmmc. All information can be reconstructed by already known runtime information. As we now use some functions that were previously only used from __init context, annotations had to be dropped. [n...@ti.com: added error handling for runtime + suspend_late/early_resume] Signed-off-by: Nishanth Menon n...@ti.com Signed-off-by: Daniel Mack zon...@gmail.com Tested-by: Joel Fernandes jo...@ti.com Acked-by: Joel Fernandes jo...@ti.com --- Changes from v8: * Drop the edma_suspend hook altogether. Even though back then when I wrote the code I was sure disabling the interrupts during suspend is necessary, tests now show it in fact isn't. My test setup still works if that code is omitted. * Use SET_LATE_SYSTEM_SLEEP_PM_OPS in the dev_pm_ops declaration. Thanks to Sekhar for pointing out the above. arch/arm/common/edma.c | 60 -- 1 file changed, 58 insertions(+), 2 deletions(-) Doesn't seem to be any comments here, any chance this can be picked up? This patch always seems to get missed but will be needed for suspend/resume on both AM335x and AM437x. Regards, Dave diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c index 485be42..c623dd0 100644 --- a/arch/arm/common/edma.c +++ b/arch/arm/common/edma.c @@ -244,6 +244,8 @@ struct edma { /* list of channels with no even trigger; terminated by -1 */ const s8*noevent; + struct edma_soc_info *info; + /* The edma_inuse bit for each PaRAM slot is clear unless the * channel is in use ... by ARM or DSP, for QDMA, or whatever. */ @@ -295,7 +297,7 @@ static void map_dmach_queue(unsigned ctlr, unsigned ch_no, ~(0x7 bit), queue_no bit); } -static void __init assign_priority_to_queue(unsigned ctlr, int queue_no, +static void assign_priority_to_queue(unsigned ctlr, int queue_no, int priority) { int bit = queue_no * 4; @@ -314,7 +316,7 @@ static void __init assign_priority_to_queue(unsigned ctlr, int queue_no, * included in that particular EDMA variant (Eg : dm646x) * */ -static void __init map_dmach_param(unsigned ctlr) +static void map_dmach_param(unsigned ctlr) { int i; for (i = 0; i EDMA_MAX_DMACH; i++) @@ -1762,15 +1764,69 @@ static int edma_probe(struct platform_device *pdev) edma_write_array2(j, EDMA_DRAE, i, 1, 0x0); edma_write_array(j, EDMA_QRAE, i, 0x0); } + edma_cc[j]-info = info[j]; arch_num_cc++; } return 0; } +static int edma_pm_resume(struct device *dev) +{ + int i, j, r; + + r = pm_runtime_get_sync(dev); + if (r 0) { + dev_err(dev, %s: get_sync returned %d\n, __func__, r); + return r; + } + + for (j = 0; j arch_num_cc; j++) { + struct edma *cc = edma_cc[j]; + + s8 (*queue_priority_mapping)[2]; + + queue_priority_mapping = cc-info-queue_priority_mapping; + + /* Event queue priority mapping */ + for (i = 0; queue_priority_mapping[i][0] != -1; i++) + assign_priority_to_queue(j, + queue_priority_mapping[i][0], + queue_priority_mapping[i][1]); + + /* + * Map the channel to param entry if channel mapping logic + * exist + */ + if (edma_read(j, EDMA_CCCFG) CHMAP_EXIST) + map_dmach_param(j); + + for (i = 0; i cc-num_channels; i++) { + if (test_bit(i, cc-edma_inuse)) { + /* ensure access through shadow region 0 */ + edma_or_array2(j, EDMA_DRAE, 0, i 5, +BIT(i 0x1f)); + + setup_dma_interrupt(i, + cc-intr_data[i].callback, + cc-intr_data[i].data); + } + } + } + + pm_runtime_put_sync(dev); + + return 0; +} + +static const struct dev_pm_ops edma_pm_ops = { + SET_LATE_SYSTEM_SLEEP_PM_OPS(NULL, edma_pm_resume) +}; + static struct platform_driver edma_driver = { .driver = { .name = edma, + .pm = edma_pm_ops, .of_match_table = edma_of_ids, }, .probe = edma_probe, -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More
Re: [PATCH v9] ARM: omap: edma: add suspend resume hook
On Wednesday 05 November 2014 09:27 PM, Dave Gerlach wrote: On 08/26/2014 03:52 AM, Daniel Mack wrote: This patch makes the edma driver resume correctly after suspend. Tested on an AM33xx platform with cyclic audio streams and omap_hsmmc. All information can be reconstructed by already known runtime information. As we now use some functions that were previously only used from __init context, annotations had to be dropped. [n...@ti.com: added error handling for runtime + suspend_late/early_resume] Signed-off-by: Nishanth Menon n...@ti.com Signed-off-by: Daniel Mack zon...@gmail.com Tested-by: Joel Fernandes jo...@ti.com Acked-by: Joel Fernandes jo...@ti.com --- Changes from v8: * Drop the edma_suspend hook altogether. Even though back then when I wrote the code I was sure disabling the interrupts during suspend is necessary, tests now show it in fact isn't. My test setup still works if that code is omitted. * Use SET_LATE_SYSTEM_SLEEP_PM_OPS in the dev_pm_ops declaration. Thanks to Sekhar for pointing out the above. arch/arm/common/edma.c | 60 -- 1 file changed, 58 insertions(+), 2 deletions(-) Doesn't seem to be any comments here, any chance this can be picked up? This patch always seems to get missed but will be needed for suspend/resume on both AM335x and AM437x. Dave, do you have a branch against mainline with suspend working on any of these SoCs using which I can test this patch? Thanks, Sekhar -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v9] ARM: omap: edma: add suspend resume hook
Sekhar, On 11/05/2014 10:04 AM, Sekhar Nori wrote: On Wednesday 05 November 2014 09:27 PM, Dave Gerlach wrote: On 08/26/2014 03:52 AM, Daniel Mack wrote: This patch makes the edma driver resume correctly after suspend. Tested on an AM33xx platform with cyclic audio streams and omap_hsmmc. All information can be reconstructed by already known runtime information. As we now use some functions that were previously only used from __init context, annotations had to be dropped. [n...@ti.com: added error handling for runtime + suspend_late/early_resume] Signed-off-by: Nishanth Menon n...@ti.com Signed-off-by: Daniel Mack zon...@gmail.com Tested-by: Joel Fernandes jo...@ti.com Acked-by: Joel Fernandes jo...@ti.com --- Changes from v8: * Drop the edma_suspend hook altogether. Even though back then when I wrote the code I was sure disabling the interrupts during suspend is necessary, tests now show it in fact isn't. My test setup still works if that code is omitted. * Use SET_LATE_SYSTEM_SLEEP_PM_OPS in the dev_pm_ops declaration. Thanks to Sekhar for pointing out the above. arch/arm/common/edma.c | 60 -- 1 file changed, 58 insertions(+), 2 deletions(-) Doesn't seem to be any comments here, any chance this can be picked up? This patch always seems to get missed but will be needed for suspend/resume on both AM335x and AM437x. Dave, do you have a branch against mainline with suspend working on any of these SoCs using which I can test this patch? Yes, here is WIP of next version with all required patches + this one. https://github.com/dgerlach/linux-pm/tree/pm-ds0-v3.18-rc3-WIP For suspend to work you need to select: CONFIG_WKUP_M3_IPC=y CONFIG_WKUP_M3_RPROC=y And you need to enable USB for multiple suspends to work. You can get am335x-pm-firmware.elf FW here from HEAD: https://git.ti.com/ti-cm3-pm-firmware/amx3-cm3/commits/next You can place in /lib/firmware and select CONFIG_FW_LOADER_USER_HELPER_FALLBACK or build into kernel. Also for what it's worth you can have my tested by: Tested-by: Dave Gerlach d-gerl...@ti.com I have tested on am335x-boneblack, am335x-evm, and am335x-evmsk, multiple suspend cycles work with no issue. Regards, Dave Thanks, Sekhar -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v9] ARM: omap: edma: add suspend resume hook
This patch makes the edma driver resume correctly after suspend. Tested on an AM33xx platform with cyclic audio streams and omap_hsmmc. All information can be reconstructed by already known runtime information. As we now use some functions that were previously only used from __init context, annotations had to be dropped. [n...@ti.com: added error handling for runtime + suspend_late/early_resume] Signed-off-by: Nishanth Menon n...@ti.com Signed-off-by: Daniel Mack zon...@gmail.com Tested-by: Joel Fernandes jo...@ti.com Acked-by: Joel Fernandes jo...@ti.com --- Changes from v8: * Drop the edma_suspend hook altogether. Even though back then when I wrote the code I was sure disabling the interrupts during suspend is necessary, tests now show it in fact isn't. My test setup still works if that code is omitted. * Use SET_LATE_SYSTEM_SLEEP_PM_OPS in the dev_pm_ops declaration. Thanks to Sekhar for pointing out the above. arch/arm/common/edma.c | 60 -- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c index 485be42..c623dd0 100644 --- a/arch/arm/common/edma.c +++ b/arch/arm/common/edma.c @@ -244,6 +244,8 @@ struct edma { /* list of channels with no even trigger; terminated by -1 */ const s8*noevent; + struct edma_soc_info *info; + /* The edma_inuse bit for each PaRAM slot is clear unless the * channel is in use ... by ARM or DSP, for QDMA, or whatever. */ @@ -295,7 +297,7 @@ static void map_dmach_queue(unsigned ctlr, unsigned ch_no, ~(0x7 bit), queue_no bit); } -static void __init assign_priority_to_queue(unsigned ctlr, int queue_no, +static void assign_priority_to_queue(unsigned ctlr, int queue_no, int priority) { int bit = queue_no * 4; @@ -314,7 +316,7 @@ static void __init assign_priority_to_queue(unsigned ctlr, int queue_no, * included in that particular EDMA variant (Eg : dm646x) * */ -static void __init map_dmach_param(unsigned ctlr) +static void map_dmach_param(unsigned ctlr) { int i; for (i = 0; i EDMA_MAX_DMACH; i++) @@ -1762,15 +1764,69 @@ static int edma_probe(struct platform_device *pdev) edma_write_array2(j, EDMA_DRAE, i, 1, 0x0); edma_write_array(j, EDMA_QRAE, i, 0x0); } + edma_cc[j]-info = info[j]; arch_num_cc++; } return 0; } +static int edma_pm_resume(struct device *dev) +{ + int i, j, r; + + r = pm_runtime_get_sync(dev); + if (r 0) { + dev_err(dev, %s: get_sync returned %d\n, __func__, r); + return r; + } + + for (j = 0; j arch_num_cc; j++) { + struct edma *cc = edma_cc[j]; + + s8 (*queue_priority_mapping)[2]; + + queue_priority_mapping = cc-info-queue_priority_mapping; + + /* Event queue priority mapping */ + for (i = 0; queue_priority_mapping[i][0] != -1; i++) + assign_priority_to_queue(j, +queue_priority_mapping[i][0], +queue_priority_mapping[i][1]); + + /* +* Map the channel to param entry if channel mapping logic +* exist +*/ + if (edma_read(j, EDMA_CCCFG) CHMAP_EXIST) + map_dmach_param(j); + + for (i = 0; i cc-num_channels; i++) { + if (test_bit(i, cc-edma_inuse)) { + /* ensure access through shadow region 0 */ + edma_or_array2(j, EDMA_DRAE, 0, i 5, + BIT(i 0x1f)); + + setup_dma_interrupt(i, + cc-intr_data[i].callback, + cc-intr_data[i].data); + } + } + } + + pm_runtime_put_sync(dev); + + return 0; +} + +static const struct dev_pm_ops edma_pm_ops = { + SET_LATE_SYSTEM_SLEEP_PM_OPS(NULL, edma_pm_resume) +}; + static struct platform_driver edma_driver = { .driver = { .name = edma, + .pm = edma_pm_ops, .of_match_table = edma_of_ids, }, .probe = edma_probe, -- 2.1.0 -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html