static int siox_gpio_probe()

in siox-bus-gpio.c [87:144]


static int siox_gpio_probe(struct platform_device *pdev)
{
	struct device *dev = &pdev->dev;
	struct siox_gpio_ddata *ddata;
	int ret;
	struct siox_master *smaster;

	smaster = siox_master_alloc(&pdev->dev, sizeof(*ddata));
	if (!smaster) {
		dev_err(dev, "failed to allocate siox master\n");
		return -ENOMEM;
	}

	platform_set_drvdata(pdev, smaster);
	ddata = siox_master_get_devdata(smaster);

	ddata->din = devm_gpiod_get(dev, "din", GPIOD_IN);
	if (IS_ERR(ddata->din)) {
		ret = dev_err_probe(dev, PTR_ERR(ddata->din),
				    "Failed to get din GPIO\n");
		goto err;
	}

	ddata->dout = devm_gpiod_get(dev, "dout", GPIOD_OUT_LOW);
	if (IS_ERR(ddata->dout)) {
		ret = dev_err_probe(dev, PTR_ERR(ddata->dout),
				    "Failed to get dout GPIO\n");
		goto err;
	}

	ddata->dclk = devm_gpiod_get(dev, "dclk", GPIOD_OUT_LOW);
	if (IS_ERR(ddata->dclk)) {
		ret = dev_err_probe(dev, PTR_ERR(ddata->dclk),
				    "Failed to get dclk GPIO\n");
		goto err;
	}

	ddata->dld = devm_gpiod_get(dev, "dld", GPIOD_OUT_LOW);
	if (IS_ERR(ddata->dld)) {
		ret = dev_err_probe(dev, PTR_ERR(ddata->dld),
				    "Failed to get dld GPIO\n");
		goto err;
	}

	smaster->pushpull = siox_gpio_pushpull;
	/* XXX: determine automatically like spi does */
	smaster->busno = 0;

	ret = siox_master_register(smaster);
	if (ret) {
		dev_err_probe(dev, ret,
			      "Failed to register siox master\n");
err:
		siox_master_put(smaster);
	}

	return ret;
}