diff options
author | Chris Metcalf <cmetcalf@tilera.com> | 2010-08-06 10:37:02 -0400 |
---|---|---|
committer | Chris Metcalf <cmetcalf@tilera.com> | 2010-08-06 10:37:02 -0400 |
commit | ab11b487402f97975f3ac1eeea09c82f4431481e (patch) | |
tree | 86337c5cbbd2b0c4bd07c0847a1dc7de3d898147 /drivers/i2c | |
parent | 1c689cbcf2c2b7a35cd237abddd9206bb1b6fee1 (diff) | |
parent | fc1caf6eafb30ea185720e29f7f5eccca61ecd60 (diff) |
Merge branch 'master' into for-linus
Diffstat (limited to 'drivers/i2c')
-rw-r--r-- | drivers/i2c/busses/i2c-cpm.c | 6 | ||||
-rw-r--r-- | drivers/i2c/busses/i2c-i801.c | 8 | ||||
-rw-r--r-- | drivers/i2c/busses/i2c-ibm_iic.c | 4 | ||||
-rw-r--r-- | drivers/i2c/busses/i2c-mpc.c | 71 | ||||
-rw-r--r-- | drivers/i2c/busses/i2c-sibyte.c | 4 | ||||
-rw-r--r-- | drivers/i2c/i2c-core.c | 16 |
6 files changed, 66 insertions, 43 deletions
diff --git a/drivers/i2c/busses/i2c-cpm.c b/drivers/i2c/busses/i2c-cpm.c index b02b4533651d..e591de1bc704 100644 --- a/drivers/i2c/busses/i2c-cpm.c +++ b/drivers/i2c/busses/i2c-cpm.c | |||
@@ -652,6 +652,7 @@ static int __devinit cpm_i2c_probe(struct of_device *ofdev, | |||
652 | cpm->adap = cpm_ops; | 652 | cpm->adap = cpm_ops; |
653 | i2c_set_adapdata(&cpm->adap, cpm); | 653 | i2c_set_adapdata(&cpm->adap, cpm); |
654 | cpm->adap.dev.parent = &ofdev->dev; | 654 | cpm->adap.dev.parent = &ofdev->dev; |
655 | cpm->adap.dev.of_node = of_node_get(ofdev->dev.of_node); | ||
655 | 656 | ||
656 | result = cpm_i2c_setup(cpm); | 657 | result = cpm_i2c_setup(cpm); |
657 | if (result) { | 658 | if (result) { |
@@ -676,11 +677,6 @@ static int __devinit cpm_i2c_probe(struct of_device *ofdev, | |||
676 | dev_dbg(&ofdev->dev, "hw routines for %s registered.\n", | 677 | dev_dbg(&ofdev->dev, "hw routines for %s registered.\n", |
677 | cpm->adap.name); | 678 | cpm->adap.name); |
678 | 679 | ||
679 | /* | ||
680 | * register OF I2C devices | ||
681 | */ | ||
682 | of_register_i2c_devices(&cpm->adap, ofdev->dev.of_node); | ||
683 | |||
684 | return 0; | 680 | return 0; |
685 | out_shut: | 681 | out_shut: |
686 | cpm_i2c_shutdown(cpm); | 682 | cpm_i2c_shutdown(cpm); |
diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c index f4b21f2bb8ed..c60081169cc3 100644 --- a/drivers/i2c/busses/i2c-i801.c +++ b/drivers/i2c/busses/i2c-i801.c | |||
@@ -655,7 +655,7 @@ static void __devinit dmi_check_onboard_device(u8 type, const char *name, | |||
655 | /* & ~0x80, ignore enabled/disabled bit */ | 655 | /* & ~0x80, ignore enabled/disabled bit */ |
656 | if ((type & ~0x80) != dmi_devices[i].type) | 656 | if ((type & ~0x80) != dmi_devices[i].type) |
657 | continue; | 657 | continue; |
658 | if (strcmp(name, dmi_devices[i].name)) | 658 | if (strcasecmp(name, dmi_devices[i].name)) |
659 | continue; | 659 | continue; |
660 | 660 | ||
661 | memset(&info, 0, sizeof(struct i2c_board_info)); | 661 | memset(&info, 0, sizeof(struct i2c_board_info)); |
@@ -704,9 +704,6 @@ static int __devinit i801_probe(struct pci_dev *dev, | |||
704 | { | 704 | { |
705 | unsigned char temp; | 705 | unsigned char temp; |
706 | int err, i; | 706 | int err, i; |
707 | #if defined CONFIG_SENSORS_FSCHMD || defined CONFIG_SENSORS_FSCHMD_MODULE | ||
708 | const char *vendor; | ||
709 | #endif | ||
710 | 707 | ||
711 | I801_dev = dev; | 708 | I801_dev = dev; |
712 | i801_features = 0; | 709 | i801_features = 0; |
@@ -808,8 +805,7 @@ static int __devinit i801_probe(struct pci_dev *dev, | |||
808 | } | 805 | } |
809 | #endif | 806 | #endif |
810 | #if defined CONFIG_SENSORS_FSCHMD || defined CONFIG_SENSORS_FSCHMD_MODULE | 807 | #if defined CONFIG_SENSORS_FSCHMD || defined CONFIG_SENSORS_FSCHMD_MODULE |
811 | vendor = dmi_get_system_info(DMI_BOARD_VENDOR); | 808 | if (dmi_name_in_vendors("FUJITSU")) |
812 | if (vendor && !strcmp(vendor, "FUJITSU SIEMENS")) | ||
813 | dmi_walk(dmi_check_onboard_devices, &i801_adapter); | 809 | dmi_walk(dmi_check_onboard_devices, &i801_adapter); |
814 | #endif | 810 | #endif |
815 | 811 | ||
diff --git a/drivers/i2c/busses/i2c-ibm_iic.c b/drivers/i2c/busses/i2c-ibm_iic.c index bf344135647a..1168d61418c9 100644 --- a/drivers/i2c/busses/i2c-ibm_iic.c +++ b/drivers/i2c/busses/i2c-ibm_iic.c | |||
@@ -745,6 +745,7 @@ static int __devinit iic_probe(struct of_device *ofdev, | |||
745 | /* Register it with i2c layer */ | 745 | /* Register it with i2c layer */ |
746 | adap = &dev->adap; | 746 | adap = &dev->adap; |
747 | adap->dev.parent = &ofdev->dev; | 747 | adap->dev.parent = &ofdev->dev; |
748 | adap->dev.of_node = of_node_get(np); | ||
748 | strlcpy(adap->name, "IBM IIC", sizeof(adap->name)); | 749 | strlcpy(adap->name, "IBM IIC", sizeof(adap->name)); |
749 | i2c_set_adapdata(adap, dev); | 750 | i2c_set_adapdata(adap, dev); |
750 | adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; | 751 | adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; |
@@ -760,9 +761,6 @@ static int __devinit iic_probe(struct of_device *ofdev, | |||
760 | dev_info(&ofdev->dev, "using %s mode\n", | 761 | dev_info(&ofdev->dev, "using %s mode\n", |
761 | dev->fast_mode ? "fast (400 kHz)" : "standard (100 kHz)"); | 762 | dev->fast_mode ? "fast (400 kHz)" : "standard (100 kHz)"); |
762 | 763 | ||
763 | /* Now register all the child nodes */ | ||
764 | of_register_i2c_devices(adap, np); | ||
765 | |||
766 | return 0; | 764 | return 0; |
767 | 765 | ||
768 | error_cleanup: | 766 | error_cleanup: |
diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c index df00eb1f11f9..6545d1c99b61 100644 --- a/drivers/i2c/busses/i2c-mpc.c +++ b/drivers/i2c/busses/i2c-mpc.c | |||
@@ -63,6 +63,7 @@ struct mpc_i2c { | |||
63 | wait_queue_head_t queue; | 63 | wait_queue_head_t queue; |
64 | struct i2c_adapter adap; | 64 | struct i2c_adapter adap; |
65 | int irq; | 65 | int irq; |
66 | u32 real_clk; | ||
66 | }; | 67 | }; |
67 | 68 | ||
68 | struct mpc_i2c_divider { | 69 | struct mpc_i2c_divider { |
@@ -96,20 +97,23 @@ static irqreturn_t mpc_i2c_isr(int irq, void *dev_id) | |||
96 | /* Sometimes 9th clock pulse isn't generated, and slave doesn't release | 97 | /* Sometimes 9th clock pulse isn't generated, and slave doesn't release |
97 | * the bus, because it wants to send ACK. | 98 | * the bus, because it wants to send ACK. |
98 | * Following sequence of enabling/disabling and sending start/stop generates | 99 | * Following sequence of enabling/disabling and sending start/stop generates |
99 | * the pulse, so it's all OK. | 100 | * the 9 pulses, so it's all OK. |
100 | */ | 101 | */ |
101 | static void mpc_i2c_fixup(struct mpc_i2c *i2c) | 102 | static void mpc_i2c_fixup(struct mpc_i2c *i2c) |
102 | { | 103 | { |
103 | writeccr(i2c, 0); | 104 | int k; |
104 | udelay(30); | 105 | u32 delay_val = 1000000 / i2c->real_clk + 1; |
105 | writeccr(i2c, CCR_MEN); | 106 | |
106 | udelay(30); | 107 | if (delay_val < 2) |
107 | writeccr(i2c, CCR_MSTA | CCR_MTX); | 108 | delay_val = 2; |
108 | udelay(30); | 109 | |
109 | writeccr(i2c, CCR_MSTA | CCR_MTX | CCR_MEN); | 110 | for (k = 9; k; k--) { |
110 | udelay(30); | 111 | writeccr(i2c, 0); |
111 | writeccr(i2c, CCR_MEN); | 112 | writeccr(i2c, CCR_MSTA | CCR_MTX | CCR_MEN); |
112 | udelay(30); | 113 | udelay(delay_val); |
114 | writeccr(i2c, CCR_MEN); | ||
115 | udelay(delay_val << 1); | ||
116 | } | ||
113 | } | 117 | } |
114 | 118 | ||
115 | static int i2c_wait(struct mpc_i2c *i2c, unsigned timeout, int writing) | 119 | static int i2c_wait(struct mpc_i2c *i2c, unsigned timeout, int writing) |
@@ -190,15 +194,18 @@ static const struct mpc_i2c_divider mpc_i2c_dividers_52xx[] __devinitconst = { | |||
190 | }; | 194 | }; |
191 | 195 | ||
192 | static int __devinit mpc_i2c_get_fdr_52xx(struct device_node *node, u32 clock, | 196 | static int __devinit mpc_i2c_get_fdr_52xx(struct device_node *node, u32 clock, |
193 | int prescaler) | 197 | int prescaler, u32 *real_clk) |
194 | { | 198 | { |
195 | const struct mpc_i2c_divider *div = NULL; | 199 | const struct mpc_i2c_divider *div = NULL; |
196 | unsigned int pvr = mfspr(SPRN_PVR); | 200 | unsigned int pvr = mfspr(SPRN_PVR); |
197 | u32 divider; | 201 | u32 divider; |
198 | int i; | 202 | int i; |
199 | 203 | ||
200 | if (clock == MPC_I2C_CLOCK_LEGACY) | 204 | if (clock == MPC_I2C_CLOCK_LEGACY) { |
205 | /* see below - default fdr = 0x3f -> div = 2048 */ | ||
206 | *real_clk = mpc5xxx_get_bus_frequency(node) / 2048; | ||
201 | return -EINVAL; | 207 | return -EINVAL; |
208 | } | ||
202 | 209 | ||
203 | /* Determine divider value */ | 210 | /* Determine divider value */ |
204 | divider = mpc5xxx_get_bus_frequency(node) / clock; | 211 | divider = mpc5xxx_get_bus_frequency(node) / clock; |
@@ -216,7 +223,8 @@ static int __devinit mpc_i2c_get_fdr_52xx(struct device_node *node, u32 clock, | |||
216 | break; | 223 | break; |
217 | } | 224 | } |
218 | 225 | ||
219 | return div ? (int)div->fdr : -EINVAL; | 226 | *real_clk = mpc5xxx_get_bus_frequency(node) / div->divider; |
227 | return (int)div->fdr; | ||
220 | } | 228 | } |
221 | 229 | ||
222 | static void __devinit mpc_i2c_setup_52xx(struct device_node *node, | 230 | static void __devinit mpc_i2c_setup_52xx(struct device_node *node, |
@@ -231,13 +239,14 @@ static void __devinit mpc_i2c_setup_52xx(struct device_node *node, | |||
231 | return; | 239 | return; |
232 | } | 240 | } |
233 | 241 | ||
234 | ret = mpc_i2c_get_fdr_52xx(node, clock, prescaler); | 242 | ret = mpc_i2c_get_fdr_52xx(node, clock, prescaler, &i2c->real_clk); |
235 | fdr = (ret >= 0) ? ret : 0x3f; /* backward compatibility */ | 243 | fdr = (ret >= 0) ? ret : 0x3f; /* backward compatibility */ |
236 | 244 | ||
237 | writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR); | 245 | writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR); |
238 | 246 | ||
239 | if (ret >= 0) | 247 | if (ret >= 0) |
240 | dev_info(i2c->dev, "clock %d Hz (fdr=%d)\n", clock, fdr); | 248 | dev_info(i2c->dev, "clock %u Hz (fdr=%d)\n", i2c->real_clk, |
249 | fdr); | ||
241 | } | 250 | } |
242 | #else /* !(CONFIG_PPC_MPC52xx || CONFIG_PPC_MPC512x) */ | 251 | #else /* !(CONFIG_PPC_MPC52xx || CONFIG_PPC_MPC512x) */ |
243 | static void __devinit mpc_i2c_setup_52xx(struct device_node *node, | 252 | static void __devinit mpc_i2c_setup_52xx(struct device_node *node, |
@@ -334,14 +343,17 @@ static u32 __devinit mpc_i2c_get_sec_cfg_8xxx(void) | |||
334 | } | 343 | } |
335 | 344 | ||
336 | static int __devinit mpc_i2c_get_fdr_8xxx(struct device_node *node, u32 clock, | 345 | static int __devinit mpc_i2c_get_fdr_8xxx(struct device_node *node, u32 clock, |
337 | u32 prescaler) | 346 | u32 prescaler, u32 *real_clk) |
338 | { | 347 | { |
339 | const struct mpc_i2c_divider *div = NULL; | 348 | const struct mpc_i2c_divider *div = NULL; |
340 | u32 divider; | 349 | u32 divider; |
341 | int i; | 350 | int i; |
342 | 351 | ||
343 | if (clock == MPC_I2C_CLOCK_LEGACY) | 352 | if (clock == MPC_I2C_CLOCK_LEGACY) { |
353 | /* see below - default fdr = 0x1031 -> div = 16 * 3072 */ | ||
354 | *real_clk = fsl_get_sys_freq() / prescaler / (16 * 3072); | ||
344 | return -EINVAL; | 355 | return -EINVAL; |
356 | } | ||
345 | 357 | ||
346 | /* Determine proper divider value */ | 358 | /* Determine proper divider value */ |
347 | if (of_device_is_compatible(node, "fsl,mpc8544-i2c")) | 359 | if (of_device_is_compatible(node, "fsl,mpc8544-i2c")) |
@@ -364,6 +376,7 @@ static int __devinit mpc_i2c_get_fdr_8xxx(struct device_node *node, u32 clock, | |||
364 | break; | 376 | break; |
365 | } | 377 | } |
366 | 378 | ||
379 | *real_clk = fsl_get_sys_freq() / prescaler / div->divider; | ||
367 | return div ? (int)div->fdr : -EINVAL; | 380 | return div ? (int)div->fdr : -EINVAL; |
368 | } | 381 | } |
369 | 382 | ||
@@ -380,7 +393,7 @@ static void __devinit mpc_i2c_setup_8xxx(struct device_node *node, | |||
380 | return; | 393 | return; |
381 | } | 394 | } |
382 | 395 | ||
383 | ret = mpc_i2c_get_fdr_8xxx(node, clock, prescaler); | 396 | ret = mpc_i2c_get_fdr_8xxx(node, clock, prescaler, &i2c->real_clk); |
384 | fdr = (ret >= 0) ? ret : 0x1031; /* backward compatibility */ | 397 | fdr = (ret >= 0) ? ret : 0x1031; /* backward compatibility */ |
385 | 398 | ||
386 | writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR); | 399 | writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR); |
@@ -388,7 +401,7 @@ static void __devinit mpc_i2c_setup_8xxx(struct device_node *node, | |||
388 | 401 | ||
389 | if (ret >= 0) | 402 | if (ret >= 0) |
390 | dev_info(i2c->dev, "clock %d Hz (dfsrr=%d fdr=%d)\n", | 403 | dev_info(i2c->dev, "clock %d Hz (dfsrr=%d fdr=%d)\n", |
391 | clock, fdr >> 8, fdr & 0xff); | 404 | i2c->real_clk, fdr >> 8, fdr & 0xff); |
392 | } | 405 | } |
393 | 406 | ||
394 | #else /* !CONFIG_FSL_SOC */ | 407 | #else /* !CONFIG_FSL_SOC */ |
@@ -500,10 +513,14 @@ static int mpc_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) | |||
500 | return -EINTR; | 513 | return -EINTR; |
501 | } | 514 | } |
502 | if (time_after(jiffies, orig_jiffies + HZ)) { | 515 | if (time_after(jiffies, orig_jiffies + HZ)) { |
516 | u8 status = readb(i2c->base + MPC_I2C_SR); | ||
517 | |||
503 | dev_dbg(i2c->dev, "timeout\n"); | 518 | dev_dbg(i2c->dev, "timeout\n"); |
504 | if (readb(i2c->base + MPC_I2C_SR) == | 519 | if ((status & (CSR_MCF | CSR_MBB | CSR_RXAK)) != 0) { |
505 | (CSR_MCF | CSR_MBB | CSR_RXAK)) | 520 | writeb(status & ~CSR_MAL, |
521 | i2c->base + MPC_I2C_SR); | ||
506 | mpc_i2c_fixup(i2c); | 522 | mpc_i2c_fixup(i2c); |
523 | } | ||
507 | return -EIO; | 524 | return -EIO; |
508 | } | 525 | } |
509 | schedule(); | 526 | schedule(); |
@@ -595,18 +612,26 @@ static int __devinit fsl_i2c_probe(struct of_device *op, | |||
595 | mpc_i2c_setup_8xxx(op->dev.of_node, i2c, clock, 0); | 612 | mpc_i2c_setup_8xxx(op->dev.of_node, i2c, clock, 0); |
596 | } | 613 | } |
597 | 614 | ||
615 | prop = of_get_property(op->dev.of_node, "fsl,timeout", &plen); | ||
616 | if (prop && plen == sizeof(u32)) { | ||
617 | mpc_ops.timeout = *prop * HZ / 1000000; | ||
618 | if (mpc_ops.timeout < 5) | ||
619 | mpc_ops.timeout = 5; | ||
620 | } | ||
621 | dev_info(i2c->dev, "timeout %u us\n", mpc_ops.timeout * 1000000 / HZ); | ||
622 | |||
598 | dev_set_drvdata(&op->dev, i2c); | 623 | dev_set_drvdata(&op->dev, i2c); |
599 | 624 | ||
600 | i2c->adap = mpc_ops; | 625 | i2c->adap = mpc_ops; |
601 | i2c_set_adapdata(&i2c->adap, i2c); | 626 | i2c_set_adapdata(&i2c->adap, i2c); |
602 | i2c->adap.dev.parent = &op->dev; | 627 | i2c->adap.dev.parent = &op->dev; |
628 | i2c->adap.dev.of_node = of_node_get(op->dev.of_node); | ||
603 | 629 | ||
604 | result = i2c_add_adapter(&i2c->adap); | 630 | result = i2c_add_adapter(&i2c->adap); |
605 | if (result < 0) { | 631 | if (result < 0) { |
606 | dev_err(i2c->dev, "failed to add adapter\n"); | 632 | dev_err(i2c->dev, "failed to add adapter\n"); |
607 | goto fail_add; | 633 | goto fail_add; |
608 | } | 634 | } |
609 | of_register_i2c_devices(&i2c->adap, op->dev.of_node); | ||
610 | 635 | ||
611 | return result; | 636 | return result; |
612 | 637 | ||
diff --git a/drivers/i2c/busses/i2c-sibyte.c b/drivers/i2c/busses/i2c-sibyte.c index 3d76a188e42f..0fe505d7abe9 100644 --- a/drivers/i2c/busses/i2c-sibyte.c +++ b/drivers/i2c/busses/i2c-sibyte.c | |||
@@ -94,7 +94,7 @@ static int smbus_xfer(struct i2c_adapter *i2c_adap, u16 addr, | |||
94 | } | 94 | } |
95 | break; | 95 | break; |
96 | default: | 96 | default: |
97 | return -1; /* XXXKW better error code? */ | 97 | return -EOPNOTSUPP; |
98 | } | 98 | } |
99 | 99 | ||
100 | while (csr_in32(SMB_CSR(adap, R_SMB_STATUS)) & M_SMB_BUSY) | 100 | while (csr_in32(SMB_CSR(adap, R_SMB_STATUS)) & M_SMB_BUSY) |
@@ -104,7 +104,7 @@ static int smbus_xfer(struct i2c_adapter *i2c_adap, u16 addr, | |||
104 | if (error & M_SMB_ERROR) { | 104 | if (error & M_SMB_ERROR) { |
105 | /* Clear error bit by writing a 1 */ | 105 | /* Clear error bit by writing a 1 */ |
106 | csr_out32(M_SMB_ERROR, SMB_CSR(adap, R_SMB_STATUS)); | 106 | csr_out32(M_SMB_ERROR, SMB_CSR(adap, R_SMB_STATUS)); |
107 | return -1; /* XXXKW better error code? */ | 107 | return (error & M_SMB_ERROR_TYPE) ? -EIO : -ENXIO; |
108 | } | 108 | } |
109 | 109 | ||
110 | if (data_bytes == 1) | 110 | if (data_bytes == 1) |
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index 1cca2631e5b3..df937df845eb 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c | |||
@@ -30,6 +30,8 @@ | |||
30 | #include <linux/init.h> | 30 | #include <linux/init.h> |
31 | #include <linux/idr.h> | 31 | #include <linux/idr.h> |
32 | #include <linux/mutex.h> | 32 | #include <linux/mutex.h> |
33 | #include <linux/of_i2c.h> | ||
34 | #include <linux/of_device.h> | ||
33 | #include <linux/completion.h> | 35 | #include <linux/completion.h> |
34 | #include <linux/hardirq.h> | 36 | #include <linux/hardirq.h> |
35 | #include <linux/irqflags.h> | 37 | #include <linux/irqflags.h> |
@@ -70,6 +72,10 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv) | |||
70 | if (!client) | 72 | if (!client) |
71 | return 0; | 73 | return 0; |
72 | 74 | ||
75 | /* Attempt an OF style match */ | ||
76 | if (of_driver_match_device(dev, drv)) | ||
77 | return 1; | ||
78 | |||
73 | driver = to_i2c_driver(drv); | 79 | driver = to_i2c_driver(drv); |
74 | /* match on an id table if there is one */ | 80 | /* match on an id table if there is one */ |
75 | if (driver->id_table) | 81 | if (driver->id_table) |
@@ -790,6 +796,9 @@ static int i2c_register_adapter(struct i2c_adapter *adap) | |||
790 | if (adap->nr < __i2c_first_dynamic_bus_num) | 796 | if (adap->nr < __i2c_first_dynamic_bus_num) |
791 | i2c_scan_static_board_info(adap); | 797 | i2c_scan_static_board_info(adap); |
792 | 798 | ||
799 | /* Register devices from the device tree */ | ||
800 | of_i2c_register_devices(adap); | ||
801 | |||
793 | /* Notify drivers */ | 802 | /* Notify drivers */ |
794 | mutex_lock(&core_lock); | 803 | mutex_lock(&core_lock); |
795 | dummy = bus_for_each_drv(&i2c_bus_type, NULL, adap, | 804 | dummy = bus_for_each_drv(&i2c_bus_type, NULL, adap, |
@@ -1428,13 +1437,12 @@ static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver) | |||
1428 | if (!(adapter->class & driver->class)) | 1437 | if (!(adapter->class & driver->class)) |
1429 | goto exit_free; | 1438 | goto exit_free; |
1430 | 1439 | ||
1431 | /* Stop here if we can't use SMBUS_QUICK */ | 1440 | /* Stop here if the bus doesn't support probing */ |
1432 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_QUICK)) { | 1441 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_READ_BYTE)) { |
1433 | if (address_list[0] == I2C_CLIENT_END) | 1442 | if (address_list[0] == I2C_CLIENT_END) |
1434 | goto exit_free; | 1443 | goto exit_free; |
1435 | 1444 | ||
1436 | dev_warn(&adapter->dev, "SMBus Quick command not supported, " | 1445 | dev_warn(&adapter->dev, "Probing not supported\n"); |
1437 | "can't probe for chips\n"); | ||
1438 | err = -EOPNOTSUPP; | 1446 | err = -EOPNOTSUPP; |
1439 | goto exit_free; | 1447 | goto exit_free; |
1440 | } | 1448 | } |