From: Maxime Ripard <maxime.ripard@free-electrons.com>
To: linux-arm-kernel@lists.infradead.org
Cc: kevin@allwinnertech.com, sunny@allwinnertech.com,
shuge@allwinnertech.com, "Emilio López" <emilio@elopez.com.ar>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Jiri Slaby" <jslaby@suse.cz>,
linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 1/6] serial: 8250_dw: add support for clk api
Date: Fri, 15 Mar 2013 21:06:23 +0100 [thread overview]
Message-ID: <1363377988-4966-2-git-send-email-maxime.ripard@free-electrons.com> (raw)
In-Reply-To: <1363377988-4966-1-git-send-email-maxime.ripard@free-electrons.com>
From: Emilio López <emilio@elopez.com.ar>
This commit implements support for using the clk api; this lets us use
the "clocks" property with device tree, instead of having to use
clock-frequency.
Signed-off-by: Emilio López <emilio@elopez.com.ar>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
---
drivers/tty/serial/8250/8250_dw.c | 33 ++++++++++++++++++++++++---------
1 file changed, 24 insertions(+), 9 deletions(-)
diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
index db0e66f..9a834a1 100644
--- a/drivers/tty/serial/8250/8250_dw.c
+++ b/drivers/tty/serial/8250/8250_dw.c
@@ -26,6 +26,7 @@
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/acpi.h>
+#include <linux/clk.h>
#include "8250.h"
@@ -55,8 +56,9 @@
struct dw8250_data {
- int last_lcr;
- int line;
+ int last_lcr;
+ int line;
+ struct clk *clk;
};
static void dw8250_serial_out(struct uart_port *p, int offset, int value)
@@ -136,8 +138,13 @@ static int dw8250_probe_of(struct uart_port *p)
if (!of_property_read_u32(np, "reg-shift", &val))
p->regshift = val;
+ /* clock got configured through clk api, all done */
+ if (p->uartclk)
+ 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);
+
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);
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);
+ clk_disable_unprepare(data->clk);
+
return 0;
}
--
1.7.10.4
WARNING: multiple messages have this Message-ID (diff)
From: Maxime Ripard <maxime.ripard@free-electrons.com>
To: linux-arm-kernel@lists.infradead.org
Cc: kevin@allwinnertech.com, sunny@allwinnertech.com,
shuge@allwinnertech.com, "Emilio López" <emilio@elopez.com.ar>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Jiri Slaby" <jslaby@suse.cz>,
linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 1/6] serial: 8250_dw: add support for clk api
Date: Fri, 15 Mar 2013 21:06:23 +0100 [thread overview]
Message-ID: <1363377988-4966-2-git-send-email-maxime.ripard@free-electrons.com> (raw)
In-Reply-To: <1363377988-4966-1-git-send-email-maxime.ripard@free-electrons.com>
From: Emilio López <emilio@elopez.com.ar>
This commit implements support for using the clk api; this lets us use
the "clocks" property with device tree, instead of having to use
clock-frequency.
Signed-off-by: Emilio López <emilio@elopez.com.ar>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
---
drivers/tty/serial/8250/8250_dw.c | 33 ++++++++++++++++++++++++---------
1 file changed, 24 insertions(+), 9 deletions(-)
diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
index db0e66f..9a834a1 100644
--- a/drivers/tty/serial/8250/8250_dw.c
+++ b/drivers/tty/serial/8250/8250_dw.c
@@ -26,6 +26,7 @@
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/acpi.h>
+#include <linux/clk.h>
#include "8250.h"
@@ -55,8 +56,9 @@
struct dw8250_data {
- int last_lcr;
- int line;
+ int last_lcr;
+ int line;
+ struct clk *clk;
};
static void dw8250_serial_out(struct uart_port *p, int offset, int value)
@@ -136,8 +138,13 @@ static int dw8250_probe_of(struct uart_port *p)
if (!of_property_read_u32(np, "reg-shift", &val))
p->regshift = val;
+ /* clock got configured through clk api, all done */
+ if (p->uartclk)
+ 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);
+
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);
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);
+ clk_disable_unprepare(data->clk);
+
return 0;
}
--
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: maxime.ripard@free-electrons.com (Maxime Ripard)
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:06:23 +0100 [thread overview]
Message-ID: <1363377988-4966-2-git-send-email-maxime.ripard@free-electrons.com> (raw)
In-Reply-To: <1363377988-4966-1-git-send-email-maxime.ripard@free-electrons.com>
From: Emilio L?pez <emilio@elopez.com.ar>
This commit implements support for using the clk api; this lets us use
the "clocks" property with device tree, instead of having to use
clock-frequency.
Signed-off-by: Emilio L?pez <emilio@elopez.com.ar>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
---
drivers/tty/serial/8250/8250_dw.c | 33 ++++++++++++++++++++++++---------
1 file changed, 24 insertions(+), 9 deletions(-)
diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
index db0e66f..9a834a1 100644
--- a/drivers/tty/serial/8250/8250_dw.c
+++ b/drivers/tty/serial/8250/8250_dw.c
@@ -26,6 +26,7 @@
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/acpi.h>
+#include <linux/clk.h>
#include "8250.h"
@@ -55,8 +56,9 @@
struct dw8250_data {
- int last_lcr;
- int line;
+ int last_lcr;
+ int line;
+ struct clk *clk;
};
static void dw8250_serial_out(struct uart_port *p, int offset, int value)
@@ -136,8 +138,13 @@ static int dw8250_probe_of(struct uart_port *p)
if (!of_property_read_u32(np, "reg-shift", &val))
p->regshift = val;
+ /* clock got configured through clk api, all done */
+ if (p->uartclk)
+ 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);
+
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);
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);
+ clk_disable_unprepare(data->clk);
+
return 0;
}
--
1.7.10.4
next prev parent reply other threads:[~2013-03-15 20:06 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 ` Maxime Ripard [this message]
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 22:39 ` Russell King - ARM Linux
2013-03-15 22:39 ` Russell King - ARM Linux
2013-03-16 0:15 ` Emilio López
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=1363377988-4966-2-git-send-email-maxime.ripard@free-electrons.com \
--to=maxime.ripard@free-electrons.com \
--cc=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=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: link
Be 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.