/* * Copyright (c) Hisilicon Technologies Co., Ltd.. 2021-2021. All rights reserved. * Description: * Author: * Create: 2021-05-12 * Note: */ #ifndef PWM_COMMON_H #define PWM_COMMON_H #include #include "soc_log.h" #include "osal_ext.h" #include "drv_pwm_ext.h" /********************************************************************************************/ /* Defines */ /********************************************************************************************/ #define pwm_check_param(ret, errno, param, cmd) do { \ if ((param)) { \ soc_log_err("%s failed!\n", #param); \ ret = (errno); \ cmd; \ } \ } while (0) #define pwm_func_call(ret, func, cmd) do { \ (ret) = (func); \ if ((ret) != TD_SUCCESS) { \ soc_log_err("failed!\n"); \ cmd; \ } \ } while (0) #define pwm_mem_func_call(ret, func, cmd) do { \ (ret) = (func); \ if ((ret) != EOK) { \ soc_log_err("failed!\n"); \ cmd; \ } \ } while (0) /********************************************************************************************/ /* Enums */ /********************************************************************************************/ typedef enum { PWM_VERSION_V1 = 1, /* reserved9/reserved13 */ PWM_VERSION_V2, /* reserved5/reserved2 */ PWM_VERSION_V3, /* reserved17/reserved19 */ PWM_VERSION_MAX } pwm_version; /********************************************************************************************/ /* Structures */ /********************************************************************************************/ typedef struct { uintptr_t gpio_pwm_out_en; uintptr_t gpio_pwm_direction; uintptr_t cfg; uintptr_t ctrl; uintptr_t cnt; uintptr_t state0; uintptr_t state1; uintptr_t state2; } pwm_reg_s; typedef struct { td_u32 pwm_clk_freq; td_u32 pwm_freq_critical; td_u32 period_duty_offset; td_u32 time_us; /* used for moto pwm */ const ext_drv_pwm_attr *pwm_attr; const pwm_reg_s *pwm_reg; td_u32 cfg_reg_value; td_u32 ctrl_reg_value; td_u32 cnt_reg_value; /* used for moto pwm */ } pwm_info; /******************************************************************************************** Function Implementation ********************************************************************************************/ pwm_version pwm_get_version(td_void); td_s32 pwm_gpio_convert(td_u32 gpio_no, td_u16 gpio_pwm_bit_num, td_u32 *group_no, td_u32 *bit_no); td_s32 pwm_get_attr(td_u32 freq, td_u32 period, td_u32 duty, td_u32 inv, ext_drv_pwm_attr *pwm_attr); td_s32 pwm_set_attr(pwm_info *attr); td_s32 pwm_set_enable(td_u32 enable); td_s32 pwm_get_enable(td_u32 *enable); td_u32 pwm_get_bit_count(td_u32 value); td_s32 pwm_check_carrier_signal_duration_us(td_u32 carrier_signal_duration_us); td_s32 pwm_check_low_level_signal_duration_us(td_u32 low_level_signal_duration_us); td_s32 pwm_output_carrier_signal(td_u32 carrier_signal_duration_us); td_s32 pwm_output_low_level_signal(td_u32 low_level_signal_duration_us); td_s32 ext_drv_pwm_get_enable(td_u32 pwm_no, td_bool *enable); #endif /* PWM_COMMON_H */