From: Murali Karicheri <m-karicheri2@ti.com>
To: Murali Karicheri <m-karicheri2@ti.com>
Cc: <alan@linux.intel.com>, <gregkh@linuxfoundation.org>,
<linux-serial@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-keystone@list.ti.com>
Subject: Re: [RESEND PATCH 1/2] of serial port driver - add clk_get_rate() support
Date: Tue, 16 Oct 2012 11:32:59 -0400 [thread overview]
Message-ID: <507D7E2B.4070202@ti.com> (raw)
In-Reply-To: <1350401051-8254-1-git-send-email-m-karicheri2@ti.com>
On 10/16/2012 11:24 AM, Murali Karicheri wrote:
> Currently this driver expects the clock-frequency attribute. This
> patch allows getting clock-frequency through clk driver API
> clk_get_rate() if clock-frequency attribute is not defined.
>
> So in the device bindings for serial device, one can add clocks
> phandle to refer to the clk device to get the rate.
>
> Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
>
> diff --git a/drivers/tty/serial/of_serial.c b/drivers/tty/serial/of_serial.c
> index 34e7187..6f64f02 100644
> --- a/drivers/tty/serial/of_serial.c
> +++ b/drivers/tty/serial/of_serial.c
> @@ -21,8 +21,10 @@
> #include <linux/of_serial.h>
> #include <linux/of_platform.h>
> #include <linux/nwpserial.h>
> +#include <linux/clk.h>
>
> struct of_serial_info {
> + struct clk *clk;
> int type;
> int line;
> };
> @@ -51,7 +53,8 @@ EXPORT_SYMBOL_GPL(tegra_serial_handle_break);
> * Fill a struct uart_port for a given device node
> */
> static int __devinit of_platform_serial_setup(struct platform_device *ofdev,
> - int type, struct uart_port *port)
> + int type, struct uart_port *port,
> + struct of_serial_info *info)
> {
> struct resource resource;
> struct device_node *np = ofdev->dev.of_node;
> @@ -60,8 +63,17 @@ static int __devinit of_platform_serial_setup(struct platform_device *ofdev,
>
> memset(port, 0, sizeof *port);
> if (of_property_read_u32(np, "clock-frequency", &clk)) {
> - dev_warn(&ofdev->dev, "no clock-frequency property set\n");
> - return -ENODEV;
> +
> + /* Get clk rate through clk driver if present */
> + info->clk = clk_get(&ofdev->dev, NULL);
> + if (info->clk == NULL) {
> + dev_warn(&ofdev->dev,
> + "clk or clock-frequency not defined\n");
> + return -ENODEV;
> + }
> +
> + clk_prepare_enable(info->clk);
> + clk = clk_get_rate(info->clk);
> }
> /* If current-speed was set, then try not to change it. */
> if (of_property_read_u32(np, "current-speed", &spd) == 0)
> @@ -70,7 +82,7 @@ static int __devinit of_platform_serial_setup(struct platform_device *ofdev,
> ret = of_address_to_resource(np, 0, &resource);
> if (ret) {
> dev_warn(&ofdev->dev, "invalid address\n");
> - return ret;
> + goto out;
> }
>
> spin_lock_init(&port->lock);
> @@ -97,7 +109,8 @@ static int __devinit of_platform_serial_setup(struct platform_device *ofdev,
> default:
> dev_warn(&ofdev->dev, "unsupported reg-io-width (%d)\n",
> prop);
> - return -EINVAL;
> + ret = -EINVAL;
> + goto out;
> }
> }
>
> @@ -111,6 +124,10 @@ static int __devinit of_platform_serial_setup(struct platform_device *ofdev,
> port->handle_break = tegra_serial_handle_break;
>
> return 0;
> +out:
> + if (info->clk)
> + clk_disable_unprepare(info->clk);
> + return ret;
> }
>
> /*
> @@ -137,7 +154,7 @@ static int __devinit of_platform_serial_probe(struct platform_device *ofdev)
> return -ENOMEM;
>
> port_type = (unsigned long)match->data;
> - ret = of_platform_serial_setup(ofdev, port_type, &port);
> + ret = of_platform_serial_setup(ofdev, port_type, &port, info);
> if (ret)
> goto out;
>
> @@ -193,6 +210,9 @@ static int of_platform_serial_remove(struct platform_device *ofdev)
> /* need to add code for these */
> break;
> }
> +
> + if (info->clk)
> + clk_disable_unprepare(info->clk);
> kfree(info);
> return 0;
> }
For some reason, I can't see the two patches in this series at the
linux-serial server at http://marc.info/?l=linux-serial
Can someone tell me what could be wrong? My email seems to reach.. So trying
to reply and get this onto the mailing list.
Murali
next parent reply other threads:[~2012-10-16 15:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1350401051-8254-1-git-send-email-m-karicheri2@ti.com>
2012-10-16 15:32 ` Murali Karicheri [this message]
[not found] ` <1350401051-8254-2-git-send-email-m-karicheri2@ti.com>
2012-10-16 15:33 ` [RESEND PATCH 2/2] Documentation: of-serial.txt - update for clocks phandle for clk Murali Karicheri
2012-10-22 15:58 [RESEND PATCH 1/2] of serial port driver - add clk_get_rate() support Murali Karicheri
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=507D7E2B.4070202@ti.com \
--to=m-karicheri2@ti.com \
--cc=alan@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-keystone@list.ti.com \
--cc=linux-serial@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox