From: "Emilio López" <emilio@elopez.com.ar> To: Russell King - ARM Linux <linux@arm.linux.org.uk> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>, linux-arm-kernel@lists.infradead.org, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, sunny@allwinnertech.com, shuge@allwinnertech.com, Jiri Slaby <jslaby@suse.cz>, kevin@allwinnertech.com Subject: Re: [PATCH 1/6] serial: 8250_dw: add support for clk api Date: Fri, 15 Mar 2013 21:15:11 -0300 [thread overview] Message-ID: <BLU0-SMTP4156A39670AA58651B05028AEE0@phx.gbl> (raw) In-Reply-To: <20130315223917.GZ4977@n2100.arm.linux.org.uk> Hello Russell, El 15/03/13 19:39, Russell King - ARM Linux escribió: > On Fri, Mar 15, 2013 at 09:06:23PM +0100, Maxime Ripard wrote: >> + /* clock got configured through clk api, all done */ >> + if (p->uartclk) > > if (IS_ERR(p->uartclk)) > Isn't IS_ERR for pointers? p->uartclk is an unsigned int >> + return 0; >> + >> + /* try to find out clock frequency from DT as fallback */ >> if (of_property_read_u32(np, "clock-frequency", &val)) { >> - dev_err(p->dev, "no clock-frequency property set\n"); >> + dev_err(p->dev, "clk or clock-frequency not defined\n"); >> return -EINVAL; >> } >> p->uartclk = val; >> @@ -294,9 +301,21 @@ static int dw8250_probe(struct platform_device *pdev) >> if (!uart.port.membase) >> return -ENOMEM; >> >> + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); >> + if (!data) >> + return -ENOMEM; >> + >> + data->clk = devm_clk_get(&pdev->dev, NULL); >> + if (IS_ERR(data->clk)) >> + data->clk = NULL; >> + else >> + clk_prepare_enable(data->clk); > > if (!IS_ERR(data->clk)) > clk_prepare_enable(data->clk); > See below >> + >> uart.port.iotype = UPIO_MEM; >> uart.port.serial_in = dw8250_serial_in; >> uart.port.serial_out = dw8250_serial_out; >> + uart.port.private_data = data; >> + uart.port.uartclk = clk_get_rate(data->clk); > > What if data->clk is invalid? > > if (!IS_ERR(data->clk) > uart.port.uartclk = clk_get_rate(data->clk); > I'm not sure if it is coincidental or the way it is supposed to be, but when using the common clock framework, if you pass a NULL to clk_get_rate, the function explicitly checks for it and returns 0. I relied on that behaviour when implementing this; see the if..else block above. Is this not always the case on other clock drivers? >> >> dw8250_setup_port(&uart); >> >> @@ -312,12 +331,6 @@ static int dw8250_probe(struct platform_device *pdev) >> return -ENODEV; >> } >> >> - data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); >> - if (!data) >> - return -ENOMEM; >> - >> - uart.port.private_data = data; >> - >> data->line = serial8250_register_8250_port(&uart); >> if (data->line < 0) >> return data->line; >> @@ -333,6 +346,8 @@ static int dw8250_remove(struct platform_device *pdev) >> >> serial8250_unregister_port(data->line); >> > > if (!IS_ERR(data->clk) > I just double checked and clk_enable/disable, clk_prepare/unprepare also ignore NULLs passed to them on the CCF. >> + clk_disable_unprepare(data->clk); >> + >> return 0; >> } >> >> -- >> 1.7.10.4 Thanks for the review, Emilio
WARNING: multiple messages have this Message-ID (diff)
From: emilio@elopez.com.ar (Emilio López) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 1/6] serial: 8250_dw: add support for clk api Date: Fri, 15 Mar 2013 21:15:11 -0300 [thread overview] Message-ID: <BLU0-SMTP4156A39670AA58651B05028AEE0@phx.gbl> (raw) In-Reply-To: <20130315223917.GZ4977@n2100.arm.linux.org.uk> Hello Russell, El 15/03/13 19:39, Russell King - ARM Linux escribi?: > On Fri, Mar 15, 2013 at 09:06:23PM +0100, Maxime Ripard wrote: >> + /* clock got configured through clk api, all done */ >> + if (p->uartclk) > > if (IS_ERR(p->uartclk)) > Isn't IS_ERR for pointers? p->uartclk is an unsigned int >> + return 0; >> + >> + /* try to find out clock frequency from DT as fallback */ >> if (of_property_read_u32(np, "clock-frequency", &val)) { >> - dev_err(p->dev, "no clock-frequency property set\n"); >> + dev_err(p->dev, "clk or clock-frequency not defined\n"); >> return -EINVAL; >> } >> p->uartclk = val; >> @@ -294,9 +301,21 @@ static int dw8250_probe(struct platform_device *pdev) >> if (!uart.port.membase) >> return -ENOMEM; >> >> + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); >> + if (!data) >> + return -ENOMEM; >> + >> + data->clk = devm_clk_get(&pdev->dev, NULL); >> + if (IS_ERR(data->clk)) >> + data->clk = NULL; >> + else >> + clk_prepare_enable(data->clk); > > if (!IS_ERR(data->clk)) > clk_prepare_enable(data->clk); > See below >> + >> uart.port.iotype = UPIO_MEM; >> uart.port.serial_in = dw8250_serial_in; >> uart.port.serial_out = dw8250_serial_out; >> + uart.port.private_data = data; >> + uart.port.uartclk = clk_get_rate(data->clk); > > What if data->clk is invalid? > > if (!IS_ERR(data->clk) > uart.port.uartclk = clk_get_rate(data->clk); > I'm not sure if it is coincidental or the way it is supposed to be, but when using the common clock framework, if you pass a NULL to clk_get_rate, the function explicitly checks for it and returns 0. I relied on that behaviour when implementing this; see the if..else block above. Is this not always the case on other clock drivers? >> >> dw8250_setup_port(&uart); >> >> @@ -312,12 +331,6 @@ static int dw8250_probe(struct platform_device *pdev) >> return -ENODEV; >> } >> >> - data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); >> - if (!data) >> - return -ENOMEM; >> - >> - uart.port.private_data = data; >> - >> data->line = serial8250_register_8250_port(&uart); >> if (data->line < 0) >> return data->line; >> @@ -333,6 +346,8 @@ static int dw8250_remove(struct platform_device *pdev) >> >> serial8250_unregister_port(data->line); >> > > if (!IS_ERR(data->clk) > I just double checked and clk_enable/disable, clk_prepare/unprepare also ignore NULLs passed to them on the CCF. >> + clk_disable_unprepare(data->clk); >> + >> return 0; >> } >> >> -- >> 1.7.10.4 Thanks for the review, Emilio
next prev parent reply other threads:[~2013-03-16 0:15 UTC|newest] Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-03-15 20:06 [PATCHv3 0/6] Extend UART support for Allwinner SoCs Maxime Ripard 2013-03-15 20:06 ` [PATCH 1/6] serial: 8250_dw: add support for clk api Maxime Ripard 2013-03-15 20:06 ` Maxime Ripard 2013-03-15 20:06 ` Maxime Ripard 2013-03-15 22:39 ` Russell King - ARM Linux 2013-03-15 22:39 ` Russell King - ARM Linux 2013-03-16 0:15 ` Emilio López [this message] 2013-03-16 0:15 ` Emilio López 2013-03-16 0:29 ` Russell King - ARM Linux 2013-03-16 0:29 ` Russell King - ARM Linux 2013-03-16 0:29 ` Russell King - ARM Linux 2013-03-16 0:40 ` Emilio López 2013-03-16 0:40 ` Emilio López 2013-03-16 0:40 ` Emilio López 2013-03-15 20:06 ` [PATCH 2/6] ARM: sunxi: dt: Use clocks property instead of clock-frequency for the UARTs Maxime Ripard 2013-03-15 20:06 ` Maxime Ripard 2013-03-15 20:06 ` [PATCH 3/6] ARM: sunxi: dt: Move uart0 to sun4i-a10.dtsi Maxime Ripard 2013-03-15 20:06 ` Maxime Ripard 2013-03-15 20:06 ` [PATCH 4/6] ARM: sunxi: dt: Add uart3 dt node Maxime Ripard 2013-03-15 20:06 ` Maxime Ripard 2013-03-15 22:01 ` Sergei Shtylyov 2013-03-15 22:01 ` Sergei Shtylyov 2013-03-15 20:06 ` [PATCH 5/6] ARM: sunxi: dt: Add A10 UARTs to the dtsi Maxime Ripard 2013-03-15 20:06 ` Maxime Ripard 2013-03-15 20:06 ` [PATCH 6/6] ARM: sunxi: hackberry: Add UART muxing Maxime Ripard 2013-03-15 20:06 ` Maxime Ripard
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=BLU0-SMTP4156A39670AA58651B05028AEE0@phx.gbl \ --to=emilio@elopez.com.ar \ --cc=gregkh@linuxfoundation.org \ --cc=jslaby@suse.cz \ --cc=kevin@allwinnertech.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-serial@vger.kernel.org \ --cc=linux@arm.linux.org.uk \ --cc=maxime.ripard@free-electrons.com \ --cc=shuge@allwinnertech.com \ --cc=sunny@allwinnertech.com \ /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: linkBe 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.