Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932190AbdC2Li7 (ORCPT ); Wed, 29 Mar 2017 07:38:59 -0400 Received: from mail-it0-f65.google.com ([209.85.214.65]:35471 "EHLO mail-it0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755931AbdC2LiZ (ORCPT ); Wed, 29 Mar 2017 07:38:25 -0400 MIME-Version: 1.0 In-Reply-To: <20170328152457.2j5zaxdbdavpuspa@sirena.org.uk> References: <1490691532-2086-1-git-send-email-daniel.baluta@nxp.com> <1490691532-2086-3-git-send-email-daniel.baluta@nxp.com> <20170328092103.GQ6986@localhost.localdomain> <20170328115306.GR6986@localhost.localdomain> <20170328152457.2j5zaxdbdavpuspa@sirena.org.uk> From: Daniel Baluta Date: Wed, 29 Mar 2017 14:38:23 +0300 Message-ID: Subject: Re: [alsa-devel] [PATCH v3 2/2] ASoC: imx-wm8962: Fix codec_clk cleanup To: Mark Brown Cc: Charles Keepax , Daniel Baluta , Nicolin Chen , alsa-devel@alsa-project.org, Timur Tabi , Xiubo.Lee@gmail.com, Linux Kernel Mailing List , Liam Girdwood , Takashi Iwai , fabio.estevam@nxp.com, linuxppc-dev@lists.ozlabs.org Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1366 Lines: 35 On Tue, Mar 28, 2017 at 6:24 PM, Mark Brown wrote: > On Tue, Mar 28, 2017 at 12:53:06PM +0100, Charles Keepax wrote: >> On Tue, Mar 28, 2017 at 01:47:04PM +0300, Daniel Baluta wrote: > >> > >> - codec_clk = devm_clk_get(&codec_dev->dev, NULL); >> > >> + codec_clk = clk_get(&codec_dev->dev, NULL); > >> > is different from &codec_dev->dev. > >> I get that they are different, I just don't get why changing >> from a devm_clk_get to a clk_get is a better fix than changing >> &codec->dev to &pdev->dev. > > This should be clear from the semantics of clk_get(): you're looking up > the clock in the context of the supplied device and the clock is > attached to the CODEC so you need to look up in the CODEC context. What > would be even better would be to move the allocation of the clock into > the CODEC driver... If I read the code correctly, both machine and codec driver are doing: * codec_clk = clk_get(...) I guess that the codec driver is the first to be loaded and it will call: * __clk_create_clk which will do the allocation. Then when machine driver is loaded, it will only take a reference to the allocated clock. I might be very wrong on this. Can you clarify what does moving allocation of the clock into codec driver implies? Machine driver only needs a reference to codec_clk to just get the clock's rate. Daniel.