Hi Andre,

On 10/18/2010 06:05 PM, Andre B. Oliveira wrote:
> Slightly more reliable, yet still pretty much innocuous (read-only),
> sja1000_probe_chip function.
> 
> Signed-off-by: Andre B. Oliveira <[email protected]>
> ---
>  drivers/net/can/sja1000/sja1000.c |   15 ++++++++++++---
>  1 files changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/can/sja1000/sja1000.c 
> b/drivers/net/can/sja1000/sja1000.c
> index 0a8de01..3ae107f 100644
> --- a/drivers/net/can/sja1000/sja1000.c
> +++ b/drivers/net/can/sja1000/sja1000.c
> @@ -100,12 +100,21 @@ static void sja1000_write_cmdreg(struct sja1000_priv 
> *priv, u8 val)
>  static int sja1000_probe_chip(struct net_device *dev)
>  {
>       struct sja1000_priv *priv = netdev_priv(dev);
> +     u8 cdr, cmr;
>  
> -     if (priv->reg_base && (priv->read_reg(priv, 0) == 0xFF)) {
> -             printk(KERN_INFO "%s: probing @0x%lX failed\n",
> -                    DRV_NAME, dev->base_addr);
> +     cdr = priv->read_reg(priv, REG_CDR);
> +     if (cdr & 0x10)                         /* datasheet section 6.5.4 */
>               return 0;
> +
> +     cmr = priv->read_reg(priv, REG_CMR);
> +     if (cdr & CDR_PELICAN) {
> +             if (cmr != 0x00)                /* datasheet section 6.4.4 */
> +                     return 0;
> +     } else {
> +             if (cmr != 0xff)                /* datasheet section 6.3.4 */
> +                     return 0;
>       }
> +
>       return -1;
>  }

The plx_pci_check_sja1000() of the plx_pci driver is known to work. Why
not just using that one, or something similar, at least:

http://lxr.linux.no/#linux+v2.6.35.7/drivers/net/can/sja1000/plx_pci.c#L302

But these functions require the chip to be in the reset state. Not sure
if that is the case on any card. Maybe it's safer to provide a common
sja1000_probe_reset_chip(), which could be used directly by the drivers.

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

Reply via email to