Ping. On 25.07.2012 22:54, Daniel Mack wrote: > In the process of porting boards to devicetree implemenation, we should > keep information about external circuitry where they belong - the > individual drivers. > > This patch adds a way to specify a GPIO to drive the (optional) external > pull-up logic, rather than using a function pointer for that. > > Signed-off-by: Daniel Mack <zon...@gmail.com> > Cc: Evgeniy Polyakov <z...@ioremap.net> > Cc: Ville Syrjala <syrj...@sci.fi> > --- > drivers/w1/masters/w1-gpio.c | 18 +++++++++++++++++- > include/linux/w1-gpio.h | 1 + > 2 files changed, 18 insertions(+), 1 deletion(-) > > diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c > index df600d1..dac88ff 100644 > --- a/drivers/w1/masters/w1-gpio.c > +++ b/drivers/w1/masters/w1-gpio.c > @@ -59,6 +59,13 @@ static int __init w1_gpio_probe(struct platform_device > *pdev) > if (err) > goto free_master; > > + if (gpio_is_valid(pdata->ext_pullup_enable_pin)) { > + err = gpio_request_one(pdata->ext_pullup_enable_pin, > + GPIOF_INIT_LOW, "w1 pullup"); > + if (err < 0) > + goto free_gpio; > + } > + > master->data = pdata; > master->read_bit = w1_gpio_read_bit; > > @@ -72,15 +79,21 @@ static int __init w1_gpio_probe(struct platform_device > *pdev) > > err = w1_add_master_device(master); > if (err) > - goto free_gpio; > + goto free_gpio_ext_pu; > > if (pdata->enable_external_pullup) > pdata->enable_external_pullup(1); > > + if (gpio_is_valid(pdata->ext_pullup_enable_pin)) > + gpio_set_value(pdata->ext_pullup_enable_pin, 1); > + > platform_set_drvdata(pdev, master); > > return 0; > > + free_gpio_ext_pu: > + if (gpio_is_valid(pdata->ext_pullup_enable_pin)) > + gpio_free(pdata->ext_pullup_enable_pin); > free_gpio: > gpio_free(pdata->pin); > free_master: > @@ -97,6 +110,9 @@ static int __exit w1_gpio_remove(struct platform_device > *pdev) > if (pdata->enable_external_pullup) > pdata->enable_external_pullup(0); > > + if (gpio_is_valid(pdata->ext_pullup_enable_pin)) > + gpio_set_value(pdata->ext_pullup_enable_pin, 0); > + > w1_remove_master_device(master); > gpio_free(pdata->pin); > kfree(master); > diff --git a/include/linux/w1-gpio.h b/include/linux/w1-gpio.h > index 3adeff8..065e3ae 100644 > --- a/include/linux/w1-gpio.h > +++ b/include/linux/w1-gpio.h > @@ -19,6 +19,7 @@ struct w1_gpio_platform_data { > unsigned int pin; > unsigned int is_open_drain:1; > void (*enable_external_pullup)(int enable); > + unsigned int ext_pullup_enable_pin; > }; > > #endif /* _LINUX_W1_GPIO_H */ >
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/