linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marc Kleine-Budde <mkl@pengutronix.de>
To: AnilKumar Ch <anilkumar@ti.com>
Cc: wg@grandegger.com, linux-can@vger.kernel.org, anantgole@ti.com,
	nsekhar@ti.com
Subject: Re: [PATCH 1/4] can: c_can: Add device tree support to Bosch C_CAN/D_CAN controller
Date: Wed, 25 Jul 2012 11:24:24 +0200	[thread overview]
Message-ID: <500FBB48.60005@pengutronix.de> (raw)
In-Reply-To: <1343197417-27481-2-git-send-email-anilkumar@ti.com>

[-- 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 --]

  reply	other threads:[~2012-07-25  9:24 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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

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=500FBB48.60005@pengutronix.de \
    --to=mkl@pengutronix.de \
    --cc=anantgole@ti.com \
    --cc=anilkumar@ti.com \
    --cc=linux-can@vger.kernel.org \
    --cc=nsekhar@ti.com \
    --cc=wg@grandegger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).