From: Eddie James <eajames@linux.ibm.com>
To: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>,
Joel Stanley <joel@jms.id.au>, Andrew Jeffery <andrew@aj.id.au>
Cc: openbmc@lists.ozlabs.org
Subject: Re: [PATCH dev-5.0 2/3] media: platform: aspeed: refine clock control logic
Date: Wed, 10 Apr 2019 13:17:18 -0500 [thread overview]
Message-ID: <220458cd-df25-0130-c27a-06de80bc5c76@linux.ibm.com> (raw)
In-Reply-To: <20190409192059.1160-3-jae.hyun.yoo@linux.intel.com>
On 4/9/19 2:20 PM, Jae Hyun Yoo wrote:
> Currently, this driver calls clk_prepare and clk_unprepare from
> interrupt context too but these should be called from sleepable
> context only. To fix this issue, this commit splits out
> clk_enable/disable and clk_prepare/unprepare, and it places
> clk_prepare/unprepare calls into the module probe/remove function.
Reviewed-by: Eddie James <eajames@linux.ibm.com>
>
> Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
> ---
> drivers/media/platform/aspeed-video.c | 38 ++++++++++++++++++++-------
> 1 file changed, 29 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/media/platform/aspeed-video.c b/drivers/media/platform/aspeed-video.c
> index e70be8fdbde5..75b43488ae8e 100644
> --- a/drivers/media/platform/aspeed-video.c
> +++ b/drivers/media/platform/aspeed-video.c
> @@ -491,8 +491,8 @@ static void aspeed_video_off(struct aspeed_video *video)
> aspeed_video_write(video, VE_INTERRUPT_CTRL, 0);
>
> /* Turn off the relevant clocks */
> - clk_disable_unprepare(video->vclk);
> - clk_disable_unprepare(video->eclk);
> + clk_disable(video->vclk);
> + clk_disable(video->eclk);
>
> clear_bit(VIDEO_CLOCKS_ON, &video->flags);
> }
> @@ -503,8 +503,8 @@ static void aspeed_video_on(struct aspeed_video *video)
> return;
>
> /* Turn on the relevant clocks */
> - clk_prepare_enable(video->eclk);
> - clk_prepare_enable(video->vclk);
> + clk_enable(video->eclk);
> + clk_enable(video->vclk);
>
> set_bit(VIDEO_CLOCKS_ON, &video->flags);
> }
> @@ -1628,31 +1628,46 @@ static int aspeed_video_init(struct aspeed_video *video)
> return PTR_ERR(video->eclk);
> }
>
> + rc = clk_prepare(video->eclk);
> + if (rc)
> + return rc;
> +
> video->vclk = devm_clk_get(dev, "vclk");
> if (IS_ERR(video->vclk)) {
> dev_err(dev, "Unable to get VCLK\n");
> - return PTR_ERR(video->vclk);
> + rc = PTR_ERR(video->vclk);
> + goto err_unprepare_eclk;
> }
>
> + rc = clk_prepare(video->vclk);
> + if (rc)
> + goto err_unprepare_eclk;
> +
> of_reserved_mem_device_init(dev);
>
> rc = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));
> if (rc) {
> dev_err(dev, "Failed to set DMA mask\n");
> - of_reserved_mem_device_release(dev);
> - return rc;
> + goto err_release_reserved_mem;
> }
>
> if (!aspeed_video_alloc_buf(video, &video->jpeg,
> VE_JPEG_HEADER_SIZE)) {
> dev_err(dev, "Failed to allocate DMA for JPEG header\n");
> - of_reserved_mem_device_release(dev);
> - return rc;
> + goto err_release_reserved_mem;
> }
>
> aspeed_video_init_jpeg_table(video->jpeg.virt, video->yuv420);
>
> return 0;
> +
> +err_release_reserved_mem:
> + of_reserved_mem_device_release(dev);
> + clk_unprepare(video->vclk);
> +err_unprepare_eclk:
> + clk_unprepare(video->eclk);
> +
> + return rc;
> }
>
> static int aspeed_video_probe(struct platform_device *pdev)
> @@ -1696,6 +1711,11 @@ static int aspeed_video_remove(struct platform_device *pdev)
> struct v4l2_device *v4l2_dev = dev_get_drvdata(dev);
> struct aspeed_video *video = to_aspeed_video(v4l2_dev);
>
> + aspeed_video_off(video);
> +
> + clk_unprepare(video->vclk);
> + clk_unprepare(video->eclk);
> +
> video_unregister_device(&video->vdev);
>
> vb2_queue_release(&video->queue);
next prev parent reply other threads:[~2019-04-10 18:17 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-09 19:20 [PATCH dev-5.0 0/3] Improve stability of Aspeed video engine driver Jae Hyun Yoo
2019-04-09 19:20 ` [PATCH dev-5.0 1/3] media: platform: aspeed: fix a kernel warning on clk control Jae Hyun Yoo
2019-04-10 18:14 ` Eddie James
2019-04-09 19:20 ` [PATCH dev-5.0 2/3] media: platform: aspeed: refine clock control logic Jae Hyun Yoo
2019-04-10 18:17 ` Eddie James [this message]
2019-04-09 19:20 ` [PATCH dev-5.0 3/3] media: platform: aspeed: change irq to threaded irq Jae Hyun Yoo
2019-04-10 18:18 ` Eddie James
2019-04-10 13:26 ` [PATCH dev-5.0 0/3] Improve stability of Aspeed video engine driver Joel Stanley
2019-04-10 16:18 ` Jae Hyun Yoo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=220458cd-df25-0130-c27a-06de80bc5c76@linux.ibm.com \
--to=eajames@linux.ibm.com \
--cc=andrew@aj.id.au \
--cc=jae.hyun.yoo@linux.intel.com \
--cc=joel@jms.id.au \
--cc=openbmc@lists.ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.