* [PATCH 0/4] Add DT support to C_CAN/D_CAN controller
@ 2012-07-25 6:23 AnilKumar Ch
2012-07-25 6:23 ` [PATCH 1/4] can: c_can: Add device tree support to Bosch " AnilKumar Ch
` (4 more replies)
0 siblings, 5 replies; 14+ messages in thread
From: AnilKumar Ch @ 2012-07-25 6:23 UTC (permalink / raw)
To: wg, mkl, linux-can; +Cc: anantgole, nsekhar, AnilKumar Ch
This patch series adds the device tree support to C_CAN/D_CAN
controller with pinmux configuration and device tree data
addition to corresponding dts and dtsi files.
Also adds Runtime PM support to C_CAN/D_CAN controller.
These patches have been tested on AM335x EVM using some additional
patch to initialize D_CAN RAM. D_CAN raminit is controlled from
control module register. This patch will be submitted once control
module MFD driver support is added to mainline.
Due to lack of hardware I am not able to test c_can functionality.
I appreciate if anyone can test c_can functionality with this patch
series.
First and last patches applies on top of linux-next tree, 2nd and
3rd patches applies on linux-omap tree.
AnilKumar Ch (4):
can: c_can: Add device tree support to Bosch C_CAN/D_CAN controller
arm/dts: AM33XX: Add D_CAN device tree data
arm/dts: AM33XX: Configure pinmuxs for D_CAN1 on AM335x-EVM
can: c_can: Add runtime PM support to Bosch C_CAN/D_CAN controller
.../devicetree/bindings/net/can/c_can.txt | 38 +++++++++++++
arch/arm/boot/dts/am335x-evm.dts | 13 +++++
arch/arm/boot/dts/am33xx.dtsi | 5 ++
drivers/net/can/c_can/c_can_platform.c | 60 +++++++++++++++-----
4 files changed, 101 insertions(+), 15 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/can/c_can.txt
--
1.7.9.5
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/4] can: c_can: Add device tree support to Bosch C_CAN/D_CAN controller
2012-07-25 6:23 [PATCH 0/4] Add DT support to C_CAN/D_CAN controller AnilKumar Ch
@ 2012-07-25 6:23 ` AnilKumar Ch
2012-07-25 9:24 ` Marc Kleine-Budde
2012-07-25 6:23 ` [PATCH 2/4] arm/dts: AM33XX: Add D_CAN device tree data AnilKumar Ch
` (3 subsequent siblings)
4 siblings, 1 reply; 14+ messages in thread
From: AnilKumar Ch @ 2012-07-25 6:23 UTC (permalink / raw)
To: wg, mkl, linux-can; +Cc: anantgole, nsekhar, AnilKumar Ch
Add device tree support to C_CAN/D_CAN controller and usage details
are added to device tree documentation. Driver was tested on AM335x
EVM.
Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
---
.../devicetree/bindings/net/can/c_can.txt | 38 ++++++++++++++
drivers/net/can/c_can/c_can_platform.c | 52 ++++++++++++++------
2 files changed, 75 insertions(+), 15 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/can/c_can.txt
diff --git a/Documentation/devicetree/bindings/net/can/c_can.txt b/Documentation/devicetree/bindings/net/can/c_can.txt
new file mode 100644
index 0000000..78b8ae8
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/can/c_can.txt
@@ -0,0 +1,38 @@
+Bosch C_CAN/D_CAN controller Device Tree Bindings
+-------------------------------------------------
+
+Required properties:
+- compatible : Should be "bosch,c_can_platform" or "bosch,c_can"
+ for C_CAN controllers and "bosch,d_can" for D_CAN
+ controllers.
+- reg : physical base address and size of the C_CAN/D_CAN
+ registers map
+- interrupts : property with a value describing the interrupt
+ number
+- interrupt-parent : The parent interrupt controller
+
+Optional properties:
+- ti,hwmods : Must be "d_can<n>" or "c_can<n>", n being the
+ instance number
+
+Note: "ti,hwmods" field is used to fetch the base address and irq
+resources from TI, omap hwmod data base during device registration.
+Future plan is to migrate hwmod data base contents into device tree
+blob so that, all the required data will be used from device tree dts
+file.
+
+Examples:
+
+ d_can@481D0000 {
+ compatible = "bosch,d_can";
+ reg = <0x481D0000 0x1000>;
+ interrupts = <55 0x4>;
+ interrupt-parent = <&intc>;
+ };
+
+(or)
+
+ d_can@481D0000 {
+ compatible = "bosch,d_can";
+ ti,hwmods = "d_can1";
+ };
diff --git a/drivers/net/can/c_can/c_can_platform.c b/drivers/net/can/c_can/c_can_platform.c
index 6ff7ad0..2f5b153 100644
--- a/drivers/net/can/c_can/c_can_platform.c
+++ b/drivers/net/can/c_can/c_can_platform.c
@@ -30,6 +30,8 @@
#include <linux/io.h>
#include <linux/platform_device.h>
#include <linux/clk.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
#include <linux/can/dev.h>
@@ -65,17 +67,51 @@ static void c_can_plat_write_reg_aligned_to_32bit(struct c_can_priv *priv,
writew(val, priv->base + 2 * priv->regs[index]);
}
+static struct platform_device_id c_can_id_table[] = {
+ {
+ .name = KBUILD_MODNAME,
+ .driver_data = C_CAN_DEVTYPE,
+ }, {
+ .name = "c_can",
+ .driver_data = C_CAN_DEVTYPE,
+ }, {
+ .name = "d_can",
+ .driver_data = D_CAN_DEVTYPE,
+ }, {
+ }
+};
+
+static const struct of_device_id c_can_of_table[] = {
+ { .compatible = "bosch,c_can_platform", .data = &c_can_id_table[0] },
+ { .compatible = "bosch,c_can", .data = &c_can_id_table[1] },
+ { .compatible = "bosch,d_can", .data = &c_can_id_table[2] },
+ { /* sentinel */ },
+};
+
static int __devinit c_can_plat_probe(struct platform_device *pdev)
{
int ret;
void __iomem *addr;
struct net_device *dev;
struct c_can_priv *priv;
+ const struct of_device_id *match;
const struct platform_device_id *id;
struct resource *mem;
int irq;
struct clk *clk;
+ if (pdev->dev.of_node) {
+ match = of_match_device(c_can_of_table, &pdev->dev);
+ if (!match) {
+ dev_err(&pdev->dev, "Failed to find matching dt id\n");
+ ret = -EINVAL;
+ goto exit;
+ }
+ id = match->data;
+ } else {
+ id = platform_get_device_id(pdev);
+ }
+
/* get the appropriate clk */
clk = clk_get(&pdev->dev, NULL);
if (IS_ERR(clk)) {
@@ -114,7 +150,6 @@ static int __devinit c_can_plat_probe(struct platform_device *pdev)
}
priv = netdev_priv(dev);
- id = platform_get_device_id(pdev);
switch (id->driver_data) {
case C_CAN_DEVTYPE:
priv->regs = reg_map_c_can;
@@ -195,24 +230,11 @@ static int __devexit c_can_plat_remove(struct platform_device *pdev)
return 0;
}
-static const struct platform_device_id c_can_id_table[] = {
- {
- .name = KBUILD_MODNAME,
- .driver_data = C_CAN_DEVTYPE,
- }, {
- .name = "c_can",
- .driver_data = C_CAN_DEVTYPE,
- }, {
- .name = "d_can",
- .driver_data = D_CAN_DEVTYPE,
- }, {
- }
-};
-
static struct platform_driver c_can_plat_driver = {
.driver = {
.name = KBUILD_MODNAME,
.owner = THIS_MODULE,
+ .of_match_table = of_match_ptr(c_can_of_table),
},
.probe = c_can_plat_probe,
.remove = __devexit_p(c_can_plat_remove),
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/4] arm/dts: AM33XX: Add D_CAN device tree data
2012-07-25 6:23 [PATCH 0/4] Add DT support to C_CAN/D_CAN controller AnilKumar Ch
2012-07-25 6:23 ` [PATCH 1/4] can: c_can: Add device tree support to Bosch " AnilKumar Ch
@ 2012-07-25 6:23 ` AnilKumar Ch
2012-07-25 6:36 ` AnilKumar, Chimata
2012-07-25 6:23 ` [PATCH 3/4] arm/dts: AM33XX: Configure pinmuxs for D_CAN1 on AM335x-EVM AnilKumar Ch
` (2 subsequent siblings)
4 siblings, 1 reply; 14+ messages in thread
From: AnilKumar Ch @ 2012-07-25 6:23 UTC (permalink / raw)
To: wg, mkl, linux-can; +Cc: anantgole, nsekhar, AnilKumar Ch
Add Bosch D_CAN controller device tree data to AM33XX dtsi file
by adding d_can device node with all the necessary parameters.
Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
---
arch/arm/boot/dts/am33xx.dtsi | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
index 9b974dc..2db2ffb 100644
--- a/arch/arm/boot/dts/am33xx.dtsi
+++ b/arch/arm/boot/dts/am33xx.dtsi
@@ -163,5 +163,10 @@
#size-cells = <0>;
ti,hwmods = "i2c3";
};
+
+ dcan1: d_can@481D0000 {
+ compatible = "bosch,d_can";
+ ti,hwmods = "d_can1";
+ };
};
};
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/4] arm/dts: AM33XX: Configure pinmuxs for D_CAN1 on AM335x-EVM
2012-07-25 6:23 [PATCH 0/4] Add DT support to C_CAN/D_CAN controller AnilKumar Ch
2012-07-25 6:23 ` [PATCH 1/4] can: c_can: Add device tree support to Bosch " AnilKumar Ch
2012-07-25 6:23 ` [PATCH 2/4] arm/dts: AM33XX: Add D_CAN device tree data AnilKumar Ch
@ 2012-07-25 6:23 ` AnilKumar Ch
2012-07-25 6:36 ` AnilKumar, Chimata
2012-07-25 6:23 ` [PATCH 4/4] can: c_can: Add runtime PM support to Bosch C_CAN/D_CAN controller AnilKumar Ch
2012-07-25 9:04 ` [PATCH 0/4] Add DT support to " Marc Kleine-Budde
4 siblings, 1 reply; 14+ messages in thread
From: AnilKumar Ch @ 2012-07-25 6:23 UTC (permalink / raw)
To: wg, mkl, linux-can; +Cc: anantgole, nsekhar, AnilKumar Ch
Add D_CAN1 pinctrl node to am3358_pinmux master node to export
D_CAN functionality on AM335x EVM according to pinctrl-single
driver.
Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
---
arch/arm/boot/dts/am335x-evm.dts | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts
index e4e1ccb..7f0fd6c 100644
--- a/arch/arm/boot/dts/am335x-evm.dts
+++ b/arch/arm/boot/dts/am335x-evm.dts
@@ -46,3 +46,16 @@
regulator-boot-on;
regulator-always-on;
};
+
+&am3358_pinmux {
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&d_can1_pins>;
+
+ d_can1_pins: pinmux_d_can_pins {
+ pinctrl-single,pins = <
+ 0x168 0x2 /* uart0_ctsn.d_can1_tx, OUTPUT | MODE2 */
+ 0x16C 0x32 /* uart0_rtsn.d_can1_rx, INPUT_PULLUP | MODE2 */
+ >;
+ };
+};
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/4] can: c_can: Add runtime PM support to Bosch C_CAN/D_CAN controller
2012-07-25 6:23 [PATCH 0/4] Add DT support to C_CAN/D_CAN controller AnilKumar Ch
` (2 preceding siblings ...)
2012-07-25 6:23 ` [PATCH 3/4] arm/dts: AM33XX: Configure pinmuxs for D_CAN1 on AM335x-EVM AnilKumar Ch
@ 2012-07-25 6:23 ` AnilKumar Ch
2012-07-25 9:04 ` [PATCH 0/4] Add DT support to " Marc Kleine-Budde
4 siblings, 0 replies; 14+ messages in thread
From: AnilKumar Ch @ 2012-07-25 6:23 UTC (permalink / raw)
To: wg, mkl, linux-can; +Cc: anantgole, nsekhar, AnilKumar Ch
Add Runtime PM support to C_CAN/D_CAN controller. The runtime PM
APIs control clocks for C_CAN/D_CAN IP and prevent access to the
register of C_CAN/D_CAN IP when clock is turned off.
Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
---
drivers/net/can/c_can/c_can_platform.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/net/can/c_can/c_can_platform.c b/drivers/net/can/c_can/c_can_platform.c
index 2f5b153..f0dc912 100644
--- a/drivers/net/can/c_can/c_can_platform.c
+++ b/drivers/net/can/c_can/c_can_platform.c
@@ -32,6 +32,7 @@
#include <linux/clk.h>
#include <linux/of.h>
#include <linux/of_device.h>
+#include <linux/pm_runtime.h>
#include <linux/can/dev.h>
@@ -176,6 +177,9 @@ static int __devinit c_can_plat_probe(struct platform_device *pdev)
goto exit_free_device;
}
+ pm_runtime_enable(&pdev->dev);
+ pm_runtime_get_sync(&pdev->dev);
+
dev->irq = irq;
priv->base = addr;
priv->can.clock.freq = clk_get_rate(clk);
@@ -197,6 +201,8 @@ static int __devinit c_can_plat_probe(struct platform_device *pdev)
exit_free_device:
platform_set_drvdata(pdev, NULL);
+ pm_runtime_put_sync(&pdev->dev);
+ pm_runtime_disable(&pdev->dev);
free_c_can_dev(dev);
exit_iounmap:
iounmap(addr);
@@ -225,6 +231,8 @@ static int __devexit c_can_plat_remove(struct platform_device *pdev)
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(mem->start, resource_size(mem));
+ pm_runtime_put_sync(&pdev->dev);
+ pm_runtime_disable(&pdev->dev);
clk_put(priv->priv);
return 0;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* RE: [PATCH 2/4] arm/dts: AM33XX: Add D_CAN device tree data
2012-07-25 6:23 ` [PATCH 2/4] arm/dts: AM33XX: Add D_CAN device tree data AnilKumar Ch
@ 2012-07-25 6:36 ` AnilKumar, Chimata
0 siblings, 0 replies; 14+ messages in thread
From: AnilKumar, Chimata @ 2012-07-25 6:36 UTC (permalink / raw)
To: AnilKumar, Chimata, wg, mkl, linux-can, Tony Lindgren
Cc: Gole, Anant, Nori, Sekhar
+Tony
On Wed, Jul 25, 2012 at 11:53:35, AnilKumar, Chimata wrote:
> Add Bosch D_CAN controller device tree data to AM33XX dtsi file
> by adding d_can device node with all the necessary parameters.
>
> Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
> ---
> arch/arm/boot/dts/am33xx.dtsi | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
> index 9b974dc..2db2ffb 100644
> --- a/arch/arm/boot/dts/am33xx.dtsi
> +++ b/arch/arm/boot/dts/am33xx.dtsi
> @@ -163,5 +163,10 @@
> #size-cells = <0>;
> ti,hwmods = "i2c3";
> };
> +
> + dcan1: d_can@481D0000 {
> + compatible = "bosch,d_can";
> + ti,hwmods = "d_can1";
> + };
> };
> };
> --
> 1.7.9.5
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [PATCH 3/4] arm/dts: AM33XX: Configure pinmuxs for D_CAN1 on AM335x-EVM
2012-07-25 6:23 ` [PATCH 3/4] arm/dts: AM33XX: Configure pinmuxs for D_CAN1 on AM335x-EVM AnilKumar Ch
@ 2012-07-25 6:36 ` AnilKumar, Chimata
0 siblings, 0 replies; 14+ messages in thread
From: AnilKumar, Chimata @ 2012-07-25 6:36 UTC (permalink / raw)
To: AnilKumar, Chimata, wg, mkl, linux-can, Tony Lindgren
Cc: Gole, Anant, Nori, Sekhar
+Tony
On Wed, Jul 25, 2012 at 11:53:36, AnilKumar, Chimata wrote:
> Add D_CAN1 pinctrl node to am3358_pinmux master node to export
> D_CAN functionality on AM335x EVM according to pinctrl-single
> driver.
>
> Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
> ---
> arch/arm/boot/dts/am335x-evm.dts | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts
> index e4e1ccb..7f0fd6c 100644
> --- a/arch/arm/boot/dts/am335x-evm.dts
> +++ b/arch/arm/boot/dts/am335x-evm.dts
> @@ -46,3 +46,16 @@
> regulator-boot-on;
> regulator-always-on;
> };
> +
> +&am3358_pinmux {
> +
> + pinctrl-names = "default";
> + pinctrl-0 = <&d_can1_pins>;
> +
> + d_can1_pins: pinmux_d_can_pins {
> + pinctrl-single,pins = <
> + 0x168 0x2 /* uart0_ctsn.d_can1_tx, OUTPUT | MODE2 */
> + 0x16C 0x32 /* uart0_rtsn.d_can1_rx, INPUT_PULLUP | MODE2 */
> + >;
> + };
> +};
> --
> 1.7.9.5
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 0/4] Add DT support to C_CAN/D_CAN controller
2012-07-25 6:23 [PATCH 0/4] Add DT support to C_CAN/D_CAN controller AnilKumar Ch
` (3 preceding siblings ...)
2012-07-25 6:23 ` [PATCH 4/4] can: c_can: Add runtime PM support to Bosch C_CAN/D_CAN controller AnilKumar Ch
@ 2012-07-25 9:04 ` Marc Kleine-Budde
2012-07-25 9:19 ` AnilKumar, Chimata
4 siblings, 1 reply; 14+ messages in thread
From: Marc Kleine-Budde @ 2012-07-25 9:04 UTC (permalink / raw)
To: AnilKumar Ch; +Cc: wg, linux-can, anantgole, nsekhar
[-- Attachment #1: Type: text/plain, Size: 2057 bytes --]
On 07/25/2012 08:23 AM, AnilKumar Ch wrote:
> This patch series adds the device tree support to C_CAN/D_CAN
> controller with pinmux configuration and device tree data
> addition to corresponding dts and dtsi files.
>
> Also adds Runtime PM support to C_CAN/D_CAN controller.
>
> These patches have been tested on AM335x EVM using some additional
> patch to initialize D_CAN RAM. D_CAN raminit is controlled from
> control module register. This patch will be submitted once control
> module MFD driver support is added to mainline.
>
> Due to lack of hardware I am not able to test c_can functionality.
> I appreciate if anyone can test c_can functionality with this patch
> series.
>
> First and last patches applies on top of linux-next tree, 2nd and
> 3rd patches applies on linux-omap tree.
I think 1st and 4th patch (if not all) should go though the
linux-can-next tree. Please rebase against linux-can-next master. If you
need features from the v3.6 release cycle we have to wait until David
merges then back.
regards, Marc
>
> AnilKumar Ch (4):
> can: c_can: Add device tree support to Bosch C_CAN/D_CAN controller
> arm/dts: AM33XX: Add D_CAN device tree data
> arm/dts: AM33XX: Configure pinmuxs for D_CAN1 on AM335x-EVM
> can: c_can: Add runtime PM support to Bosch C_CAN/D_CAN controller
>
> .../devicetree/bindings/net/can/c_can.txt | 38 +++++++++++++
> arch/arm/boot/dts/am335x-evm.dts | 13 +++++
> arch/arm/boot/dts/am33xx.dtsi | 5 ++
> drivers/net/can/c_can/c_can_platform.c | 60 +++++++++++++++-----
> 4 files changed, 101 insertions(+), 15 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/net/can/c_can.txt
>
--
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 |
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [PATCH 0/4] Add DT support to C_CAN/D_CAN controller
2012-07-25 9:04 ` [PATCH 0/4] Add DT support to " Marc Kleine-Budde
@ 2012-07-25 9:19 ` AnilKumar, Chimata
2012-07-25 9:26 ` Marc Kleine-Budde
0 siblings, 1 reply; 14+ messages in thread
From: AnilKumar, Chimata @ 2012-07-25 9:19 UTC (permalink / raw)
To: Marc Kleine-Budde; +Cc: wg, linux-can, Gole, Anant, Nori, Sekhar
Marc,
Thanks for the review.
On Wed, Jul 25, 2012 at 14:34:21, Marc Kleine-Budde wrote:
> On 07/25/2012 08:23 AM, AnilKumar Ch wrote:
> > This patch series adds the device tree support to C_CAN/D_CAN
> > controller with pinmux configuration and device tree data
> > addition to corresponding dts and dtsi files.
> >
> > Also adds Runtime PM support to C_CAN/D_CAN controller.
> >
> > These patches have been tested on AM335x EVM using some additional
> > patch to initialize D_CAN RAM. D_CAN raminit is controlled from
> > control module register. This patch will be submitted once control
> > module MFD driver support is added to mainline.
> >
> > Due to lack of hardware I am not able to test c_can functionality.
> > I appreciate if anyone can test c_can functionality with this patch
> > series.
> >
> > First and last patches applies on top of linux-next tree, 2nd and
> > 3rd patches applies on linux-omap tree.
>
> I think 1st and 4th patch (if not all) should go though the
> linux-can-next tree. Please rebase against linux-can-next master. If you
> need features from the v3.6 release cycle we have to wait until David
> merges then back.
>
I will separate out into two sereis one with 1st and 4th patches and other
with 2nd and 3rd patches. I will submit v2 based on linux-can-nest master.
Thanks
AnilKumar
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/4] can: c_can: Add device tree support to Bosch C_CAN/D_CAN controller
2012-07-25 6:23 ` [PATCH 1/4] can: c_can: Add device tree support to Bosch " AnilKumar Ch
@ 2012-07-25 9:24 ` Marc Kleine-Budde
2012-07-25 10:06 ` AnilKumar, Chimata
0 siblings, 1 reply; 14+ messages in thread
From: Marc Kleine-Budde @ 2012-07-25 9:24 UTC (permalink / raw)
To: AnilKumar Ch; +Cc: wg, linux-can, anantgole, nsekhar
[-- Attachment #1: Type: text/plain, Size: 5666 bytes --]
On 07/25/2012 08:23 AM, AnilKumar Ch wrote:
> Add device tree support to C_CAN/D_CAN controller and usage details
> are added to device tree documentation. Driver was tested on AM335x
> EVM.
AFAIK you should add devicetree-discuss@lists.ozlabs.org on Cc for DT
related patches. More comments inline.
>
> Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
> ---
> .../devicetree/bindings/net/can/c_can.txt | 38 ++++++++++++++
> drivers/net/can/c_can/c_can_platform.c | 52 ++++++++++++++------
> 2 files changed, 75 insertions(+), 15 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/net/can/c_can.txt
>
> diff --git a/Documentation/devicetree/bindings/net/can/c_can.txt b/Documentation/devicetree/bindings/net/can/c_can.txt
> new file mode 100644
> index 0000000..78b8ae8
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/net/can/c_can.txt
> @@ -0,0 +1,38 @@
> +Bosch C_CAN/D_CAN controller Device Tree Bindings
> +-------------------------------------------------
> +
> +Required properties:
> +- compatible : Should be "bosch,c_can_platform" or "bosch,c_can"
> + for C_CAN controllers and "bosch,d_can" for D_CAN
> + controllers.
> +- reg : physical base address and size of the C_CAN/D_CAN
> + registers map
> +- interrupts : property with a value describing the interrupt
> + number
> +- interrupt-parent : The parent interrupt controller
> +
> +Optional properties:
> +- ti,hwmods : Must be "d_can<n>" or "c_can<n>", n being the
> + instance number
> +
> +Note: "ti,hwmods" field is used to fetch the base address and irq
> +resources from TI, omap hwmod data base during device registration.
> +Future plan is to migrate hwmod data base contents into device tree
> +blob so that, all the required data will be used from device tree dts
> +file.
> +
> +Examples:
> +
> + d_can@481D0000 {
> + compatible = "bosch,d_can";
> + reg = <0x481D0000 0x1000>;
> + interrupts = <55 0x4>;
> + interrupt-parent = <&intc>;
> + };
> +
> +(or)
> +
> + d_can@481D0000 {
> + compatible = "bosch,d_can";
> + ti,hwmods = "d_can1";
> + };
> diff --git a/drivers/net/can/c_can/c_can_platform.c b/drivers/net/can/c_can/c_can_platform.c
> index 6ff7ad0..2f5b153 100644
> --- a/drivers/net/can/c_can/c_can_platform.c
> +++ b/drivers/net/can/c_can/c_can_platform.c
> @@ -30,6 +30,8 @@
> #include <linux/io.h>
> #include <linux/platform_device.h>
> #include <linux/clk.h>
> +#include <linux/of.h>
> +#include <linux/of_device.h>
>
> #include <linux/can/dev.h>
>
> @@ -65,17 +67,51 @@ static void c_can_plat_write_reg_aligned_to_32bit(struct c_can_priv *priv,
> writew(val, priv->base + 2 * priv->regs[index]);
> }
>
> +static struct platform_device_id c_can_id_table[] = {
> + {
> + .name = KBUILD_MODNAME,
> + .driver_data = C_CAN_DEVTYPE,
> + }, {
> + .name = "c_can",
> + .driver_data = C_CAN_DEVTYPE,
> + }, {
> + .name = "d_can",
> + .driver_data = D_CAN_DEVTYPE,
> + }, {
> + }
> +};
> +
> +static const struct of_device_id c_can_of_table[] = {
> + { .compatible = "bosch,c_can_platform", .data = &c_can_id_table[0] },
Please don't add the "legacy bosch,c_can_platform" to the device tree
bindings. I personally would appreciate if you introduce an enum as
array index (BOSCH_C_CAN_PLATFORM, BOSCH_C_CAN, BOSCH_D_CAN) and
initialize the c_can_id_table above using the array indexes, then you
can use these indexes here too.
> + { .compatible = "bosch,c_can", .data = &c_can_id_table[1] },
> + { .compatible = "bosch,d_can", .data = &c_can_id_table[2] },
> + { /* sentinel */ },
> +};
> +
> static int __devinit c_can_plat_probe(struct platform_device *pdev)
> {
> int ret;
> void __iomem *addr;
> struct net_device *dev;
> struct c_can_priv *priv;
> + const struct of_device_id *match;
> const struct platform_device_id *id;
> struct resource *mem;
> int irq;
> struct clk *clk;
>
> + if (pdev->dev.of_node) {
> + match = of_match_device(c_can_of_table, &pdev->dev);
> + if (!match) {
> + dev_err(&pdev->dev, "Failed to find matching dt id\n");
> + ret = -EINVAL;
> + goto exit;
> + }
> + id = match->data;
> + } else {
> + id = platform_get_device_id(pdev);
> + }
> +
> /* get the appropriate clk */
> clk = clk_get(&pdev->dev, NULL);
> if (IS_ERR(clk)) {
> @@ -114,7 +150,6 @@ static int __devinit c_can_plat_probe(struct platform_device *pdev)
> }
>
> priv = netdev_priv(dev);
> - id = platform_get_device_id(pdev);
> switch (id->driver_data) {
> case C_CAN_DEVTYPE:
> priv->regs = reg_map_c_can;
> @@ -195,24 +230,11 @@ static int __devexit c_can_plat_remove(struct platform_device *pdev)
> return 0;
> }
>
> -static const struct platform_device_id c_can_id_table[] = {
> - {
> - .name = KBUILD_MODNAME,
> - .driver_data = C_CAN_DEVTYPE,
> - }, {
> - .name = "c_can",
> - .driver_data = C_CAN_DEVTYPE,
> - }, {
> - .name = "d_can",
> - .driver_data = D_CAN_DEVTYPE,
> - }, {
> - }
> -};
> -
> static struct platform_driver c_can_plat_driver = {
> .driver = {
> .name = KBUILD_MODNAME,
> .owner = THIS_MODULE,
> + .of_match_table = of_match_ptr(c_can_of_table),
> },
> .probe = c_can_plat_probe,
> .remove = __devexit_p(c_can_plat_remove),
>
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 |
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 0/4] Add DT support to C_CAN/D_CAN controller
2012-07-25 9:19 ` AnilKumar, Chimata
@ 2012-07-25 9:26 ` Marc Kleine-Budde
2012-07-25 9:56 ` AnilKumar, Chimata
0 siblings, 1 reply; 14+ messages in thread
From: Marc Kleine-Budde @ 2012-07-25 9:26 UTC (permalink / raw)
To: AnilKumar, Chimata; +Cc: wg, linux-can, Gole, Anant, Nori, Sekhar
[-- Attachment #1: Type: text/plain, Size: 976 bytes --]
On 07/25/2012 11:19 AM, AnilKumar, Chimata wrote:
[...]
>>> First and last patches applies on top of linux-next tree, 2nd and
>>> 3rd patches applies on linux-omap tree.
>>
>> I think 1st and 4th patch (if not all) should go though the
>> linux-can-next tree. Please rebase against linux-can-next master. If you
>> need features from the v3.6 release cycle we have to wait until David
>> merges then back.
>>
>
> I will separate out into two sereis one with 1st and 4th patches and other
> with 2nd and 3rd patches. I will submit v2 based on linux-can-nest master.
I think the #ifdef CONFIG_HAVE_CLK will be removed in -rc1, maybe it's
better to wait until this is done.
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 |
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [PATCH 0/4] Add DT support to C_CAN/D_CAN controller
2012-07-25 9:26 ` Marc Kleine-Budde
@ 2012-07-25 9:56 ` AnilKumar, Chimata
0 siblings, 0 replies; 14+ messages in thread
From: AnilKumar, Chimata @ 2012-07-25 9:56 UTC (permalink / raw)
To: Marc Kleine-Budde; +Cc: wg, linux-can, Gole, Anant, Nori, Sekhar
Hi Marc,
On Wed, Jul 25, 2012 at 14:56:35, Marc Kleine-Budde wrote:
> On 07/25/2012 11:19 AM, AnilKumar, Chimata wrote:
> [...]
>
> >>> First and last patches applies on top of linux-next tree, 2nd and
> >>> 3rd patches applies on linux-omap tree.
> >>
> >> I think 1st and 4th patch (if not all) should go though the
> >> linux-can-next tree. Please rebase against linux-can-next master. If you
> >> need features from the v3.6 release cycle we have to wait until David
> >> merges then back.
> >>
> >
> > I will separate out into two sereis one with 1st and 4th patches and other
> > with 2nd and 3rd patches. I will submit v2 based on linux-can-nest master.
>
> I think the #ifdef CONFIG_HAVE_CLK will be removed in -rc1, maybe it's
> better to wait until this is done.
My patches are based on linux-next tree have this patch, which removes
CONFIG_HAVE_CLK dependency.
In that case we can use this time for reviewing the patches and once the
-rc1 is ready we can push these patches.
I will submit v2 based on your review comments.
Thanks
AnilKumar
^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [PATCH 1/4] can: c_can: Add device tree support to Bosch C_CAN/D_CAN controller
2012-07-25 9:24 ` Marc Kleine-Budde
@ 2012-07-25 10:06 ` AnilKumar, Chimata
2012-07-25 10:11 ` Marc Kleine-Budde
0 siblings, 1 reply; 14+ messages in thread
From: AnilKumar, Chimata @ 2012-07-25 10:06 UTC (permalink / raw)
To: Marc Kleine-Budde; +Cc: wg, linux-can, Gole, Anant, Nori, Sekhar
On Wed, Jul 25, 2012 at 14:54:24, Marc Kleine-Budde wrote:
> On 07/25/2012 08:23 AM, AnilKumar Ch wrote:
> > Add device tree support to C_CAN/D_CAN controller and usage details
> > are added to device tree documentation. Driver was tested on AM335x
> > EVM.
>
> AFAIK you should add devicetree-discuss@lists.ozlabs.org on Cc for DT
> related patches. More comments inline.
I will take care in v2
>
> >
> > Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
> > ---
> > .../devicetree/bindings/net/can/c_can.txt | 38 ++++++++++++++
> > drivers/net/can/c_can/c_can_platform.c | 52 ++++++++++++++------
> > 2 files changed, 75 insertions(+), 15 deletions(-)
> > create mode 100644 Documentation/devicetree/bindings/net/can/c_can.txt
> >
> > diff --git a/Documentation/devicetree/bindings/net/can/c_can.txt b/Documentation/devicetree/bindings/net/can/c_can.txt
> > new file mode 100644
> > index 0000000..78b8ae8
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/net/can/c_can.txt
> > @@ -0,0 +1,38 @@
> > +Bosch C_CAN/D_CAN controller Device Tree Bindings
> > +-------------------------------------------------
> > +
> > +Required properties:
> > +- compatible : Should be "bosch,c_can_platform" or "bosch,c_can"
> > + for C_CAN controllers and "bosch,d_can" for D_CAN
> > + controllers.
> > +- reg : physical base address and size of the C_CAN/D_CAN
> > + registers map
> > +- interrupts : property with a value describing the interrupt
> > + number
> > +- interrupt-parent : The parent interrupt controller
> > +
> > +Optional properties:
> > +- ti,hwmods : Must be "d_can<n>" or "c_can<n>", n being the
> > + instance number
> > +
> > +Note: "ti,hwmods" field is used to fetch the base address and irq
> > +resources from TI, omap hwmod data base during device registration.
> > +Future plan is to migrate hwmod data base contents into device tree
> > +blob so that, all the required data will be used from device tree dts
> > +file.
> > +
> > +Examples:
> > +
> > + d_can@481D0000 {
> > + compatible = "bosch,d_can";
> > + reg = <0x481D0000 0x1000>;
> > + interrupts = <55 0x4>;
> > + interrupt-parent = <&intc>;
> > + };
> > +
> > +(or)
> > +
> > + d_can@481D0000 {
> > + compatible = "bosch,d_can";
> > + ti,hwmods = "d_can1";
> > + };
> > diff --git a/drivers/net/can/c_can/c_can_platform.c b/drivers/net/can/c_can/c_can_platform.c
> > index 6ff7ad0..2f5b153 100644
> > --- a/drivers/net/can/c_can/c_can_platform.c
> > +++ b/drivers/net/can/c_can/c_can_platform.c
> > @@ -30,6 +30,8 @@
> > #include <linux/io.h>
> > #include <linux/platform_device.h>
> > #include <linux/clk.h>
> > +#include <linux/of.h>
> > +#include <linux/of_device.h>
> >
> > #include <linux/can/dev.h>
> >
> > @@ -65,17 +67,51 @@ static void c_can_plat_write_reg_aligned_to_32bit(struct c_can_priv *priv,
> > writew(val, priv->base + 2 * priv->regs[index]);
> > }
> >
> > +static struct platform_device_id c_can_id_table[] = {
> > + {
> > + .name = KBUILD_MODNAME,
> > + .driver_data = C_CAN_DEVTYPE,
> > + }, {
> > + .name = "c_can",
> > + .driver_data = C_CAN_DEVTYPE,
> > + }, {
> > + .name = "d_can",
> > + .driver_data = D_CAN_DEVTYPE,
> > + }, {
> > + }
> > +};
> > +
> > +static const struct of_device_id c_can_of_table[] = {
> > + { .compatible = "bosch,c_can_platform", .data = &c_can_id_table[0] },
>
> Please don't add the "legacy bosch,c_can_platform" to the device tree
I will remove this from DT bindings.
> bindings. I personally would appreciate if you introduce an enum as
> array index (BOSCH_C_CAN_PLATFORM, BOSCH_C_CAN, BOSCH_D_CAN) and
> initialize the c_can_id_table above using the array indexes, then you
> can use these indexes here too.
What about having the same enum for devtype and index like
enum c_can_dev_id {
BOSCH_C_CAN_PLATFORM,
BOSCH_C_CAN,
BOSCH_D_CAN,
};
static struct platform_device_id c_can_id_table[] = {
[BOSCH_C_CAN_PLATFORM] = {
.name = KBUILD_MODNAME,
.driver_data = BOSCH_C_CAN,
},
};
Regards
AnilKumar
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/4] can: c_can: Add device tree support to Bosch C_CAN/D_CAN controller
2012-07-25 10:06 ` AnilKumar, Chimata
@ 2012-07-25 10:11 ` Marc Kleine-Budde
0 siblings, 0 replies; 14+ messages in thread
From: Marc Kleine-Budde @ 2012-07-25 10:11 UTC (permalink / raw)
To: AnilKumar, Chimata; +Cc: wg, linux-can, Gole, Anant, Nori, Sekhar
[-- Attachment #1: Type: text/plain, Size: 2058 bytes --]
On 07/25/2012 12:06 PM, AnilKumar, Chimata wrote:
[...]
>>> --- a/drivers/net/can/c_can/c_can_platform.c
>>> +++ b/drivers/net/can/c_can/c_can_platform.c
>>> @@ -30,6 +30,8 @@
>>> #include <linux/io.h>
>>> #include <linux/platform_device.h>
>>> #include <linux/clk.h>
>>> +#include <linux/of.h>
>>> +#include <linux/of_device.h>
>>>
>>> #include <linux/can/dev.h>
>>>
>>> @@ -65,17 +67,51 @@ static void c_can_plat_write_reg_aligned_to_32bit(struct c_can_priv *priv,
>>> writew(val, priv->base + 2 * priv->regs[index]);
>>> }
>>>
>>> +static struct platform_device_id c_can_id_table[] = {
>>> + {
>>> + .name = KBUILD_MODNAME,
>>> + .driver_data = C_CAN_DEVTYPE,
>>> + }, {
>>> + .name = "c_can",
>>> + .driver_data = C_CAN_DEVTYPE,
>>> + }, {
>>> + .name = "d_can",
>>> + .driver_data = D_CAN_DEVTYPE,
>>> + }, {
>>> + }
>>> +};
>>> +
>>> +static const struct of_device_id c_can_of_table[] = {
>>> + { .compatible = "bosch,c_can_platform", .data = &c_can_id_table[0] },
>>
>> Please don't add the "legacy bosch,c_can_platform" to the device tree
>
> I will remove this from DT bindings.
>
>> bindings. I personally would appreciate if you introduce an enum as
>> array index (BOSCH_C_CAN_PLATFORM, BOSCH_C_CAN, BOSCH_D_CAN) and
>> initialize the c_can_id_table above using the array indexes, then you
>> can use these indexes here too.
>
> What about having the same enum for devtype and index like
That was 100% exactly what I was thinking of :)
> enum c_can_dev_id {
> BOSCH_C_CAN_PLATFORM,
> BOSCH_C_CAN,
> BOSCH_D_CAN,
> };
>
> static struct platform_device_id c_can_id_table[] = {
> [BOSCH_C_CAN_PLATFORM] = {
> .name = KBUILD_MODNAME,
> .driver_data = BOSCH_C_CAN,
> },
> };
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 |
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2012-07-25 10:11 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-25 6:23 [PATCH 0/4] Add DT support to C_CAN/D_CAN controller AnilKumar Ch
2012-07-25 6:23 ` [PATCH 1/4] can: c_can: Add device tree support to Bosch " AnilKumar Ch
2012-07-25 9:24 ` Marc Kleine-Budde
2012-07-25 10:06 ` AnilKumar, Chimata
2012-07-25 10:11 ` Marc Kleine-Budde
2012-07-25 6:23 ` [PATCH 2/4] arm/dts: AM33XX: Add D_CAN device tree data AnilKumar Ch
2012-07-25 6:36 ` AnilKumar, Chimata
2012-07-25 6:23 ` [PATCH 3/4] arm/dts: AM33XX: Configure pinmuxs for D_CAN1 on AM335x-EVM AnilKumar Ch
2012-07-25 6:36 ` AnilKumar, Chimata
2012-07-25 6:23 ` [PATCH 4/4] can: c_can: Add runtime PM support to Bosch C_CAN/D_CAN controller AnilKumar Ch
2012-07-25 9:04 ` [PATCH 0/4] Add DT support to " Marc Kleine-Budde
2012-07-25 9:19 ` AnilKumar, Chimata
2012-07-25 9:26 ` Marc Kleine-Budde
2012-07-25 9:56 ` AnilKumar, Chimata
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.