xref: /kernel/linux/linux-6.6/include/sound/cs35l35.h (revision 62306a36)
162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * linux/sound/cs35l35.h -- Platform data for CS35l35
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (c) 2016 Cirrus Logic Inc.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef __CS35L35_H
962306a36Sopenharmony_ci#define __CS35L35_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_cistruct classh_cfg {
1262306a36Sopenharmony_ci	/*
1362306a36Sopenharmony_ci	 * Class H Algorithm Control Variables
1462306a36Sopenharmony_ci	 * You can either have it done
1562306a36Sopenharmony_ci	 * automatically or you can adjust
1662306a36Sopenharmony_ci	 * these variables for tuning
1762306a36Sopenharmony_ci	 *
1862306a36Sopenharmony_ci	 * if you do not enable the internal algorithm
1962306a36Sopenharmony_ci	 * you will get a set of mixer controls for
2062306a36Sopenharmony_ci	 * Class H tuning
2162306a36Sopenharmony_ci	 *
2262306a36Sopenharmony_ci	 * Section 4.3 of the datasheet
2362306a36Sopenharmony_ci	 */
2462306a36Sopenharmony_ci	bool classh_bst_override;
2562306a36Sopenharmony_ci	bool classh_algo_enable;
2662306a36Sopenharmony_ci	int classh_bst_max_limit;
2762306a36Sopenharmony_ci	int classh_mem_depth;
2862306a36Sopenharmony_ci	int classh_release_rate;
2962306a36Sopenharmony_ci	int classh_headroom;
3062306a36Sopenharmony_ci	int classh_wk_fet_disable;
3162306a36Sopenharmony_ci	int classh_wk_fet_delay;
3262306a36Sopenharmony_ci	int classh_wk_fet_thld;
3362306a36Sopenharmony_ci	int classh_vpch_auto;
3462306a36Sopenharmony_ci	int classh_vpch_rate;
3562306a36Sopenharmony_ci	int classh_vpch_man;
3662306a36Sopenharmony_ci};
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_cistruct monitor_cfg {
3962306a36Sopenharmony_ci	/*
4062306a36Sopenharmony_ci	 * Signal Monitor Data
4162306a36Sopenharmony_ci	 * highly configurable signal monitoring
4262306a36Sopenharmony_ci	 * data positioning and different types of
4362306a36Sopenharmony_ci	 * monitoring data.
4462306a36Sopenharmony_ci	 *
4562306a36Sopenharmony_ci	 * Section 4.8.2 - 4.8.4 of the datasheet
4662306a36Sopenharmony_ci	 */
4762306a36Sopenharmony_ci	bool is_present;
4862306a36Sopenharmony_ci	bool imon_specs;
4962306a36Sopenharmony_ci	bool vmon_specs;
5062306a36Sopenharmony_ci	bool vpmon_specs;
5162306a36Sopenharmony_ci	bool vbstmon_specs;
5262306a36Sopenharmony_ci	bool vpbrstat_specs;
5362306a36Sopenharmony_ci	bool zerofill_specs;
5462306a36Sopenharmony_ci	u8 imon_dpth;
5562306a36Sopenharmony_ci	u8 imon_loc;
5662306a36Sopenharmony_ci	u8 imon_frm;
5762306a36Sopenharmony_ci	u8 imon_scale;
5862306a36Sopenharmony_ci	u8 vmon_dpth;
5962306a36Sopenharmony_ci	u8 vmon_loc;
6062306a36Sopenharmony_ci	u8 vmon_frm;
6162306a36Sopenharmony_ci	u8 vpmon_dpth;
6262306a36Sopenharmony_ci	u8 vpmon_loc;
6362306a36Sopenharmony_ci	u8 vpmon_frm;
6462306a36Sopenharmony_ci	u8 vbstmon_dpth;
6562306a36Sopenharmony_ci	u8 vbstmon_loc;
6662306a36Sopenharmony_ci	u8 vbstmon_frm;
6762306a36Sopenharmony_ci	u8 vpbrstat_dpth;
6862306a36Sopenharmony_ci	u8 vpbrstat_loc;
6962306a36Sopenharmony_ci	u8 vpbrstat_frm;
7062306a36Sopenharmony_ci	u8 zerofill_dpth;
7162306a36Sopenharmony_ci	u8 zerofill_loc;
7262306a36Sopenharmony_ci	u8 zerofill_frm;
7362306a36Sopenharmony_ci};
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_cistruct cs35l35_platform_data {
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci	/* Stereo (2 Device) */
7862306a36Sopenharmony_ci	bool stereo;
7962306a36Sopenharmony_ci	/* serial port drive strength */
8062306a36Sopenharmony_ci	int sp_drv_str;
8162306a36Sopenharmony_ci	/* serial port drive in unused slots */
8262306a36Sopenharmony_ci	int sp_drv_unused;
8362306a36Sopenharmony_ci	/* Boost Power Down with FET */
8462306a36Sopenharmony_ci	bool bst_pdn_fet_on;
8562306a36Sopenharmony_ci	/* Boost Voltage : used if ClassH Algo Enabled */
8662306a36Sopenharmony_ci	int bst_vctl;
8762306a36Sopenharmony_ci	/* Boost Converter Peak Current CTRL */
8862306a36Sopenharmony_ci	int bst_ipk;
8962306a36Sopenharmony_ci	/* Amp Gain Zero Cross */
9062306a36Sopenharmony_ci	bool gain_zc;
9162306a36Sopenharmony_ci	/* Audio Input Location */
9262306a36Sopenharmony_ci	int aud_channel;
9362306a36Sopenharmony_ci	/* Advisory Input Location */
9462306a36Sopenharmony_ci	int adv_channel;
9562306a36Sopenharmony_ci	/* Shared Boost for stereo */
9662306a36Sopenharmony_ci	bool shared_bst;
9762306a36Sopenharmony_ci	/* Specifies this amp is using an external boost supply */
9862306a36Sopenharmony_ci	bool ext_bst;
9962306a36Sopenharmony_ci	/* Inductor Value */
10062306a36Sopenharmony_ci	int boost_ind;
10162306a36Sopenharmony_ci	/* ClassH Algorithm */
10262306a36Sopenharmony_ci	struct classh_cfg classh_algo;
10362306a36Sopenharmony_ci	/* Monitor Config */
10462306a36Sopenharmony_ci	struct monitor_cfg mon_cfg;
10562306a36Sopenharmony_ci};
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci#endif /* __CS35L35_H */
108