Commit 37d8cb54 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
  i2c-parport: Various cleanups
  i2c-i801: Don't depend on other kernel driver config options
  i2c-i801: Check for vendor Fujitsu before probing for apanel
  i2c-i801: Don't probe for slaves on IDF channels
  i2c-i801: SMBus patch for Intel Panther Point DeviceIDs
  i2c/writing-clients: Fix foo_driver.id_table
parents dc522adb 07da0372
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ Supported adapters:
  * Intel 6 Series (PCH)
  * Intel 6 Series (PCH)
  * Intel Patsburg (PCH)
  * Intel Patsburg (PCH)
  * Intel DH89xxCC (PCH)
  * Intel DH89xxCC (PCH)
  * Intel Panther Point (PCH)
   Datasheets: Publicly available at the Intel website
   Datasheets: Publicly available at the Intel website


On Intel Patsburg and later chipsets, both the normal host SMBus controller
On Intel Patsburg and later chipsets, both the normal host SMBus controller
+1 −1
Original line number Original line Diff line number Diff line
@@ -38,7 +38,7 @@ static struct i2c_driver foo_driver = {
		.name	= "foo",
		.name	= "foo",
	},
	},


	.id_table	= foo_ids,
	.id_table	= foo_idtable,
	.probe		= foo_probe,
	.probe		= foo_probe,
	.remove		= foo_remove,
	.remove		= foo_remove,
	/* if device autodetection is needed: */
	/* if device autodetection is needed: */
+2 −0
Original line number Original line Diff line number Diff line
@@ -79,6 +79,7 @@ config I2C_AMD8111
config I2C_I801
config I2C_I801
	tristate "Intel 82801 (ICH/PCH)"
	tristate "Intel 82801 (ICH/PCH)"
	depends on PCI
	depends on PCI
	select CHECK_SIGNATURE if X86 && DMI
	help
	help
	  If you say yes to this option, support will be included for the Intel
	  If you say yes to this option, support will be included for the Intel
	  801 family of mainboard I2C interfaces.  Specifically, the following
	  801 family of mainboard I2C interfaces.  Specifically, the following
@@ -101,6 +102,7 @@ config I2C_I801
	    6 Series (PCH)
	    6 Series (PCH)
	    Patsburg (PCH)
	    Patsburg (PCH)
	    DH89xxCC (PCH)
	    DH89xxCC (PCH)
	    Panther Point (PCH)


	  This driver can also be built as a module.  If so, the module
	  This driver can also be built as a module.  If so, the module
	  will be called i2c-i801.
	  will be called i2c-i801.
+38 −23
Original line number Original line Diff line number Diff line
@@ -50,6 +50,7 @@
  Patsburg (PCH) IDF    0x1d71     32     hard     yes     yes     yes
  Patsburg (PCH) IDF    0x1d71     32     hard     yes     yes     yes
  Patsburg (PCH) IDF    0x1d72     32     hard     yes     yes     yes
  Patsburg (PCH) IDF    0x1d72     32     hard     yes     yes     yes
  DH89xxCC (PCH)        0x2330     32     hard     yes     yes     yes
  DH89xxCC (PCH)        0x2330     32     hard     yes     yes     yes
  Panther Point (PCH)   0x1e22     32     hard     yes     yes     yes


  Features supported by this driver:
  Features supported by this driver:
  Software PEC                     no
  Software PEC                     no
@@ -137,11 +138,11 @@
/* Older devices have their ID defined in <linux/pci_ids.h> */
/* Older devices have their ID defined in <linux/pci_ids.h> */
#define PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS	0x1c22
#define PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS	0x1c22
#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS	0x1d22
#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS	0x1d22
#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS	0x1e22
/* Patsburg also has three 'Integrated Device Function' SMBus controllers */
/* Patsburg also has three 'Integrated Device Function' SMBus controllers */
#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0	0x1d70
#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0	0x1d70
#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1	0x1d71
#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1	0x1d71
#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2	0x1d72
#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2	0x1d72
#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS	0x1e22
#define PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS	0x2330
#define PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS	0x2330
#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS	0x3b30
#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS	0x3b30


@@ -159,6 +160,8 @@ static struct pci_driver i801_driver;
#define FEATURE_BLOCK_BUFFER	(1 << 1)
#define FEATURE_BLOCK_BUFFER	(1 << 1)
#define FEATURE_BLOCK_PROC	(1 << 2)
#define FEATURE_BLOCK_PROC	(1 << 2)
#define FEATURE_I2C_BLOCK_READ	(1 << 3)
#define FEATURE_I2C_BLOCK_READ	(1 << 3)
/* Not really a feature, but it's convenient to handle it as such */
#define FEATURE_IDF		(1 << 15)


static const char *i801_feature_names[] = {
static const char *i801_feature_names[] = {
	"SMBus PEC",
	"SMBus PEC",
@@ -629,12 +632,13 @@ static const struct pci_device_id i801_ids[] = {
	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1) },
	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1) },
	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2) },
	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2) },
	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS) },
	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS) },
	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS) },
	{ 0, }
	{ 0, }
};
};


MODULE_DEVICE_TABLE(pci, i801_ids);
MODULE_DEVICE_TABLE(pci, i801_ids);


#if defined CONFIG_INPUT_APANEL || defined CONFIG_INPUT_APANEL_MODULE
#if defined CONFIG_X86 && defined CONFIG_DMI
static unsigned char apanel_addr;
static unsigned char apanel_addr;


/* Scan the system ROM for the signature "FJKEYINF" */
/* Scan the system ROM for the signature "FJKEYINF" */
@@ -664,11 +668,7 @@ static void __init input_apanel_init(void)
	}
	}
	iounmap(bios);
	iounmap(bios);
}
}
#else
static void __init input_apanel_init(void) {}
#endif


#if defined CONFIG_SENSORS_FSCHMD || defined CONFIG_SENSORS_FSCHMD_MODULE
struct dmi_onboard_device_info {
struct dmi_onboard_device_info {
	const char *name;
	const char *name;
	u8 type;
	u8 type;
@@ -734,7 +734,30 @@ static void __devinit dmi_check_onboard_devices(const struct dmi_header *dm,
		dmi_check_onboard_device(type, name, adap);
		dmi_check_onboard_device(type, name, adap);
	}
	}
}
}
#endif

/* Register optional slaves */
static void __devinit i801_probe_optional_slaves(struct i801_priv *priv)
{
	/* Only register slaves on main SMBus channel */
	if (priv->features & FEATURE_IDF)
		return;

	if (apanel_addr) {
		struct i2c_board_info info;

		memset(&info, 0, sizeof(struct i2c_board_info));
		info.addr = apanel_addr;
		strlcpy(info.type, "fujitsu_apanel", I2C_NAME_SIZE);
		i2c_new_device(&priv->adapter, &info);
	}

	if (dmi_name_in_vendors("FUJITSU"))
		dmi_walk(dmi_check_onboard_devices, &priv->adapter);
}
#else
static void __init input_apanel_init(void) {}
static void __devinit i801_probe_optional_slaves(struct i801_priv *priv) {}
#endif	/* CONFIG_X86 && CONFIG_DMI */


static int __devinit i801_probe(struct pci_dev *dev,
static int __devinit i801_probe(struct pci_dev *dev,
				const struct pci_device_id *id)
				const struct pci_device_id *id)
@@ -754,6 +777,11 @@ static int __devinit i801_probe(struct pci_dev *dev,


	priv->pci_dev = dev;
	priv->pci_dev = dev;
	switch (dev->device) {
	switch (dev->device) {
	case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0:
	case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1:
	case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2:
		priv->features |= FEATURE_IDF;
		/* fall through */
	default:
	default:
		priv->features |= FEATURE_I2C_BLOCK_READ;
		priv->features |= FEATURE_I2C_BLOCK_READ;
		/* fall through */
		/* fall through */
@@ -839,21 +867,7 @@ static int __devinit i801_probe(struct pci_dev *dev,
		goto exit_release;
		goto exit_release;
	}
	}


	/* Register optional slaves */
	i801_probe_optional_slaves(priv);
#if defined CONFIG_INPUT_APANEL || defined CONFIG_INPUT_APANEL_MODULE
	if (apanel_addr) {
		struct i2c_board_info info;

		memset(&info, 0, sizeof(struct i2c_board_info));
		info.addr = apanel_addr;
		strlcpy(info.type, "fujitsu_apanel", I2C_NAME_SIZE);
		i2c_new_device(&priv->adapter, &info);
	}
#endif
#if defined CONFIG_SENSORS_FSCHMD || defined CONFIG_SENSORS_FSCHMD_MODULE
	if (dmi_name_in_vendors("FUJITSU"))
		dmi_walk(dmi_check_onboard_devices, &priv->adapter);
#endif


	pci_set_drvdata(dev, priv);
	pci_set_drvdata(dev, priv);
	return 0;
	return 0;
@@ -913,6 +927,7 @@ static struct pci_driver i801_driver = {


static int __init i2c_i801_init(void)
static int __init i2c_i801_init(void)
{
{
	if (dmi_name_in_vendors("FUJITSU"))
		input_apanel_init();
		input_apanel_init();
	return pci_register_driver(&i801_driver);
	return pci_register_driver(&i801_driver);
}
}
+5 −5
Original line number Original line Diff line number Diff line
@@ -132,7 +132,7 @@ static struct i2c_smbus_alert_setup alert_data = {
static struct i2c_client *ara;
static struct i2c_client *ara;
static struct lineop parport_ctrl_irq = {
static struct lineop parport_ctrl_irq = {
	.val		= (1 << 4),
	.val		= (1 << 4),
	.port		= CTRL,
	.port		= PORT_CTRL,
};
};


static int __devinit i2c_parport_probe(struct platform_device *pdev)
static int __devinit i2c_parport_probe(struct platform_device *pdev)
Loading