]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/w1/w1_io.c
[PATCH] w1: Make w1 connector notifications depend on connector.
[mv-sheeva.git] / drivers / w1 / w1_io.c
index 00f032220173863c3603dbc0d5f66ca005f9adb0..a6eb9db7359168a8a39f01b2189c1a841677bc67 100644 (file)
@@ -26,9 +26,8 @@
 
 #include "w1.h"
 #include "w1_log.h"
-#include "w1_io.h"
 
-int w1_delay_parm = 1;
+static int w1_delay_parm = 1;
 module_param_named(delay_coef, w1_delay_parm, int, 0);
 
 static u8 w1_crc8_table[] = {
@@ -268,21 +267,36 @@ u8 w1_calc_crc8(u8 * data, int len)
        return crc;
 }
 
-void w1_search_devices(struct w1_master *dev, w1_slave_found_callback cb)
+void w1_search_devices(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb)
 {
        dev->attempts++;
        if (dev->bus_master->search)
-               dev->bus_master->search(dev->bus_master->data, cb);
+               dev->bus_master->search(dev->bus_master->data, search_type, cb);
        else
-               w1_search(dev, cb);
+               w1_search(dev, search_type, cb);
 }
 
-EXPORT_SYMBOL(w1_touch_bit);
-EXPORT_SYMBOL(w1_write_8);
-EXPORT_SYMBOL(w1_read_8);
-EXPORT_SYMBOL(w1_reset_bus);
-EXPORT_SYMBOL(w1_calc_crc8);
-EXPORT_SYMBOL(w1_delay);
-EXPORT_SYMBOL(w1_read_block);
-EXPORT_SYMBOL(w1_write_block);
-EXPORT_SYMBOL(w1_search_devices);
+/**
+ * Resets the bus and then selects the slave by sending either a skip rom
+ * or a rom match.
+ * The w1 master lock must be held.
+ *
+ * @param sl   the slave to select
+ * @return     0=success, anything else=error
+ */
+int w1_reset_select_slave(struct w1_slave *sl)
+{
+       if (w1_reset_bus(sl->master))
+               return -1;
+
+       if (sl->master->slave_count == 1)
+               w1_write_8(sl->master, W1_SKIP_ROM);
+       else {
+               u8 match[9] = {W1_MATCH_ROM, };
+               memcpy(&match[1], (u8 *)&sl->reg_num, 8);
+               w1_write_block(sl->master, match, 9);
+       }
+       return 0;
+}
+
+EXPORT_SYMBOL_GPL(w1_calc_crc8);