Commit e167359b authored by David S. Miller's avatar David S. Miller

Merge tag 'linux-can-next-for-4.1-20150323' of...

Merge tag 'linux-can-next-for-4.1-20150323' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next

Marc Kleine-Budde says:

====================
pull-request: can-next 2015-03-23

this is a pull request of 6 patches for net-next/master.

A patch by Florian Westphal, converts the skb->destructor to use
sock_efree() instead of own destructor. Ahmed S. Darwish's patch
converts the kvaser_usb driver to use unregister_candev(). A patch by
me removes a return from a void function in the m_can driver. Yegor
Yefremov contributes a patch for combined rx/tx LED trigger support. A
sparse warning in the esd_usb2 driver was fixes by Thomas Körper. Ben
Dooks converts the at91_can driver to use endian agnostic IO accessors.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 40451fd0 af9bfbda
...@@ -291,13 +291,13 @@ static inline unsigned int get_tx_echo_mb(const struct at91_priv *priv) ...@@ -291,13 +291,13 @@ static inline unsigned int get_tx_echo_mb(const struct at91_priv *priv)
static inline u32 at91_read(const struct at91_priv *priv, enum at91_reg reg) static inline u32 at91_read(const struct at91_priv *priv, enum at91_reg reg)
{ {
return __raw_readl(priv->reg_base + reg); return readl_relaxed(priv->reg_base + reg);
} }
static inline void at91_write(const struct at91_priv *priv, enum at91_reg reg, static inline void at91_write(const struct at91_priv *priv, enum at91_reg reg,
u32 value) u32 value)
{ {
__raw_writel(value, priv->reg_base + reg); writel_relaxed(value, priv->reg_base + reg);
} }
static inline void set_mb_mode_prio(const struct at91_priv *priv, static inline void set_mb_mode_prio(const struct at91_priv *priv,
......
...@@ -30,20 +30,28 @@ void can_led_event(struct net_device *netdev, enum can_led_event event) ...@@ -30,20 +30,28 @@ void can_led_event(struct net_device *netdev, enum can_led_event event)
case CAN_LED_EVENT_OPEN: case CAN_LED_EVENT_OPEN:
led_trigger_event(priv->tx_led_trig, LED_FULL); led_trigger_event(priv->tx_led_trig, LED_FULL);
led_trigger_event(priv->rx_led_trig, LED_FULL); led_trigger_event(priv->rx_led_trig, LED_FULL);
led_trigger_event(priv->rxtx_led_trig, LED_FULL);
break; break;
case CAN_LED_EVENT_STOP: case CAN_LED_EVENT_STOP:
led_trigger_event(priv->tx_led_trig, LED_OFF); led_trigger_event(priv->tx_led_trig, LED_OFF);
led_trigger_event(priv->rx_led_trig, LED_OFF); led_trigger_event(priv->rx_led_trig, LED_OFF);
led_trigger_event(priv->rxtx_led_trig, LED_OFF);
break; break;
case CAN_LED_EVENT_TX: case CAN_LED_EVENT_TX:
if (led_delay) if (led_delay) {
led_trigger_blink_oneshot(priv->tx_led_trig, led_trigger_blink_oneshot(priv->tx_led_trig,
&led_delay, &led_delay, 1); &led_delay, &led_delay, 1);
led_trigger_blink_oneshot(priv->rxtx_led_trig,
&led_delay, &led_delay, 1);
}
break; break;
case CAN_LED_EVENT_RX: case CAN_LED_EVENT_RX:
if (led_delay) if (led_delay) {
led_trigger_blink_oneshot(priv->rx_led_trig, led_trigger_blink_oneshot(priv->rx_led_trig,
&led_delay, &led_delay, 1); &led_delay, &led_delay, 1);
led_trigger_blink_oneshot(priv->rxtx_led_trig,
&led_delay, &led_delay, 1);
}
break; break;
} }
} }
...@@ -55,6 +63,7 @@ static void can_led_release(struct device *gendev, void *res) ...@@ -55,6 +63,7 @@ static void can_led_release(struct device *gendev, void *res)
led_trigger_unregister_simple(priv->tx_led_trig); led_trigger_unregister_simple(priv->tx_led_trig);
led_trigger_unregister_simple(priv->rx_led_trig); led_trigger_unregister_simple(priv->rx_led_trig);
led_trigger_unregister_simple(priv->rxtx_led_trig);
} }
/* Register CAN LED triggers for a CAN device /* Register CAN LED triggers for a CAN device
...@@ -76,11 +85,15 @@ void devm_can_led_init(struct net_device *netdev) ...@@ -76,11 +85,15 @@ void devm_can_led_init(struct net_device *netdev)
"%s-tx", netdev->name); "%s-tx", netdev->name);
snprintf(priv->rx_led_trig_name, sizeof(priv->rx_led_trig_name), snprintf(priv->rx_led_trig_name, sizeof(priv->rx_led_trig_name),
"%s-rx", netdev->name); "%s-rx", netdev->name);
snprintf(priv->rxtx_led_trig_name, sizeof(priv->rxtx_led_trig_name),
"%s-rxtx", netdev->name);
led_trigger_register_simple(priv->tx_led_trig_name, led_trigger_register_simple(priv->tx_led_trig_name,
&priv->tx_led_trig); &priv->tx_led_trig);
led_trigger_register_simple(priv->rx_led_trig_name, led_trigger_register_simple(priv->rx_led_trig_name,
&priv->rx_led_trig); &priv->rx_led_trig);
led_trigger_register_simple(priv->rxtx_led_trig_name,
&priv->rxtx_led_trig);
devres_add(&netdev->dev, res); devres_add(&netdev->dev, res);
} }
...@@ -97,7 +110,7 @@ static int can_led_notifier(struct notifier_block *nb, unsigned long msg, ...@@ -97,7 +110,7 @@ static int can_led_notifier(struct notifier_block *nb, unsigned long msg,
if (!priv) if (!priv)
return NOTIFY_DONE; return NOTIFY_DONE;
if (!priv->tx_led_trig || !priv->rx_led_trig) if (!priv->tx_led_trig || !priv->rx_led_trig || !priv->rxtx_led_trig)
return NOTIFY_DONE; return NOTIFY_DONE;
if (msg == NETDEV_CHANGENAME) { if (msg == NETDEV_CHANGENAME) {
...@@ -106,6 +119,9 @@ static int can_led_notifier(struct notifier_block *nb, unsigned long msg, ...@@ -106,6 +119,9 @@ static int can_led_notifier(struct notifier_block *nb, unsigned long msg,
snprintf(name, sizeof(name), "%s-rx", netdev->name); snprintf(name, sizeof(name), "%s-rx", netdev->name);
led_trigger_rename_static(name, priv->rx_led_trig); led_trigger_rename_static(name, priv->rx_led_trig);
snprintf(name, sizeof(name), "%s-rxtx", netdev->name);
led_trigger_rename_static(name, priv->rxtx_led_trig);
} }
return NOTIFY_DONE; return NOTIFY_DONE;
......
...@@ -312,8 +312,8 @@ static inline u32 m_can_fifo_read(const struct m_can_priv *priv, ...@@ -312,8 +312,8 @@ static inline u32 m_can_fifo_read(const struct m_can_priv *priv,
static inline void m_can_fifo_write(const struct m_can_priv *priv, static inline void m_can_fifo_write(const struct m_can_priv *priv,
u32 fpi, unsigned int offset, u32 val) u32 fpi, unsigned int offset, u32 val)
{ {
return writel(val, priv->mram_base + priv->mcfg[MRAM_TXB].off + writel(val, priv->mram_base + priv->mcfg[MRAM_TXB].off +
fpi * TXB_ELEMENT_SIZE + offset); fpi * TXB_ELEMENT_SIZE + offset);
} }
static inline void m_can_config_endisable(const struct m_can_priv *priv, static inline void m_can_config_endisable(const struct m_can_priv *priv,
......
...@@ -139,7 +139,7 @@ struct tx_msg { ...@@ -139,7 +139,7 @@ struct tx_msg {
u8 cmd; u8 cmd;
u8 net; u8 net;
u8 dlc; u8 dlc;
__le32 hnd; u32 hnd; /* opaque handle, not used by device */
__le32 id; /* upper 3 bits contain flags */ __le32 id; /* upper 3 bits contain flags */
u8 data[8]; u8 data[8];
}; };
...@@ -149,7 +149,7 @@ struct tx_done_msg { ...@@ -149,7 +149,7 @@ struct tx_done_msg {
u8 cmd; u8 cmd;
u8 net; u8 net;
u8 status; u8 status;
__le32 hnd; u32 hnd; /* opaque handle, not used by device */
__le32 ts; __le32 ts;
}; };
......
...@@ -1856,7 +1856,7 @@ static void kvaser_usb_remove_interfaces(struct kvaser_usb *dev) ...@@ -1856,7 +1856,7 @@ static void kvaser_usb_remove_interfaces(struct kvaser_usb *dev)
if (!dev->nets[i]) if (!dev->nets[i])
continue; continue;
unregister_netdev(dev->nets[i]->netdev); unregister_candev(dev->nets[i]->netdev);
} }
kvaser_usb_unlink_all_urbs(dev); kvaser_usb_unlink_all_urbs(dev);
......
...@@ -61,6 +61,8 @@ struct can_priv { ...@@ -61,6 +61,8 @@ struct can_priv {
char tx_led_trig_name[CAN_LED_NAME_SZ]; char tx_led_trig_name[CAN_LED_NAME_SZ];
struct led_trigger *rx_led_trig; struct led_trigger *rx_led_trig;
char rx_led_trig_name[CAN_LED_NAME_SZ]; char rx_led_trig_name[CAN_LED_NAME_SZ];
struct led_trigger *rxtx_led_trig;
char rxtx_led_trig_name[CAN_LED_NAME_SZ];
#endif #endif
}; };
......
...@@ -21,8 +21,10 @@ enum can_led_event { ...@@ -21,8 +21,10 @@ enum can_led_event {
#ifdef CONFIG_CAN_LEDS #ifdef CONFIG_CAN_LEDS
/* keep space for interface name + "-tx"/"-rx" suffix and null terminator */ /* keep space for interface name + "-tx"/"-rx"/"-rxtx"
#define CAN_LED_NAME_SZ (IFNAMSIZ + 4) * suffix and null terminator
*/
#define CAN_LED_NAME_SZ (IFNAMSIZ + 6)
void can_led_event(struct net_device *netdev, enum can_led_event event); void can_led_event(struct net_device *netdev, enum can_led_event event);
void devm_can_led_init(struct net_device *netdev); void devm_can_led_init(struct net_device *netdev);
......
...@@ -44,16 +44,11 @@ static inline void can_skb_reserve(struct sk_buff *skb) ...@@ -44,16 +44,11 @@ static inline void can_skb_reserve(struct sk_buff *skb)
skb_reserve(skb, sizeof(struct can_skb_priv)); skb_reserve(skb, sizeof(struct can_skb_priv));
} }
static inline void can_skb_destructor(struct sk_buff *skb)
{
sock_put(skb->sk);
}
static inline void can_skb_set_owner(struct sk_buff *skb, struct sock *sk) static inline void can_skb_set_owner(struct sk_buff *skb, struct sock *sk)
{ {
if (sk) { if (sk) {
sock_hold(sk); sock_hold(sk);
skb->destructor = can_skb_destructor; skb->destructor = sock_efree;
skb->sk = sk; skb->sk = sk;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment