提交 2c927c0c 编写于 作者: A Alex A. Mihaylov 提交者: Greg Kroah-Hartman

w1: Fix slave count on 1-Wire bus (resend)

1-Wire bus have very fast algorith for exchange with single slave
device. Fix incorrect count of slave devices on connect second slave
device. This case on slave device probe() step we need use generic
(multislave) functions for read/write device.
Signed-off-by: NAlex A. Mihaylov <minimumlaw@rambler.ru>
Acked-by: NEvgeniy Polyakov <zbr@ioremap.net>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 99884996
...@@ -728,6 +728,7 @@ int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn) ...@@ -728,6 +728,7 @@ int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn)
memcpy(&sl->reg_num, rn, sizeof(sl->reg_num)); memcpy(&sl->reg_num, rn, sizeof(sl->reg_num));
atomic_set(&sl->refcnt, 1); atomic_set(&sl->refcnt, 1);
atomic_inc(&sl->master->refcnt); atomic_inc(&sl->master->refcnt);
dev->slave_count++;
/* slave modules need to be loaded in a context with unlocked mutex */ /* slave modules need to be loaded in a context with unlocked mutex */
mutex_unlock(&dev->mutex); mutex_unlock(&dev->mutex);
...@@ -747,11 +748,11 @@ int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn) ...@@ -747,11 +748,11 @@ int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn)
sl->family = f; sl->family = f;
err = __w1_attach_slave_device(sl); err = __w1_attach_slave_device(sl);
if (err < 0) { if (err < 0) {
dev_err(&dev->dev, "%s: Attaching %s failed.\n", __func__, dev_err(&dev->dev, "%s: Attaching %s failed.\n", __func__,
sl->name); sl->name);
dev->slave_count--;
w1_family_put(sl->family); w1_family_put(sl->family);
atomic_dec(&sl->master->refcnt); atomic_dec(&sl->master->refcnt);
kfree(sl); kfree(sl);
...@@ -759,7 +760,6 @@ int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn) ...@@ -759,7 +760,6 @@ int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn)
} }
sl->ttl = dev->slave_ttl; sl->ttl = dev->slave_ttl;
dev->slave_count++;
memcpy(msg.id.id, rn, sizeof(msg.id)); memcpy(msg.id.id, rn, sizeof(msg.id));
msg.type = W1_SLAVE_ADD; msg.type = W1_SLAVE_ADD;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册