hte.gpio_out = gpiod_get(&pdev->dev, "out", 0); if (IS_ERR(hte.gpio_out)) {
dev_err(&pdev->dev, "failed to get gpio out\n");
ret = -EINVAL; goto out;
}
hte.gpio_in = gpiod_get(&pdev->dev, "in", 0); if (IS_ERR(hte.gpio_in)) {
dev_err(&pdev->dev, "failed to get gpio in\n");
ret = -EINVAL; goto free_gpio_out;
}
ret = gpiod_direction_output(hte.gpio_out, 0); if (ret) {
dev_err(&pdev->dev, "failed to set output\n");
ret = -EINVAL; goto free_gpio_in;
}
ret = gpiod_direction_input(hte.gpio_in); if (ret) {
dev_err(&pdev->dev, "failed to set input\n");
ret = -EINVAL; goto free_gpio_in;
}
ret = gpiod_to_irq(hte.gpio_in); if (ret < 0) {
dev_err(&pdev->dev, "failed to map GPIO to IRQ: %d\n", ret);
ret = -ENXIO; goto free_gpio_in;
}
hte.gpio_in_irq = ret;
ret = request_irq(ret, tegra_hte_test_gpio_isr,
IRQF_TRIGGER_RISING, "tegra_hte_gpio_test_isr", &hte); if (ret) {
dev_err(&pdev->dev, "failed to acquire IRQ\n");
ret = -ENXIO; goto free_irq;
}
cnt = of_hte_req_count(hte.pdev); if (cnt < 0) {
ret = cnt; goto free_irq;
}
hte.desc = devm_kzalloc(hte.pdev, sizeof(*hte.desc) * cnt, GFP_KERNEL); if (!hte.desc) {
ret = -ENOMEM; goto free_irq;
}
for (i = 0; i < cnt; i++) { if (i == 0) /* *GPIOhteinit,line_idandnamewillbeparsedfrom *thedevicetreenode.Theedge_flagisimplicitly *setbyrequest_irqcall.Onlyline_dataisneededtobe *set.
*/
hte_init_line_attr(&hte.desc[i], 0, 0, NULL,
hte.gpio_in); else /* *samecommentasaboveexceptthatIRQdoesnotneed *linedata.
*/
hte_init_line_attr(&hte.desc[i], 0, 0, NULL, NULL);
ret = hte_ts_get(hte.pdev, &hte.desc[i], i); if (ret) goto ts_put;
ret = devm_hte_request_ts_ns(hte.pdev, &hte.desc[i],
process_hw_ts, NULL,
&hte.desc[i]); if (ret) /* no need to ts_put, request API takes care */ goto free_irq;
}
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.