I borrowed this code from LinCAN project. It helped me a lot by investigating 
the problem with memory access. I don't know if it is worth committing it to 
the repository, but it was nice to use it.

Yegor

diff --git a/drivers/net/can/sja1000/sja1000.c 
b/drivers/net/can/sja1000/sja1000.c
index 145b1a7..86ef501 100644
--- a/drivers/net/can/sja1000/sja1000.c
+++ b/drivers/net/can/sja1000/sja1000.c
@@ -229,6 +229,8 @@ static int sja1000_get_berr_counter(const struct net_device 
*dev,
 static void chipset_init(struct net_device *dev)
 {
        struct sja1000_priv *priv = netdev_priv(dev);
+       int i;
+       unsigned char n, r;
 
        /* set clock divider and output control register */
        priv->write_reg(priv, REG_CDR, priv->cdr | CDR_PELICAN);
@@ -245,6 +247,18 @@ static void chipset_init(struct net_device *dev)
        priv->write_reg(priv, REG_ACCM3, 0xFF);
 
        priv->write_reg(priv, REG_OCR, priv->ocr | OCR_MODE_NORMAL);
+
+       /* Simple check for chip presence */
+       for (i=0, n=0x5a; i<8; i++, n+=0xf) {
+               priv->write_reg(priv, REG_ACCC0 + i, n);
+       }
+       for (i=0, n=0x5a; i<8; i++, n+=0xf) {
+               r = n ^ priv->read_reg(priv, REG_ACCC0 + i);
+               if (r) {
+                       printk("sja1000p_chip_config: chip connection broken,"
+                               " readback differ 0x%02x\n", r);
+               }
+       }
 }
 
 /*

_______________________________________________
Socketcan-core mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/socketcan-core

Reply via email to