diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2014-04-11 04:13:18 -0400 |
|---|---|---|
| committer | Marc Kleine-Budde <mkl@pengutronix.de> | 2014-04-24 16:09:00 -0400 |
| commit | 4fb6dccd13b27651998f773755e2a1db461c62f1 (patch) | |
| tree | 6408ef403a4c5538af4ee9fa31b3f74758b5e3c5 | |
| parent | 2d5f4f85695623fab5fac7db19fd0290ef54eca8 (diff) | |
can: c_can: Cleanup c_can_read_msg_object()
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Alexander Stein <alexander.stein@systec-electronic.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
| -rw-r--r-- | drivers/net/can/c_can/c_can.c | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c index 562faef29896..d0daef8d67e1 100644 --- a/drivers/net/can/c_can/c_can.c +++ b/drivers/net/can/c_can/c_can.c | |||
| @@ -380,15 +380,13 @@ static int c_can_handle_lost_msg_obj(struct net_device *dev, | |||
| 380 | return 1; | 380 | return 1; |
| 381 | } | 381 | } |
| 382 | 382 | ||
| 383 | static int c_can_read_msg_object(struct net_device *dev, int iface, int ctrl) | 383 | static int c_can_read_msg_object(struct net_device *dev, int iface, u32 ctrl) |
| 384 | { | 384 | { |
| 385 | u16 flags, data; | ||
| 386 | int i; | ||
| 387 | unsigned int val; | ||
| 388 | struct c_can_priv *priv = netdev_priv(dev); | ||
| 389 | struct net_device_stats *stats = &dev->stats; | 385 | struct net_device_stats *stats = &dev->stats; |
| 390 | struct sk_buff *skb; | 386 | struct c_can_priv *priv = netdev_priv(dev); |
| 391 | struct can_frame *frame; | 387 | struct can_frame *frame; |
| 388 | struct sk_buff *skb; | ||
| 389 | u32 arb, data; | ||
| 392 | 390 | ||
| 393 | skb = alloc_can_skb(dev, &frame); | 391 | skb = alloc_can_skb(dev, &frame); |
| 394 | if (!skb) { | 392 | if (!skb) { |
| @@ -398,21 +396,21 @@ static int c_can_read_msg_object(struct net_device *dev, int iface, int ctrl) | |||
| 398 | 396 | ||
| 399 | frame->can_dlc = get_can_dlc(ctrl & 0x0F); | 397 | frame->can_dlc = get_can_dlc(ctrl & 0x0F); |
| 400 | 398 | ||
| 401 | flags = priv->read_reg(priv, C_CAN_IFACE(ARB2_REG, iface)); | 399 | arb = priv->read_reg(priv, C_CAN_IFACE(ARB1_REG, iface)); |
| 402 | val = priv->read_reg(priv, C_CAN_IFACE(ARB1_REG, iface)) | | 400 | arb |= priv->read_reg(priv, C_CAN_IFACE(ARB2_REG, iface)) << 16; |
| 403 | (flags << 16); | ||
| 404 | 401 | ||
| 405 | if (flags & IF_ARB_MSGXTD) | 402 | if (arb & (IF_ARB_MSGXTD << 16)) |
| 406 | frame->can_id = (val & CAN_EFF_MASK) | CAN_EFF_FLAG; | 403 | frame->can_id = (arb & CAN_EFF_MASK) | CAN_EFF_FLAG; |
| 407 | else | 404 | else |
| 408 | frame->can_id = (val >> 18) & CAN_SFF_MASK; | 405 | frame->can_id = (arb >> 18) & CAN_SFF_MASK; |
| 409 | 406 | ||
| 410 | if (flags & IF_ARB_TRANSMIT) | 407 | if (arb & (IF_ARB_TRANSMIT << 16)) { |
| 411 | frame->can_id |= CAN_RTR_FLAG; | 408 | frame->can_id |= CAN_RTR_FLAG; |
| 412 | else { | 409 | } else { |
| 413 | for (i = 0; i < frame->can_dlc; i += 2) { | 410 | int i, dreg = C_CAN_IFACE(DATA1_REG, iface); |
| 414 | data = priv->read_reg(priv, | 411 | |
| 415 | C_CAN_IFACE(DATA1_REG, iface) + i / 2); | 412 | for (i = 0; i < frame->can_dlc; i += 2, dreg ++) { |
| 413 | data = priv->read_reg(priv, dreg); | ||
| 416 | frame->data[i] = data; | 414 | frame->data[i] = data; |
| 417 | frame->data[i + 1] = data >> 8; | 415 | frame->data[i + 1] = data >> 8; |
| 418 | } | 416 | } |
