1#ifndef _LED_CONTROL_H
2#define _LED_CONTROL_H
3
4#define NUM_OF_LEDS				4
5#define DSD_START_OFFSET			0x0200
6#define EEPROM_VERSION_OFFSET			0x020E
7#define EEPROM_HW_PARAM_POINTER_ADDRESS		0x0218
8#define EEPROM_HW_PARAM_POINTER_ADDRRES_MAP5	0x0220
9#define GPIO_SECTION_START_OFFSET		0x03
10#define COMPATIBILITY_SECTION_LENGTH		42
11#define COMPATIBILITY_SECTION_LENGTH_MAP5	84
12#define EEPROM_MAP5_MAJORVERSION		5
13#define EEPROM_MAP5_MINORVERSION		0
14#define MAX_NUM_OF_BLINKS			10
15#define NUM_OF_GPIO_PINS			16
16#define DISABLE_GPIO_NUM			0xFF
17#define EVENT_SIGNALED				1
18#define MAX_FILE_NAME_BUFFER_SIZE		100
19
20#define TURN_ON_LED(ad, GPIO, index) do {					\
21		unsigned int gpio_val = GPIO;					\
22		(ad->LEDInfo.LEDState[index].BitPolarity == 1) ?	\
23			wrmaltWithLock(ad, BCM_GPIO_OUTPUT_SET_REG, &gpio_val, sizeof(gpio_val)) : \
24			wrmaltWithLock(ad, BCM_GPIO_OUTPUT_CLR_REG, &gpio_val, sizeof(gpio_val)); \
25	} while (0)
26
27#define TURN_OFF_LED(ad, GPIO, index)  do {					\
28		unsigned int gpio_val = GPIO;					\
29		(ad->LEDInfo.LEDState[index].BitPolarity == 1) ?	\
30			wrmaltWithLock(ad, BCM_GPIO_OUTPUT_CLR_REG, &gpio_val, sizeof(gpio_val)) : \
31			wrmaltWithLock(ad, BCM_GPIO_OUTPUT_SET_REG, &gpio_val, sizeof(gpio_val)); \
32	} while (0)
33
34enum bcm_led_colors {
35	RED_LED		= 1,
36	BLUE_LED	= 2,
37	YELLOW_LED	= 3,
38	GREEN_LED	= 4
39};
40
41enum bcm_led_events {
42	SHUTDOWN_EXIT		= 0x00,
43	DRIVER_INIT		= 0x1,
44	FW_DOWNLOAD		= 0x2,
45	FW_DOWNLOAD_DONE	= 0x4,
46	NO_NETWORK_ENTRY	= 0x8,
47	NORMAL_OPERATION	= 0x10,
48	LOWPOWER_MODE_ENTER	= 0x20,
49	IDLEMODE_CONTINUE	= 0x40,
50	IDLEMODE_EXIT		= 0x80,
51	LED_THREAD_INACTIVE	= 0x100,  /* Makes the LED thread Inactivce. It wil be equivallent to putting the thread on hold. */
52	LED_THREAD_ACTIVE	= 0x200,  /* Makes the LED Thread Active back. */
53	DRIVER_HALT		= 0xff
54}; /* Enumerated values of different driver states */
55
56/*
57 * Structure which stores the information of different LED types
58 * and corresponding LED state information of driver states
59 */
60struct bcm_led_state_info {
61	unsigned char LED_Type; /* specify GPIO number - use 0xFF if not used */
62	unsigned char LED_On_State; /* Bits set or reset for different states */
63	unsigned char LED_Blink_State; /* Bits set or reset for blinking LEDs for different states */
64	unsigned char GPIO_Num;
65	unsigned char BitPolarity; /* To represent whether H/W is normal polarity or reverse polarity */
66};
67
68struct bcm_led_info {
69	struct bcm_led_state_info LEDState[NUM_OF_LEDS];
70	bool		bIdleMode_tx_from_host; /* Variable to notify whether driver came out from idlemode due to Host or target */
71	bool		bIdle_led_off;
72	wait_queue_head_t	notify_led_event;
73	wait_queue_head_t	idleModeSyncEvent;
74	struct task_struct	*led_cntrl_threadid;
75	int		led_thread_running;
76	bool		bLedInitDone;
77};
78
79/* LED Thread state. */
80#define BCM_LED_THREAD_DISABLED		0   /* LED Thread is not running. */
81#define BCM_LED_THREAD_RUNNING_ACTIVELY	1   /* LED thread is running. */
82#define BCM_LED_THREAD_RUNNING_INACTIVELY 2 /* LED thread has been put on hold */
83
84#endif
85