1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef B43_LEDS_H_
3*4882a593Smuzhiyun #define B43_LEDS_H_
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun struct b43_wl;
6*4882a593Smuzhiyun struct b43_wldev;
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun #ifdef CONFIG_B43_LEDS
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun #include <linux/types.h>
11*4882a593Smuzhiyun #include <linux/leds.h>
12*4882a593Smuzhiyun #include <linux/workqueue.h>
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun #define B43_LED_MAX_NAME_LEN 31
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun struct b43_led {
18*4882a593Smuzhiyun struct b43_wl *wl;
19*4882a593Smuzhiyun /* The LED class device */
20*4882a593Smuzhiyun struct led_classdev led_dev;
21*4882a593Smuzhiyun /* The index number of the LED. */
22*4882a593Smuzhiyun u8 index;
23*4882a593Smuzhiyun /* If activelow is true, the LED is ON if the
24*4882a593Smuzhiyun * bit is switched off. */
25*4882a593Smuzhiyun bool activelow;
26*4882a593Smuzhiyun /* The unique name string for this LED device. */
27*4882a593Smuzhiyun char name[B43_LED_MAX_NAME_LEN + 1];
28*4882a593Smuzhiyun /* The current status of the LED. This is updated locklessly. */
29*4882a593Smuzhiyun atomic_t state;
30*4882a593Smuzhiyun /* The active state in hardware. */
31*4882a593Smuzhiyun bool hw_state;
32*4882a593Smuzhiyun };
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun struct b43_leds {
35*4882a593Smuzhiyun struct b43_led led_tx;
36*4882a593Smuzhiyun struct b43_led led_rx;
37*4882a593Smuzhiyun struct b43_led led_radio;
38*4882a593Smuzhiyun struct b43_led led_assoc;
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun bool stop;
41*4882a593Smuzhiyun struct work_struct work;
42*4882a593Smuzhiyun };
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun #define B43_MAX_NR_LEDS 4
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun #define B43_LED_BEHAVIOUR 0x7F
47*4882a593Smuzhiyun #define B43_LED_ACTIVELOW 0x80
48*4882a593Smuzhiyun /* LED behaviour values */
49*4882a593Smuzhiyun enum b43_led_behaviour {
50*4882a593Smuzhiyun B43_LED_OFF,
51*4882a593Smuzhiyun B43_LED_ON,
52*4882a593Smuzhiyun B43_LED_ACTIVITY,
53*4882a593Smuzhiyun B43_LED_RADIO_ALL,
54*4882a593Smuzhiyun B43_LED_RADIO_A,
55*4882a593Smuzhiyun B43_LED_RADIO_B,
56*4882a593Smuzhiyun B43_LED_MODE_BG,
57*4882a593Smuzhiyun B43_LED_TRANSFER,
58*4882a593Smuzhiyun B43_LED_APTRANSFER,
59*4882a593Smuzhiyun B43_LED_WEIRD, //FIXME
60*4882a593Smuzhiyun B43_LED_ASSOC,
61*4882a593Smuzhiyun B43_LED_INACTIVE,
62*4882a593Smuzhiyun };
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun void b43_leds_register(struct b43_wldev *dev);
65*4882a593Smuzhiyun void b43_leds_unregister(struct b43_wl *wl);
66*4882a593Smuzhiyun void b43_leds_init(struct b43_wldev *dev);
67*4882a593Smuzhiyun void b43_leds_exit(struct b43_wldev *dev);
68*4882a593Smuzhiyun void b43_leds_stop(struct b43_wldev *dev);
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun #else /* CONFIG_B43_LEDS */
72*4882a593Smuzhiyun /* LED support disabled */
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun struct b43_leds {
75*4882a593Smuzhiyun /* empty */
76*4882a593Smuzhiyun };
77*4882a593Smuzhiyun
b43_leds_register(struct b43_wldev * dev)78*4882a593Smuzhiyun static inline void b43_leds_register(struct b43_wldev *dev)
79*4882a593Smuzhiyun {
80*4882a593Smuzhiyun }
b43_leds_unregister(struct b43_wl * wl)81*4882a593Smuzhiyun static inline void b43_leds_unregister(struct b43_wl *wl)
82*4882a593Smuzhiyun {
83*4882a593Smuzhiyun }
b43_leds_init(struct b43_wldev * dev)84*4882a593Smuzhiyun static inline void b43_leds_init(struct b43_wldev *dev)
85*4882a593Smuzhiyun {
86*4882a593Smuzhiyun }
b43_leds_exit(struct b43_wldev * dev)87*4882a593Smuzhiyun static inline void b43_leds_exit(struct b43_wldev *dev)
88*4882a593Smuzhiyun {
89*4882a593Smuzhiyun }
b43_leds_stop(struct b43_wldev * dev)90*4882a593Smuzhiyun static inline void b43_leds_stop(struct b43_wldev *dev)
91*4882a593Smuzhiyun {
92*4882a593Smuzhiyun }
93*4882a593Smuzhiyun #endif /* CONFIG_B43_LEDS */
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun #endif /* B43_LEDS_H_ */
96