/* * Cache the initial value of both GPIO data registers
*/ staticint rdc321x_gpio_probe(struct platform_device *pdev)
{ int err; struct resource *r; struct rdc321x_gpio *rdc321x_gpio_dev; struct rdc321x_gpio_pdata *pdata;
pdata = dev_get_platdata(&pdev->dev); if (!pdata) {
dev_err(&pdev->dev, "no platform data supplied\n"); return -ENODEV;
}
rdc321x_gpio_dev = devm_kzalloc(&pdev->dev, sizeof(struct rdc321x_gpio),
GFP_KERNEL); if (!rdc321x_gpio_dev) return -ENOMEM;
r = platform_get_resource_byname(pdev, IORESOURCE_IO, "gpio-reg1"); if (!r) {
dev_err(&pdev->dev, "failed to get gpio-reg1 resource\n"); return -ENODEV;
}
r = platform_get_resource_byname(pdev, IORESOURCE_IO, "gpio-reg2"); if (!r) {
dev_err(&pdev->dev, "failed to get gpio-reg2 resource\n"); return -ENODEV;
}
/* This might not be, what others (BIOS, bootloader, etc.) wrote to these registers before, but it's a good guess. Still
better than just using 0xffffffff. */
err = pci_read_config_dword(rdc321x_gpio_dev->sb_pdev,
rdc321x_gpio_dev->reg1_data_base,
&rdc321x_gpio_dev->data_reg[0]); if (err) return pcibios_err_to_errno(err);
err = pci_read_config_dword(rdc321x_gpio_dev->sb_pdev,
rdc321x_gpio_dev->reg2_data_base,
&rdc321x_gpio_dev->data_reg[1]); if (err) return pcibios_err_to_errno(err);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.