printk(KERN_EMERG "\n\nCritical Temperature Shutdown\n\n");
while (1) { if (dtm_fpga) { unsigned reset = in_be32(dtm_fpga + 0x14);
out_be32(dtm_fpga + 0x14, reset);
}
gpiod_set_value(warp_gpio_led_pins[WARP_RED_LED].gpiod, value);
value ^= 1;
mdelay(500);
}
/* Not reached */ return IRQ_HANDLED;
}
/* * Because green and red power LEDs are normally driven by leds-gpio driver, * but in case of critical temperature shutdown we want to drive them * ourselves, we acquire both and then create leds-gpio platform device * ourselves, instead of doing it through device tree. This way we can still * keep access to the gpios and use them when needed.
*/ staticint pika_setup_leds(void)
{ struct device_node *np, *child; struct gpio_desc *gpio; struct gpio_led *led; int led_count = 0; int error; int i;
np = of_find_compatible_node(NULL, NULL, "warp-power-leds"); if (!np) {
printk(KERN_ERR __FILE__ ": Unable to find leds\n"); return -ENOENT;
}
for_each_child_of_node(np, child) { for (i = 0; i < ARRAY_SIZE(warp_gpio_led_pins); i++) {
led = &warp_gpio_led_pins[i];
if (!of_node_name_eq(child, led->name)) continue;
if (led->gpiod) {
printk(KERN_ERR __FILE__ ": %s led has already been defined\n",
led->name); continue;
}
gpio = fwnode_gpiod_get_index(of_fwnode_handle(child),
NULL, 0, GPIOD_ASIS,
led->name);
error = PTR_ERR_OR_ZERO(gpio); if (error) {
printk(KERN_ERR __FILE__ ": Failed to get %s led gpio: %d\n",
led->name, error);
of_node_put(child); goto err_cleanup_pins;
}
led->gpiod = gpio;
led_count++;
}
}
of_node_put(np);
/* Skip device registration if no leds have been defined */ if (led_count) {
error = platform_device_register(&warp_gpio_leds); if (error) {
printk(KERN_ERR __FILE__ ": Unable to add leds-gpio: %d\n",
error); goto err_cleanup_pins;
}
}
return 0;
err_cleanup_pins: for (i = 0; i < ARRAY_SIZE(warp_gpio_led_pins); i++) {
led = &warp_gpio_led_pins[i];
gpiod_put(led->gpiod);
led->gpiod = NULL;
} return error;
}
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.