1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (c) 2015 Google, Inc 3*4882a593Smuzhiyun * Written by Simon Glass <sjg@chromium.org> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef __LED_H 9*4882a593Smuzhiyun #define __LED_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /** 12*4882a593Smuzhiyun * struct led_uc_plat - Platform data the uclass stores about each device 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun * @label: LED label 15*4882a593Smuzhiyun */ 16*4882a593Smuzhiyun struct led_uc_plat { 17*4882a593Smuzhiyun const char *label; 18*4882a593Smuzhiyun }; 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun /** 21*4882a593Smuzhiyun * struct led_uc_priv - Private data the uclass stores about each device 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun * @period_ms: Flash period in milliseconds 24*4882a593Smuzhiyun */ 25*4882a593Smuzhiyun struct led_uc_priv { 26*4882a593Smuzhiyun int period_ms; 27*4882a593Smuzhiyun }; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun enum led_state_t { 30*4882a593Smuzhiyun LEDST_OFF = 0, 31*4882a593Smuzhiyun LEDST_ON = 1, 32*4882a593Smuzhiyun LEDST_TOGGLE, 33*4882a593Smuzhiyun #ifdef CONFIG_LED_BLINK 34*4882a593Smuzhiyun LEDST_BLINK, 35*4882a593Smuzhiyun #endif 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun LEDST_COUNT, 38*4882a593Smuzhiyun }; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun struct led_ops { 41*4882a593Smuzhiyun /** 42*4882a593Smuzhiyun * set_state() - set the state of an LED 43*4882a593Smuzhiyun * 44*4882a593Smuzhiyun * @dev: LED device to change 45*4882a593Smuzhiyun * @state: LED state to set 46*4882a593Smuzhiyun * @return 0 if OK, -ve on error 47*4882a593Smuzhiyun */ 48*4882a593Smuzhiyun int (*set_state)(struct udevice *dev, enum led_state_t state); 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun /** 51*4882a593Smuzhiyun * led_get_state() - get the state of an LED 52*4882a593Smuzhiyun * 53*4882a593Smuzhiyun * @dev: LED device to change 54*4882a593Smuzhiyun * @return LED state led_state_t, or -ve on error 55*4882a593Smuzhiyun */ 56*4882a593Smuzhiyun enum led_state_t (*get_state)(struct udevice *dev); 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun #ifdef CONFIG_LED_BLINK 59*4882a593Smuzhiyun /** 60*4882a593Smuzhiyun * led_set_period() - set the blink period of an LED 61*4882a593Smuzhiyun * 62*4882a593Smuzhiyun * Thie records the period if supported, or returns -ENOSYS if not. 63*4882a593Smuzhiyun * To start the LED blinking, use set_state(). 64*4882a593Smuzhiyun * 65*4882a593Smuzhiyun * @dev: LED device to change 66*4882a593Smuzhiyun * @period_ms: LED blink period in milliseconds 67*4882a593Smuzhiyun * @return 0 if OK, -ve on error 68*4882a593Smuzhiyun */ 69*4882a593Smuzhiyun int (*set_period)(struct udevice *dev, int period_ms); 70*4882a593Smuzhiyun #endif 71*4882a593Smuzhiyun }; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #define led_get_ops(dev) ((struct led_ops *)(dev)->driver->ops) 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun /** 76*4882a593Smuzhiyun * led_get_by_label() - Find an LED device by label 77*4882a593Smuzhiyun * 78*4882a593Smuzhiyun * @label: LED label to look up 79*4882a593Smuzhiyun * @devp: Returns the associated device, if found 80*4882a593Smuzhiyun * @return 0 if found, -ENODEV if not found, other -ve on error 81*4882a593Smuzhiyun */ 82*4882a593Smuzhiyun int led_get_by_label(const char *label, struct udevice **devp); 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /** 85*4882a593Smuzhiyun * led_set_state() - set the state of an LED 86*4882a593Smuzhiyun * 87*4882a593Smuzhiyun * @dev: LED device to change 88*4882a593Smuzhiyun * @state: LED state to set 89*4882a593Smuzhiyun * @return 0 if OK, -ve on error 90*4882a593Smuzhiyun */ 91*4882a593Smuzhiyun int led_set_state(struct udevice *dev, enum led_state_t state); 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun /** 94*4882a593Smuzhiyun * led_get_state() - get the state of an LED 95*4882a593Smuzhiyun * 96*4882a593Smuzhiyun * @dev: LED device to change 97*4882a593Smuzhiyun * @return LED state led_state_t, or -ve on error 98*4882a593Smuzhiyun */ 99*4882a593Smuzhiyun enum led_state_t led_get_state(struct udevice *dev); 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun /** 102*4882a593Smuzhiyun * led_set_period() - set the blink period of an LED 103*4882a593Smuzhiyun * 104*4882a593Smuzhiyun * @dev: LED device to change 105*4882a593Smuzhiyun * @period_ms: LED blink period in milliseconds 106*4882a593Smuzhiyun * @return 0 if OK, -ve on error 107*4882a593Smuzhiyun */ 108*4882a593Smuzhiyun int led_set_period(struct udevice *dev, int period_ms); 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun #endif 111