#include #include #include #include #include #include #include #include "leds.h" /* leds stuff */ static int dt_leds_probe(struct platform_device *pdev); static void dt_leds_remove(struct platform_device *pdev); static struct of_device_id leds_driver_ids[] = { { .compatible = "hottis,leds", }, {}, }; MODULE_DEVICE_TABLE(of, leds_driver_ids); struct platform_driver leds_driver = { .probe = dt_leds_probe, .remove = dt_leds_remove, .driver = { .name = "leds_device_driver", .of_match_table = leds_driver_ids, }, }; static struct gpio_desc *red_led = NULL; static struct gpio_desc *blue_led = NULL; static int dt_leds_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; printk("counter - leds probing\n"); if(!device_property_present(dev, "red-led-gpio")) { printk("counter - Error! Device property 'red-led-gpio' not found!\n"); return -1; } if(!device_property_present(dev, "blue-led-gpio")) { printk("counter - Error! Device property 'blue-led-gpio' not found!\n"); return -1; } /* Init GPIO */ red_led = gpiod_get(dev, "red-led", GPIOD_OUT_LOW); if(IS_ERR(red_led)) { printk("counter - Error! Could not setup the GPIO red-led\n"); return -1 * IS_ERR(red_led); } blue_led = gpiod_get(dev, "blue-led", GPIOD_OUT_LOW); if(IS_ERR(blue_led)) { printk("counter - Error! Could not setup the GPIO blue-led\n"); return -1 * IS_ERR(blue_led); } printk("counter - red led on\n"); gpiod_set_value(red_led, 1); return 0; } static void dt_leds_remove(struct platform_device *pdev) { printk("counter - red led off\n"); gpiod_set_value(red_led, 0); printk("counter - leds removing\n"); gpiod_put(red_led); gpiod_put(blue_led); } void led_ctrl(enum led_color_e color, enum led_state_e state) { struct gpio_desc *led; switch (color) { case e_RED: led = red_led; break; case e_BLUE: led = blue_led; break; } int st; switch (state) { case e_ON: st = 1; break; case e_OFF: st = 0; break; } gpiod_set_value(led, st); }