On Thu, Oct 15, 2009 at 06:25:35PM +0200, Oliver Hartkopp wrote:
> > On Wed, Oct 14, 2009 at 05:10:41PM +0200, Kurt Van Dijck wrote:
[...]
> I'm currently on holiday and i'm back on work end of next week.
highest priority, no doubt.
just read this when you're back
> 
> Maybe i can play with it on my mpc5200 platform then where a SJA1041 and
> SJA1054 are attached ...
TJA1041 & TJA1054?
I had forgotten about the tja1054.
just to exercise the concept, I prepared a patch you can apply after
all others, so you have a seperate tja1054 driver as well 
(slightly modified tja1041 driver).
> 
> Thanks,
> Oliver
> 

Signed-off-by: Kurt Van Dijck <[email protected]>
---
 kernel/2.6/drivers/net/can/Kconfig               |    2 
 kernel/2.6/drivers/net/can/transceiver/tja1041.c |   54 +++++++++++++++++++++--
 2 files changed, 52 insertions(+), 4 deletions(-)

Index: trunk/kernel/2.6/drivers/net/can/Kconfig
===================================================================
--- trunk.orig/kernel/2.6/drivers/net/can/Kconfig       2009-10-16 
10:42:21.000000000 +0200
+++ trunk/kernel/2.6/drivers/net/can/Kconfig    2009-10-16 10:43:08.000000000 
+0200
@@ -53,7 +53,7 @@
          a platform device
 
 config CANTR_TJA1041
-       tristate "NXP TJA1041"
+       tristate "NXP TJA1041/TJA1054"
        depends on CANTR_CORE
        default Y
        ---help---
Index: trunk/kernel/2.6/drivers/net/can/transceiver/tja1041.c
===================================================================
--- trunk.orig/kernel/2.6/drivers/net/can/transceiver/tja1041.c 2009-10-16 
10:42:31.000000000 +0200
+++ trunk/kernel/2.6/drivers/net/can/transceiver/tja1041.c      2009-10-16 
11:04:44.000000000 +0200
@@ -19,11 +19,15 @@
 #include <socketcan/can/transceiver.h>
 #include <socketcan/can/platform/tja1041.h>
 
+struct tja_data {
+       unsigned long max_bitrate;
+};
 /*
  * dynamic can_transceiver stuff
  */
 struct tja1041 {
        struct can_transceiver cantr;
+       const struct tja_data *ddata;
        int stb;
        int en;
        int err;
@@ -135,7 +139,9 @@
 
 static int tja1041_get_max_bitrate(struct can_transceiver *cantr)
 {
-       return 1000000;
+       struct tja1041 *tja = to_tja1041(cantr);
+
+       return tja->ddata->max_bitrate;
 }
 
 static int tja1041_get_state(struct can_transceiver *cantr)
@@ -196,7 +202,8 @@
        return ret;
 }
 
-static int tja1041_probe(struct platform_device *pdev)
+static int tja_probe(struct platform_device *pdev,
+               const struct tja_data *ddata)
 {
        struct tja1041 *tja;
        const struct tja1041_platform_data *pdata = pdev->dev.platform_data;
@@ -217,6 +224,7 @@
        tja->err = pdata->err;
        tja->err_irq = -1;
        tja->gpio_valid = 0;
+       tja->ddata = ddata;
 
        ret = can_transceiver_register(&tja->cantr);
        if (ret < 0)
@@ -276,6 +284,14 @@
 }
 
 
+static const struct tja_data tja1041_ddata = {
+       .max_bitrate = 1000000,
+};
+static int tja1041_probe(struct platform_device *pdev)
+{
+       return tja_probe(pdev, &tja1041_ddata);
+}
+
 static struct platform_driver tja1041_driver = {
        .driver.name = "tja1041",
        .probe = tja1041_probe,
@@ -284,13 +300,45 @@
 };
 MODULE_ALIAS("platform:tja1041");
 
+/*
+ * TJA1054 support
+ */
+static const struct tja_data tja1054_ddata = {
+       .max_bitrate = 125000,
+};
+static int tja1054_probe(struct platform_device *pdev)
+{
+       return tja_probe(pdev, &tja1054_ddata);
+}
+static struct platform_driver tja1054_driver = {
+       .driver.name = "tja1054",
+       .probe = tja1054_probe,
+       .remove = tja1041_remove,
+       .shutdown = tja1041_shutdown,
+};
+MODULE_ALIAS("platform:tja1054");
+
 static int __init tja1041_start_mod(void)
 {
-       return platform_driver_register(&tja1041_driver);
+       int ret;
+       ret = platform_driver_register(&tja1041_driver);
+       if (ret)
+               goto fail_tja1041;
+       ret = platform_driver_register(&tja1054_driver);
+       if (ret)
+               goto fail_tja1054;
+       return 0;
+
+       platform_driver_unregister(&tja1054_driver);
+fail_tja1054:
+       platform_driver_unregister(&tja1041_driver);
+fail_tja1041:
+       return ret;
 }
 
 static void __exit tja1041_stop_mod(void)
 {
+       platform_driver_unregister(&tja1054_driver);
        platform_driver_unregister(&tja1041_driver);
 }
 
_______________________________________________
Socketcan-core mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/socketcan-core

Reply via email to