static int bgpio_dev_probe(struct device_d *dev) { struct resource *r; void __iomem *dat; void __iomem *set; void __iomem *clr; void __iomem *dirout; void __iomem *dirin; unsigned int sz; unsigned long flags = 0; int err; struct bgpio_chip *bgc; struct bgpio_pdata *pdata = dev->platform_data; r = dev_get_resource_by_name(dev, IORESOURCE_MEM, "dat"); if (IS_ERR(r)) return PTR_ERR(r); sz = resource_size(r); dat = bgpio_map(dev, "dat", sz, &err); if (!dat) return err ? err : -EINVAL; set = bgpio_map(dev, "set", sz, &err); if (err) return err; clr = bgpio_map(dev, "clr", sz, &err); if (err) return err; dirout = bgpio_map(dev, "dirout", sz, &err); if (err) return err; dirin = bgpio_map(dev, "dirin", sz, &err); if (err) return err; dev_get_drvdata(dev, (const void **)&flags); bgc = xzalloc(sizeof(struct bgpio_chip)); err = bgpio_init(bgc, dev, sz, dat, set, clr, dirout, dirin, flags); if (err) return err; if (pdata) { bgc->gc.base = pdata->base; if (pdata->ngpio > 0) bgc->gc.ngpio = pdata->ngpio; } dev->priv = bgc; return gpiochip_add(&bgc->gc); }
static int bgpio_pdev_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct resource *r; void __iomem *dat; void __iomem *set; void __iomem *clr; void __iomem *dirout; void __iomem *dirin; unsigned long sz; unsigned long flags = pdev->id_entry->driver_data; int err; struct bgpio_chip *bgc; struct bgpio_pdata *pdata = dev_get_platdata(dev); r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat"); if (!r) return -EINVAL; sz = resource_size(r); dat = bgpio_map(pdev, "dat", sz); if (IS_ERR(dat)) return PTR_ERR(dat); set = bgpio_map(pdev, "set", sz); if (IS_ERR(set)) return PTR_ERR(set); clr = bgpio_map(pdev, "clr", sz); if (IS_ERR(clr)) return PTR_ERR(clr); dirout = bgpio_map(pdev, "dirout", sz); if (IS_ERR(dirout)) return PTR_ERR(dirout); dirin = bgpio_map(pdev, "dirin", sz); if (IS_ERR(dirin)) return PTR_ERR(dirin); bgc = devm_kzalloc(&pdev->dev, sizeof(*bgc), GFP_KERNEL); if (!bgc) return -ENOMEM; err = bgpio_init(bgc, dev, sz, dat, set, clr, dirout, dirin, flags); if (err) return err; if (pdata) { if (pdata->label) bgc->gc.label = pdata->label; bgc->gc.base = pdata->base;
static int __devinit bgpio_pdev_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct resource *r; void __iomem *dat; void __iomem *set; void __iomem *clr; void __iomem *dirout; void __iomem *dirin; unsigned long sz; bool be; int err; struct bgpio_chip *bgc; struct bgpio_pdata *pdata = dev_get_platdata(dev); r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat"); if (!r) return -EINVAL; sz = resource_size(r); dat = bgpio_map(pdev, "dat", sz, &err); if (!dat) return err ? err : -EINVAL; set = bgpio_map(pdev, "set", sz, &err); if (err) return err; clr = bgpio_map(pdev, "clr", sz, &err); if (err) return err; dirout = bgpio_map(pdev, "dirout", sz, &err); if (err) return err; dirin = bgpio_map(pdev, "dirin", sz, &err); if (err) return err; be = !strcmp(platform_get_device_id(pdev)->name, "basic-mmio-gpio-be"); bgc = devm_kzalloc(&pdev->dev, sizeof(*bgc), GFP_KERNEL); if (!bgc) return -ENOMEM; err = bgpio_init(bgc, dev, sz, dat, set, clr, dirout, dirin, be); if (err) return err; if (pdata) { bgc->gc.base = pdata->base; if (pdata->ngpio > 0) bgc->gc.ngpio = pdata->ngpio; } platform_set_drvdata(pdev, bgc); return gpiochip_add(&bgc->gc); }
static int bgpio_pdev_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct resource *r; void __iomem *dat; void __iomem *set; void __iomem *clr; void __iomem *dirout; void __iomem *dirin; unsigned long sz; unsigned long flags = 0; int err; struct gpio_chip *gc; struct bgpio_pdata *pdata; pdata = bgpio_parse_dt(pdev, &flags); if (IS_ERR(pdata)) return PTR_ERR(pdata); if (!pdata) { pdata = dev_get_platdata(dev); flags = pdev->id_entry->driver_data; } r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dat"); if (!r) return -EINVAL; sz = resource_size(r); dat = bgpio_map(pdev, "dat", sz); if (IS_ERR(dat)) return PTR_ERR(dat); set = bgpio_map(pdev, "set", sz); if (IS_ERR(set)) return PTR_ERR(set); clr = bgpio_map(pdev, "clr", sz); if (IS_ERR(clr)) return PTR_ERR(clr); dirout = bgpio_map(pdev, "dirout", sz); if (IS_ERR(dirout)) return PTR_ERR(dirout); dirin = bgpio_map(pdev, "dirin", sz); if (IS_ERR(dirin)) return PTR_ERR(dirin); gc = devm_kzalloc(&pdev->dev, sizeof(*gc), GFP_KERNEL); if (!gc) return -ENOMEM; err = bgpio_init(gc, dev, sz, dat, set, clr, dirout, dirin, flags); if (err) return err; if (pdata) { if (pdata->label) gc->label = pdata->label; gc->base = pdata->base; if (pdata->ngpio > 0) gc->ngpio = pdata->ngpio; } platform_set_drvdata(pdev, gc); return devm_gpiochip_add_data(&pdev->dev, gc, NULL); }