static const smsc_chip_t * __init smsc_ircc_probe(unsigned short cfg_base, u8 reg, const smsc_chip_t *chip, char *type) 
static const struct smsc_chip * __init smsc_ircc_probe(unsigned short cfg_base, u8 reg, const struct smsc_chip *chip, char *type) 
static const smsc_chip_t * __init smsc_ircc_probe(unsigned short cfg_base, u8 reg, const smsc_chip_t *chip, char *type){	u8 devid, xdevid, rev;	IRDA_DEBUG(1, "%s\n", __FUNCTION__);	/* Leave configuration */	outb(SMSCSIO_CFGEXITKEY, cfg_base);	if (inb(cfg_base) == SMSCSIO_CFGEXITKEY)	/* not a smc superio chip */		return NULL;	outb(reg, cfg_base);	xdevid = inb(cfg_base + 1);	/* Enter configuration */	outb(SMSCSIO_CFGACCESSKEY, cfg_base);	#if 0	if (smsc_access(cfg_base,0x55))	/* send second key and check */		return NULL;	#endif	/* probe device ID */	if (smsc_access(cfg_base, reg))		return NULL;	devid = inb(cfg_base + 1);	if (devid == 0 || devid == 0xff)	/* typical values for unused port */		return NULL;	/* probe revision ID */	if (smsc_access(cfg_base, reg + 1))		return NULL;	rev = inb(cfg_base + 1);	if (rev >= 128)			/* i think this will make no sense */		return NULL;	if (devid == xdevid)		/* protection against false positives */		return NULL;	/* Check for expected device ID; are there others? */	while (chip->devid != devid) {		chip++;		if (chip->name == NULL)			return NULL;	}	IRDA_MESSAGE("found SMC SuperIO Chip (devid=0x%02x rev=%02X base=0x%04x): %s%s\n",		     devid, rev, cfg_base, type, chip->name);	if (chip->rev > rev) {		IRDA_MESSAGE("Revision higher than expected\n");		return NULL;	}	if (chip->flags & NoIRDA)		IRDA_MESSAGE("chipset does not support IRDA\n");	return chip;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/b6158d23a60ac32fc08316703266b6ab14d9dc00/smsc-ircc2.c/clean/drivers/net/irda/smsc-ircc2.c