Re: [PATCH] w1-gpio: Add GPIO w1 bus master driver

2008-01-03 Thread Haavard Skinnemoen
On Thu, 3 Jan 2008 15:48:35 +0200
Ville Syrjälä <[EMAIL PROTECTED]> wrote:

> On Wed, Dec 26, 2007 at 11:24:54PM +0100, Haavard Skinnemoen wrote:
> > On Fri, 21 Dec 2007 09:34:01 +0200
> > Ville Syrjala <[EMAIL PROTECTED]> wrote:
> > 
> > > +static struct platform_device foo_w1_device = {
> > > + .name   = "w1-gpio",
> > > + .id = -1,
> > 
> > Assigning -1 to a u32 member isn't a very nice example. What does it
> > mean anyway?
> 
> id is 'int'. The bus_name won't include the id when -1 is used.

Ah, indeed. I was looking at 2.6.23, where it is u32.

> > ...call platform_driver_probe(_gpio_driver, w1_gpio_probe) here.
> 
> I was wondering what platform_driver_probe() was for but never bothered
> to read the code. I'll change the code to use it.
> 
> I already sent an updated patch but forgot to send this reply.

I saw it. Thanks :)

Haavard
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] w1-gpio: Add GPIO w1 bus master driver

2008-01-03 Thread Ville Syrjälä
On Wed, Dec 26, 2007 at 11:24:54PM +0100, Haavard Skinnemoen wrote:
> On Fri, 21 Dec 2007 09:34:01 +0200
> Ville Syrjala <[EMAIL PROTECTED]> wrote:
> 
> > +static struct platform_device foo_w1_device = {
> > +   .name   = "w1-gpio",
> > +   .id = -1,
> 
> Assigning -1 to a u32 member isn't a very nice example. What does it
> mean anyway?

id is 'int'. The bus_name won't include the id when -1 is used.

> > +static int __init w1_gpio_probe(struct platform_device *pdev)
> 
> This must be __devinit, or if you want to save a bit of memory...
> 
> > +   .probe  = w1_gpio_probe,
> 
> ...remove this line, and...
> 
> > +static int __init w1_gpio_init(void)
> > +{
> > +   return platform_driver_register(_gpio_driver);
> 
> ...call platform_driver_probe(_gpio_driver, w1_gpio_probe) here.

I was wondering what platform_driver_probe() was for but never bothered
to read the code. I'll change the code to use it.

I already sent an updated patch but forgot to send this reply.

-- 
Ville Syrjälä
[EMAIL PROTECTED]
http://www.sci.fi/~syrjala/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] w1-gpio: Add GPIO w1 bus master driver

2008-01-03 Thread Ville Syrjälä
On Wed, Dec 26, 2007 at 11:24:54PM +0100, Haavard Skinnemoen wrote:
 On Fri, 21 Dec 2007 09:34:01 +0200
 Ville Syrjala [EMAIL PROTECTED] wrote:
 
  +static struct platform_device foo_w1_device = {
  +   .name   = w1-gpio,
  +   .id = -1,
 
 Assigning -1 to a u32 member isn't a very nice example. What does it
 mean anyway?

id is 'int'. The bus_name won't include the id when -1 is used.

  +static int __init w1_gpio_probe(struct platform_device *pdev)
 
 This must be __devinit, or if you want to save a bit of memory...
 
  +   .probe  = w1_gpio_probe,
 
 ...remove this line, and...
 
  +static int __init w1_gpio_init(void)
  +{
  +   return platform_driver_register(w1_gpio_driver);
 
 ...call platform_driver_probe(w1_gpio_driver, w1_gpio_probe) here.

I was wondering what platform_driver_probe() was for but never bothered
to read the code. I'll change the code to use it.

I already sent an updated patch but forgot to send this reply.

-- 
Ville Syrjälä
[EMAIL PROTECTED]
http://www.sci.fi/~syrjala/
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] w1-gpio: Add GPIO w1 bus master driver

2008-01-03 Thread Haavard Skinnemoen
On Thu, 3 Jan 2008 15:48:35 +0200
Ville Syrjälä [EMAIL PROTECTED] wrote:

 On Wed, Dec 26, 2007 at 11:24:54PM +0100, Haavard Skinnemoen wrote:
  On Fri, 21 Dec 2007 09:34:01 +0200
  Ville Syrjala [EMAIL PROTECTED] wrote:
  
   +static struct platform_device foo_w1_device = {
   + .name   = w1-gpio,
   + .id = -1,
  
  Assigning -1 to a u32 member isn't a very nice example. What does it
  mean anyway?
 
 id is 'int'. The bus_name won't include the id when -1 is used.

Ah, indeed. I was looking at 2.6.23, where it is u32.

  ...call platform_driver_probe(w1_gpio_driver, w1_gpio_probe) here.
 
 I was wondering what platform_driver_probe() was for but never bothered
 to read the code. I'll change the code to use it.
 
 I already sent an updated patch but forgot to send this reply.

I saw it. Thanks :)

Haavard
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] w1-gpio: Add GPIO w1 bus master driver (v3)

2007-12-29 Thread Ville Syrjala
Add a GPIO 1-wire bus master driver. The driver used the GPIO API to
control the wire and the GPIO pin can be specified using platform data
similar to i2c-gpio. The driver was tested with AT91SAM9260 + DS2401.

Signed-off-by: Ville Syrjala <[EMAIL PROTECTED]>
---
Changes from version 2 to version 3:
* Use platform_driver_probe() instead of platform_driver_register().
* Remove useless address operators from function pointer assignments.

 Documentation/w1/masters/00-INDEX |2 +
 Documentation/w1/masters/w1-gpio  |   33 ++
 drivers/w1/masters/Kconfig|   10 +++
 drivers/w1/masters/Makefile   |1 +
 drivers/w1/masters/w1-gpio.c  |  124 +
 include/linux/w1-gpio.h   |   23 +++
 6 files changed, 193 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/w1/masters/w1-gpio
 create mode 100644 drivers/w1/masters/w1-gpio.c
 create mode 100644 include/linux/w1-gpio.h

diff --git a/Documentation/w1/masters/00-INDEX 
b/Documentation/w1/masters/00-INDEX
index 752613c..7b0ceaa 100644
--- a/Documentation/w1/masters/00-INDEX
+++ b/Documentation/w1/masters/00-INDEX
@@ -4,3 +4,5 @@ ds2482
- The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses.
 ds2490
- The Maxim/Dallas Semiconductor DS2490 builds USB <-> W1 bridges.
+w1-gpio
+   - GPIO 1-wire bus master driver.
diff --git a/Documentation/w1/masters/w1-gpio b/Documentation/w1/masters/w1-gpio
new file mode 100644
index 000..af5d3b4
--- /dev/null
+++ b/Documentation/w1/masters/w1-gpio
@@ -0,0 +1,33 @@
+Kernel driver w1-gpio
+=
+
+Author: Ville Syrjala <[EMAIL PROTECTED]>
+
+
+Description
+---
+
+GPIO 1-wire bus master driver. The driver uses the GPIO API to control the
+wire and the GPIO pin can be specified using platform data.
+
+
+Example (mach-at91)
+---
+
+#include 
+
+static struct w1_gpio_platform_data foo_w1_gpio_pdata = {
+   .pin= AT91_PIN_PB20,
+   .is_open_drain  = 1,
+};
+
+static struct platform_device foo_w1_device = {
+   .name   = "w1-gpio",
+   .id = -1,
+   .dev.platform_data  = _w1_gpio_pdata,
+};
+
+...
+   at91_set_GPIO_periph(foo_w1_gpio_pdata.pin, 1);
+   at91_set_multi_drive(foo_w1_gpio_pdata.pin, 1);
+   platform_device_register(_w1_device);
diff --git a/drivers/w1/masters/Kconfig b/drivers/w1/masters/Kconfig
index 8236d44..c449309 100644
--- a/drivers/w1/masters/Kconfig
+++ b/drivers/w1/masters/Kconfig
@@ -42,5 +42,15 @@ config W1_MASTER_DS1WM
  in HP iPAQ devices like h5xxx, h2200, and ASIC3-based like
  hx4700.
 
+config W1_MASTER_GPIO
+   tristate "GPIO 1-wire busmaster"
+   depends on GENERIC_GPIO
+   help
+ Say Y here if you want to communicate with your 1-wire devices using
+ GPIO pins. This driver uses the GPIO API to control the wire.
+
+ This support is also available as a module.  If so, the module
+ will be called w1-gpio.ko.
+
 endmenu
 
diff --git a/drivers/w1/masters/Makefile b/drivers/w1/masters/Makefile
index 11551b3..1420b5b 100644
--- a/drivers/w1/masters/Makefile
+++ b/drivers/w1/masters/Makefile
@@ -6,3 +6,4 @@ obj-$(CONFIG_W1_MASTER_MATROX)  += matrox_w1.o
 obj-$(CONFIG_W1_MASTER_DS2490) += ds2490.o
 obj-$(CONFIG_W1_MASTER_DS2482) += ds2482.o
 obj-$(CONFIG_W1_MASTER_DS1WM)  += ds1wm.o
+obj-$(CONFIG_W1_MASTER_GPIO)   += w1-gpio.o
diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c
new file mode 100644
index 000..9e1138a
--- /dev/null
+++ b/drivers/w1/masters/w1-gpio.c
@@ -0,0 +1,124 @@
+/*
+ * w1-gpio - GPIO w1 bus master driver
+ *
+ * Copyright (C) 2007 Ville Syrjala <[EMAIL PROTECTED]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ */
+
+#include 
+#include 
+#include 
+#include 
+
+#include "../w1.h"
+#include "../w1_int.h"
+
+#include 
+
+static void w1_gpio_write_bit_dir(void *data, u8 bit)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   if (bit)
+   gpio_direction_input(pdata->pin);
+   else
+   gpio_direction_output(pdata->pin, 0);
+}
+
+static void w1_gpio_write_bit_val(void *data, u8 bit)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   gpio_set_value(pdata->pin, bit);
+}
+
+static u8 w1_gpio_read_bit(void *data)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   return gpio_get_value(pdata->pin);
+}
+
+static int __init w1_gpio_probe(struct platform_device *pdev)
+{
+   struct w1_bus_master *master;
+   struct w1_gpio_platform_data *pdata = pdev->dev.platform_data;
+   int err;
+
+   if (!pdata)
+   return -ENXIO;
+
+   master = kzalloc(sizeof(struct w1_bus_master), GFP_KERNEL);
+   if (!master)
+   

[PATCH] w1-gpio: Add GPIO w1 bus master driver (v3)

2007-12-29 Thread Ville Syrjala
Add a GPIO 1-wire bus master driver. The driver used the GPIO API to
control the wire and the GPIO pin can be specified using platform data
similar to i2c-gpio. The driver was tested with AT91SAM9260 + DS2401.

Signed-off-by: Ville Syrjala [EMAIL PROTECTED]
---
Changes from version 2 to version 3:
* Use platform_driver_probe() instead of platform_driver_register().
* Remove useless address operators from function pointer assignments.

 Documentation/w1/masters/00-INDEX |2 +
 Documentation/w1/masters/w1-gpio  |   33 ++
 drivers/w1/masters/Kconfig|   10 +++
 drivers/w1/masters/Makefile   |1 +
 drivers/w1/masters/w1-gpio.c  |  124 +
 include/linux/w1-gpio.h   |   23 +++
 6 files changed, 193 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/w1/masters/w1-gpio
 create mode 100644 drivers/w1/masters/w1-gpio.c
 create mode 100644 include/linux/w1-gpio.h

diff --git a/Documentation/w1/masters/00-INDEX 
b/Documentation/w1/masters/00-INDEX
index 752613c..7b0ceaa 100644
--- a/Documentation/w1/masters/00-INDEX
+++ b/Documentation/w1/masters/00-INDEX
@@ -4,3 +4,5 @@ ds2482
- The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses.
 ds2490
- The Maxim/Dallas Semiconductor DS2490 builds USB - W1 bridges.
+w1-gpio
+   - GPIO 1-wire bus master driver.
diff --git a/Documentation/w1/masters/w1-gpio b/Documentation/w1/masters/w1-gpio
new file mode 100644
index 000..af5d3b4
--- /dev/null
+++ b/Documentation/w1/masters/w1-gpio
@@ -0,0 +1,33 @@
+Kernel driver w1-gpio
+=
+
+Author: Ville Syrjala [EMAIL PROTECTED]
+
+
+Description
+---
+
+GPIO 1-wire bus master driver. The driver uses the GPIO API to control the
+wire and the GPIO pin can be specified using platform data.
+
+
+Example (mach-at91)
+---
+
+#include linux/w1-gpio.h
+
+static struct w1_gpio_platform_data foo_w1_gpio_pdata = {
+   .pin= AT91_PIN_PB20,
+   .is_open_drain  = 1,
+};
+
+static struct platform_device foo_w1_device = {
+   .name   = w1-gpio,
+   .id = -1,
+   .dev.platform_data  = foo_w1_gpio_pdata,
+};
+
+...
+   at91_set_GPIO_periph(foo_w1_gpio_pdata.pin, 1);
+   at91_set_multi_drive(foo_w1_gpio_pdata.pin, 1);
+   platform_device_register(foo_w1_device);
diff --git a/drivers/w1/masters/Kconfig b/drivers/w1/masters/Kconfig
index 8236d44..c449309 100644
--- a/drivers/w1/masters/Kconfig
+++ b/drivers/w1/masters/Kconfig
@@ -42,5 +42,15 @@ config W1_MASTER_DS1WM
  in HP iPAQ devices like h5xxx, h2200, and ASIC3-based like
  hx4700.
 
+config W1_MASTER_GPIO
+   tristate GPIO 1-wire busmaster
+   depends on GENERIC_GPIO
+   help
+ Say Y here if you want to communicate with your 1-wire devices using
+ GPIO pins. This driver uses the GPIO API to control the wire.
+
+ This support is also available as a module.  If so, the module
+ will be called w1-gpio.ko.
+
 endmenu
 
diff --git a/drivers/w1/masters/Makefile b/drivers/w1/masters/Makefile
index 11551b3..1420b5b 100644
--- a/drivers/w1/masters/Makefile
+++ b/drivers/w1/masters/Makefile
@@ -6,3 +6,4 @@ obj-$(CONFIG_W1_MASTER_MATROX)  += matrox_w1.o
 obj-$(CONFIG_W1_MASTER_DS2490) += ds2490.o
 obj-$(CONFIG_W1_MASTER_DS2482) += ds2482.o
 obj-$(CONFIG_W1_MASTER_DS1WM)  += ds1wm.o
+obj-$(CONFIG_W1_MASTER_GPIO)   += w1-gpio.o
diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c
new file mode 100644
index 000..9e1138a
--- /dev/null
+++ b/drivers/w1/masters/w1-gpio.c
@@ -0,0 +1,124 @@
+/*
+ * w1-gpio - GPIO w1 bus master driver
+ *
+ * Copyright (C) 2007 Ville Syrjala [EMAIL PROTECTED]
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ */
+
+#include linux/init.h
+#include linux/module.h
+#include linux/platform_device.h
+#include linux/w1-gpio.h
+
+#include ../w1.h
+#include ../w1_int.h
+
+#include asm/gpio.h
+
+static void w1_gpio_write_bit_dir(void *data, u8 bit)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   if (bit)
+   gpio_direction_input(pdata-pin);
+   else
+   gpio_direction_output(pdata-pin, 0);
+}
+
+static void w1_gpio_write_bit_val(void *data, u8 bit)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   gpio_set_value(pdata-pin, bit);
+}
+
+static u8 w1_gpio_read_bit(void *data)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   return gpio_get_value(pdata-pin);
+}
+
+static int __init w1_gpio_probe(struct platform_device *pdev)
+{
+   struct w1_bus_master *master;
+   struct w1_gpio_platform_data *pdata = pdev-dev.platform_data;
+   int err;
+
+   if (!pdata)
+   return -ENXIO;
+
+   master = 

Re: [PATCH] w1-gpio: Add GPIO w1 bus master driver

2007-12-26 Thread Haavard Skinnemoen
On Fri, 21 Dec 2007 09:34:01 +0200
Ville Syrjala <[EMAIL PROTECTED]> wrote:

> +static struct platform_device foo_w1_device = {
> + .name   = "w1-gpio",
> + .id = -1,

Assigning -1 to a u32 member isn't a very nice example. What does it
mean anyway?

> +static int __init w1_gpio_probe(struct platform_device *pdev)

This must be __devinit, or if you want to save a bit of memory...

> + .probe  = w1_gpio_probe,

...remove this line, and...

> +static int __init w1_gpio_init(void)
> +{
> + return platform_driver_register(_gpio_driver);

...call platform_driver_probe(_gpio_driver, w1_gpio_probe) here.

Haavard
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] w1-gpio: Add GPIO w1 bus master driver

2007-12-26 Thread Haavard Skinnemoen
On Fri, 21 Dec 2007 09:34:01 +0200
Ville Syrjala [EMAIL PROTECTED] wrote:

 +static struct platform_device foo_w1_device = {
 + .name   = w1-gpio,
 + .id = -1,

Assigning -1 to a u32 member isn't a very nice example. What does it
mean anyway?

 +static int __init w1_gpio_probe(struct platform_device *pdev)

This must be __devinit, or if you want to save a bit of memory...

 + .probe  = w1_gpio_probe,

...remove this line, and...

 +static int __init w1_gpio_init(void)
 +{
 + return platform_driver_register(w1_gpio_driver);

...call platform_driver_probe(w1_gpio_driver, w1_gpio_probe) here.

Haavard
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] w1-gpio: Add GPIO w1 bus master driver (v2)

2007-12-21 Thread Evgeniy Polyakov
On Fri, Dec 21, 2007 at 02:45:46PM +0200, Ville Syrjala ([EMAIL PROTECTED]) 
wrote:
> Add a GPIO 1-wire bus master driver. The driver used the GPIO API to
> control the wire and the GPIO pin can be specified using platform data
> similar to i2c-gpio. The driver was tested with AT91SAM9260 + DS2401.
> 
> Signed-off-by: Ville Syrjala <[EMAIL PROTECTED]>

This looks ok, thank you!
Feel free to add my ack or signed-off.

Andrew, please apply.

-- 
Evgeniy Polyakov
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] w1-gpio: Add GPIO w1 bus master driver (v2)

2007-12-21 Thread Ville Syrjala
Add a GPIO 1-wire bus master driver. The driver used the GPIO API to
control the wire and the GPIO pin can be specified using platform data
similar to i2c-gpio. The driver was tested with AT91SAM9260 + DS2401.

Signed-off-by: Ville Syrjala <[EMAIL PROTECTED]>
---
Version 2 of the patch changes the sizeof to use the type as requested.
I also had a better look at i2c-gpio and noticed that I should probably
call gpio_request()/gpio_free(). Those functions are no-ops on mach-at91 but
perhaps some other platforms require them. Also I removed the open-drain
requirement like i2c-gpio does by toggling the pin direction.

 Documentation/w1/masters/00-INDEX |2 +
 Documentation/w1/masters/w1-gpio  |   33 ++
 drivers/w1/masters/Kconfig|   10 +++
 drivers/w1/masters/Makefile   |1 +
 drivers/w1/masters/w1-gpio.c  |  125 +
 include/linux/w1-gpio.h   |   23 +++
 6 files changed, 194 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/w1/masters/w1-gpio
 create mode 100644 drivers/w1/masters/w1-gpio.c
 create mode 100644 include/linux/w1-gpio.h

diff --git a/Documentation/w1/masters/00-INDEX 
b/Documentation/w1/masters/00-INDEX
index 752613c..7b0ceaa 100644
--- a/Documentation/w1/masters/00-INDEX
+++ b/Documentation/w1/masters/00-INDEX
@@ -4,3 +4,5 @@ ds2482
- The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses.
 ds2490
- The Maxim/Dallas Semiconductor DS2490 builds USB <-> W1 bridges.
+w1-gpio
+   - GPIO 1-wire bus master driver.
diff --git a/Documentation/w1/masters/w1-gpio b/Documentation/w1/masters/w1-gpio
new file mode 100644
index 000..af5d3b4
--- /dev/null
+++ b/Documentation/w1/masters/w1-gpio
@@ -0,0 +1,33 @@
+Kernel driver w1-gpio
+=
+
+Author: Ville Syrjala <[EMAIL PROTECTED]>
+
+
+Description
+---
+
+GPIO 1-wire bus master driver. The driver uses the GPIO API to control the
+wire and the GPIO pin can be specified using platform data.
+
+
+Example (mach-at91)
+---
+
+#include 
+
+static struct w1_gpio_platform_data foo_w1_gpio_pdata = {
+   .pin= AT91_PIN_PB20,
+   .is_open_drain  = 1,
+};
+
+static struct platform_device foo_w1_device = {
+   .name   = "w1-gpio",
+   .id = -1,
+   .dev.platform_data  = _w1_gpio_pdata,
+};
+
+...
+   at91_set_GPIO_periph(foo_w1_gpio_pdata.pin, 1);
+   at91_set_multi_drive(foo_w1_gpio_pdata.pin, 1);
+   platform_device_register(_w1_device);
diff --git a/drivers/w1/masters/Kconfig b/drivers/w1/masters/Kconfig
index 8236d44..c449309 100644
--- a/drivers/w1/masters/Kconfig
+++ b/drivers/w1/masters/Kconfig
@@ -42,5 +42,15 @@ config W1_MASTER_DS1WM
  in HP iPAQ devices like h5xxx, h2200, and ASIC3-based like
  hx4700.
 
+config W1_MASTER_GPIO
+   tristate "GPIO 1-wire busmaster"
+   depends on GENERIC_GPIO
+   help
+ Say Y here if you want to communicate with your 1-wire devices using
+ GPIO pins. This driver uses the GPIO API to control the wire.
+
+ This support is also available as a module.  If so, the module
+ will be called w1-gpio.ko.
+
 endmenu
 
diff --git a/drivers/w1/masters/Makefile b/drivers/w1/masters/Makefile
index 11551b3..1420b5b 100644
--- a/drivers/w1/masters/Makefile
+++ b/drivers/w1/masters/Makefile
@@ -6,3 +6,4 @@ obj-$(CONFIG_W1_MASTER_MATROX)  += matrox_w1.o
 obj-$(CONFIG_W1_MASTER_DS2490) += ds2490.o
 obj-$(CONFIG_W1_MASTER_DS2482) += ds2482.o
 obj-$(CONFIG_W1_MASTER_DS1WM)  += ds1wm.o
+obj-$(CONFIG_W1_MASTER_GPIO)   += w1-gpio.o
diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c
new file mode 100644
index 000..354ee6f
--- /dev/null
+++ b/drivers/w1/masters/w1-gpio.c
@@ -0,0 +1,125 @@
+/*
+ * w1-gpio - GPIO w1 bus master driver
+ *
+ * Copyright (C) 2007 Ville Syrjala <[EMAIL PROTECTED]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ */
+
+#include 
+#include 
+#include 
+#include 
+
+#include "../w1.h"
+#include "../w1_int.h"
+
+#include 
+
+static void w1_gpio_write_bit_dir(void *data, u8 bit)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   if (bit)
+   gpio_direction_input(pdata->pin);
+   else
+   gpio_direction_output(pdata->pin, 0);
+}
+
+static void w1_gpio_write_bit_val(void *data, u8 bit)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   gpio_set_value(pdata->pin, bit);
+}
+
+static u8 w1_gpio_read_bit(void *data)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   return gpio_get_value(pdata->pin);
+}
+
+static int __init w1_gpio_probe(struct platform_device *pdev)
+{
+   struct w1_bus_master *master;
+   struct w1_gpio_platform_data *pdata = 

Re: [PATCH] w1-gpio: Add GPIO w1 bus master driver

2007-12-21 Thread Ville Syrjälä
On Fri, Dec 21, 2007 at 01:41:28PM +0300, Evgeniy Polyakov wrote:
> Hi Ville.
> 
> On Fri, Dec 21, 2007 at 09:34:01AM +0200, Ville Syrjala ([EMAIL PROTECTED]) 
> wrote:
> > Add a GPIO 1-wire bus master driver. The driver used the GPIO API to
> > control the wire and the GPIO pin can be specified using platform data
> > similar to i2c-gpio. The driver was tested with AT91SAM9260 + DS2401.
> 
> This looks ok, only a minor nit about codying style below.
> 
> > Signed-off-by: Ville Syrjala <[EMAIL PROTECTED]>
> 
> ACK.
> 
> > +static int __init w1_gpio_probe(struct platform_device *pdev)
> > +{
> > +   struct w1_bus_master *master;
> > +   struct w1_gpio_platform_data *pdata;
> > +   int err;
> > +
> > +   pdata = pdev->dev.platform_data;
> > +   if (!pdata)
> > +   return -ENXIO;
> > +
> > +   master = kzalloc(sizeof *master, GFP_KERNEL);
> > +   if (!master)
> > +   return -ENOMEM;
> 
> I think sizeof(struct w1_bus_master) is a better way.

Will change.

> > new file mode 100644
> > index 000..3b80bb2
> > --- /dev/null
> > +++ b/include/linux/w1-gpio.h
> 
> Does anyone use this file except driver itself?

It's supposed to be used by the code that registers the platform device
(see the example in the documentation). No in-tree users since the board
I'm using is not supported by the kernel.

I just had a better look at i2c-gpio and noticed that I missed
gpio_request()/gpio_free() calls from the driver. Also the open-drain
requirement could be removed like i2c-gpio does. I'll send a new patch
ASAP.

-- 
Ville Syrjälä
[EMAIL PROTECTED]
http://www.sci.fi/~syrjala/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] w1-gpio: Add GPIO w1 bus master driver

2007-12-21 Thread Evgeniy Polyakov
Hi Ville.

On Fri, Dec 21, 2007 at 09:34:01AM +0200, Ville Syrjala ([EMAIL PROTECTED]) 
wrote:
> Add a GPIO 1-wire bus master driver. The driver used the GPIO API to
> control the wire and the GPIO pin can be specified using platform data
> similar to i2c-gpio. The driver was tested with AT91SAM9260 + DS2401.

This looks ok, only a minor nit about codying style below.

> Signed-off-by: Ville Syrjala <[EMAIL PROTECTED]>

ACK.

> +static int __init w1_gpio_probe(struct platform_device *pdev)
> +{
> + struct w1_bus_master *master;
> + struct w1_gpio_platform_data *pdata;
> + int err;
> +
> + pdata = pdev->dev.platform_data;
> + if (!pdata)
> + return -ENXIO;
> +
> + master = kzalloc(sizeof *master, GFP_KERNEL);
> + if (!master)
> + return -ENOMEM;

I think sizeof(struct w1_bus_master) is a better way.

> new file mode 100644
> index 000..3b80bb2
> --- /dev/null
> +++ b/include/linux/w1-gpio.h

Does anyone use this file except driver itself?

-- 
Evgeniy Polyakov
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] w1-gpio: Add GPIO w1 bus master driver

2007-12-21 Thread Evgeniy Polyakov
Hi Ville.

On Fri, Dec 21, 2007 at 09:34:01AM +0200, Ville Syrjala ([EMAIL PROTECTED]) 
wrote:
 Add a GPIO 1-wire bus master driver. The driver used the GPIO API to
 control the wire and the GPIO pin can be specified using platform data
 similar to i2c-gpio. The driver was tested with AT91SAM9260 + DS2401.

This looks ok, only a minor nit about codying style below.

 Signed-off-by: Ville Syrjala [EMAIL PROTECTED]

ACK.

 +static int __init w1_gpio_probe(struct platform_device *pdev)
 +{
 + struct w1_bus_master *master;
 + struct w1_gpio_platform_data *pdata;
 + int err;
 +
 + pdata = pdev-dev.platform_data;
 + if (!pdata)
 + return -ENXIO;
 +
 + master = kzalloc(sizeof *master, GFP_KERNEL);
 + if (!master)
 + return -ENOMEM;

I think sizeof(struct w1_bus_master) is a better way.

 new file mode 100644
 index 000..3b80bb2
 --- /dev/null
 +++ b/include/linux/w1-gpio.h

Does anyone use this file except driver itself?

-- 
Evgeniy Polyakov
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] w1-gpio: Add GPIO w1 bus master driver (v2)

2007-12-21 Thread Evgeniy Polyakov
On Fri, Dec 21, 2007 at 02:45:46PM +0200, Ville Syrjala ([EMAIL PROTECTED]) 
wrote:
 Add a GPIO 1-wire bus master driver. The driver used the GPIO API to
 control the wire and the GPIO pin can be specified using platform data
 similar to i2c-gpio. The driver was tested with AT91SAM9260 + DS2401.
 
 Signed-off-by: Ville Syrjala [EMAIL PROTECTED]

This looks ok, thank you!
Feel free to add my ack or signed-off.

Andrew, please apply.

-- 
Evgeniy Polyakov
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] w1-gpio: Add GPIO w1 bus master driver (v2)

2007-12-21 Thread Ville Syrjala
Add a GPIO 1-wire bus master driver. The driver used the GPIO API to
control the wire and the GPIO pin can be specified using platform data
similar to i2c-gpio. The driver was tested with AT91SAM9260 + DS2401.

Signed-off-by: Ville Syrjala [EMAIL PROTECTED]
---
Version 2 of the patch changes the sizeof to use the type as requested.
I also had a better look at i2c-gpio and noticed that I should probably
call gpio_request()/gpio_free(). Those functions are no-ops on mach-at91 but
perhaps some other platforms require them. Also I removed the open-drain
requirement like i2c-gpio does by toggling the pin direction.

 Documentation/w1/masters/00-INDEX |2 +
 Documentation/w1/masters/w1-gpio  |   33 ++
 drivers/w1/masters/Kconfig|   10 +++
 drivers/w1/masters/Makefile   |1 +
 drivers/w1/masters/w1-gpio.c  |  125 +
 include/linux/w1-gpio.h   |   23 +++
 6 files changed, 194 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/w1/masters/w1-gpio
 create mode 100644 drivers/w1/masters/w1-gpio.c
 create mode 100644 include/linux/w1-gpio.h

diff --git a/Documentation/w1/masters/00-INDEX 
b/Documentation/w1/masters/00-INDEX
index 752613c..7b0ceaa 100644
--- a/Documentation/w1/masters/00-INDEX
+++ b/Documentation/w1/masters/00-INDEX
@@ -4,3 +4,5 @@ ds2482
- The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses.
 ds2490
- The Maxim/Dallas Semiconductor DS2490 builds USB - W1 bridges.
+w1-gpio
+   - GPIO 1-wire bus master driver.
diff --git a/Documentation/w1/masters/w1-gpio b/Documentation/w1/masters/w1-gpio
new file mode 100644
index 000..af5d3b4
--- /dev/null
+++ b/Documentation/w1/masters/w1-gpio
@@ -0,0 +1,33 @@
+Kernel driver w1-gpio
+=
+
+Author: Ville Syrjala [EMAIL PROTECTED]
+
+
+Description
+---
+
+GPIO 1-wire bus master driver. The driver uses the GPIO API to control the
+wire and the GPIO pin can be specified using platform data.
+
+
+Example (mach-at91)
+---
+
+#include linux/w1-gpio.h
+
+static struct w1_gpio_platform_data foo_w1_gpio_pdata = {
+   .pin= AT91_PIN_PB20,
+   .is_open_drain  = 1,
+};
+
+static struct platform_device foo_w1_device = {
+   .name   = w1-gpio,
+   .id = -1,
+   .dev.platform_data  = foo_w1_gpio_pdata,
+};
+
+...
+   at91_set_GPIO_periph(foo_w1_gpio_pdata.pin, 1);
+   at91_set_multi_drive(foo_w1_gpio_pdata.pin, 1);
+   platform_device_register(foo_w1_device);
diff --git a/drivers/w1/masters/Kconfig b/drivers/w1/masters/Kconfig
index 8236d44..c449309 100644
--- a/drivers/w1/masters/Kconfig
+++ b/drivers/w1/masters/Kconfig
@@ -42,5 +42,15 @@ config W1_MASTER_DS1WM
  in HP iPAQ devices like h5xxx, h2200, and ASIC3-based like
  hx4700.
 
+config W1_MASTER_GPIO
+   tristate GPIO 1-wire busmaster
+   depends on GENERIC_GPIO
+   help
+ Say Y here if you want to communicate with your 1-wire devices using
+ GPIO pins. This driver uses the GPIO API to control the wire.
+
+ This support is also available as a module.  If so, the module
+ will be called w1-gpio.ko.
+
 endmenu
 
diff --git a/drivers/w1/masters/Makefile b/drivers/w1/masters/Makefile
index 11551b3..1420b5b 100644
--- a/drivers/w1/masters/Makefile
+++ b/drivers/w1/masters/Makefile
@@ -6,3 +6,4 @@ obj-$(CONFIG_W1_MASTER_MATROX)  += matrox_w1.o
 obj-$(CONFIG_W1_MASTER_DS2490) += ds2490.o
 obj-$(CONFIG_W1_MASTER_DS2482) += ds2482.o
 obj-$(CONFIG_W1_MASTER_DS1WM)  += ds1wm.o
+obj-$(CONFIG_W1_MASTER_GPIO)   += w1-gpio.o
diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c
new file mode 100644
index 000..354ee6f
--- /dev/null
+++ b/drivers/w1/masters/w1-gpio.c
@@ -0,0 +1,125 @@
+/*
+ * w1-gpio - GPIO w1 bus master driver
+ *
+ * Copyright (C) 2007 Ville Syrjala [EMAIL PROTECTED]
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ */
+
+#include linux/init.h
+#include linux/module.h
+#include linux/platform_device.h
+#include linux/w1-gpio.h
+
+#include ../w1.h
+#include ../w1_int.h
+
+#include asm/gpio.h
+
+static void w1_gpio_write_bit_dir(void *data, u8 bit)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   if (bit)
+   gpio_direction_input(pdata-pin);
+   else
+   gpio_direction_output(pdata-pin, 0);
+}
+
+static void w1_gpio_write_bit_val(void *data, u8 bit)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   gpio_set_value(pdata-pin, bit);
+}
+
+static u8 w1_gpio_read_bit(void *data)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   return gpio_get_value(pdata-pin);
+}
+
+static int __init w1_gpio_probe(struct platform_device *pdev)
+{
+   struct 

Re: [PATCH] w1-gpio: Add GPIO w1 bus master driver

2007-12-21 Thread Ville Syrjälä
On Fri, Dec 21, 2007 at 01:41:28PM +0300, Evgeniy Polyakov wrote:
 Hi Ville.
 
 On Fri, Dec 21, 2007 at 09:34:01AM +0200, Ville Syrjala ([EMAIL PROTECTED]) 
 wrote:
  Add a GPIO 1-wire bus master driver. The driver used the GPIO API to
  control the wire and the GPIO pin can be specified using platform data
  similar to i2c-gpio. The driver was tested with AT91SAM9260 + DS2401.
 
 This looks ok, only a minor nit about codying style below.
 
  Signed-off-by: Ville Syrjala [EMAIL PROTECTED]
 
 ACK.
 
  +static int __init w1_gpio_probe(struct platform_device *pdev)
  +{
  +   struct w1_bus_master *master;
  +   struct w1_gpio_platform_data *pdata;
  +   int err;
  +
  +   pdata = pdev-dev.platform_data;
  +   if (!pdata)
  +   return -ENXIO;
  +
  +   master = kzalloc(sizeof *master, GFP_KERNEL);
  +   if (!master)
  +   return -ENOMEM;
 
 I think sizeof(struct w1_bus_master) is a better way.

Will change.

  new file mode 100644
  index 000..3b80bb2
  --- /dev/null
  +++ b/include/linux/w1-gpio.h
 
 Does anyone use this file except driver itself?

It's supposed to be used by the code that registers the platform device
(see the example in the documentation). No in-tree users since the board
I'm using is not supported by the kernel.

I just had a better look at i2c-gpio and noticed that I missed
gpio_request()/gpio_free() calls from the driver. Also the open-drain
requirement could be removed like i2c-gpio does. I'll send a new patch
ASAP.

-- 
Ville Syrjälä
[EMAIL PROTECTED]
http://www.sci.fi/~syrjala/
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] w1-gpio: Add GPIO w1 bus master driver

2007-12-20 Thread Ville Syrjala
Add a GPIO 1-wire bus master driver. The driver used the GPIO API to
control the wire and the GPIO pin can be specified using platform data
similar to i2c-gpio. The driver was tested with AT91SAM9260 + DS2401.

Signed-off-by: Ville Syrjala <[EMAIL PROTECTED]>
---
 Documentation/w1/masters/00-INDEX |2 +
 Documentation/w1/masters/w1-gpio  |   33 
 drivers/w1/masters/Kconfig|   10 
 drivers/w1/masters/Makefile   |1 +
 drivers/w1/masters/w1-gpio.c  |  100 +
 include/linux/w1-gpio.h   |   21 
 6 files changed, 167 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/w1/masters/w1-gpio
 create mode 100644 drivers/w1/masters/w1-gpio.c
 create mode 100644 include/linux/w1-gpio.h

diff --git a/Documentation/w1/masters/00-INDEX 
b/Documentation/w1/masters/00-INDEX
index 752613c..7b0ceaa 100644
--- a/Documentation/w1/masters/00-INDEX
+++ b/Documentation/w1/masters/00-INDEX
@@ -4,3 +4,5 @@ ds2482
- The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses.
 ds2490
- The Maxim/Dallas Semiconductor DS2490 builds USB <-> W1 bridges.
+w1-gpio
+   - GPIO 1-wire bus master driver.
diff --git a/Documentation/w1/masters/w1-gpio b/Documentation/w1/masters/w1-gpio
new file mode 100644
index 000..c927139
--- /dev/null
+++ b/Documentation/w1/masters/w1-gpio
@@ -0,0 +1,33 @@
+Kernel driver w1-gpio
+=
+
+Author: Ville Syrjala <[EMAIL PROTECTED]>
+
+
+Description
+---
+
+GPIO 1-wire bus master driver. The driver uses the GPIO API to control the
+wire and the GPIO pin can be specified using platform data. The GPIO pin
+must be configured as open-drain.
+
+
+Example (mach-at91)
+---
+
+#include 
+
+static struct w1_gpio_platform_data foo_w1_gpio_pdata = {
+   .pin = AT91_PIN_PB20,
+};
+
+static struct platform_device foo_w1_device = {
+   .name   = "w1-gpio",
+   .id = -1,
+   .dev.platform_data  = _w1_gpio_pdata,
+};
+
+...
+   at91_set_GPIO_periph(foo_w1_gpio_pdata.pin, 1);
+   at91_set_multi_drive(foo_w1_gpio_pdata.pin, 1);
+   platform_device_register(_w1_device);
diff --git a/drivers/w1/masters/Kconfig b/drivers/w1/masters/Kconfig
index 8236d44..c449309 100644
--- a/drivers/w1/masters/Kconfig
+++ b/drivers/w1/masters/Kconfig
@@ -42,5 +42,15 @@ config W1_MASTER_DS1WM
  in HP iPAQ devices like h5xxx, h2200, and ASIC3-based like
  hx4700.
 
+config W1_MASTER_GPIO
+   tristate "GPIO 1-wire busmaster"
+   depends on GENERIC_GPIO
+   help
+ Say Y here if you want to communicate with your 1-wire devices using
+ GPIO pins. This driver uses the GPIO API to control the wire.
+
+ This support is also available as a module.  If so, the module
+ will be called w1-gpio.ko.
+
 endmenu
 
diff --git a/drivers/w1/masters/Makefile b/drivers/w1/masters/Makefile
index 11551b3..1420b5b 100644
--- a/drivers/w1/masters/Makefile
+++ b/drivers/w1/masters/Makefile
@@ -6,3 +6,4 @@ obj-$(CONFIG_W1_MASTER_MATROX)  += matrox_w1.o
 obj-$(CONFIG_W1_MASTER_DS2490) += ds2490.o
 obj-$(CONFIG_W1_MASTER_DS2482) += ds2482.o
 obj-$(CONFIG_W1_MASTER_DS1WM)  += ds1wm.o
+obj-$(CONFIG_W1_MASTER_GPIO)   += w1-gpio.o
diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c
new file mode 100644
index 000..c5327df
--- /dev/null
+++ b/drivers/w1/masters/w1-gpio.c
@@ -0,0 +1,100 @@
+/*
+ * w1-gpio - GPIO w1 bus master driver
+ *
+ * Copyright (C) 2007 Ville Syrjala <[EMAIL PROTECTED]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ */
+
+#include 
+#include 
+#include 
+#include 
+
+#include "../w1.h"
+#include "../w1_int.h"
+
+#include 
+
+static void w1_gpio_write_bit(void *data, u8 bit)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   gpio_set_value(pdata->pin, bit);
+}
+
+static u8 w1_gpio_read_bit(void *data)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   return gpio_get_value(pdata->pin);
+}
+
+static int __init w1_gpio_probe(struct platform_device *pdev)
+{
+   struct w1_bus_master *master;
+   struct w1_gpio_platform_data *pdata;
+   int err;
+
+   pdata = pdev->dev.platform_data;
+   if (!pdata)
+   return -ENXIO;
+
+   master = kzalloc(sizeof *master, GFP_KERNEL);
+   if (!master)
+   return -ENOMEM;
+
+   gpio_direction_output(pdata->pin, 1);
+
+   master->data = pdata;
+   master->read_bit = _gpio_read_bit;
+   master->write_bit = _gpio_write_bit;
+
+   err = w1_add_master_device(master);
+   if (err) {
+   kfree(master);
+   return err;
+   }
+
+   platform_set_drvdata(pdev, master);
+
+   return 0;
+}
+
+static int 

[PATCH] w1-gpio: Add GPIO w1 bus master driver

2007-12-20 Thread Ville Syrjala
Add a GPIO 1-wire bus master driver. The driver used the GPIO API to
control the wire and the GPIO pin can be specified using platform data
similar to i2c-gpio. The driver was tested with AT91SAM9260 + DS2401.

Signed-off-by: Ville Syrjala [EMAIL PROTECTED]
---
 Documentation/w1/masters/00-INDEX |2 +
 Documentation/w1/masters/w1-gpio  |   33 
 drivers/w1/masters/Kconfig|   10 
 drivers/w1/masters/Makefile   |1 +
 drivers/w1/masters/w1-gpio.c  |  100 +
 include/linux/w1-gpio.h   |   21 
 6 files changed, 167 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/w1/masters/w1-gpio
 create mode 100644 drivers/w1/masters/w1-gpio.c
 create mode 100644 include/linux/w1-gpio.h

diff --git a/Documentation/w1/masters/00-INDEX 
b/Documentation/w1/masters/00-INDEX
index 752613c..7b0ceaa 100644
--- a/Documentation/w1/masters/00-INDEX
+++ b/Documentation/w1/masters/00-INDEX
@@ -4,3 +4,5 @@ ds2482
- The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses.
 ds2490
- The Maxim/Dallas Semiconductor DS2490 builds USB - W1 bridges.
+w1-gpio
+   - GPIO 1-wire bus master driver.
diff --git a/Documentation/w1/masters/w1-gpio b/Documentation/w1/masters/w1-gpio
new file mode 100644
index 000..c927139
--- /dev/null
+++ b/Documentation/w1/masters/w1-gpio
@@ -0,0 +1,33 @@
+Kernel driver w1-gpio
+=
+
+Author: Ville Syrjala [EMAIL PROTECTED]
+
+
+Description
+---
+
+GPIO 1-wire bus master driver. The driver uses the GPIO API to control the
+wire and the GPIO pin can be specified using platform data. The GPIO pin
+must be configured as open-drain.
+
+
+Example (mach-at91)
+---
+
+#include linux/w1-gpio.h
+
+static struct w1_gpio_platform_data foo_w1_gpio_pdata = {
+   .pin = AT91_PIN_PB20,
+};
+
+static struct platform_device foo_w1_device = {
+   .name   = w1-gpio,
+   .id = -1,
+   .dev.platform_data  = foo_w1_gpio_pdata,
+};
+
+...
+   at91_set_GPIO_periph(foo_w1_gpio_pdata.pin, 1);
+   at91_set_multi_drive(foo_w1_gpio_pdata.pin, 1);
+   platform_device_register(foo_w1_device);
diff --git a/drivers/w1/masters/Kconfig b/drivers/w1/masters/Kconfig
index 8236d44..c449309 100644
--- a/drivers/w1/masters/Kconfig
+++ b/drivers/w1/masters/Kconfig
@@ -42,5 +42,15 @@ config W1_MASTER_DS1WM
  in HP iPAQ devices like h5xxx, h2200, and ASIC3-based like
  hx4700.
 
+config W1_MASTER_GPIO
+   tristate GPIO 1-wire busmaster
+   depends on GENERIC_GPIO
+   help
+ Say Y here if you want to communicate with your 1-wire devices using
+ GPIO pins. This driver uses the GPIO API to control the wire.
+
+ This support is also available as a module.  If so, the module
+ will be called w1-gpio.ko.
+
 endmenu
 
diff --git a/drivers/w1/masters/Makefile b/drivers/w1/masters/Makefile
index 11551b3..1420b5b 100644
--- a/drivers/w1/masters/Makefile
+++ b/drivers/w1/masters/Makefile
@@ -6,3 +6,4 @@ obj-$(CONFIG_W1_MASTER_MATROX)  += matrox_w1.o
 obj-$(CONFIG_W1_MASTER_DS2490) += ds2490.o
 obj-$(CONFIG_W1_MASTER_DS2482) += ds2482.o
 obj-$(CONFIG_W1_MASTER_DS1WM)  += ds1wm.o
+obj-$(CONFIG_W1_MASTER_GPIO)   += w1-gpio.o
diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c
new file mode 100644
index 000..c5327df
--- /dev/null
+++ b/drivers/w1/masters/w1-gpio.c
@@ -0,0 +1,100 @@
+/*
+ * w1-gpio - GPIO w1 bus master driver
+ *
+ * Copyright (C) 2007 Ville Syrjala [EMAIL PROTECTED]
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ */
+
+#include linux/init.h
+#include linux/module.h
+#include linux/platform_device.h
+#include linux/w1-gpio.h
+
+#include ../w1.h
+#include ../w1_int.h
+
+#include asm/gpio.h
+
+static void w1_gpio_write_bit(void *data, u8 bit)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   gpio_set_value(pdata-pin, bit);
+}
+
+static u8 w1_gpio_read_bit(void *data)
+{
+   struct w1_gpio_platform_data *pdata = data;
+
+   return gpio_get_value(pdata-pin);
+}
+
+static int __init w1_gpio_probe(struct platform_device *pdev)
+{
+   struct w1_bus_master *master;
+   struct w1_gpio_platform_data *pdata;
+   int err;
+
+   pdata = pdev-dev.platform_data;
+   if (!pdata)
+   return -ENXIO;
+
+   master = kzalloc(sizeof *master, GFP_KERNEL);
+   if (!master)
+   return -ENOMEM;
+
+   gpio_direction_output(pdata-pin, 1);
+
+   master-data = pdata;
+   master-read_bit = w1_gpio_read_bit;
+   master-write_bit = w1_gpio_write_bit;
+
+   err = w1_add_master_device(master);
+   if (err) {
+   kfree(master);
+   return err;
+   }
+
+