185
186 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
187 if (!r)
188 return -ENXIO;
189
190 if (!request_mem_region(r->start, r->end - r->start + 1, "pasic3"))
191 return -EBUSY;
192
193 asic = kzalloc(sizeof(struct pasic3_data), GFP_KERNEL);
194 if (!asic)
195 return -ENOMEM;
196
197 platform_set_drvdata(pdev, asic);
198
199 if (pdata && pdata->bus_shift)
200 asic->bus_shift = pdata->bus_shift;
201 else
202 asic->bus_shift = 2;
203
204 asic->mapping = ioremap(r->start, r->end - r->start + 1);
205 if (!asic->mapping) {
206 dev_err(dev, "couldn't ioremap PASIC3\n");
207 kfree(asic);
208 return -ENOMEM;
209 }
210
211 ret = ds1wm_device_add(pdev, asic->bus_shift);
212 if (ret < 0)
213 dev_warn(dev, "failed to register DS1WM\n");
214
215 if (pdata->led_pdata) {
216 ret = led_device_add(dev, pdata->led_pdata);
217 if (ret < 0)
218 dev_warn(dev, "failed to register LED device\n");
219 }
220
221 return 0;
222}
223
224static int pasic3_remove(struct platform_device *pdev)
225{