diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-01-06 12:50:14 -0500 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-01-22 03:23:17 -0500 |
commit | bcf4b0460ba558b1e1fcaa7c160076751b560d03 (patch) | |
tree | 15b7e2d99a0507930dcbf9432632a2bdd3ae992a /drivers/input/misc/pwm-beeper.c | |
parent | 2031717544cab77b9b6fd8c33fd24cbbe2f607b6 (diff) |
Input: pwm-beeper - switch to using managed resources
Use of managed resources (devm) simplifies error handling and tear down
of the driver.
Reviewed-by: Thierry Reding <thierry.reding@gmail.com>
Tested-by: David Lechner <david@lechnology.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input/misc/pwm-beeper.c')
-rw-r--r-- | drivers/input/misc/pwm-beeper.c | 44 |
1 files changed, 10 insertions, 34 deletions
diff --git a/drivers/input/misc/pwm-beeper.c b/drivers/input/misc/pwm-beeper.c index cb87e475bd23..f8b163b0eb43 100644 --- a/drivers/input/misc/pwm-beeper.c +++ b/drivers/input/misc/pwm-beeper.c | |||
@@ -95,18 +95,19 @@ static void pwm_beeper_close(struct input_dev *input) | |||
95 | 95 | ||
96 | static int pwm_beeper_probe(struct platform_device *pdev) | 96 | static int pwm_beeper_probe(struct platform_device *pdev) |
97 | { | 97 | { |
98 | struct device *dev = &pdev->dev; | ||
98 | struct pwm_beeper *beeper; | 99 | struct pwm_beeper *beeper; |
99 | int error; | 100 | int error; |
100 | 101 | ||
101 | beeper = kzalloc(sizeof(*beeper), GFP_KERNEL); | 102 | beeper = devm_kzalloc(dev, sizeof(*beeper), GFP_KERNEL); |
102 | if (!beeper) | 103 | if (!beeper) |
103 | return -ENOMEM; | 104 | return -ENOMEM; |
104 | 105 | ||
105 | beeper->pwm = pwm_get(&pdev->dev, NULL); | 106 | beeper->pwm = devm_pwm_get(dev, NULL); |
106 | if (IS_ERR(beeper->pwm)) { | 107 | if (IS_ERR(beeper->pwm)) { |
107 | error = PTR_ERR(beeper->pwm); | 108 | error = PTR_ERR(beeper->pwm); |
108 | dev_err(&pdev->dev, "Failed to request pwm device: %d\n", error); | 109 | dev_err(dev, "Failed to request PWM device: %d\n", error); |
109 | goto err_free; | 110 | return error; |
110 | } | 111 | } |
111 | 112 | ||
112 | /* | 113 | /* |
@@ -117,13 +118,11 @@ static int pwm_beeper_probe(struct platform_device *pdev) | |||
117 | 118 | ||
118 | INIT_WORK(&beeper->work, pwm_beeper_work); | 119 | INIT_WORK(&beeper->work, pwm_beeper_work); |
119 | 120 | ||
120 | beeper->input = input_allocate_device(); | 121 | beeper->input = devm_input_allocate_device(dev); |
121 | if (!beeper->input) { | 122 | if (!beeper->input) { |
122 | dev_err(&pdev->dev, "Failed to allocate input device\n"); | 123 | dev_err(dev, "Failed to allocate input device\n"); |
123 | error = -ENOMEM; | 124 | return -ENOMEM; |
124 | goto err_pwm_free; | ||
125 | } | 125 | } |
126 | beeper->input->dev.parent = &pdev->dev; | ||
127 | 126 | ||
128 | beeper->input->name = "pwm-beeper"; | 127 | beeper->input->name = "pwm-beeper"; |
129 | beeper->input->phys = "pwm/input0"; | 128 | beeper->input->phys = "pwm/input0"; |
@@ -142,35 +141,13 @@ static int pwm_beeper_probe(struct platform_device *pdev) | |||
142 | 141 | ||
143 | error = input_register_device(beeper->input); | 142 | error = input_register_device(beeper->input); |
144 | if (error) { | 143 | if (error) { |
145 | dev_err(&pdev->dev, "Failed to register input device: %d\n", error); | 144 | dev_err(dev, "Failed to register input device: %d\n", error); |
146 | goto err_input_free; | 145 | return error; |
147 | } | 146 | } |
148 | 147 | ||
149 | platform_set_drvdata(pdev, beeper); | 148 | platform_set_drvdata(pdev, beeper); |
150 | 149 | ||
151 | return 0; | 150 | return 0; |
152 | |||
153 | err_input_free: | ||
154 | input_free_device(beeper->input); | ||
155 | err_pwm_free: | ||
156 | pwm_free(beeper->pwm); | ||
157 | err_free: | ||
158 | kfree(beeper); | ||
159 | |||
160 | return error; | ||
161 | } | ||
162 | |||
163 | static int pwm_beeper_remove(struct platform_device *pdev) | ||
164 | { | ||
165 | struct pwm_beeper *beeper = platform_get_drvdata(pdev); | ||
166 | |||
167 | input_unregister_device(beeper->input); | ||
168 | |||
169 | pwm_free(beeper->pwm); | ||
170 | |||
171 | kfree(beeper); | ||
172 | |||
173 | return 0; | ||
174 | } | 151 | } |
175 | 152 | ||
176 | static int __maybe_unused pwm_beeper_suspend(struct device *dev) | 153 | static int __maybe_unused pwm_beeper_suspend(struct device *dev) |
@@ -205,7 +182,6 @@ MODULE_DEVICE_TABLE(of, pwm_beeper_match); | |||
205 | 182 | ||
206 | static struct platform_driver pwm_beeper_driver = { | 183 | static struct platform_driver pwm_beeper_driver = { |
207 | .probe = pwm_beeper_probe, | 184 | .probe = pwm_beeper_probe, |
208 | .remove = pwm_beeper_remove, | ||
209 | .driver = { | 185 | .driver = { |
210 | .name = "pwm-beeper", | 186 | .name = "pwm-beeper", |
211 | .pm = &pwm_beeper_pm_ops, | 187 | .pm = &pwm_beeper_pm_ops, |