w1: add family based automatic module loading
This patch allows the 1-wire bus to autoload the corresponding module for each slave being attached. This works similar to bluetooth protocols. Signed-off-by: Alexander Stein <alexander.stein@informatik.tu-chemnitz.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
a4b05d1262
commit
8d7bda5188
13 changed files with 20 additions and 2 deletions
|
@ -25,8 +25,8 @@ When a w1 master driver registers with the w1 subsystem, the following occurs:
|
|||
- sysfs entries for that w1 master are created
|
||||
- the w1 bus is periodically searched for new slave devices
|
||||
|
||||
When a device is found on the bus, w1 core checks if driver for its family is
|
||||
loaded. If so, the family driver is attached to the slave.
|
||||
When a device is found on the bus, w1 core tries to load the driver for its family
|
||||
and check if it is loaded. If so, the family driver is attached to the slave.
|
||||
If there is no driver for the family, default one is assigned, which allows to perform
|
||||
almost any kind of operations. Each logical operation is a transaction
|
||||
in nature, which can contain several (two or one) low-level operations.
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Jean-Francois Dagenais <dagenaisj@sonatest.com>");
|
||||
MODULE_DESCRIPTION("w1 family 29 driver for DS2408 8 Pin IO");
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_FAMILY_DS2408));
|
||||
|
||||
|
||||
#define W1_F29_RETRIES 3
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Mariusz Bialonczyk <manio@skyboo.net>");
|
||||
MODULE_DESCRIPTION("w1 family 3a driver for DS2413 2 Pin IO");
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_FAMILY_DS2413));
|
||||
|
||||
#define W1_F3A_RETRIES 3
|
||||
#define W1_F3A_FUNC_PIO_ACCESS_READ 0xF5
|
||||
|
|
|
@ -164,3 +164,4 @@ module_exit(w1_f1d_exit);
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Mika Laitio <lamikr@pilppa.org>");
|
||||
MODULE_DESCRIPTION("w1 family 1d driver for DS2423, 4 counters and 4kb ram");
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_COUNTER_DS2423));
|
||||
|
|
|
@ -310,3 +310,4 @@ module_exit(w1_f2d_fini);
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Bernhard Weirich <bernhard.weirich@riedel.net>");
|
||||
MODULE_DESCRIPTION("w1 family 2d driver for DS2431, 1kb EEPROM");
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_EEPROM_DS2431));
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Ben Gardner <bgardner@wabtec.com>");
|
||||
MODULE_DESCRIPTION("w1 family 23 driver for DS2433, 4kb EEPROM");
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_EEPROM_DS2433));
|
||||
|
||||
#define W1_EEPROM_SIZE 512
|
||||
#define W1_PAGE_COUNT 16
|
||||
|
|
|
@ -203,3 +203,4 @@ module_exit(w1_ds2760_exit);
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>");
|
||||
MODULE_DESCRIPTION("1-wire Driver Dallas 2760 battery monitor chip");
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_FAMILY_DS2760));
|
||||
|
|
|
@ -188,3 +188,4 @@ module_exit(w1_ds2780_exit);
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Clifton Barnes <cabarnes@indesign-llc.com>");
|
||||
MODULE_DESCRIPTION("1-wire Driver for Maxim/Dallas DS2780 Stand-Alone Fuel Gauge IC");
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_FAMILY_DS2780));
|
||||
|
|
|
@ -186,3 +186,4 @@ module_exit(w1_ds2781_exit);
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Renata Sayakhova <renata@oktetlabs.ru>");
|
||||
MODULE_DESCRIPTION("1-wire Driver for Maxim/Dallas DS2781 Stand-Alone Fuel Gauge IC");
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_FAMILY_DS2781));
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Markus Franke <franke.m@sebakmt.com>, <franm@hrz.tu-chemnitz.de>");
|
||||
MODULE_DESCRIPTION("w1 family 1C driver for DS28E04, 4kb EEPROM and PIO");
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_FAMILY_DS28E04));
|
||||
|
||||
/* Allow the strong pullup to be disabled, but default to enabled.
|
||||
* If it was disabled a parasite powered device might not get the required
|
||||
|
|
|
@ -34,6 +34,8 @@
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Evgeniy Polyakov <zbr@ioremap.net>");
|
||||
MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol, 64bit memory family.");
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_FAMILY_SMEM_01));
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_FAMILY_SMEM_81));
|
||||
|
||||
static struct w1_family w1_smem_family_01 = {
|
||||
.fid = W1_FAMILY_SMEM_01,
|
||||
|
|
|
@ -36,6 +36,11 @@
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Evgeniy Polyakov <zbr@ioremap.net>");
|
||||
MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol, temperature family.");
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_THERM_DS18S20));
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_THERM_DS1822));
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_THERM_DS18B20));
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_THERM_DS1825));
|
||||
MODULE_ALIAS("w1-family-" __stringify(W1_THERM_DS28EA00));
|
||||
|
||||
/* Allow the strong pullup to be disabled, but default to enabled.
|
||||
* If it was disabled a parasite powered device might not get the require
|
||||
|
|
|
@ -680,6 +680,8 @@ static int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn)
|
|||
atomic_set(&sl->refcnt, 0);
|
||||
init_completion(&sl->released);
|
||||
|
||||
request_module("w1-family-0x%0x", rn->family);
|
||||
|
||||
spin_lock(&w1_flock);
|
||||
f = w1_family_registered(rn->family);
|
||||
if (!f) {
|
||||
|
|
Loading…
Reference in a new issue