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 --]
next prev parent 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).