You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.7 KiB
98 lines
3.7 KiB
/*
|
|
* 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 <asm/io.h>
|
|
|
|
#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 */
|