xref: /openbmc/linux/Documentation/w1/masters/w1-gpio.rst (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
1e9bb6275SMauro Carvalho Chehab=====================
2e9bb6275SMauro Carvalho ChehabKernel driver w1-gpio
3e9bb6275SMauro Carvalho Chehab=====================
4e9bb6275SMauro Carvalho Chehab
5e9bb6275SMauro Carvalho ChehabAuthor: Ville Syrjala <syrjala@sci.fi>
6e9bb6275SMauro Carvalho Chehab
7e9bb6275SMauro Carvalho Chehab
8e9bb6275SMauro Carvalho ChehabDescription
9e9bb6275SMauro Carvalho Chehab-----------
10e9bb6275SMauro Carvalho Chehab
11e9bb6275SMauro Carvalho ChehabGPIO 1-wire bus master driver. The driver uses the GPIO API to control the
12e9bb6275SMauro Carvalho Chehabwire and the GPIO pin can be specified using GPIO machine descriptor tables.
13e9bb6275SMauro Carvalho ChehabIt is also possible to define the master using device tree, see
14*bb667205SMauro Carvalho ChehabDocumentation/devicetree/bindings/w1/w1-gpio.yaml
15e9bb6275SMauro Carvalho Chehab
16e9bb6275SMauro Carvalho Chehab
17e9bb6275SMauro Carvalho ChehabExample (mach-at91)
18e9bb6275SMauro Carvalho Chehab-------------------
19e9bb6275SMauro Carvalho Chehab
20e9bb6275SMauro Carvalho Chehab::
21e9bb6275SMauro Carvalho Chehab
22e9bb6275SMauro Carvalho Chehab  #include <linux/gpio/machine.h>
23e9bb6275SMauro Carvalho Chehab  #include <linux/w1-gpio.h>
24e9bb6275SMauro Carvalho Chehab
25e9bb6275SMauro Carvalho Chehab  static struct gpiod_lookup_table foo_w1_gpiod_table = {
26e9bb6275SMauro Carvalho Chehab	.dev_id = "w1-gpio",
27e9bb6275SMauro Carvalho Chehab	.table = {
28e9bb6275SMauro Carvalho Chehab		GPIO_LOOKUP_IDX("at91-gpio", AT91_PIN_PB20, NULL, 0,
29e9bb6275SMauro Carvalho Chehab			GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN),
30e9bb6275SMauro Carvalho Chehab	},
31e9bb6275SMauro Carvalho Chehab  };
32e9bb6275SMauro Carvalho Chehab
33e9bb6275SMauro Carvalho Chehab  static struct w1_gpio_platform_data foo_w1_gpio_pdata = {
34e9bb6275SMauro Carvalho Chehab	.ext_pullup_enable_pin	= -EINVAL,
35e9bb6275SMauro Carvalho Chehab  };
36e9bb6275SMauro Carvalho Chehab
37e9bb6275SMauro Carvalho Chehab  static struct platform_device foo_w1_device = {
38e9bb6275SMauro Carvalho Chehab	.name			= "w1-gpio",
39e9bb6275SMauro Carvalho Chehab	.id			= -1,
40e9bb6275SMauro Carvalho Chehab	.dev.platform_data	= &foo_w1_gpio_pdata,
41e9bb6275SMauro Carvalho Chehab  };
42e9bb6275SMauro Carvalho Chehab
43e9bb6275SMauro Carvalho Chehab  ...
44e9bb6275SMauro Carvalho Chehab	at91_set_GPIO_periph(foo_w1_gpio_pdata.pin, 1);
45e9bb6275SMauro Carvalho Chehab	at91_set_multi_drive(foo_w1_gpio_pdata.pin, 1);
46e9bb6275SMauro Carvalho Chehab	gpiod_add_lookup_table(&foo_w1_gpiod_table);
47e9bb6275SMauro Carvalho Chehab	platform_device_register(&foo_w1_device);
48