Merge branch 'for-next/w1'
This commit is contained in:
commit
4458614954
|
@ -11,4 +11,9 @@ if W1
|
||||||
source drivers/w1/masters/Kconfig
|
source drivers/w1/masters/Kconfig
|
||||||
source drivers/w1/slaves/Kconfig
|
source drivers/w1/slaves/Kconfig
|
||||||
|
|
||||||
|
config W1_DUAL_SEARCH
|
||||||
|
bool "dual search"
|
||||||
|
---help---
|
||||||
|
Some device need to be searched twice to be detected
|
||||||
|
|
||||||
endif # W1
|
endif # W1
|
||||||
|
|
|
@ -402,6 +402,21 @@ struct bus_type w1_bustype= {
|
||||||
.remove = w1_bus_remove,
|
.remove = w1_bus_remove,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool w1_is_registered(struct w1_bus *bus, u64 rn)
|
||||||
|
{
|
||||||
|
struct device_d *dev = NULL;
|
||||||
|
struct w1_device *w1_dev;
|
||||||
|
|
||||||
|
bus_for_each_device(&w1_bustype, dev) {
|
||||||
|
w1_dev = to_w1_device(dev);
|
||||||
|
|
||||||
|
if (w1_dev->bus == bus && w1_dev->reg_num == rn)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static int w1_device_register(struct w1_bus *bus, struct w1_device *dev)
|
static int w1_device_register(struct w1_bus *bus, struct w1_device *dev)
|
||||||
{
|
{
|
||||||
char str[18];
|
char str[18];
|
||||||
|
@ -442,9 +457,15 @@ int w1_driver_register(struct w1_driver *drv)
|
||||||
|
|
||||||
void w1_found(struct w1_bus *bus, u64 rn)
|
void w1_found(struct w1_bus *bus, u64 rn)
|
||||||
{
|
{
|
||||||
struct w1_device *dev = xzalloc(sizeof(*dev));
|
struct w1_device *dev;
|
||||||
u64 tmp = be64_to_cpu(rn);
|
u64 tmp = be64_to_cpu(rn);
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_W1_DUAL_SEARCH)
|
||||||
|
&& bus->is_searched && w1_is_registered(bus, rn))
|
||||||
|
return;
|
||||||
|
|
||||||
|
dev = xzalloc(sizeof(*dev));
|
||||||
|
|
||||||
dev->reg_num = rn;
|
dev->reg_num = rn;
|
||||||
dev->fid = tmp >> 56;
|
dev->fid = tmp >> 56;
|
||||||
dev->id = (tmp >> 8) & 0xffffffffffff;
|
dev->id = (tmp >> 8) & 0xffffffffffff;
|
||||||
|
@ -605,7 +626,11 @@ int w1_bus_register(struct w1_bus *bus)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
bus->is_searched = false;
|
||||||
w1_search(bus, W1_SEARCH);
|
w1_search(bus, W1_SEARCH);
|
||||||
|
bus->is_searched = true;
|
||||||
|
if (IS_ENABLED(CONFIG_W1_DUAL_SEARCH))
|
||||||
|
w1_search(bus, W1_SEARCH);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,6 +133,8 @@ struct w1_bus
|
||||||
|
|
||||||
int max_slave_count, slave_count;
|
int max_slave_count, slave_count;
|
||||||
|
|
||||||
|
bool is_searched;
|
||||||
|
|
||||||
void *data;
|
void *data;
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue