15917112cSSimon Glass /* 25917112cSSimon Glass * Copyright (c) 2015 Google, Inc 35917112cSSimon Glass * Written by Simon Glass <sjg@chromium.org> 45917112cSSimon Glass * 55917112cSSimon Glass * SPDX-License-Identifier: GPL-2.0+ 65917112cSSimon Glass */ 75917112cSSimon Glass 85917112cSSimon Glass #ifndef __LED_H 95917112cSSimon Glass #define __LED_H 105917112cSSimon Glass 115917112cSSimon Glass /** 1256e19871SSimon Glass * struct led_uc_plat - Platform data the uclass stores about each device 135917112cSSimon Glass * 145917112cSSimon Glass * @label: LED label 155917112cSSimon Glass */ 1656e19871SSimon Glass struct led_uc_plat { 175917112cSSimon Glass const char *label; 185917112cSSimon Glass }; 195917112cSSimon Glass 20*53378dacSSimon Glass /** 21*53378dacSSimon Glass * struct led_uc_priv - Private data the uclass stores about each device 22*53378dacSSimon Glass * 23*53378dacSSimon Glass * @period_ms: Flash period in milliseconds 24*53378dacSSimon Glass */ 25*53378dacSSimon Glass struct led_uc_priv { 26*53378dacSSimon Glass int period_ms; 27*53378dacSSimon Glass }; 28*53378dacSSimon Glass 29ddae9fcdSSimon Glass enum led_state_t { 30ddae9fcdSSimon Glass LEDST_OFF = 0, 31ddae9fcdSSimon Glass LEDST_ON = 1, 329413ad4fSSimon Glass LEDST_TOGGLE, 33*53378dacSSimon Glass #ifdef CONFIG_LED_BLINK 34*53378dacSSimon Glass LEDST_BLINK, 35*53378dacSSimon Glass #endif 36ddae9fcdSSimon Glass 37ddae9fcdSSimon Glass LEDST_COUNT, 38ddae9fcdSSimon Glass }; 39ddae9fcdSSimon Glass 405917112cSSimon Glass struct led_ops { 415917112cSSimon Glass /** 42ddae9fcdSSimon Glass * set_state() - set the state of an LED 435917112cSSimon Glass * 445917112cSSimon Glass * @dev: LED device to change 45ddae9fcdSSimon Glass * @state: LED state to set 465917112cSSimon Glass * @return 0 if OK, -ve on error 475917112cSSimon Glass */ 48ddae9fcdSSimon Glass int (*set_state)(struct udevice *dev, enum led_state_t state); 498f4b6123SSimon Glass 508f4b6123SSimon Glass /** 518f4b6123SSimon Glass * led_get_state() - get the state of an LED 528f4b6123SSimon Glass * 538f4b6123SSimon Glass * @dev: LED device to change 548f4b6123SSimon Glass * @return LED state led_state_t, or -ve on error 558f4b6123SSimon Glass */ 568f4b6123SSimon Glass enum led_state_t (*get_state)(struct udevice *dev); 57*53378dacSSimon Glass 58*53378dacSSimon Glass #ifdef CONFIG_LED_BLINK 59*53378dacSSimon Glass /** 60*53378dacSSimon Glass * led_set_period() - set the blink period of an LED 61*53378dacSSimon Glass * 62*53378dacSSimon Glass * Thie records the period if supported, or returns -ENOSYS if not. 63*53378dacSSimon Glass * To start the LED blinking, use set_state(). 64*53378dacSSimon Glass * 65*53378dacSSimon Glass * @dev: LED device to change 66*53378dacSSimon Glass * @period_ms: LED blink period in milliseconds 67*53378dacSSimon Glass * @return 0 if OK, -ve on error 68*53378dacSSimon Glass */ 69*53378dacSSimon Glass int (*set_period)(struct udevice *dev, int period_ms); 70*53378dacSSimon Glass #endif 715917112cSSimon Glass }; 725917112cSSimon Glass 735917112cSSimon Glass #define led_get_ops(dev) ((struct led_ops *)(dev)->driver->ops) 745917112cSSimon Glass 755917112cSSimon Glass /** 765917112cSSimon Glass * led_get_by_label() - Find an LED device by label 775917112cSSimon Glass * 785917112cSSimon Glass * @label: LED label to look up 795917112cSSimon Glass * @devp: Returns the associated device, if found 80fb8a5ffcSSimon Glass * @return 0 if found, -ENODEV if not found, other -ve on error 815917112cSSimon Glass */ 825917112cSSimon Glass int led_get_by_label(const char *label, struct udevice **devp); 835917112cSSimon Glass 845917112cSSimon Glass /** 85ddae9fcdSSimon Glass * led_set_state() - set the state of an LED 865917112cSSimon Glass * 875917112cSSimon Glass * @dev: LED device to change 88ddae9fcdSSimon Glass * @state: LED state to set 895917112cSSimon Glass * @return 0 if OK, -ve on error 905917112cSSimon Glass */ 91ddae9fcdSSimon Glass int led_set_state(struct udevice *dev, enum led_state_t state); 925917112cSSimon Glass 938f4b6123SSimon Glass /** 948f4b6123SSimon Glass * led_get_state() - get the state of an LED 958f4b6123SSimon Glass * 968f4b6123SSimon Glass * @dev: LED device to change 978f4b6123SSimon Glass * @return LED state led_state_t, or -ve on error 988f4b6123SSimon Glass */ 998f4b6123SSimon Glass enum led_state_t led_get_state(struct udevice *dev); 1008f4b6123SSimon Glass 101*53378dacSSimon Glass /** 102*53378dacSSimon Glass * led_set_period() - set the blink period of an LED 103*53378dacSSimon Glass * 104*53378dacSSimon Glass * @dev: LED device to change 105*53378dacSSimon Glass * @period_ms: LED blink period in milliseconds 106*53378dacSSimon Glass * @return 0 if OK, -ve on error 107*53378dacSSimon Glass */ 108*53378dacSSimon Glass int led_set_period(struct udevice *dev, int period_ms); 109*53378dacSSimon Glass 1105917112cSSimon Glass #endif 111