diff options
| author | Pantelis Antoniou <panto@antoniou-consulting.com> | 2012-11-21 16:13:47 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-11-26 19:16:35 -0500 |
| commit | 8a1861d997d698a120401f3c125085679f729d64 (patch) | |
| tree | 93581cfb0f56a23ce990650521bffbd9fb77e178 | |
| parent | 277ed0d542778182c863c30bdbd2441dee3f964c (diff) | |
w1-gpio: Simplify & get rid of defines
There's no reason to have the OF defines; it complicates the driver.
There's also no need for the funky platform_driver_probe.
Add a few warnings in case there's a failure; helps us find out
what went wrong.
Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
Signed-off-by: Evgeniy Polyakov <zbr@ioremap.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
| -rw-r--r-- | drivers/w1/masters/w1-gpio.c | 58 |
1 files changed, 26 insertions, 32 deletions
diff --git a/drivers/w1/masters/w1-gpio.c b/drivers/w1/masters/w1-gpio.c index aec35bd46506..85b363a5bd0f 100644 --- a/drivers/w1/masters/w1-gpio.c +++ b/drivers/w1/masters/w1-gpio.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/of_gpio.h> | 18 | #include <linux/of_gpio.h> |
| 19 | #include <linux/pinctrl/consumer.h> | 19 | #include <linux/pinctrl/consumer.h> |
| 20 | #include <linux/err.h> | 20 | #include <linux/err.h> |
| 21 | #include <linux/of.h> | ||
| 21 | 22 | ||
| 22 | #include "../w1.h" | 23 | #include "../w1.h" |
| 23 | #include "../w1_int.h" | 24 | #include "../w1_int.h" |
| @@ -46,7 +47,6 @@ static u8 w1_gpio_read_bit(void *data) | |||
| 46 | return gpio_get_value(pdata->pin) ? 1 : 0; | 47 | return gpio_get_value(pdata->pin) ? 1 : 0; |
| 47 | } | 48 | } |
| 48 | 49 | ||
| 49 | #ifdef CONFIG_OF | ||
| 50 | static struct of_device_id w1_gpio_dt_ids[] = { | 50 | static struct of_device_id w1_gpio_dt_ids[] = { |
| 51 | { .compatible = "w1-gpio" }, | 51 | { .compatible = "w1-gpio" }, |
| 52 | {} | 52 | {} |
| @@ -57,11 +57,6 @@ static int w1_gpio_probe_dt(struct platform_device *pdev) | |||
| 57 | { | 57 | { |
| 58 | struct w1_gpio_platform_data *pdata = pdev->dev.platform_data; | 58 | struct w1_gpio_platform_data *pdata = pdev->dev.platform_data; |
| 59 | struct device_node *np = pdev->dev.of_node; | 59 | struct device_node *np = pdev->dev.of_node; |
| 60 | const struct of_device_id *of_id = | ||
| 61 | of_match_device(w1_gpio_dt_ids, &pdev->dev); | ||
| 62 | |||
| 63 | if (!of_id) | ||
| 64 | return 0; | ||
| 65 | 60 | ||
| 66 | pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); | 61 | pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); |
| 67 | if (!pdata) | 62 | if (!pdata) |
| @@ -76,12 +71,6 @@ static int w1_gpio_probe_dt(struct platform_device *pdev) | |||
| 76 | 71 | ||
| 77 | return 0; | 72 | return 0; |
| 78 | } | 73 | } |
| 79 | #else | ||
| 80 | static int w1_gpio_probe_dt(struct platform_device *pdev) | ||
| 81 | { | ||
| 82 | return 0; | ||
| 83 | } | ||
| 84 | #endif | ||
| 85 | 74 | ||
| 86 | static int __init w1_gpio_probe(struct platform_device *pdev) | 75 | static int __init w1_gpio_probe(struct platform_device *pdev) |
| 87 | { | 76 | { |
| @@ -94,28 +83,41 @@ static int __init w1_gpio_probe(struct platform_device *pdev) | |||
| 94 | if (IS_ERR(pinctrl)) | 83 | if (IS_ERR(pinctrl)) |
| 95 | dev_warn(&pdev->dev, "unable to select pin group\n"); | 84 | dev_warn(&pdev->dev, "unable to select pin group\n"); |
| 96 | 85 | ||
| 97 | err = w1_gpio_probe_dt(pdev); | 86 | if (of_have_populated_dt()) { |
| 98 | if (err < 0) | 87 | err = w1_gpio_probe_dt(pdev); |
| 99 | return err; | 88 | if (err < 0) { |
| 89 | dev_err(&pdev->dev, "Failed to parse DT\n"); | ||
| 90 | return err; | ||
| 91 | } | ||
| 92 | } | ||
| 100 | 93 | ||
| 101 | pdata = pdev->dev.platform_data; | 94 | pdata = pdev->dev.platform_data; |
| 102 | 95 | ||
| 103 | if (!pdata) | 96 | if (!pdata) { |
| 97 | dev_err(&pdev->dev, "No configuration data\n"); | ||
| 104 | return -ENXIO; | 98 | return -ENXIO; |
| 99 | } | ||
| 105 | 100 | ||
| 106 | master = kzalloc(sizeof(struct w1_bus_master), GFP_KERNEL); | 101 | master = kzalloc(sizeof(struct w1_bus_master), GFP_KERNEL); |
| 107 | if (!master) | 102 | if (!master) { |
| 103 | dev_err(&pdev->dev, "Out of memory\n"); | ||
| 108 | return -ENOMEM; | 104 | return -ENOMEM; |
| 105 | } | ||
| 109 | 106 | ||
| 110 | err = gpio_request(pdata->pin, "w1"); | 107 | err = gpio_request(pdata->pin, "w1"); |
| 111 | if (err) | 108 | if (err) { |
| 109 | dev_err(&pdev->dev, "gpio_request (pin) failed\n"); | ||
| 112 | goto free_master; | 110 | goto free_master; |
| 111 | } | ||
| 113 | 112 | ||
| 114 | if (gpio_is_valid(pdata->ext_pullup_enable_pin)) { | 113 | if (gpio_is_valid(pdata->ext_pullup_enable_pin)) { |
| 115 | err = gpio_request_one(pdata->ext_pullup_enable_pin, | 114 | err = gpio_request_one(pdata->ext_pullup_enable_pin, |
| 116 | GPIOF_INIT_LOW, "w1 pullup"); | 115 | GPIOF_INIT_LOW, "w1 pullup"); |
| 117 | if (err < 0) | 116 | if (err < 0) { |
| 117 | dev_err(&pdev->dev, "gpio_request_one " | ||
| 118 | "(ext_pullup_enable_pin) failed\n"); | ||
| 118 | goto free_gpio; | 119 | goto free_gpio; |
| 120 | } | ||
| 119 | } | 121 | } |
| 120 | 122 | ||
| 121 | master->data = pdata; | 123 | master->data = pdata; |
| @@ -130,8 +132,10 @@ static int __init w1_gpio_probe(struct platform_device *pdev) | |||
| 130 | } | 132 | } |
| 131 | 133 | ||
| 132 | err = w1_add_master_device(master); | 134 | err = w1_add_master_device(master); |
| 133 | if (err) | 135 | if (err) { |
| 136 | dev_err(&pdev->dev, "w1_add_master device failed\n"); | ||
| 134 | goto free_gpio_ext_pu; | 137 | goto free_gpio_ext_pu; |
| 138 | } | ||
| 135 | 139 | ||
| 136 | if (pdata->enable_external_pullup) | 140 | if (pdata->enable_external_pullup) |
| 137 | pdata->enable_external_pullup(1); | 141 | pdata->enable_external_pullup(1); |
| @@ -205,23 +209,13 @@ static struct platform_driver w1_gpio_driver = { | |||
| 205 | .owner = THIS_MODULE, | 209 | .owner = THIS_MODULE, |
| 206 | .of_match_table = of_match_ptr(w1_gpio_dt_ids), | 210 | .of_match_table = of_match_ptr(w1_gpio_dt_ids), |
| 207 | }, | 211 | }, |
| 212 | .probe = w1_gpio_probe, | ||
| 208 | .remove = __exit_p(w1_gpio_remove), | 213 | .remove = __exit_p(w1_gpio_remove), |
| 209 | .suspend = w1_gpio_suspend, | 214 | .suspend = w1_gpio_suspend, |
| 210 | .resume = w1_gpio_resume, | 215 | .resume = w1_gpio_resume, |
| 211 | }; | 216 | }; |
| 212 | 217 | ||
| 213 | static int __init w1_gpio_init(void) | 218 | module_platform_driver(w1_gpio_driver); |
| 214 | { | ||
| 215 | return platform_driver_probe(&w1_gpio_driver, w1_gpio_probe); | ||
| 216 | } | ||
| 217 | |||
| 218 | static void __exit w1_gpio_exit(void) | ||
| 219 | { | ||
| 220 | platform_driver_unregister(&w1_gpio_driver); | ||
| 221 | } | ||
| 222 | |||
| 223 | module_init(w1_gpio_init); | ||
| 224 | module_exit(w1_gpio_exit); | ||
| 225 | 219 | ||
| 226 | MODULE_DESCRIPTION("GPIO w1 bus master driver"); | 220 | MODULE_DESCRIPTION("GPIO w1 bus master driver"); |
| 227 | MODULE_AUTHOR("Ville Syrjala <syrjala@sci.fi>"); | 221 | MODULE_AUTHOR("Ville Syrjala <syrjala@sci.fi>"); |
