From patchwork Tue Dec 19 15:21:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ladislav Michl X-Patchwork-Id: 10123425 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 14A53603B5 for ; Tue, 19 Dec 2017 15:23:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 04E9628D08 for ; Tue, 19 Dec 2017 15:23:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EDBEA29199; Tue, 19 Dec 2017 15:23:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 489D928D08 for ; Tue, 19 Dec 2017 15:23:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=kuelr5EtI0NClvT0Kv3D7UxjwQXW9LyHXZW0fRXs6tk=; b=m63kDow1dphJO+ keViuU371r8IJv2Wb2NbVU7WjZw2Bkd1VhN4Bvu4TJASrORs/3RruSndYPsrrEM1J1ZIUWDNcOUE4 uSlCfTQpGVhjODYthMSMmQq2JcABS0wX/sMWsu/cSRZqum4kQH9HzpaeziUh5Pe1wYcMFHRxh9Qcq 7GeDQ1igs9x81/CwQFH8nwufjzTjwcuY4fAqLsnNIopVIFyD0Nym5rrcmka8ilXcmmFdkNFY05qMO zRsuI4ARqpcHi4dJVIrS628eBic7AtyGhaoq87CdbXXZlrFFl4YntrPJIEDKBl1O3C1DaUtt+Iz6E OzA8/1DsolRjjLEIRw7g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1eRJk2-0000qS-Hx; Tue, 19 Dec 2017 15:23:38 +0000 Received: from eddie.linux-mips.org ([148.251.95.138] helo=cvs.linux-mips.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1eRJiU-00005o-Jn for linux-arm-kernel@lists.infradead.org; Tue, 19 Dec 2017 15:22:34 +0000 Received: (from localhost user: 'ladis' uid#1021 fake: STDIN (ladis@eddie.linux-mips.org)) by eddie.linux-mips.org id S23994634AbdLSPVsO3Qgl (ORCPT ); Tue, 19 Dec 2017 16:21:48 +0100 Date: Tue, 19 Dec 2017 16:21:40 +0100 From: Ladislav Michl To: Keerthy Subject: Re: [PATCH v5 7/8] pwm: pwm-omap-dmtimer: Adapt driver to utilize dmtimer pdata ops Message-ID: <20171219152140.GA22971@lenoch> References: <1513059137-21593-1-git-send-email-j-keerthy@ti.com> <1513059137-21593-8-git-send-email-j-keerthy@ti.com> <20171218093153.GA22729@lenoch> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.2 (2017-12-15) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171219_072203_298992_DF872A6F X-CRM114-Status: GOOD ( 24.55 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-pwm@vger.kernel.org, grygorii.strashko@ti.com, aaro.koskinen@iki.fi, tony@atomide.com, daniel.lezcano@linaro.org, linux-kernel@vger.kernel.org, robh+dt@kernel.org, linux@armlinux.org.uk, t-kristo@ti.com, thierry.reding@gmail.com, sebastian.reichel@collabora.co.uk, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP On Tue, Dec 19, 2017 at 01:55:48PM +0530, Keerthy wrote: > On Tuesday 19 December 2017 10:28 AM, Keerthy wrote: > > On Monday 18 December 2017 06:25 PM, Keerthy wrote: > >> On Monday 18 December 2017 03:01 PM, Ladislav Michl wrote: > >>> Keerthy, > >>> > >>> On Tue, Dec 12, 2017 at 11:42:16AM +0530, Keerthy wrote: > >>>> Adapt driver to utilize dmtimer pdata ops instead of pdata-quirks. > >>>> > >>>> Signed-off-by: Keerthy > >>>> --- > >>>> > >>>> Changes in v4: > >>>> > >>>> * Switched to dev_get_platdata. > >>> > >>> Where do you expect dev.platform_data to be set? PWM driver is failing > >>> with: > >>> omap-dmtimer-pwm dmtimer-pwm: dmtimer pdata structure NULL > >>> omap-dmtimer-pwm: probe of dmtimer-pwm failed with error -22 > >>> > >>> Which I fixed with patch bellow, to be able to test your patchset. > >> > >> Thanks! I will make the below patch part of my series. > >> > >>> > >>> Also I'm running a bit out of time, so I'll send few clean up > >>> patches and event capture code to get some feedback early. > >>> > >>> Regards, > >>> ladis > >>> > >>> diff --git a/drivers/clocksource/timer-dm.c b/drivers/clocksource/timer-dm.c > >>> index 39be39e6a8dd..d3d8a49cae0d 100644 > >>> --- a/drivers/clocksource/timer-dm.c > >>> +++ b/drivers/clocksource/timer-dm.c > >>> @@ -773,6 +773,7 @@ static int omap_dm_timer_probe(struct platform_device *pdev) > >>> dev_err(dev, "%s: no platform data.\n", __func__); > >>> return -ENODEV; > >>> } > >>> + dev->platform_data = pdata; > > > > drivers/clocksource/timer-dm.c: In function 'omap_dm_timer_probe': > > drivers/clocksource/timer-dm.c:744:21: warning: assignment discards > > 'const' qualifier from pointer target type > > > > This cannot be done as we are assigning a const pointer to a non-const > > pointer. Oh, I didn't even assume it as proper fix, just to show what is missing :) But technically 'struct dmtimer_platform_data *pdata' is a constant which should not be changed. Also look how all that of_populate chain works - at the end const pointer is assigned to void* platform_data by simple (void *) overcast. > > I will figure out a different way for this fix. > > Ladis, > > I fixed that: > > diff --git a/drivers/clocksource/timer-dm.c b/drivers/clocksource/timer-dm.c > index 1cbd954..e58f555 100644 > --- a/drivers/clocksource/timer-dm.c > +++ b/drivers/clocksource/timer-dm.c > @@ -807,17 +807,21 @@ static int omap_dm_timer_probe(struct > platform_device *pdev) > struct resource *mem, *irq; > struct device *dev = &pdev->dev; > const struct of_device_id *match; > - const struct dmtimer_platform_data *pdata; > + struct dmtimer_platform_data *pdata; > int ret; > > match = of_match_device(of_match_ptr(omap_timer_match), dev); > - pdata = match ? match->data : dev->platform_data; > + pdata = match ? (struct dmtimer_platform_data *)match->data : > + dev->platform_data; All that seems needlesly complicated, what about patch bellow? > if (!pdata && !dev->of_node) { > dev_err(dev, "%s: no platform data.\n", __func__); > return -ENODEV; > } > > + if (!dev->platform_data) > + dev->platform_data = pdata; Does the above condition bring us anything? > irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); > if (unlikely(!irq)) { > dev_err(dev, "%s: no IRQ resource.\n", __func__); > @@ -946,7 +950,7 @@ static int omap_dm_timer_remove(struct > platform_device *pdev) > .write_status = omap_dm_timer_write_status, > }; > > -static const struct dmtimer_platform_data omap3plus_pdata = { > +static struct dmtimer_platform_data omap3plus_pdata = { > .timer_errata = OMAP_TIMER_ERRATA_I103_I767, > .timer_ops = &dmtimer_ops, > }; > > Can you check at your end if this works for you? Note, it is untested as I ran out of time and will continue after New Year. diff --git a/drivers/clocksource/timer-dm.c b/drivers/clocksource/timer-dm.c index 1cbd95420914..85024f11773a 100644 --- a/drivers/clocksource/timer-dm.c +++ b/drivers/clocksource/timer-dm.c @@ -806,14 +806,16 @@ static int omap_dm_timer_probe(struct platform_device *pdev) struct omap_dm_timer *timer; struct resource *mem, *irq; struct device *dev = &pdev->dev; - const struct of_device_id *match; const struct dmtimer_platform_data *pdata; int ret; - match = of_match_device(of_match_ptr(omap_timer_match), dev); - pdata = match ? match->data : dev->platform_data; + pdata = of_device_get_match_data(dev); + if (!pdata) + pdata = dev_get_platdata(dev); + else + dev->platform_data = (void *) pdata; - if (!pdata && !dev->of_node) { + if (!pdata) { dev_err(dev, "%s: no platform data.\n", __func__); return -ENODEV; }