blob: 67120bb78a3319dda506b3371c624917f772f68a [file] [log] [blame]
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#ifndef __AML_LOOPBACK_HW_H__
#define __AML_LOOPBACK_HW_H__
#include <linux/types.h>
#include "loopback.h"
#include "resample.h"
struct mux_conf {
char name[32];
unsigned int val;
unsigned int reg;
unsigned int shift;
unsigned int mask;
};
#define AUDIO_SRC_CONFIG(_name, _val, _reg, _shift, _mask) \
{ .name = (_name), .val = (_val), .reg = (_reg),\
.shift = (_shift), .mask = (_mask)}
struct data_cfg {
/*
* 0: extend bits as "0"
* 1: extend bits as "msb"
*/
unsigned int ext_signed;
/* channel number */
unsigned int chnum;
/* channel selected */
unsigned int chmask;
/* combined data */
unsigned int type;
/* the msb positioin in data */
unsigned int m;
/* the lsb position in data */
unsigned int n;
/* loopback datalb src */
unsigned int src;
unsigned int loopback_src;
/* channel and mask in new ctrol register */
bool ch_ctrl_switch;
/* enable resample B for loopback*/
unsigned int resample_enable;
/* srcs from chipinfo */
struct mux_conf *srcs;
struct mux_conf *tdmin_lb_srcs;
};
void tdminlb_set_clk(enum datalb_src lb_src, int sclk_div, int ratio, bool enable);
void tdminlb_set_format(int i2s_fmt);
void tdminlb_set_ctrl(enum datalb_src src);
void tdminlb_enable(int tdm_index, int in_enable);
void tdminlb_fifo_enable(int is_enable);
void tdminlb_set_format(int i2s_fmt);
void tdminlb_set_lanemask_and_chswap
(int swap, int lane_mask, unsigned int mask);
void tdminlb_set_src(int src);
void lb_set_datain_src(int id, int src);
void lb_set_datain_cfg(int id, struct data_cfg *datain_cfg);
void lb_set_datalb_cfg(int id, struct data_cfg *datalb_cfg, bool multi_bits_lbsrcs);
void lb_enable(int id, bool enable, bool chnum_en);
void lb_set_chnum_en(int id, bool en, bool chnum_en);
void loopback_src_set(int id, struct mux_conf *conf, int version);
enum lb_out_rate {
MIC_RATE,
LB_RATE,
};
void lb_set_mode(int id, enum lb_out_rate rate);
#endif