|
@@ -36,8 +36,8 @@
|
|
|
#define DRIVER "i2c-pca-isa"
|
|
|
#define IO_SIZE 4
|
|
|
|
|
|
-static unsigned long base = 0x330;
|
|
|
-static int irq = 10;
|
|
|
+static unsigned long base;
|
|
|
+static int irq = -1;
|
|
|
|
|
|
/* Data sheet recommends 59kHz for 100kHz operation due to variation
|
|
|
* in the actual clock rate */
|
|
@@ -107,6 +107,19 @@ static struct i2c_adapter pca_isa_ops = {
|
|
|
.timeout = 100,
|
|
|
};
|
|
|
|
|
|
+static int __devinit pca_isa_match(struct device *dev, unsigned int id)
|
|
|
+{
|
|
|
+ int match = base != 0;
|
|
|
+
|
|
|
+ if (match) {
|
|
|
+ if (irq <= -1)
|
|
|
+ dev_warn(dev, "Using polling mode (specify irq)\n");
|
|
|
+ } else
|
|
|
+ dev_err(dev, "Please specify I/O base\n");
|
|
|
+
|
|
|
+ return match;
|
|
|
+}
|
|
|
+
|
|
|
static int __devinit pca_isa_probe(struct device *dev, unsigned int id)
|
|
|
{
|
|
|
init_waitqueue_head(&pca_wait);
|
|
@@ -153,7 +166,7 @@ static int __devexit pca_isa_remove(struct device *dev, unsigned int id)
|
|
|
{
|
|
|
i2c_del_adapter(&pca_isa_ops);
|
|
|
|
|
|
- if (irq > 0) {
|
|
|
+ if (irq > -1) {
|
|
|
disable_irq(irq);
|
|
|
free_irq(irq, &pca_isa_ops);
|
|
|
}
|
|
@@ -163,6 +176,7 @@ static int __devexit pca_isa_remove(struct device *dev, unsigned int id)
|
|
|
}
|
|
|
|
|
|
static struct isa_driver pca_isa_driver = {
|
|
|
+ .match = pca_isa_match,
|
|
|
.probe = pca_isa_probe,
|
|
|
.remove = __devexit_p(pca_isa_remove),
|
|
|
.driver = {
|