On 07/18/2012 11:05 AM, Lothar Waßmann wrote: > Hi, > > Marc Kleine-Budde writes: >> On 07/18/2012 04:12 AM, Hui Wang wrote: >>> Marc Kleine-Budde wrote: >>>> From: Steffen Trumtrar >>>> >>>> This patch add support for a second clock to the flexcan driver. On >>>> modern >>>> freescale ARM cores like the imx53 and imx6q two clocks ("ipg" and "per") >>>> must be enabled in order to access the CAN core. >>>> - clock_freq = clk_get_rate(clk); >>>> } >>>> >>>> mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); >>>> @@ -1039,7 +1052,8 @@ static int __devinit flexcan_probe(struct >>>> platform_device *pdev) >>>> CAN_CTRLMODE_BERR_REPORTING; >>>> priv->base = base; >>>> priv->dev = dev; >>>> - priv->clk = clk; >>>> + priv->clk_ipg = clk_ipg; >>>> + priv->clk_per = clk_per; >>>> priv->pdata = pdev->dev.platform_data; >>>> priv->devtype_data = devtype_data; >>>> >>>> @@ -1067,9 +1081,11 @@ static int __devinit flexcan_probe(struct >>>> platform_device *pdev) >>>> failed_map: >>>> release_mem_region(mem->start, mem_size); >>>> failed_get: >>>> - if (clk) >>>> - clk_put(clk); >>>> failed_clock: >>>> + if (clk_per) >>>> >>> Use if (!IS_ERR(clk_per)) >> >> Yes, good catch. >> >> Is it allowed to call clk_put with a NULL pointer? Both clocks can be >> NULL, if the frequency is defined via the device tree, this is case for >> powerpc. >> > This has been discussed here already several times. Everything > returned by clk_get() that does not satisfy the IS_ERR() check, is a > valid clk cookie and can be used for the clk API calls. I've switched to devm completely (see Patch v2), so the clk_put is obsolete. In this particular driver the NULL pointer in question is not returned via the clk_get(). On powerpc we don't use clk_get(), because it's not working (AFIAK) on the p1010 (the powerpc arch that has a flexcan). Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |