diff options
Diffstat (limited to 'drivers/net/can/mscan')
-rw-r--r-- | drivers/net/can/mscan/Kconfig | 2 | ||||
-rw-r--r-- | drivers/net/can/mscan/mpc5xxx_can.c | 26 | ||||
-rw-r--r-- | drivers/net/can/mscan/mscan.c | 4 |
3 files changed, 19 insertions, 13 deletions
diff --git a/drivers/net/can/mscan/Kconfig b/drivers/net/can/mscan/Kconfig index 27d1d398e25e..d38706958af6 100644 --- a/drivers/net/can/mscan/Kconfig +++ b/drivers/net/can/mscan/Kconfig | |||
@@ -1,5 +1,5 @@ | |||
1 | config CAN_MSCAN | 1 | config CAN_MSCAN |
2 | depends on CAN_DEV && (PPC || M68K || M68KNOMMU) | 2 | depends on CAN_DEV && (PPC || M68K) |
3 | tristate "Support for Freescale MSCAN based chips" | 3 | tristate "Support for Freescale MSCAN based chips" |
4 | ---help--- | 4 | ---help--- |
5 | The Motorola Scalable Controller Area Network (MSCAN) definition | 5 | The Motorola Scalable Controller Area Network (MSCAN) definition |
diff --git a/drivers/net/can/mscan/mpc5xxx_can.c b/drivers/net/can/mscan/mpc5xxx_can.c index b1bdc909090f..5fedc3375562 100644 --- a/drivers/net/can/mscan/mpc5xxx_can.c +++ b/drivers/net/can/mscan/mpc5xxx_can.c | |||
@@ -143,12 +143,12 @@ static u32 __devinit mpc512x_can_get_clock(struct platform_device *ofdev, | |||
143 | np_clock = of_find_matching_node(NULL, mpc512x_clock_ids); | 143 | np_clock = of_find_matching_node(NULL, mpc512x_clock_ids); |
144 | if (!np_clock) { | 144 | if (!np_clock) { |
145 | dev_err(&ofdev->dev, "couldn't find clock node\n"); | 145 | dev_err(&ofdev->dev, "couldn't find clock node\n"); |
146 | return -ENODEV; | 146 | return 0; |
147 | } | 147 | } |
148 | clockctl = of_iomap(np_clock, 0); | 148 | clockctl = of_iomap(np_clock, 0); |
149 | if (!clockctl) { | 149 | if (!clockctl) { |
150 | dev_err(&ofdev->dev, "couldn't map clock registers\n"); | 150 | dev_err(&ofdev->dev, "couldn't map clock registers\n"); |
151 | return 0; | 151 | goto exit_put; |
152 | } | 152 | } |
153 | 153 | ||
154 | /* Determine the MSCAN device index from the physical address */ | 154 | /* Determine the MSCAN device index from the physical address */ |
@@ -233,9 +233,9 @@ static u32 __devinit mpc512x_can_get_clock(struct platform_device *ofdev, | |||
233 | clocksrc == 1 ? "ref_clk" : "sys_clk", clockdiv); | 233 | clocksrc == 1 ? "ref_clk" : "sys_clk", clockdiv); |
234 | 234 | ||
235 | exit_unmap: | 235 | exit_unmap: |
236 | of_node_put(np_clock); | ||
237 | iounmap(clockctl); | 236 | iounmap(clockctl); |
238 | 237 | exit_put: | |
238 | of_node_put(np_clock); | ||
239 | return freq; | 239 | return freq; |
240 | } | 240 | } |
241 | #else /* !CONFIG_PPC_MPC512x */ | 241 | #else /* !CONFIG_PPC_MPC512x */ |
@@ -247,10 +247,11 @@ static u32 __devinit mpc512x_can_get_clock(struct platform_device *ofdev, | |||
247 | } | 247 | } |
248 | #endif /* CONFIG_PPC_MPC512x */ | 248 | #endif /* CONFIG_PPC_MPC512x */ |
249 | 249 | ||
250 | static int __devinit mpc5xxx_can_probe(struct platform_device *ofdev, | 250 | static struct of_device_id mpc5xxx_can_table[]; |
251 | const struct of_device_id *id) | 251 | static int __devinit mpc5xxx_can_probe(struct platform_device *ofdev) |
252 | { | 252 | { |
253 | struct mpc5xxx_can_data *data = (struct mpc5xxx_can_data *)id->data; | 253 | const struct of_device_id *match; |
254 | struct mpc5xxx_can_data *data; | ||
254 | struct device_node *np = ofdev->dev.of_node; | 255 | struct device_node *np = ofdev->dev.of_node; |
255 | struct net_device *dev; | 256 | struct net_device *dev; |
256 | struct mscan_priv *priv; | 257 | struct mscan_priv *priv; |
@@ -259,6 +260,11 @@ static int __devinit mpc5xxx_can_probe(struct platform_device *ofdev, | |||
259 | int irq, mscan_clksrc = 0; | 260 | int irq, mscan_clksrc = 0; |
260 | int err = -ENOMEM; | 261 | int err = -ENOMEM; |
261 | 262 | ||
263 | match = of_match_device(mpc5xxx_can_table, &ofdev->dev); | ||
264 | if (!match) | ||
265 | return -EINVAL; | ||
266 | data = match->data; | ||
267 | |||
262 | base = of_iomap(np, 0); | 268 | base = of_iomap(np, 0); |
263 | if (!base) { | 269 | if (!base) { |
264 | dev_err(&ofdev->dev, "couldn't ioremap\n"); | 270 | dev_err(&ofdev->dev, "couldn't ioremap\n"); |
@@ -391,7 +397,7 @@ static struct of_device_id __devinitdata mpc5xxx_can_table[] = { | |||
391 | {}, | 397 | {}, |
392 | }; | 398 | }; |
393 | 399 | ||
394 | static struct of_platform_driver mpc5xxx_can_driver = { | 400 | static struct platform_driver mpc5xxx_can_driver = { |
395 | .driver = { | 401 | .driver = { |
396 | .name = "mpc5xxx_can", | 402 | .name = "mpc5xxx_can", |
397 | .owner = THIS_MODULE, | 403 | .owner = THIS_MODULE, |
@@ -407,13 +413,13 @@ static struct of_platform_driver mpc5xxx_can_driver = { | |||
407 | 413 | ||
408 | static int __init mpc5xxx_can_init(void) | 414 | static int __init mpc5xxx_can_init(void) |
409 | { | 415 | { |
410 | return of_register_platform_driver(&mpc5xxx_can_driver); | 416 | return platform_driver_register(&mpc5xxx_can_driver); |
411 | } | 417 | } |
412 | module_init(mpc5xxx_can_init); | 418 | module_init(mpc5xxx_can_init); |
413 | 419 | ||
414 | static void __exit mpc5xxx_can_exit(void) | 420 | static void __exit mpc5xxx_can_exit(void) |
415 | { | 421 | { |
416 | return of_unregister_platform_driver(&mpc5xxx_can_driver); | 422 | platform_driver_unregister(&mpc5xxx_can_driver); |
417 | }; | 423 | }; |
418 | module_exit(mpc5xxx_can_exit); | 424 | module_exit(mpc5xxx_can_exit); |
419 | 425 | ||
diff --git a/drivers/net/can/mscan/mscan.c b/drivers/net/can/mscan/mscan.c index 64c378cd0c34..92feac68b66e 100644 --- a/drivers/net/can/mscan/mscan.c +++ b/drivers/net/can/mscan/mscan.c | |||
@@ -182,7 +182,7 @@ static int mscan_restart(struct net_device *dev) | |||
182 | 182 | ||
183 | priv->can.state = CAN_STATE_ERROR_ACTIVE; | 183 | priv->can.state = CAN_STATE_ERROR_ACTIVE; |
184 | WARN(!(in_8(®s->canmisc) & MSCAN_BOHOLD), | 184 | WARN(!(in_8(®s->canmisc) & MSCAN_BOHOLD), |
185 | "bus-off state expected"); | 185 | "bus-off state expected\n"); |
186 | out_8(®s->canmisc, MSCAN_BOHOLD); | 186 | out_8(®s->canmisc, MSCAN_BOHOLD); |
187 | /* Re-enable receive interrupts. */ | 187 | /* Re-enable receive interrupts. */ |
188 | out_8(®s->canrier, MSCAN_RX_INTS_ENABLE); | 188 | out_8(®s->canrier, MSCAN_RX_INTS_ENABLE); |
@@ -246,7 +246,7 @@ static netdev_tx_t mscan_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
246 | out_be16(®s->tx.idr3_2, can_id); | 246 | out_be16(®s->tx.idr3_2, can_id); |
247 | 247 | ||
248 | can_id >>= 16; | 248 | can_id >>= 16; |
249 | /* EFF_FLAGS are inbetween the IDs :( */ | 249 | /* EFF_FLAGS are between the IDs :( */ |
250 | can_id = (can_id & 0x7) | ((can_id << 2) & 0xffe0) | 250 | can_id = (can_id & 0x7) | ((can_id << 2) & 0xffe0) |
251 | | MSCAN_EFF_FLAGS; | 251 | | MSCAN_EFF_FLAGS; |
252 | } else { | 252 | } else { |