Commit bc9be57f authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging

* 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
  i2c-parport: Fix adapter list handling
  i2c-i801: Move device ID definitions to driver
parents 646032e3 56acc7a3
...@@ -134,10 +134,15 @@ ...@@ -134,10 +134,15 @@
SMBHSTSTS_BUS_ERR | SMBHSTSTS_DEV_ERR | \ SMBHSTSTS_BUS_ERR | SMBHSTSTS_DEV_ERR | \
SMBHSTSTS_INTR) SMBHSTSTS_INTR)
/* Older devices have their ID defined in <linux/pci_ids.h> */
#define PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS 0x1c22
#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS 0x1d22
/* 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_DH89XXCC_SMBUS 0x2330
#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS 0x3b30
struct i801_priv { struct i801_priv {
struct i2c_adapter adapter; struct i2c_adapter adapter;
......
/* ------------------------------------------------------------------------ * /* ------------------------------------------------------------------------ *
* i2c-parport.c I2C bus over parallel port * * i2c-parport.c I2C bus over parallel port *
* ------------------------------------------------------------------------ * * ------------------------------------------------------------------------ *
Copyright (C) 2003-2010 Jean Delvare <khali@linux-fr.org> Copyright (C) 2003-2011 Jean Delvare <khali@linux-fr.org>
Based on older i2c-philips-par.c driver Based on older i2c-philips-par.c driver
Copyright (C) 1995-2000 Simon G. Vogl Copyright (C) 1995-2000 Simon G. Vogl
...@@ -33,6 +33,8 @@ ...@@ -33,6 +33,8 @@
#include <linux/i2c-algo-bit.h> #include <linux/i2c-algo-bit.h>
#include <linux/i2c-smbus.h> #include <linux/i2c-smbus.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/list.h>
#include <linux/mutex.h>
#include "i2c-parport.h" #include "i2c-parport.h"
/* ----- Device list ------------------------------------------------------ */ /* ----- Device list ------------------------------------------------------ */
...@@ -43,10 +45,11 @@ struct i2c_par { ...@@ -43,10 +45,11 @@ struct i2c_par {
struct i2c_algo_bit_data algo_data; struct i2c_algo_bit_data algo_data;
struct i2c_smbus_alert_setup alert_data; struct i2c_smbus_alert_setup alert_data;
struct i2c_client *ara; struct i2c_client *ara;
struct i2c_par *next; struct list_head node;
}; };
static struct i2c_par *adapter_list; static LIST_HEAD(adapter_list);
static DEFINE_MUTEX(adapter_list_lock);
/* ----- Low-level parallel port access ----------------------------------- */ /* ----- Low-level parallel port access ----------------------------------- */
...@@ -228,8 +231,9 @@ static void i2c_parport_attach (struct parport *port) ...@@ -228,8 +231,9 @@ static void i2c_parport_attach (struct parport *port)
} }
/* Add the new adapter to the list */ /* Add the new adapter to the list */
adapter->next = adapter_list; mutex_lock(&adapter_list_lock);
adapter_list = adapter; list_add_tail(&adapter->node, &adapter_list);
mutex_unlock(&adapter_list_lock);
return; return;
ERROR1: ERROR1:
...@@ -241,11 +245,11 @@ static void i2c_parport_attach (struct parport *port) ...@@ -241,11 +245,11 @@ static void i2c_parport_attach (struct parport *port)
static void i2c_parport_detach (struct parport *port) static void i2c_parport_detach (struct parport *port)
{ {
struct i2c_par *adapter, *prev; struct i2c_par *adapter, *_n;
/* Walk the list */ /* Walk the list */
for (prev = NULL, adapter = adapter_list; adapter; mutex_lock(&adapter_list_lock);
prev = adapter, adapter = adapter->next) { list_for_each_entry_safe(adapter, _n, &adapter_list, node) {
if (adapter->pdev->port == port) { if (adapter->pdev->port == port) {
if (adapter->ara) { if (adapter->ara) {
parport_disable_irq(port); parport_disable_irq(port);
...@@ -259,14 +263,11 @@ static void i2c_parport_detach (struct parport *port) ...@@ -259,14 +263,11 @@ static void i2c_parport_detach (struct parport *port)
parport_release(adapter->pdev); parport_release(adapter->pdev);
parport_unregister_device(adapter->pdev); parport_unregister_device(adapter->pdev);
if (prev) list_del(&adapter->node);
prev->next = adapter->next;
else
adapter_list = adapter->next;
kfree(adapter); kfree(adapter);
return;
} }
} }
mutex_unlock(&adapter_list_lock);
} }
static struct parport_driver i2c_parport_driver = { static struct parport_driver i2c_parport_driver = {
......
...@@ -2477,15 +2477,12 @@ ...@@ -2477,15 +2477,12 @@
#define PCI_DEVICE_ID_INTEL_82840_HB 0x1a21 #define PCI_DEVICE_ID_INTEL_82840_HB 0x1a21
#define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30 #define PCI_DEVICE_ID_INTEL_82845_HB 0x1a30
#define PCI_DEVICE_ID_INTEL_IOAT 0x1a38 #define PCI_DEVICE_ID_INTEL_IOAT 0x1a38
#define PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS 0x1c22
#define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MIN 0x1c41 #define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MIN 0x1c41
#define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MAX 0x1c5f #define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MAX 0x1c5f
#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS 0x1d22
#define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_0 0x1d40 #define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_0 0x1d40
#define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_1 0x1d41 #define PCI_DEVICE_ID_INTEL_PATSBURG_LPC_1 0x1d41
#define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MIN 0x2310 #define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MIN 0x2310
#define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MAX 0x231f #define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MAX 0x231f
#define PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS 0x2330
#define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410 #define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410
#define PCI_DEVICE_ID_INTEL_82801AA_1 0x2411 #define PCI_DEVICE_ID_INTEL_82801AA_1 0x2411
#define PCI_DEVICE_ID_INTEL_82801AA_3 0x2413 #define PCI_DEVICE_ID_INTEL_82801AA_3 0x2413
...@@ -2696,7 +2693,6 @@ ...@@ -2696,7 +2693,6 @@
#define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60 #define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60
#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MIN 0x3b00 #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MIN 0x3b00
#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MAX 0x3b1f #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_LPC_MAX 0x3b1f
#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS 0x3b30
#define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f #define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f
#define PCI_DEVICE_ID_INTEL_5100_16 0x65f0 #define PCI_DEVICE_ID_INTEL_5100_16 0x65f0
#define PCI_DEVICE_ID_INTEL_5100_21 0x65f5 #define PCI_DEVICE_ID_INTEL_5100_21 0x65f5
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment