summaryrefslogtreecommitdiff
path: root/drivers/w1/w1.c
diff options
context:
space:
mode:
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-01-12 11:53:55 -0500
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-01-12 11:53:55 -0500
commitd3b7737f2b70ed2fb7cef985e70d04fb5dee7b7c (patch)
tree190e42f90d152ebad1c077809422c366cdf0577b /drivers/w1/w1.c
parentdc6821e0cfe74802aefd2067b40fcdc03fc4599e (diff)
parent070680218379e15c1901f4bf21b98e3cbf12b527 (diff)
Merge commit '070680218379e15c1901f4bf21b98e3cbf12b527' into stable/for-linus-fixes-3.3
* commit '070680218379e15c1901f4bf21b98e3cbf12b527': (50 commits) xen-balloon: convert sysdev_class to a regular subsystem clocksource: convert sysdev_class to a regular subsystem ibm_rtl: convert sysdev_class to a regular subsystem edac: convert sysdev_class to a regular subsystem rtmutex-tester: convert sysdev_class to a regular subsystem driver-core: implement 'sysdev' functionality for regular devices and buses kref: fix up the kfree build problems kref: Remove the memory barriers kref: Implement kref_put in terms of kref_sub kref: Inline all functions Drivers: hv: Get rid of an unnecessary check in hv.c Drivers: hv: Make the vmbus driver unloadable Drivers: hv: Fix a memory leak Documentation: Update stable address MAINTAINERS: stable: Update address w1: add fast search for single slave bus driver-core: skip uevent generation when nobody is listening drivers: hv: Don't OOPS when you cannot init vmbus firmware: google: fix gsmi.c build warning drivers_base: make argument to platform_device_register_full const ...
Diffstat (limited to 'drivers/w1/w1.c')
-rw-r--r--drivers/w1/w1.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c
index c37497823851..9761950697b4 100644
--- a/drivers/w1/w1.c
+++ b/drivers/w1/w1.c
@@ -892,6 +892,16 @@ void w1_search(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb
break;
}
+ /* Do fast search on single slave bus */
+ if (dev->max_slave_count == 1) {
+ w1_write_8(dev, W1_READ_ROM);
+
+ if (w1_read_block(dev, (u8 *)&rn, 8) == 8 && rn)
+ cb(dev, rn);
+
+ break;
+ }
+
/* Start the search */
w1_write_8(dev, search_type);
for (i = 0; i < 64; ++i) {