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
