All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.