forked from mirrors/linux
		
	i2c: i801: Check if interrupts are disabled
There is a control bit in the PCI configuration space which disables interrupts. If this bit is set, the driver should not try to make use of interrupts, it won't receive any. Signed-off-by: Jean Delvare <jdelvare@suse.de> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
		
							parent
							
								
									ae94471717
								
							
						
					
					
						commit
						aeb8a3d16a
					
				
					 1 changed files with 20 additions and 0 deletions
				
			
		|  | @ -109,12 +109,16 @@ | |||
| 
 | ||||
| /* PCI Address Constants */ | ||||
| #define SMBBAR		4 | ||||
| #define SMBPCICTL	0x004 | ||||
| #define SMBPCISTS	0x006 | ||||
| #define SMBHSTCFG	0x040 | ||||
| 
 | ||||
| /* Host status bits for SMBPCISTS */ | ||||
| #define SMBPCISTS_INTS		0x08 | ||||
| 
 | ||||
| /* Control bits for SMBPCICTL */ | ||||
| #define SMBPCICTL_INTDIS	0x0400 | ||||
| 
 | ||||
| /* Host configuration bits for SMBHSTCFG */ | ||||
| #define SMBHSTCFG_HST_EN	1 | ||||
| #define SMBHSTCFG_SMB_SMI_EN	2 | ||||
|  | @ -1231,6 +1235,22 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id) | |||
| 	/* Default timeout in interrupt mode: 200 ms */ | ||||
| 	priv->adapter.timeout = HZ / 5; | ||||
| 
 | ||||
| 	if (priv->features & FEATURE_IRQ) { | ||||
| 		u16 pcictl, pcists; | ||||
| 
 | ||||
| 		/* Complain if an interrupt is already pending */ | ||||
| 		pci_read_config_word(priv->pci_dev, SMBPCISTS, &pcists); | ||||
| 		if (pcists & SMBPCISTS_INTS) | ||||
| 			dev_warn(&dev->dev, "An interrupt is pending!\n"); | ||||
| 
 | ||||
| 		/* Check if interrupts have been disabled */ | ||||
| 		pci_read_config_word(priv->pci_dev, SMBPCICTL, &pcictl); | ||||
| 		if (pcictl & SMBPCICTL_INTDIS) { | ||||
| 			dev_info(&dev->dev, "Interrupts are disabled\n"); | ||||
| 			priv->features &= ~FEATURE_IRQ; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if (priv->features & FEATURE_IRQ) { | ||||
| 		init_waitqueue_head(&priv->waitq); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Jean Delvare
						Jean Delvare