aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-rdc321x.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpio/gpio-rdc321x.c')
-rw-r--r--drivers/gpio/gpio-rdc321x.c23
1 files changed, 7 insertions, 16 deletions
diff --git a/drivers/gpio/gpio-rdc321x.c b/drivers/gpio/gpio-rdc321x.c
index 88577c3272a5..9fa7e53331c9 100644
--- a/drivers/gpio/gpio-rdc321x.c
+++ b/drivers/gpio/gpio-rdc321x.c
@@ -141,17 +141,15 @@ static int rdc321x_gpio_probe(struct platform_device *pdev)
141 return -ENODEV; 141 return -ENODEV;
142 } 142 }
143 143
144 rdc321x_gpio_dev = kzalloc(sizeof(struct rdc321x_gpio), GFP_KERNEL); 144 rdc321x_gpio_dev = devm_kzalloc(&pdev->dev, sizeof(struct rdc321x_gpio),
145 if (!rdc321x_gpio_dev) { 145 GFP_KERNEL);
146 dev_err(&pdev->dev, "failed to allocate private data\n"); 146 if (!rdc321x_gpio_dev)
147 return -ENOMEM; 147 return -ENOMEM;
148 }
149 148
150 r = platform_get_resource_byname(pdev, IORESOURCE_IO, "gpio-reg1"); 149 r = platform_get_resource_byname(pdev, IORESOURCE_IO, "gpio-reg1");
151 if (!r) { 150 if (!r) {
152 dev_err(&pdev->dev, "failed to get gpio-reg1 resource\n"); 151 dev_err(&pdev->dev, "failed to get gpio-reg1 resource\n");
153 err = -ENODEV; 152 return -ENODEV;
154 goto out_free;
155 } 153 }
156 154
157 spin_lock_init(&rdc321x_gpio_dev->lock); 155 spin_lock_init(&rdc321x_gpio_dev->lock);
@@ -162,8 +160,7 @@ static int rdc321x_gpio_probe(struct platform_device *pdev)
162 r = platform_get_resource_byname(pdev, IORESOURCE_IO, "gpio-reg2"); 160 r = platform_get_resource_byname(pdev, IORESOURCE_IO, "gpio-reg2");
163 if (!r) { 161 if (!r) {
164 dev_err(&pdev->dev, "failed to get gpio-reg2 resource\n"); 162 dev_err(&pdev->dev, "failed to get gpio-reg2 resource\n");
165 err = -ENODEV; 163 return -ENODEV;
166 goto out_free;
167 } 164 }
168 165
169 rdc321x_gpio_dev->reg2_ctrl_base = r->start; 166 rdc321x_gpio_dev->reg2_ctrl_base = r->start;
@@ -187,21 +184,17 @@ static int rdc321x_gpio_probe(struct platform_device *pdev)
187 rdc321x_gpio_dev->reg1_data_base, 184 rdc321x_gpio_dev->reg1_data_base,
188 &rdc321x_gpio_dev->data_reg[0]); 185 &rdc321x_gpio_dev->data_reg[0]);
189 if (err) 186 if (err)
190 goto out_free; 187 return err;
191 188
192 err = pci_read_config_dword(rdc321x_gpio_dev->sb_pdev, 189 err = pci_read_config_dword(rdc321x_gpio_dev->sb_pdev,
193 rdc321x_gpio_dev->reg2_data_base, 190 rdc321x_gpio_dev->reg2_data_base,
194 &rdc321x_gpio_dev->data_reg[1]); 191 &rdc321x_gpio_dev->data_reg[1]);
195 if (err) 192 if (err)
196 goto out_free; 193 return err;
197 194
198 dev_info(&pdev->dev, "registering %d GPIOs\n", 195 dev_info(&pdev->dev, "registering %d GPIOs\n",
199 rdc321x_gpio_dev->chip.ngpio); 196 rdc321x_gpio_dev->chip.ngpio);
200 return gpiochip_add(&rdc321x_gpio_dev->chip); 197 return gpiochip_add(&rdc321x_gpio_dev->chip);
201
202out_free:
203 kfree(rdc321x_gpio_dev);
204 return err;
205} 198}
206 199
207static int rdc321x_gpio_remove(struct platform_device *pdev) 200static int rdc321x_gpio_remove(struct platform_device *pdev)
@@ -213,8 +206,6 @@ static int rdc321x_gpio_remove(struct platform_device *pdev)
213 if (ret) 206 if (ret)
214 dev_err(&pdev->dev, "failed to unregister chip\n"); 207 dev_err(&pdev->dev, "failed to unregister chip\n");
215 208
216 kfree(rdc321x_gpio_dev);
217
218 return ret; 209 return ret;
219} 210}
220 211