summaryrefslogtreecommitdiffstats
path: root/sound/soc/sh
Commit message (Collapse)AuthorAgeFilesLines
* Merge remote-tracking branch 'asoc/fix/rcar' into asoc-linusMark Brown2017-02-193-7/+5
|\
| * ASoC: rsnd: fixup reset timing of sync convert_rateKuninori Morimoto2017-02-031-3/+3
| | | | | | | | | | | | | | | | | | | | | | Sync convert rate settings should be availabled *after* Playing. Thus, src->sync should be reset first of init function. Otherwise, it will set remaining settings when it start playing. This patch fixes it. Thanks to Yokoyama-san Reported-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| * ASoC: rsnd: fixup for_each_rsnd_mod_array{s} iterator incrementKuninori Morimoto2017-01-232-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | commit 5f222a292 ("ASoC: rsnd: use for_each_rsnd_mod_xxx() ...") modifies rsnd_dai_call() to use for_each_rsnd_mod_arrays(). Current rsnd is incrementing iterator in rsnd_mod_next(), but the iterator will indicate +1 position in for_each loop in this case. Incremental position should be inside for() Reported-by: Hoan Nguyen An <na-hoan@jinso.co.jp> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* | ASoC: rsnd: don't double free kctrlColin Ian King2016-12-151-3/+1
|/ | | | | | | | | | | | On an error, snd_ctl_add already free's kctrl, so calling snd_ctl_free_one to free it again leads to a double free error. Fix this by removing the extraneous snd_ctl_free_one call. Issue found using static analysis with CoverityScan, CID 1372908 Signed-off-by: Colin Ian King <colin.king@canonical.com> Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: setup BRGCKR/BRRA/BRRB when startingKuninori Morimoto2016-12-071-9/+12
| | | | | | | | | | | Current rsnd driver setups BRGCKR/BRRA/BRRB when .probe timing. But it breaks sound after Suspend/Resume. These should be setups every start timing. This patch is tested on R-Car Gen3 Salvator-X board Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Tested-by: Gaku Inami <gaku.inami.xw@bp.renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: enable/disable ADG when suspend/resume timingKuninori Morimoto2016-12-073-14/+51
| | | | | | | | | | | Current rsnd driver enables ADG clock when .probe timing, but it breaks sound after Suspend/Resume. These should be setups every suspend/resume timing too. This patch is tested on R-Car Gen3 Salvator-X board Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Tested-by: Gaku Inami <gaku.inami.xw@bp.renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: tidyup ssi->usrcnt counter check in hw_paramsKuninori Morimoto2016-12-071-3/+6
| | | | | | | | | | | | ssi->usrcnt will be updated on snd_soc_dai_ops::trigger, but snd_pcm_ops::hw_params will be called *before* it. Thus, ssi->usrcnt is still 0 when 1st call. rsnd_ssi_hw_params() needs to check its called count, this means trigger should be if (ssi->usrcnt) instead of if (ssi->usrcnt > 1). Reported-by: Nguyen Viet Dung <nv-dung@jinso.co.jp> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: rsnd_get_dalign() needs to care SSIU, not SSIKuninori Morimoto2016-12-052-3/+4
| | | | | | | | | | | | | | | | SSIU was controlled by SSI before, but commit c7f69ab53("ASoC: rsnd: use mod base common method on SSIU") separated it into ssiu.c But, it didn't care about rsnd_get_dalign() for judging SSI_BUSIF_DALIGN register value which changes the stream data order. This function will be called from cmd/src/ssiu now, but current code still cares ssi, not ssiu. This patch fix it up Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Tested-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: use dma_sync_single_for_xxx() for IOMMUKuninori Morimoto2016-11-222-6/+82
| | | | | | | | | | | IOMMU needs DMA mapping function to use it. One solution is that we can use DMA mapped dev on snd_pcm_lib_preallocate_pages_for_all() for SNDRV_DMA_TYPE_DEV. But pcm_new and dma map timing are mismatched. Thus, this patch uses SNDRV_DMA_TYPE_CONTINUOUS for pcm_new, and use dma_sync_single_for_xxx() for each transfer. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: Request/Release DMA channel each timeKuninori Morimoto2016-11-221-77/+107
| | | | | | | | | | | | | | | Current Renesas Sound driver requests DMA channel when .probe timing, and release it when .remove timing. And use DMA on .start/.stop But, Audio DMAC power ON was handled when request timing (= .probe), and power OFF was when release timing (= .remove). This means Audio DMAC power is always ON during driver was enabled. The best choice to solve this issue is that DMAEngine side handle this. But current DMAEngine API design can't solve atmic/non-atmic context issue for power ON/OFF. So next better choice is sound driver request/release DMA channel each time. This patch do it Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: use BRGCKR instead of SSICKRKuninori Morimoto2016-10-283-6/+6
| | | | | | | | | Current register name of "SSICKR" was came from R-Car Gen1 which is very old style. It is called as "BRGCKR" on R-Car Gen2/Gen3. Let's rename it Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: enable SRC sync even FIN = FOUTKuninori Morimoto2016-10-271-2/+5
| | | | | | | | | | | | Current SRC (= Sampling Rate Converter) is supporting SYNC mode and ASYNC mode. Current src.c cares SRC if FIN != FOUT. Here, SYNC mode will be used for tweak, so it will be used even FIN = FOUT. This patch enables SRC sync in such situation Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Tested-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> Tested-by: Yuichi Takagi <yuichi.takagi.uh@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: clear SSI_SYS_STATUSx every timeKuninori Morimoto2016-10-263-0/+36
| | | | | | | | | | | | | Renesas sound SSIU has SSI_SYS_STATUS register whick will be changed if over/under run was occurred. Current rsnd driver is handling over/under run error on SSI/SRC, but doesn't on SSIU. HW guys can't guarantee correct behavior if it already had error bit on status register when it start. Thus, it should be cleared every start timing. This patch do it. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: fixup SCU_SYS_STATUSx accessKuninori Morimoto2016-10-261-2/+2
| | | | | | | | | | | SCU_SYS_STATUSx is the register that writing 1 initializes the bit, and writing 0 is ignored. So, it should use rsnd_mod_write() instead of rsnd_mod_bset(), otherwise all bit will be cleared. Thanks Shimoda-san Reported-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: rsnd_reg cleanup for SSIUKuninori Morimoto2016-10-261-11/+13
| | | | | | | | | | R-Car Gen1 didn't have SSIU IP, and it was part of SRU. In Gen2, SSIU was created and it has original register. Let's cleanup rsnd_reg for SSIU, because this driver doesn't support Gen1 SRU any more. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: remove "Gen2 only" commentKuninori Morimoto2016-10-261-31/+31
| | | | | | | | Gen1 support had been removed. "Gen2 only" comment is no longer needed. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: enable COMPILE_TESTKuninori Morimoto2016-10-261-2/+2
| | | | | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: depends on OFKuninori Morimoto2016-10-261-0/+1
| | | | | | | Current Renesas sound driver is completely depends on CONFIG_OF Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: add nolock_start/stop callbackKuninori Morimoto2016-10-252-1/+40
| | | | | | | | | | | | | | | | | Current Renesas Sound driver requests DMA channel when .probe timing, and release it when .remove timing. And use DMA on .start/.stop But, Audio DMAC power ON was handled when request timing (= .probe), and power OFF was when release timing (= .remove). This means Audio DMAC power is always ON during driver was enabled. To fixup this issue, it should request/release DMA channel on each playback/recorde timing. But, DMA channel request/release function uses mutex lock inside. This means it will breaks current spinlock's interrupt protect. To solve this issue, DMA channel request/release function needs to be called from non-spinlock area. This patch adds its callback. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: don't call unneeded of_node_put() on dma.cKuninori Morimoto2016-10-251-6/+4
| | | | | | | | | Current rsnd_dmaen_start() is calling of_node_put() for np, but it is not needed if it goes through this loop. This patch tidyup it Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: remove rsnd_dma_detach()Kuninori Morimoto2016-10-253-14/+0
| | | | | | | | | DMA mod is now connected to stream via rsnd_dai_connect(). This means DMA mod can use .remove for its clearance. rsnd_dma_detach() is no longer needed. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: don't use devm_request_irq() for SSIKuninori Morimoto2016-10-251-8/+9
| | | | | | | | | | SSI will use DMA mode, and migh be fallback to PIO mode. Using devm_request_irq() makes its operation more complex when it fallbacks to PIO mode. Let's use manual request_irq()/free_irq() Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: remove non DT support for DMAKuninori Morimoto2016-10-254-19/+9
| | | | | | | | | Current Renesas Sound driver is based on DeviceTree, and no one is using this driver from non DT. Non-DT support is no longer needed. Let's remove it. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: add rsnd_parse_of_node() and integrate rsnd_xxx_of_nodeKuninori Morimoto2016-10-241-12/+18
| | | | | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: use for_each_rsnd_mod_xxx() on rsnd_rdai_continuance_probe()Kuninori Morimoto2016-10-241-2/+3
| | | | | | | Now, we have for_each_rsnd_mod(), let's use it Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: use for_each_rsnd_mod_xxx() on rsnd_dai_call()Kuninori Morimoto2016-10-241-40/+43
| | | | | | | | | | Current rsnd driver is using too complex macro for for-loop of each mod. rsnd_dai_call() is especially defined as very complex macro. It is easier to read just a little bit by using for_each_rsnd_mod_xxx() and new rsnd_status_update() Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: add rsnd_mod_next() for for_each_rsnd_mod_xxx()Kuninori Morimoto2016-10-242-0/+35
| | | | | | | | | Current rsnd driver is using too complex macro for for-loop of each mod. In order to simplify this issue, this patch adds new rsnd_mod_next() which is non-macro. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: amend .probe/.remove call for DPCMKuninori Morimoto2016-10-244-9/+27
| | | | | | | | | | | | | commit 1a5658c2131 ("ASoC: rsnd: count .probe/.remove for rsnd_mod_call()") solved multi-resource-free issue, by putting .probe/.remove under count control. But,it breaks sound mixing case (if it was used under DPCM). In such case, it uses MIXn/DVCn/SSIn, and these should be always probed. This patch reverted above patch, and solved the same issue by modifing _rsnd_kctrl_remove() function. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
* ASoC: rsnd: remove duplicate define of rsnd_dvc_of_node()Kuninori Morimoto2016-10-241-2/+0
| | | | | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
*-. Merge remote-tracking branches 'asoc/topic/nau8810', 'asoc/topic/of-bool', ↵Mark Brown2016-09-291-1/+1
|\ \ | | | | | | | | | 'asoc/topic/omap' and 'asoc/topic/platform-drvdata' into asoc-next
| | * ASoC: use of_property_read_boolJulia Lawall2016-08-081-1/+1
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use of_property_read_bool to check for the existence of a property. The semantic patch that makes this change is as follows: (http://coccinelle.lip6.fr/) // <smpl> @@ expression e1,e2; statement S2,S1; @@ - if (of_get_property(e1,e2,NULL)) + if (of_property_read_bool(e1,e2)) S1 else S2 // </smpl> Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr> Signed-off-by: Mark Brown <broonie@kernel.org>
* | Merge remote-tracking branch 'asoc/topic/rcar' into asoc-nextMark Brown2016-09-294-495/+4
|\ \
| * | ASoC: rsnd: add SNDRV_PCM_TRIGGER_SUSPEND/RESUMEKuninori Morimoto2016-09-291-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds SNDRV_PCM_TRIGGER_SUSPEND/RESUME. Otherwise, it breaks rsnd driver internal start/stop counter when suspend/resume. This issue was reported/tested by Hiep Tested-by: Hiep Cao Minh <cm-hiep@jinso.co.jp> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| * | ASoC: rsrc-card: rename rsrc-card to simple-scu-card phase3Kuninori Morimoto2016-08-243-370/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | rsrc-card which is using DPCM feature was created for Renesas sound. But not only Renesas, but many SoC can use this driver, because it is based on simple-card driver. To use it as more open driver, rsrc-card will be renamed to simple-scu-card. In order to easy patch review, as 3rd step, this patch moves rsrc-card driver to generic folder. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| * | ASoC: rsrc-card: rename rsrc-card to simple-scu-card phase2Kuninori Morimoto2016-08-241-34/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | rsrc-card which is using DPCM feature was created for Renesas sound. But not only Renesas, but many SoC can use this driver, because it is based on simple-card driver. To use it as more open driver, rsrc-card will be renamed to simple-scu-card. In order to easy patch review, as 2nd step, this patch adds new compatible "simple-scu-audio-card"; rcar-card used specific property, not "simple-audio-card", but it should be now. Actually, rsrc-card is upstreamed driver, but noone is using it on upstream. The user is only local, and it is only me. Thus, there is no compatible break by this patch. This patch uses "simple-audio-card" prefix. And it removes rcar-card specifix compatible too. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| * | ASoC: rsrc-card: rename rsrc-card to simple-scu-card phase1Kuninori Morimoto2016-08-241-54/+54
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | rsrc-card which is using DPCM feature was created for Renesas sound. But not only Renesas, but many SoC can use this driver, because it is based on simple-card driver. To use it as more open driver, rsrc-card will be renamed to simple-scu-card. In order to easy patch review, as 1st step, this patch renames "rsrc" function prefix to "asoc_simple". Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| * | ASoC: rsrc-card: remove board specific compatibleKuninori Morimoto2016-08-241-13/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | rsrc-card has board specific compatible (= lager/koelsh), but these were created as 1st prototype, and it is used in my test environment only. Now normal user can use generic compatible (= renesas,rsrc-card). Removing these board specific compatible doesn't breake compatibility. This patch remove these. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| * | Merge branch 'topic/simple' of ↵Mark Brown2016-08-241-127/+28
| |\ \ | | | | | | | | | | | | git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-rcar
| | * | ASoC: rsrc-card: use asoc_simple_card_clean_reference()Kuninori Morimoto2016-08-101-17/+2
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * | ASoC: rsrc-card: use asoc_simple_card_canonicalize_cpu()Kuninori Morimoto2016-08-101-12/+3
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * | ASoC: rsrc-card: use asoc_simple_card_canonicalize_dailink()Kuninori Morimoto2016-08-091-2/+4
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * | ASoC: rsrc-card: use asoc_simple_card_init_dai()Kuninori Morimoto2016-08-091-25/+1
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * | ASoC: rsrc-card: use asoc_simple_card_parse_dai()Kuninori Morimoto2016-08-081-16/+11
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * | ASoC: rsrc-card: use asoc_simple_card_parse_clk()Kuninori Morimoto2016-08-051-58/+10
| | |/ | | | | | | | | | | | | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| * | ASoC: fix W=1 build warningsBaoyou Xie2016-08-111-0/+2
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We get 1 warning about global functions without a declaration in the ASoC sub-system when building with W=1: sound/soc/sh/rcar/core.c:113:6: warning: no previous prototype for 'rsnd_mod_make_sure' [-Wmissing-prototypes] void rsnd_mod_make_sure(struct rsnd_mod *mod, enum rsnd_mod_type type) In this case, the function 'rsnd_mod_make_sure' is declared in rsnd.h file, but it only valid if the macro DEBUG is claimed. so the implementation of function 'rsnd_mod_make_sure' need be held by macro DEBUG. Signed-off-by: Baoyou Xie <baoyou.xie@linaro.org> Signed-off-by: Mark Brown <broonie@kernel.org>
* | Merge remote-tracking branch 'asoc/fix/rcar' into asoc-linusMark Brown2016-08-241-1/+5
|\ \ | |/ |/|
| * ASoC: rsnd: Fixup SRCm_IFSVR calculate methodHiroyuki Yokoyama2016-07-271-1/+5
| | | | | | | | | | | | | | | | | | This patch fixes the calculation accuracy degradation of SRCm_IFSVR register value. Signed-off-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| |
| \
*-. \ Merge remote-tracking branches 'asoc/topic/omap', 'asoc/topic/rcar' and ↵Mark Brown2016-07-244-77/+53
|\ \ \ | |_|/ |/| | | | | 'asoc/topic/rockchip' into asoc-next
| | * ASoC: rsrc-card: use asoc_simple_card_parse_card_name()Kuninori Morimoto2016-07-161-5/+3
| | | | | | | | | | | | | | | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * ASoC: rsrc-card: use asoc_simple_dai instead of rsrc_card_daiKuninori Morimoto2016-07-161-17/+8
| | | | | | | | | | | | | | | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
OpenPOWER on IntegriCloud