diff options
Diffstat (limited to 'drivers/input')
-rw-r--r-- | drivers/input/keyboard/sh_keysc.c | 27 |
1 files changed, 7 insertions, 20 deletions
diff --git a/drivers/input/keyboard/sh_keysc.c b/drivers/input/keyboard/sh_keysc.c index 8486abc457ed..c600ab7f93e8 100644 --- a/drivers/input/keyboard/sh_keysc.c +++ b/drivers/input/keyboard/sh_keysc.c | |||
@@ -158,25 +158,18 @@ static int __devinit sh_keysc_probe(struct platform_device *pdev) | |||
158 | memcpy(&priv->pdata, pdev->dev.platform_data, sizeof(priv->pdata)); | 158 | memcpy(&priv->pdata, pdev->dev.platform_data, sizeof(priv->pdata)); |
159 | pdata = &priv->pdata; | 159 | pdata = &priv->pdata; |
160 | 160 | ||
161 | res = request_mem_region(res->start, res_size(res), pdev->name); | ||
162 | if (res == NULL) { | ||
163 | dev_err(&pdev->dev, "failed to request I/O memory\n"); | ||
164 | error = -EBUSY; | ||
165 | goto err1; | ||
166 | } | ||
167 | |||
168 | priv->iomem_base = ioremap_nocache(res->start, res_size(res)); | 161 | priv->iomem_base = ioremap_nocache(res->start, res_size(res)); |
169 | if (priv->iomem_base == NULL) { | 162 | if (priv->iomem_base == NULL) { |
170 | dev_err(&pdev->dev, "failed to remap I/O memory\n"); | 163 | dev_err(&pdev->dev, "failed to remap I/O memory\n"); |
171 | error = -ENXIO; | 164 | error = -ENXIO; |
172 | goto err2; | 165 | goto err1; |
173 | } | 166 | } |
174 | 167 | ||
175 | priv->input = input_allocate_device(); | 168 | priv->input = input_allocate_device(); |
176 | if (!priv->input) { | 169 | if (!priv->input) { |
177 | dev_err(&pdev->dev, "failed to allocate input device\n"); | 170 | dev_err(&pdev->dev, "failed to allocate input device\n"); |
178 | error = -ENOMEM; | 171 | error = -ENOMEM; |
179 | goto err3; | 172 | goto err2; |
180 | } | 173 | } |
181 | 174 | ||
182 | input = priv->input; | 175 | input = priv->input; |
@@ -194,7 +187,7 @@ static int __devinit sh_keysc_probe(struct platform_device *pdev) | |||
194 | error = request_irq(irq, sh_keysc_isr, 0, pdev->name, pdev); | 187 | error = request_irq(irq, sh_keysc_isr, 0, pdev->name, pdev); |
195 | if (error) { | 188 | if (error) { |
196 | dev_err(&pdev->dev, "failed to request IRQ\n"); | 189 | dev_err(&pdev->dev, "failed to request IRQ\n"); |
197 | goto err4; | 190 | goto err3; |
198 | } | 191 | } |
199 | 192 | ||
200 | for (i = 0; i < SH_KEYSC_MAXKEYS; i++) { | 193 | for (i = 0; i < SH_KEYSC_MAXKEYS; i++) { |
@@ -206,7 +199,7 @@ static int __devinit sh_keysc_probe(struct platform_device *pdev) | |||
206 | error = input_register_device(input); | 199 | error = input_register_device(input); |
207 | if (error) { | 200 | if (error) { |
208 | dev_err(&pdev->dev, "failed to register input device\n"); | 201 | dev_err(&pdev->dev, "failed to register input device\n"); |
209 | goto err5; | 202 | goto err4; |
210 | } | 203 | } |
211 | 204 | ||
212 | iowrite16((sh_keysc_mode[pdata->mode].kymd << 8) | | 205 | iowrite16((sh_keysc_mode[pdata->mode].kymd << 8) | |
@@ -214,14 +207,12 @@ static int __devinit sh_keysc_probe(struct platform_device *pdev) | |||
214 | iowrite16(0, priv->iomem_base + KYOUTDR_OFFS); | 207 | iowrite16(0, priv->iomem_base + KYOUTDR_OFFS); |
215 | iowrite16(KYCR2_IRQ_LEVEL, priv->iomem_base + KYCR2_OFFS); | 208 | iowrite16(KYCR2_IRQ_LEVEL, priv->iomem_base + KYCR2_OFFS); |
216 | return 0; | 209 | return 0; |
217 | err5: | ||
218 | free_irq(irq, pdev); | ||
219 | err4: | 210 | err4: |
220 | input_free_device(input); | 211 | free_irq(irq, pdev); |
221 | err3: | 212 | err3: |
222 | iounmap(priv->iomem_base); | 213 | input_free_device(input); |
223 | err2: | 214 | err2: |
224 | release_mem_region(res->start, res_size(res)); | 215 | iounmap(priv->iomem_base); |
225 | err1: | 216 | err1: |
226 | platform_set_drvdata(pdev, NULL); | 217 | platform_set_drvdata(pdev, NULL); |
227 | kfree(priv); | 218 | kfree(priv); |
@@ -232,7 +223,6 @@ static int __devinit sh_keysc_probe(struct platform_device *pdev) | |||
232 | static int __devexit sh_keysc_remove(struct platform_device *pdev) | 223 | static int __devexit sh_keysc_remove(struct platform_device *pdev) |
233 | { | 224 | { |
234 | struct sh_keysc_priv *priv = platform_get_drvdata(pdev); | 225 | struct sh_keysc_priv *priv = platform_get_drvdata(pdev); |
235 | struct resource *res; | ||
236 | 226 | ||
237 | iowrite16(KYCR2_IRQ_DISABLED, priv->iomem_base + KYCR2_OFFS); | 227 | iowrite16(KYCR2_IRQ_DISABLED, priv->iomem_base + KYCR2_OFFS); |
238 | 228 | ||
@@ -240,9 +230,6 @@ static int __devexit sh_keysc_remove(struct platform_device *pdev) | |||
240 | free_irq(platform_get_irq(pdev, 0), pdev); | 230 | free_irq(platform_get_irq(pdev, 0), pdev); |
241 | iounmap(priv->iomem_base); | 231 | iounmap(priv->iomem_base); |
242 | 232 | ||
243 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
244 | release_mem_region(res->start, res_size(res)); | ||
245 | |||
246 | platform_set_drvdata(pdev, NULL); | 233 | platform_set_drvdata(pdev, NULL); |
247 | kfree(priv); | 234 | kfree(priv); |
248 | return 0; | 235 | return 0; |