1 #ifndef __HAL_LEDC_H 2 #define __HAL_LEDC_H 3 4 #include "sunxi_hal_common.h" 5 #include "ledc/platform_ledc.h" 6 #include "ledc/common_ledc.h" 7 8 #ifdef __cplusplus 9 extern "C" { 10 #endif 11 12 #define SUNXI_LEDC_FIFO_DEPTH 32 13 14 enum ledc_output_mode_val { 15 LEDC_OUTPUT_GRB = 0 << 6, 16 LEDC_OUTPUT_GBR = 1 << 6, 17 LEDC_OUTPUT_RGB = 2 << 6, 18 LEDC_OUTPUT_RBG = 3 << 6, 19 LEDC_OUTPUT_BGR = 4 << 6, 20 LEDC_OUTPUT_BRG = 5 << 6 21 }; 22 23 enum { 24 DEBUG_INIT = 1U << 0, 25 DEBUG_SUSPEND = 1U << 1, 26 DEBUG_INFO = 1U << 2, 27 DEBUG_INFO1 = 1U << 3, 28 DEBUG_INFO2 = 1U << 4, 29 }; 30 31 struct ledc_config { 32 unsigned int led_count; 33 unsigned int reset_ns; 34 unsigned int t1h_ns; 35 unsigned int t1l_ns; 36 unsigned int t0h_ns; 37 unsigned int t0l_ns; 38 unsigned int wait_time0_ns; 39 unsigned long long wait_time1_ns; 40 unsigned int wait_data_time_ns; 41 char *output_mode; 42 unsigned int *data; 43 unsigned int length; 44 }; 45 46 enum ledc_irq_ctrl_reg { 47 LEDC_TRANS_FINISH_INT_EN = (1 << 0), 48 LEDC_FIFO_CPUREQ_INT_EN = (1 << 1), 49 LEDC_WAITDATA_TIMEOUT_INT_EN = (1 << 3), 50 LEDC_FIFO_OVERFLOW_INT_EN = (1 << 4), 51 LEDC_GLOBAL_INT_EN = (1 << 5), 52 }; 53 54 enum ledc_irq_status_reg { 55 LEDC_TRANS_FINISH_INT = (1 << 0), 56 LEDC_FIFO_CPUREQ_INT = (1 << 1), 57 LEDC_WAITDATA_TIMEOUT_INT = (1 << 3), 58 LEDC_FIFO_OVERFLOW_INT = (1 << 4), 59 LEDC_FIFO_FULL = (1 << 16), 60 LEDC_FIFO_EMPTY = (1 << 17), 61 }; 62 63 64 void hal_ledc_init(void); 65 void hal_ledc_deinit(void); 66 void hal_ledc_trans_data(struct ledc_config *ledc); 67 void hal_ledc_clear_all_irq(void); 68 unsigned int hal_ledc_get_irq_status(void); 69 void hal_ledc_dma_callback(void *para); 70 void hal_ledc_reset(void); 71 72 #ifdef __cplusplus 73 } 74 #endif 75 76 #endif 77